同一台电脑上,不同应用进程IP地址一样么?

如题
还是说可以不一样, 使用不同网卡就不一样? 还是可以更改

阅读 9.1k
4 个回答

简单点说,对于每一个主机,在每一个子网中,只有一个ip。不同的应用程序,可以通过不同的端口(号)来区分/对外通信。
有一些特殊的情况,比如docker,可能宿主机上每一个容器都会分到一个ip,那么这时,不是主机拥有了多个ip,而是要把主机看成一个子网,这个子网里的每一个容器,都是一个(虚拟的)主机。
还有一些特殊用途的ip,比如最常见的loopback地址127.0.0.1(注意不是hosts里的localhost,人家不叫这个,只是它默认写到了hosts里,所以在系统里敲"localhost"时会跳转到127.0.0.1,但不是默认约定),这个属于ip中的特殊约定,包括linux里还有个0.0.0.0也挺常见,这个不应看作是第二个ip,或者说也可以把它们看作是表示“自己”意思的ip。
总之,在每一个区域性的网络里,每个主机的ip只有一个,因为它代表了这个子网里的这个主机。主机对应不同的网络会有不同的ip,比如你的电脑要上网,它连上家里的WiFi,会有DHCP给它分配的一个内网地址(192.168.x.x这种),它连到因特网上,聊微信聊QQ打游戏,会有一个外网地址是对应到它的,大概其是这个意思。

更复杂的概念去查TCP/IP协议族吧,比如《图解TCP/IP》。

一般来说,在同一台电脑上,可以有很多个网络的设备接口,比如每个网卡(虚拟的或者实体的都算)就可以对应一个网络设备接口,在Linux上可以通过ifconfig看到的,比如eth0/en0/tun0...这些,就是不同的网络设备接口各种的网络的包通过不同的设备接口传输的。两个不同的设备,可能会对应两个不同的ip地址。

另外,在电脑会会配置一个叫做路由表的东西,在linux上可以通过命令route查看和配置。这个路由表决定了访问某个地址,或者接受来自某个地址的数据时,需要从哪一个设备来走。

这时回到进程上,如果进程没有特殊的设置,那么都会根据路由表来决定使用哪一个设备,也就决定了ip地址是什么。不过在进程的代码中,也可以用很多手段来指定这个事情,比如同一个进程中也可以在访问同一个地址时,指定不同的代理服务器来访问,那么也可以获得不同的ip地址。

通常情况下,就一个IP,ip代表的是你这台电脑。

网络层:如果需要与远端设备进行互相通信,那么就是通过IP进行寻址。

传输层: 建立不通的TCP或者UDP会话,不同的进程间通过端口号进行区分。

同一电脑可以多个ip,但是ip是与进程无关的,编程中可以获取到主机的所有ip地址

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进