所以……我和我的网络老师发生了争执。他说有些人抱怨路由器崩溃是因为路由器上的 NAT 表条目太多。
我不明白,我问:“如果应用程序使用相同的端口,为什么路由器会崩溃?它应该只有一个条目 (pc-ip,pcport;public-ip,public-port)”。他说:“使用相同的端口没关系”。
我认为 NAT 会为通过它的每个数据包创建一个条目。正如您可能猜到的那样,我假设 NAT 过载。
因此问题是:
如何创建 nat 条目?基于数据包还是基于连接?我的意思是:假设我发送一个 udp 数据包...路由器会创建一个条目吗?
当我启动 TCP 连接时,路由器是否会创建一个持久的 nat 条目直到连接关闭?
我的老师说得对吗?假设同一端口上的应用程序发送数据包,NAT 表可能会过载?
提前致谢。
答案1
- 每个连接(或每个 UDP 流)
- 是的
- 是的。例如,一台内部 PC 上的 Web 浏览器可以同时打开多个 TCP 连接,连接到多个不同的外部 Web 服务器。对于每个连接,源端口会有所不同(随机选择),但目标端口和目标 IP 地址对于多个连接可能相同。设计用于满足家庭中两三台计算机需求的路由器可能无法应对(例如)学校中可能需要的数百台非常繁忙的计算机的并发连接数量。路由器的大小必须根据预期负载进行调整。
如果你看看TCP 客户端的 C 源代码示例描述于如何,您会发现“套接字”API 没有提供任何方法让客户端发起连接来指定源端口。