我刚刚考虑过将最大数量的客户端连接从我家的局域网连接到互联网上的一台服务器。 我的家庭路由器也NAT'ing连接到我的LAN IP地址转换为我的公共IP地址。
假设我的networking中一台机器的最大客户端连接数是65535,我已经使用了所有可用的端口进行客户端连接。 我的路由器有一个类似于客户端A,路由器B和服务器C的表。
为了方便起见,我假设路由器将使用与客户端相同的端口sorting,但这显然不会在现实中发生。
| Home | Server (C) | | Router (B) | | |-------------------|-------------------| Client A:Port 1 | A:1 C:80 | B:1 C:80 | Client A:Port 2 | A:2 C:80 | B:2 C:80 | . . . Client A:Port 65534 | A:65534 C:80 | B:65534 C:80 | Client A:Port 65535 | A:65535 C:80 | B:65535 C:80 | |---------------------------------------|
如果第二个客户端(X)试图连接到服务器C(或任何其他服务器),则路由器B在传出IP地址上没有更多端口可用(假设它只有其中之一)。
这个连接会失败吗? 这将如何体现在客户端? 这是一个不太可能发生的情况,或者是在真实世界中稍有不同的情况下可能遇到的情况? 例如,如果我有一万个客户端使用这个路由器,我想会更容易导致路由器上的端口耗尽。 你如何处理这个问题,并避免在现实世界中?
我想你会遇到限制,CPU可以在用完端口之前转发很多数据包。 大多数SOHO路由器的能力相当有限,大型路由器倾向于丢弃较旧的连接,尽pipe这可能是一种可configuration的行为。
你似乎在谈论伪装NAT。
是的,这种疲惫可以而且确实发生在现实世界中。 但是,对于“家庭”networking来说,这是不太可能的(尝试监视您计算机上活动连接的数量,以计算出需要使用所有可用端口的活动计算机数量)。
该解决scheme(许多大型提供商和IPv6 PoP使用)是使用多个“外部”地址。
IIRF,rfc 3022(它定义了NAT)没有详细说明在精疲力尽的情况下会发生什么 – 但是你可能要仔细阅读。
路由器(除非另外是防火墙或NAT网关)可以处理任意多的连接 – 因为它根本不处理连接,它只是路由并且可以在逐个数据包的基础上这样做。
但是如果你真的在谈论NAT,它build立了从路由器到目标主机的新连接,情况就会改变。 如果目标IP地址和目标端口号与源IP地址相同,则只能通过源端口区分连接(序列号只在连接中起作用)。 所以,是的,在这种情况下,同一个目的地(ip +端口)只有65536个并发连接在理论上是可能的。 真实的限制当然可能会更低(例如,到同一目标的许多连接可能会被阻止得太早,因为它们看起来像是攻击)。
编辑:下面的共享者的评论,从技术上来说,资源限制可能在远程主机端。 另请注意,这仅适用于在同一个目标地址上连接到同一个目标端口的情况。 请注意,连接由一个套接字表示,它由atuple(源IP,源端口,目的IP,目标端口)组成,因此,如果另一个客户端尝试不同的目标主机或端口,则不会有任何限制(或者即使A尝试不同的目的IP或端口)。