UDP打孔NAT端口

网络工程 纳特 UDP
2021-07-17 23:05:47

刚刚看了一篇关于UDP协议“打孔”过程的文章。我了解它是如何完成的,但我还有最后一个问题需要澄清。我们有集合点服务器和客户端 A、B。

客户端 A 已经为客户端 B 打了一个洞。客户端 B 从集合点服务器接收 NAT IP 和 NAT 端口,并开始向与集合点服务器相同的端口发送数据。假设我碰巧知道 NAT 为 UDP 连接打开的第二个端口。我也可以通过第二个端口发送我的数据包吗?或者是否为每个传出的 UDP 连接区分端口?如果是这样,我们为什么可以为客户端 B 和集合点服务器使用相同的端口?当客户端 A 打孔并且客户端 B 必须知道 NAT 为这个特定连接打开的新端口时,NAT 不会打开一个新端口吗?

我希望我的问题有点可以理解。

1个回答

NAT 设备将保留一个包含当前打开连接的表,以便它可以向打开连接的内部主机发送返回数据包。状态表中的条目可能如下所示:

内部源IP | 内部 S 端口 | 外部 S 端口 | 目的地IP | D-端口
192.168.1.12 10123 10123 203.0.113.1 5555

当(从外部)接收到一个数据包时,NAT 设备将检查数据包源 IP源端口目标端口Destination IPD-Port并将External S-Port其与其连接表中,字段进行比较当它找到匹配项时,它会将数据包转发到Internal Source IPon Internal S-Port

UDP 打孔取决于内部和外部源端口相同的事实。这通常是这种情况,除非您有第二台内部主机使用相同的源端口连接到相同的外部目标/D 端口组合。

当我们假设内部和外部 S-Port 相同时,客户端 A、B 都可以将其源端口通信到集合服务器,然后集合服务器将信息分别转发回另一个客户端。