networking - 当两台计算机监听同一个端口并且路由器通过该端口接收数据包时会发生什么

标签 networking tcp listener port

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

浏览器

电脑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 对象

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

最佳答案

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

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

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

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

关于networking - 当两台计算机监听同一个端口并且路由器通过该端口接收数据包时会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13371634/

相关文章:

http - 为什么设备上的其他应用程序可以看到所有 HTTPS 通信? HTTP 工具包

c - 可靠地将相同的数据广播到 C 中的多个套接字

ruby - EventMachine: "` start_tcp_server': no acceptor (port is in use or requires root privileges)"

java - TestNG 监听器的顺序 (java Webdriver)

swift - 我的 ViewController 中的监听器到我的自定义 Cocoapod 类 - Swift

java - 在 Spring 批处理中插入跳过的记录信息

java - 如何在端口范围内找到开放端口?

python - 当代码放入函数中时,a 是未定义的

c++ - 无法连接到远程ip

java - 我自己的 http 服务器的 TCP 机器状态单元测试