如果两个设备都有程序在同一个端口上监听,那么路由器如何决定将数据路由到哪个设备?

如果两个设备都有程序在同一个端口上监听,那么路由器如何决定将数据路由到哪个设备?

假设我在路由器上有两个设备,它们都有在端口 999 上监听的软件。我本地网络之外的客户端尝试通过端口 999 连接到我的公共 IP 地址。

路由器如何知道将连接请求路由到哪个设备?两个设备都在监听端口 999,但流量最终只能到达其中一个设备,不是吗?

我知道端口转发是确保数据到达正确设备的正确方法,但如果没有设置端口转发配置怎么办?路由器是否会因为不知道哪个设备是“正确”的设备而拒绝数据包?

答案1

这取决于路由器的配置方式。最常见的配置将导致数据包被忽略或导致连接被重置。通常,执行 NAT 的 SoHo 路由器仅在专门配置了端口转发或连接到路由器本身时才接受入站连接。

一个问题是,如果路由器配置了默认目的地或 DMZ,则连接将被转发到默认目的地。

另一个问题是路由器是否支持 UPnP。在这种情况下,连接将被转发到最先要求转发该端口的主机(如果有)。

最后,有些路由器具有宽容型 NAT。在这种情况下,路由器会做出最佳猜测。例如,如果最近只有一个设备处于活动状态,则该设备可能会获得连接。或者,如果某个设备之前曾与此连接所来自的 IP 地址进行过通信,则该设备可能会获得连接。

这完全取决于路由器的配置方式以及路由器支持的功能。

答案2

对于传入连接(请注意,我使用的是连接这个词,而不是数据包),如果没有任何端口转发/UPnP 设置,它将拒绝或丢弃数据包。

对于传出连接(使用 SNAT),路由器将保持“状态”。它将查看所​​有传出连接(为简单起见,TCP 数据包从内部到外部带有 SYN 标志),将源地址/端口重写为 WAN 连接并继续发送数据包。它知道将源地址/端口重写为什么,并且当数据包返回时,它将反转该过程以返回原始地址/端口。

因此对于我的 NAT 路由器,我将获得下表:

TCP state codes: SS - SYN SENT, SR - SYN RECEIVED, ES - ESTABLISHED,
                 FW - FIN WAIT, CW - CLOSE WAIT, LA - LAST ACK,
                 TW - TIME WAIT, CL - CLOSE, LI - LISTEN

CONN ID    Source                 Destination            Protocol         TIMEOUT             
201805472  10.100.0.95:62110      83.69.0.50:42018       udp [17]         7                   
213891648  10.100.0.95:43327      176.68.233.117:53228   tcp [6] ES       4631                
213891928  10.100.0.95:38139      213.101.14.165:54764   tcp [6] ES       6995                
213223160  10.100.0.95:35725      176.68.233.117:53228   tcp [6] ES       386                 
215913952  10.100.0.1:38340       10.100.0.11:53         udp [17]         8                   
205319000  10.100.0.95:62110      95.22.94.199:22634     udp [17]         41                  
214931472  10.100.0.95:60500      213.101.14.165:5524    tcp [6] ES       6478                
205547536  10.100.1.26:37992      141.138.198.177:993    tcp [6] ES       7118                
387202720  10.100.1.26:58156      141.138.198.177:993    tcp [6] ES       7122                
[output omitted]

如果有从 176.68.233.117 返回的数据包,其目标端口为 53228,它会将目标地址/端口重写为 10 10.100.0.95:43327。

相关内容