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