【问题标题】:Socket bind port to same port in my localhost and box IP套接字将端口绑定到我的本地主机和盒子 IP 中的同一端口
【发布时间】:2016-01-20 12:05:13
【问题描述】:

我正在尝试理解一个设置,但我对自己非常困惑。

假设我的机器 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?

【问题讨论】:

    标签: linux sockets networking netstat


    【解决方案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?

    【讨论】:

    • "完全有可能将两个不同的程序绑定到不同地址上的相同端口号" - 我们可以在 netstat 输出中清楚地看到实际情况在这里。
    【解决方案2】:

    在某些平台上,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 将处理连接。

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 2021-08-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      相关资源
      最近更新 更多