当 NAT 路由器达到其到特定目的地的 65,535 个连接限制时会发生什么?

网络工程 纳特
2021-07-31 02:17:49

如果一家拥有数千个端点的公司都试图访问一个特定的目的地(比如 google.com),那么根据源端口范围的限制,它总共可以拥有的最大 TCP 连接数限制为 65535 个连接。这假设一个简单的 NAPT 为专用网络中的所有端点进行地址和端口映射。

听起来很可能在一个大型网络中达到这个限制,其中许多端点运行许多不同的客户端,所有客户端都连接到相同的外部网络服务。这个限制的解决方案是什么?

2个回答

正如 Ron 在评论中指出的那样,通常较大的企业不会将所有出站流量都置于单个公共 IP 之后,而是将多个 IP 池置于多个网关之后。

同样的情况是,大型企业通常会为大多数出站 Web 流量使用各种应用程序级代理,这些流量通常会被分成不同的站点和集群。因此,NAT 网关/出站防火墙可能只会看到少数要转换的代理地址。这些代理本身可以具有公共地址,甚至可以是托管服务。通过标准 NAT 网关的直接 Internet 访问通常仅在例外情况下提供,因为代理方法有很多其他优势(缓存、内容管理/安全、负载管理等)。

值得注意的是,即使在直接 NAT 的情况下,通常也会有相当激进的超时来回收源端口。

最后,临时源端口实际上可以重复使用。每个套接字都是 (srcaddr, srcport, dstaddr, dstport, protocol) 的元组。如果这些值中的任何一个发生变化,则它是一个不同的套接字。在 NAT 的情况下,理论上,只要有其他消除歧义的信息,同一个源端口就可以被多个转换使用。因此,例如,一个会话可以被 (Host-A, Port A, RemoteHost B, Port-B, TCP) 转换为 (NAT GW Addr, port-C, RemoteHost B, Port-B, TCP) 而一个会话来自另一个内部主机到不同的远程 IP 在 NAT 网关上使用相同的临时源。

现在......给定的主机操作系统或防火墙实现是否会以这种方式重用临时资源?这将取决于具体的实现。关键是命名空间实际上比您的问题建议的要大得多。

65535 只是源/目标端口。流是由 5 元组形成的。src-ip、dst-ip、src 端口、dst 端口、协议。正如您所看到的,这些组合要大得多。

其次,通过流表进行NAT操作。流表的大小决定了有多少流可以同时保持活动状态。

第三,大多数连接不是持久的。它们是交易性的。所以它们的寿命很短,如果需要,可以从桌子上弹出。流表就像一个缓存。如果 NAT 检测到流,它会检查表,如果存在,则根据信息转发数据包。如果没有,它会创建一个新流。创建新流会稍微增加延迟,但这并不是世界末日。流程仍将到达终点,交易将完成。