3 回答

TA贡献1827条经验 获得超8个赞
单个侦听端口可以同时接受多个连接。
通常引用的是“64K”限制,但这是每个服务器端口的每个客户端,需要澄清。
每个TCP / IP数据包基本上有四个用于寻址的字段; 这些是:
source_ip source_port destination_ip destination_port< client > < server >
在TCP堆栈内,这四个字段用作复合密钥,以将数据包与连接(例如文件描述符)进行匹配。
如果客户端与同一目的地上的同一端口有许多连接,则其中三个字段将相同 - 只是source_port
区别于不同的连接。端口是16位数,因此任何给定客户端对任何给定主机端口的最大连接数为64K。
但是,多个客户端每个最多可以有64K连接到某个服务器的端口,如果服务器有多个端口或者是多宿主,那么您可以进一步增加。
所以真正的限制是文件描述符。每个单独的套接字连接都有一个文件描述符,因此限制实际上是系统已配置为允许的资源和要处理的资源的文件描述符数。最大限制通常超过300K,但可以配置,例如使用sysctl。
对于普通盒子来说,现实的限制是大约80K,例如单线程Jabber消息服务器。

TA贡献1884条经验 获得超4个赞
如果您使用了原始套接字(SOCK_RAW
)并在用户区重新实现了TCP,我认为答案在这种情况下仅受(local address, source port, destination address, destination port)
元组数量的限制(每个本地地址约为2 ^ 64)。
它当然需要大量内存来保持所有这些连接的状态,并且我认为你必须设置一些iptables规则来防止内核TCP堆栈代表你感到不安和/或响应。
- 3 回答
- 0 关注
- 759 浏览
添加回答
举报