2016-01-20 77 views
0

我想了解一个设置并高度困惑我的自我。套接字端口绑定到我的本地主机和框中的相同端口IP

说我的盒子IP是xx.xx.xx.xx,127.0.0.1是我的Linux盒子的本地环回。现在,当我为一个端口做了netstat的我见以下的输出:

tcp  0  0 127.0.0.1:11191    0.0.0.0:*     LISTEN  9999/myexe  off (0.00/0/0) 
tcp  0  0 xx.xx.xx.xx:11191   0.0.0.0:*     LISTEN  26998/anotherexe  off (0.00/0/0) 

什么输出基本上意味着 - 因为127.0.0.1和XX.XX.XX.XX指的是同一个盒子,然后做它是指两个可执行文件绑定并运行在同一端口是相同的盒子 - 如果是的话,哪一个二进制将服务请求,如果在端口11191在我的情况?

回答

1

其中每一个几乎肯定是一个不同的接口,因此不同的互联网地址。也就是说,127.0.0.1通常是回送接口。尽管xx.xx.xx.xx可能是一个真正的(以太网)网络接口。完全有可能将两个单独的程序绑定到不同地址的相同端口号。单个程序只是绑定到端口号是比较常见的,内核实际上将其转换为多个绑定,每个接口的地址一个绑定。

请参阅bind(2)ip(7)手册页的详细信息。具体而言,INADDR_ANY是希望在所有接口上绑定端口的服务器可以使用的伪地址。

也在这里一看便知Linux下的子目第一段:

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

+0

“*完全可以将两个独立的程序绑定到单独地址上的同一端口号*” - 我们可以在netstat输出中清楚地看到实际情况。 –

0

在某些平台上,netstat的可以告诉你的是自己的插座的过程。例如,在Windows上,-b开关显示可执行文件名称,而-o开关显示进程ID。在Linux上,-p开关显示进程信息。

做就意味着两个可执行已经绑定在同一端口上运行是同一个盒子

是。您的netstat输出包含进程名称,因此我们可以清楚地看到myexe正在侦听127.0.0.1:11191,并且anotherexe正在侦听xx.xx.xx.xx:11191

如果是这样的话,如果在我的情况下来自端口11191,哪个二进制将服务请求?

它取决于连接到达哪个本地IP。 127.0.0.1是一个回送适配器,因此只有在同一台机器上运行的客户端才能连接到它。如果客户端特别连接到127.0.0.1上的端口11191,则myexe将处理该连接。如果客户端连接到xx.xx.xx.xx上的端口11191,则anotherexe将处理该连接。

相关问题