5

我要问的是,如果两台计算机监听同一个端口,并且一个信息包通过 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 对象

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

4

4 回答 4

5

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

如果 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 地址的机器的系统称为网络地址转换 (NAT);这是一个相当深刻的话题。

于 2012-11-14T01:22:02.673 回答
4

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

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

于 2012-11-14T01:20:31.083 回答
3

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

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

于 2012-11-14T01:30:46.980 回答
2

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

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

(*): 好的,这是可能的,但需要一些额外的工作。

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

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

于 2014-03-27T15:21:48.607 回答