套接字绑定端口到我的本地主机和盒子 IP 中的相同端口

Socket bind port to same port in my localhost and box 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,哪个二进制文件将为请求提供服务?

几乎可以肯定,每一个都是不同的界面,因此是不同的互联网地址。也就是说,127.0.0.1 通常是环回接口。虽然大概 xx.xx.xx.xx 是一个真实的(以太网)网络接口。完全有可能将两个单独的程序绑定到不同地址上的相同端口号。更常见的是,单个程序简单地绑定到端口号,内核实际上将其转换为多个绑定,一个对应每个接口的地址。

有关详细信息,请参阅 bind(2)ip(7) 手册页。具体来说,INADDR_ANY 是希望在所有接口上绑定端口的服务器可以使用的 pseudo-address。

另见 Linux 副标题第一段下的答案:

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

在某些平台上,netstat 可以向您显示拥有套接字的进程。例如,在 Windows 上,-b 开关显示可执行文件名称,而 -o 开关显示进程 ID。在 Linux 上,-p 开关显示进程信息。

does it means that two executable have binded and running at same port is same box

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

if so which binary would service the request if coming at port 11191 in my case?

这取决于连接到达的本地 IP。 127.0.0.1 是一个环回适配器,因此只有同一台机器上的客户端 运行 可以连接到它。如果客户端具体连接到 127.0.0.1 上的端口 11191,myexe 将处理该连接。如果客户端连接到 xx.xx.xx.xx 上的端口 11191,anotherexe 将处理连接。