我试图理解一个设置,但我自己非常困惑。
假设我的盒子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: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
将处理连接。