【问题标题】:What happens when 2 computers listen to the same port and a router receives a packet through that port当两台计算机监听同一个端口并且路由器通过该端口接收数据包时会发生什么
【发布时间】:2012-11-14 01:09:54
【问题描述】:

我要问的是,如果两台计算机监听同一个端口,并且一个信息包通过 WAN Ip 和同一个端口进入路由器。数据包会发送到两台计算机吗?两者都不?一个还是另一个?

IE

计算机1 -(内部IP)-> 192.168.1.3 -(监听端口)-> 4444

计算机2 -(内部IP)-> 192.168.1.2 -(监听端口)-> 4444

计算机 3 -(连接和发送)-> 24.157.358.45:4444

数据包 -> 计算机 1 和计算机 2

VB6中的代码是:

LAN.LocalPort = 4444
LAN.Protocol = sckTCPProtocol
LAN.Listen

我在 VB6 Professional 的 Microsoft WinSock Control 6.0 中使用 WinSock 对象

如果有什么需要澄清的,我会非常乐意。

【问题讨论】:

    标签: networking tcp listener port


    【解决方案1】:

    除非已经建立通信,否则路由器不会向任何一台机器发送入站数据包。

    如果 192.168.1.3 从其端口 4444 呼叫其他机器(例如 4.5.6.7),路由器将在其外部地址上分配一个任意端口(例如 24.157.358.45 [原文如此] :5555)并传递数据包到 4.5.6.7。 4.5.6.7 将向 24.157.358.45:5555 发送回复数据包——因为这是它知道的唯一地址——路由器会将这些数据包中继到 192.168.1.3:4444。

    这是正常的过程,但是这个方案有很多额外的细节,可以通过诡计与路由器后面的机器建立通信。

    在具有公共地址的路由器后面拥有具有私有 IP 地址的机器的系统称为network address translation (NAT);这是一个相当深刻的话题。

    【讨论】:

    • 好的。我想我一定会接受服务器的想法。
    • 许多路由器都有一个“DMZ”主机,可以配置为接收所有其他“未知”流量。但你只能拥有一个。
    【解决方案2】:

    前面的回答都是正确的,需要开启端口转发。如果未启用,路由器上的 4444 端口将被关闭。

    听起来您有多个服务器,并且想要转发到当前打开的任何服务器。这是不可能的 (*),路由器不关心 PC1 或 PC2 是否在侦听端口 4444,它只会将所有内容转发到端口转发中配置的地址。

    (*): 可以,但需要一些额外的工作。

    解决方案 1:诱使路由器认为只有一台服务器。给 PC1 和 PC2 一个具有相同 IP 地址的虚拟网络接口并转发到该地址。确保仅启用其中一个接口,网络中的 IP 地址重复可能会导致意外行为。

    解决方案 2:让路由器关心哪个服务器在运行。您将需要编写一个在路由器(或另一台服务器)上运行的程序,该程序可以检测哪个服务器正在运行并相应地转发数据包。如果您使用的是 Linux,那么程序 iptables 可能值得一看。

    【讨论】:

      【解决方案3】:

      如果数据包是与在路由器后面运行的服务器建立新 TCP 连接的入站请求,则路由器必须配置明确的端口转发规则,无论是在路由器的配置中静态配置还是通过 uPNP 或 SNMP 动态配置,它告诉路由器将 24.157.358.45:4444 上的入站数据包路由到 192.168.1.2:4444 或 192.168.1.3:4444 的位置,否则数据包将被丢弃。所以不,你的两个监听服务器都不会看到相同的数据包。

      一旦建立了 TCP 连接,路由器就会知道哪些特定的 LAN 机器与哪些连接相关联,并将相应地路由属于这些连接的传入数据包。

      【讨论】:

        【解决方案4】:

        根据我对路由器的了解,除非设置了端口转发,否则路由器将丢弃在该端口上发送的所有数据包。

        如果设置了端口转发,则只能设置其中一台计算机来接收数据包。

        【讨论】:

        • 该死,我想我还得用一些服务器软件设置它才能连接。感谢您的帮助。
        猜你喜欢
        • 2012-02-26
        • 2015-09-29
        • 2012-08-29
        • 2019-09-01
        • 2011-05-27
        • 2019-02-20
        • 1970-01-01
        • 1970-01-01
        • 2019-09-13
        相关资源
        最近更新 更多