NAT 网关 - 最大连接限制

NAT 网关 - 最大连接限制

我对网络的了解足以让人感到危险。我对 NAT 的底层细节并不十分了解。

今天早些时候,我偶然发现自己参与了一场关于将我们的一堆节点置于 NAT 网关后面的讨论。(1 个公共 IP 地址和 X 个私有 LAN 地址)。我调用了 TCP 协议中对源端口和目标端口字段的 16 位限制,(http://www.ietf.org/rfc/rfc793.txt- 第 15 页)并提到它将限制我们连接数为 65,000 个(65536)。——我对这个答案不再那么有信心了。你能帮我提供一些详细信息吗?

我知道我们这边的传入端口(服务器端口)可以接受与源 IP x 源端口组合数量相同的连接。我们暂时不考虑这些,而是​​专注于源自 LAN、通过 NAT 网关并在随机端口的随机主机上结束的连接。

在普通的 [Linux] 系统上,我认为每个源 IP 每个端口的传出连接数限制为 1 个。如果我们假设我们生活在一个简单的世界中,每个系统只有 1 个 IP 地址,那么“普通系统”的最大连接数将限制为 65536 个。

1)在 TCP 中,单个源 IP 的理论最大传出连接数是否限制为 65536?

2)或者每个远程主机的连接数限制实际上是 65536 个?

2)[换种写法]:同一个源端口可以用于不同的 remoteHostIP:RemotePort 组合吗?

例如:(以下可以吗?)

Source IP   |Source Port |Remote IP|Remote Port   
192.168.0.20:36500   -->    8.8.8.8:23
192.168.0.20:36500   -->    8.8.4.4:23

3)对于“非正常系统” [思科路由器充当 NAT 网关],问题 1 和 2 的答案是否不同?

例如:一个专用网络设备,它有一个面向公众的 IP,背后有多达 65,000 个 Lan IP [或更多]?这其中是否有魔力,还是问题 2 的答案永远是:是?(或否)

4) 以上问题都假设存在有状态的 TCP 连接。对于像 UDP 这样的无状态连接,情况会有什么不同吗?

最后:

5)我们的 LAN 通过单个公共 IP 地址与外界建立的并发连接数是否会被限制为 65536(或其他理论限制)?

谢谢你! :)


就这个问题而言,我们使用的是非常强大和全新的 Cisco Nexus 设备(我认为是 7000 系列)。除非可以具体量化内存/等限制,否则最好忽略它们。

答案1

如果我错了请纠正我,但这是我的理解方式。限制是针对每个客户端/服务器/端口的。因此,鉴于此。

1)在 TCP 中,单个源 IP 的理论最大传出连接数是否限制为 65536?

不,我认为对于同一目标 IP,理论上最大数量限制为 65536。

Windows 工作站(非服务器版本)有限制,因此这个数字要小得多。Linux 有资源限制,但一般用户通常不会遇到这些限制,而且您可以轻松调整它们。

当您开始将数字增加到接近 64K 时,您可能会遇到其他资源限制。

由于资源有限,消费级路由器的限制可能会低得多。

2)或者每个远程主机的连接数限制实际上是 65536 个?

是的

3)对于“非正常系统” [思科路由器充当 NAT 网关],问题 1 和 2 的答案是否不同?

4) 以上问题都假设存在有状态的 TCP 连接。对于像 UDP 这样的无状态连接,情况会有什么不同吗?

UDP 是无连接的。因此这与 UDP 无关。

5)我们的 LAN 通过单个公共 IP 地址与外界建立的并发连接数是否会被限制为 65536(或其他理论限制)?

不。


在跟踪连接并提供其他跟踪功能的状态防火墙的背景下,这些模块本身可能存在限制。 op 没有说明正在使用哪种防火墙/NAT 路由器,因此我们目前甚至无法推测它可能施加什么限制。

答案2

长话短说,它严重依赖于平台、配置和实现。

但让我快速解释一下:

显然其他答案指出理论限制达到> 65535(注意端口0通常是预订的),这在一定程度上可能是正确的,例如……:

  • 在大中央国家机关事务管理局系统或类似的高级路由器,其主要用途就是这个,包括NAT-PAT。
  • 在某些Linux 发行版在某些情况下(例如 RAM > 1GB、内核已准备好等),使用 PC 通过 CPU 进行软件 NAT/路由时,理论上是可行的。

然而在现实世界中,硬件加速路由在资源有限的情况下进行,NAT 表具有众所周知的限制,这通常是用于保护的配置参数。

  • Cisco 提到从 IOS 12 开始,最大 NAT 取决于 DRAM,从而产生大约 10K 次转换(来源),比你问题中的 65K 要少。

  • 以你旧的 xDSL 路由器为例,如果你想在家里建立具有许多连接的 P2P,大多数路由器都配置了 1024~4096 的全局最大限制。例如,我家里的高端 FTTH 路由器的 NAT 限制由供应商配置为 8K。

最后,回答 Q2-rewrite,我见过一些产品有 dispair 实现RFC3489使用以下 NAT 表。显然最后一个表确实大大限制了 NAT 的可能性:

  • iAddr:iPort - eAddr:ePort - dAddr:dPort(典型的对称 nat)
  • iAddr:port - eAddr:port - dAddr (非常低端产品)

如果您喜欢这个答案请点赞!

答案3

5)我们的 LAN 通过单个公共 IP 地址与外界建立的并发连接数是否会被限制为 65536(或其他理论限制)?

不是,因为一个端口 NAT IP 可以用于多个连接:

cat /proc/net/ip_conntrack | grep 51380
tcp      6 191 ESTABLISHED src=10.1.8.5 dst=17.133.254.23 sport=51380 dport=5223 src=17.133.254.23 dst=my.nat.pub.ip sport=5223 dport=51380 [ASSURED] mark=0 use=2
tcp      6 24 CLOSE_WAIT src=10.1.26.1 dst=80.68.255.71 sport=51380 dport=80 src=80.68.255.71 dst=my.nat.pub.ip sport=80 dport=51380 [ASSURED] mark=0 use=2

答案4

NAT映射表主键:

sourceIP:sourcePort + DestinationIP:DestinationPort

我们可以将不同的sourceIp:sourcePort映射到同一个DestinationIP:DestinationPort。因此端口号(2^16)不是连接的限制。

相关内容