NAPT 是否重用已翻译的端口?

网络工程 纳特
2022-02-17 23:03:35

(为了示例,地址和端口随机组成)

假设我们有一台机器,它的私有 IP 地址是 192.168.1.10。

假设机器的路由器的公网 IP 地址是 100.50.100.50。

机器通过互联网从端口 7000 发送一个 UDP 数据包到端口 9000 的某个地址。

这可以翻译为:src: 192.168.1.10:7000 -> src: 100.50.100.50:37500

在此之后,但在清除上面的 NAT 记录之前,机器再次从端口 7000 发送 TCP 数据包到端口 9500 的不同地址。路由器是否会再次将端口 7000 转换为端口 37500,还是会随机选择其他内容?

我猜它会使用相同的端口号(37500),因为连接到路由器的其他机器使用尽可能多的可用端口很重要。

1个回答

它因人而异。有许多不同的可能行为,包括但不限于

  1. 完整的锥体,映射仅取决于客户端 IP/端口,所有服务器使用相同的映射,并且允许从任何地方返回数据包。
  2. 限制锥,映射仅取决于客户端 IP/端口,相同的映射用于所有服务器,但返回数据包仅允许从客户端连接到出站的服务器。
  3. 受限端口锥,映射仅取决于客户端 IP/端口,相同的映射用于所有服务器,但返回数据包仅允许来自客户端已连接到出站的服务器/端口组合。
  4. 随机对称,映射取决于完整的 4 元组,用于传出连接的端口是随机选择的。
  5. 端口保留对称,映射依赖于完整的 4 元组,但 NAT 仅在必须这样做时才更改源端口以避免冲突。

最后一种类型特别隐蔽,因为在轻负载下它的行为就像一个受限制的端口锥,但在重负载下,“对称”行为变得明显。可悲的是,它是最常见的类型之一。