如何创建太多套接字会影响甚至崩溃路由器?

时间:2009-05-29 04:16:18

标签: network-programming

对于可以创建多少个连接(套接字)并将其用于数据传输,是否存在不同的限制?是否存在家用路由器或商用级路由器是否重要?

例如,不同的用户对Linksys,D-link或Netgear路由器有不同的体验。有些可能更容易停机或“卡住”,特别是如果他们正在运行网络密集型程序(需要拔掉连接到路由器的电源线并重新插入)。是由于太多套接字的创建还是使用了太多资源而路由器可以支持?

2 个答案:

答案 0 :(得分:6)

路由器本身并不关心套接字,除非它们是有状态的路由器,例如NAT网关。

如果它是一个有状态路由器,那么每个连接都会在路由器的RAM中占用一些空间,当RAM耗尽时,它必须丢弃旧记录(或者它崩溃,如果你很幸运,重新开始-boots,取决于它是什么供应商...)

以IP术语表示的“连接”是TCP会话(由源IP,源端口,目标IP,目标端口和序列号协议标识)。 UDP,或ICMP和朋友本身没有“连接”,但有状态路由器/防火墙通常假设源IP,源端口,目标IP,目标端口元组是具有某些超时的“连接”而伪造它。如果在该连接上没有看到流量一段时间,则认为它已经死亡。该超时可能设置在30秒到一天之间,具体取决于防火墙/路由器。

是的,通常商用路由器/防火墙更加强大,因此可以在有状态时跟踪更多连接。您可以获得的最佳路由器通常是400美元的Linux或xBSD x86盒子,带有一两个RAM或一个小闪存盘来启动......

答案 1 :(得分:4)

执行Network Address Translation的路由器需要维护每个活动连接的内部IP地址/端口号和外部端口号之间的映射。如果这些连接的表已满,则可能会导致崩溃,现有连接中断或无法建立新连接等问题。

不执行NAT的路由器 - 并且所有核心Internet路由器都没有NAT - 通常不会受此影响,因为他们不知道通过它们的连接,并且单独处理每个数据包。