套接字绑定端口到我的localhost中的同一端口并且框IP

时间:2016-01-20 12:05:14

标签: linux sockets networking netstat

我正在尝试理解一个设置并且高度混淆了我自己。

说我的盒子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港口请求?

2 个答案:

答案 0 :(得分: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?

答案 1 :(得分: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将处理该连接。