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



我试图理解一个设置,但我自己非常困惑。

假设我的盒子

IP是xx.xx.xx.xx,127.0.0.1是我的Linux盒子的本地环回。现在,当我为端口执行网络统计时,我看到以下输出:

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是希望绑定所有接口上的端口的服务器可以使用的伪地址。

另请参阅Linux副标题第一段下的答案:

套接字选项SO_REUSEADDR和SO_REUSEPORT,它们有何不同?它们在所有主要操作系统中的含义是否相同?

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

这是否意味着两个可执行文件已绑定并在同一端口上运行是同一个盒子

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

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

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

最新更新