我知道足够的网络是危险的。NAT 的底层细节并不是我特别了解的。
我无意中发现自己在今天早些时候的一次讨论中关于将我们的一堆节点放在 NAT 网关后面。(1 个公共 IP 地址和 X 个私有 LAN 地址)。我在 TCP 协议中调用了对源和目标端口字段的 16 位限制,(http://www.ietf.org/rfc/rfc793.txt - 第 15 页)并提到它会将我们限制为大约 65,000 个连接( 65536)。——我对那个答案不再那么自信了。你能帮我提供一些细节吗?
我知道我们这边的传入端口(服务器端口)可以接受与 sourceIP x SourcePort 组合一样多的连接。让我们暂时忽略这些,关注源自 LAN、通过 NAT 网关并在随机端口上的随机主机上结束的连接。
在普通的 [Linux] 系统上,我认为每个源 IP 每个端口的传出连接限制为 1 个。如果我们假设我们生活在一个简单的世界中,每个系统只有一个 IP 地址,那么“正常系统”将被限制为最多 65536 个连接。
1) 在 TCP 中,单源 IP 是否限制为 65536 MAX 理论上的传出连接?
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) 问题 1 和 2 的答案对于...'非正常系统'[充当 NAT 网关的思科路由器] 的答案是否不同?
例如:一个专门的网络设备,它有一个面向公众的 IP 和多达 65,000 个局域网 IP [或更多]?是否有魔法,或者问题2的答案总是:是的?(或者没有)
4)以上问题都假设有状态的TCP连接。像 UDP 这样的无状态连接有什么不同吗?
最终:
5) 我们的 LAN 是否会被限制为通过单个公共 IP 地址与外界的 65536 个(或其他一些理论上的限制)并发连接?
谢谢!:)
出于这个问题的目的,我们支持非常强大且全新的 Cisco Nexus 设备(我认为是 7000 系列)。除非可以具体量化,否则最好忽略内存/等限制。
如果我错了,请纠正我,但这是我理解的方式。限制是每个客户端/服务器/端口。因此,鉴于此。
1) 在 TCP 中,单源 IP 是否限制为 65536 MAX 理论上的传出连接?
不,我相信对于相同的目标 IP,理论上最大限制为 65536。
Windows 工作站(非服务器版本)有限制,这使得这个数字要少得多。Linux 有资源限制,但一般用户通常不会遇到这些限制,您可以轻松调整它们。
当您开始将数量增加到接近 64K 时,您可能会遇到其他资源限制。
由于资源有限,消费级路由器的限制可能要低得多。
2)或者每个远程主机的限制实际上是 65536 个连接?
是的
3) 问题 1 和 2 的答案对于...'非正常系统'[充当 NAT 网关的思科路由器] 的答案是否不同?
不
4)以上问题都假设有状态的TCP连接。像 UDP 这样的无状态连接有什么不同吗?
UDP是无连接的。所以这与UDP并不相关。
5) 我们的 LAN 是否会被限制为通过单个公共 IP 地址与外界的 65536 个(或其他一些理论上的限制)并发连接?
不。
在跟踪连接并提供其他跟踪功能的状态防火墙的上下文中,是的,这些模块本身可能有限制。该操作没有说明正在使用哪个防火墙/NAT 路由器,因此我们甚至无法推测它目前可能施加的限制。
因为有许多 NAT 设计方法,答案当然是“视情况而定”。Geoff Huston对各种 NAT 设计进行了出色的概述。
根据我的经验,许多小型办公室/家庭办公室路由器不会将 > 64k 地址处理到同一地址,但这不仅仅是因为端口耗尽。许多内存有限,并且会在达到 64k 限制之前用完 NAT 表的 RAM。
5) 我们的 LAN 是否会被限制为通过单个公共 IP 地址与外界的 65536 个(或其他一些理论上的限制)并发连接?
不可以,因为一个端口 NAT IP 可以用于多个连接:
长话短说,它严重依赖于平台、配置和实现。
但让我快速解释一下:
显然,其他答案表明理论限制达到> 65535(注意端口0通常是保留的),这在一定程度上可能是正确的,例如......:
然而在现实世界中,硬件加速路由发生在资源有限的情况下,NAT 表有一个众所周知的限制,这通常是保护的配置参数。
思科提到从 IOS 12 开始,最大 NAT 取决于 DRAM,导致大约 10K 的转换(源),低于您问题中的 65K。
以你的旧xDSL路由器为例,如果你想在家里调出一个有很多连接的P2P,大多数都配置了1024~4096的全局最大限制。例如,我家中的高端 FTTH 路由器的 NAT 限制由供应商配置为 8K。
最后,为了回答 Q2-rewrite,我看到了具有以下 NAT 表的RFC3489实现的产品。显然,最后一个确实大大限制了 NAT 的可能性:
喜欢这个答案的就点个赞吧!
NAT映射表的主键:
我们可以将不同的 sourceIp:sourcePort 映射到同一个 DestinationIP:DestinationPort。所以端口号(
2^16
)不是连接的限制。