NAT同步tcp连接打开

网络工程 路由 通讯协议 纳特 脱氧核糖核酸
2021-07-05 17:13:52

我试图了解当具有两个不同公共 IP 地址的两个 NAT 后面的两个对等点尝试使用同时打开建立 TCP 连接时 NAT 的行为。我做了一些研究,发现两个对等点都将通过 ICE 服务器获得他们的公共映射,然后在尝试建立同时打开的 TCP 之前通过集合服务器交换他们的映射。

我想了解对等方如何保证获得与其与其他对等方共享的端口映射相同的端口映射?

例如:

在此处输入图片说明

在图中,主机 A 向集合服务器询问主机 B 的 Nat 映射,然后主机 B 执行相同的操作。之后,他们尝试同时打开 TCP(假设他们在完整锥体地图后面)。同步映射的步骤 1) 主机 A 向 IP Y 端口 100 发送 SYN 数据包 2) 同时 B 将向 IP X 端口 55 发送 SYN 数据包

我的问题是:主机 A 如何保证获得相同的外部端口映射,即:它通过集合点服务器与主机 B 共享的端口 55,以及主机 B 如何保证获得相同的外部端口映射,即:端口 100。换句话说,NAT 是否总是将相同的端口映射分配给相同的(IP、端口)唯一元组?

当然,假设 NAT 支持同时打开 TCP,我说的是动态 NAT,而不是具有静态映射的 NAT。

编辑:

我需要澄清的是,当这种类型的 TCP 同时打开时,我只对 NAT 的行为感兴趣。“NAT”将如何尽最大努力确保其背后的 HOST 获得它期望获得的相同映射。

附加说明:RFC 5382 https://tools.ietf.org/rfc/rfc5382.txt 中描述了 TCP 同时打开

2个回答

您的集合点服务器需要某种协调协议 (ICE?) - 这可以使用令牌、用户名或类似的东西将来自不同方向的两个套接字连接到虚拟会话中。它们的始发端口无关紧要。

然而,这不是 NAT 的功能,更高级的协议在这里是题外话。

您问“换句话说,NAT 是否总是将相同的端口映射分配给相同的(IP、端口)唯一元组?”

答案是否定的,这完全取决于 NAT 设备。一般情况下无法保证,因为NAT端口通常有16位空间,而NAT内部的N个主机具有16位端口空间。它可以尝试使其尽可能稳定,但通常传出端口是非常不可预测的。