由于端口号限制为65536,连接数是否有限制?
每个连接如何相互不同?
如果是端口,那么同时连接的连接数绝不会超过65536个?
答案 0 :(得分:9)
有许多不同的作品。由于连接由(Src IP, Src Port, Dest IP, Dest Port)
元组定义,因此在任何给定时间允许在两个给定对等体之间建立65536 ^ 2个连接:从1到1,从1到2,从1到65535,等等。这只是在两个同行之间 - 你当然可以同时向许多同行开放许多联系。
但,大多数操作系统限制每个进程打开的文件描述符/句柄数。此限制历史较低(20),但现在通常更高(我的系统为1024,ulimit -a
将显示bash(1)
中的每个进程限制。
除了Unix系统的setrlimit(3)
限制外,还有系统范围的限制; Linux系统上的/proc/sys/fs/file-max
将报告整个系统允许的最大打开文件数。 (这是我系统上的596118。)其他系统将有不同的限制。
并且,中间stateful firewall强制执行的打开连接数可能会有限制。由于每个状态都需要防火墙表中的内存,因此任何状态都可能强制执行一些任意限制,以避免内存不足。
答案 1 :(得分:7)
TCP连接实际上是通过对等IP地址+对等端口+本地IP地址+本地端口来识别的,所以你实际上可以超过64k,但我不知道操作系统是否允许工作超过64k每个本地IP地址。 Windows没有。
有趣的是,港口在关闭后可以保留一段时间。 (这样做是为了避免旧连接和新连接之间的意外或故意串扰。)通过简单地在紧密循环上创建和关闭连接,您实际上可以使您的机器用完端口。有关将挂起套接字连接调用的Perl代码(在某些计算机上),请参阅http://www.perlmonks.org/?node_id=897591。使用所有套接字。
UDP也有端口,但UDP没有连接。因此,套接字仅通过其本地IP地址+本地端口进行标识,因此每个本地IP地址最多可以有64k个UPD端口。
更新:在UDP上添加了段落。