我要问的是,两台计算机是否监听同一端口,并且一组信息通过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对象
如果有什么需要澄清的话,我会非常乐意。
答案 0 :(得分:4)
根据我对路由器的了解,除非设置端口转发,否则路由器将丢弃在该端口上发送的任何数据包。
如果设置了端口转发,则只能设置其中一台计算机来接收数据包。
答案 1 :(得分:3)
除非已建立通信,否则路由器不会向任一计算机发送入站数据包。
如果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);这是一个非常深刻的话题。
答案 2 :(得分:2)
如果数据包是与路由器后面运行的服务器建立新TCP连接的入站请求,则路由器必须配置明确的端口转发规则,可以在路由器配置中静态配置,也可以通过uPNP或SNMP动态配置,告诉路由器将24.157.358.45:4444上的入站数据包路由到192.168.1.2:4444或192.168.1.3:4444,否则数据包将被丢弃。所以不,两个监听服务器都不会看到相同的数据包。
建立TCP连接后,路由器知道哪些特定的LAN机器与哪些连接相关联,并相应地路由属于这些连接的传入数据包。
答案 3 :(得分:0)
以前的答案是正确的,您需要启用端口转发。如果未启用,则将在路由器上关闭端口4444。
听起来你有多台服务器,并希望转发到目前开启的任何服务器。这是不可能的(*),路由器不关心PC1或PC2是否正在侦听端口4444,它只会将所有内容转发到端口转发中配置的地址。
(*):好的,但是需要额外的工作。
解决方案1:欺骗路由器以为只有一台服务器。为PC1和PC2提供具有相同IP地址的虚拟网络接口,并转发到该地址。确保只启用其中一个接口,网络中具有重复的IP地址可能会产生无意的行为。
解决方案2:让路由器关注哪个服务器处于打开状态。您需要编写一个程序在路由器(或另一台服务器)上运行,该程序可以检测哪个服务器处于打开状态并相应地转发数据包。如果你使用Linux,程序iptables值得一看。