当前位置:  开发笔记 > 编程语言 > 正文

可能的网络连接数

如何解决《可能的网络连接数》经验,为你挑选了2个好方法。

由于端口号限制为65536,连接数量是否有限制?

每个连接如何彼此不同?

如果它是通过端口,那么同时不会有超过65536个连接?



1> sarnold..:

游戏中有许多不同的部分.由于连接是由(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.)其他系统将有不同的限制.

并且,中间的状态防火墙强制执行的打开连接数可能会受到限制.由于每个状态都需要防火墙表中的内存,因此任何状态都可能强制执行某些任意限制以避免内存不足.


@DriverBoy,是的,有可能获得整个元组:使用`getpeername(2)`找到_remote_ IP和端口,使用`getsockname(2)`找到_local_ IP和端口.有关`struct sockaddr`的详细信息,请参阅`ip(7)`,其中包含地址和端口号.(以及`ntohs(3)`将端口从网络端转换为主机端.)

2> ikegami..:

TCP连接实际上由对等IP地址+对等端口+本地IP地址+本地端口标识,因此您实际上可以超过64k,但我不知道操作系统是否允许每个本地IP超过64k的工作地址.Windows没有.

有趣的是,港口在关闭后可以保留一段时间.(这样做是为了避免旧连接和新连接之间的意外或故意串扰.)通过简单地在紧密循环上创建和关闭连接,您实际上可以使您的机器用完端口.有关Perl代码的信息,请参阅http://www.perlmonks.org/?node_id=897591,该代码将使用所有套接字挂起套接字连接调用(在某些计算机上).

UDP也有端口,但UDP没有连接.因此,套接字仅通过其本地IP地址+本地端口进行标识,因此每个本地IP地址可以拥有最多64k个UPD端口.

更新:在UDP上添加了段落.

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有