当前位置:  开发笔记 > 运维 > 正文

现代Linux机箱可以拥有的理论最大开放TCP连接数是多少

如何解决《现代Linux机箱可以拥有的理论最大开放TCP连接数是多少》经验,为你挑选了3个好方法。

假设硬件具有无限的性能,Linux机箱是否支持> 65536个开放的TCP连接?

据我所知,短暂端口的数量(<65536)限制了从一个本地IP到一个远程IP上的一个端口的连接数.

元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的东西; 这是否意味着如果这些参数中有多个是免费的,则可以支持超过65K的连接.例如,从多个本地IP连接到多个远程主机上的单个端口号.

系统中还有另外16位的限制吗?或许文件描述符的数量?



1> Will..:

单个侦听端口可以同时接受多个连接.

通常引用的是"64K"限制,但这是每个服务器端口的每个客户端,需要澄清.

每个TCP/IP数据包基本上有四个用于寻址的字段; 这些是:

source_ip source_port destination_ip destination_port
< client            > < server                      >

在TCP堆栈内,这四个字段用作复合密钥,以将数据包与连接(例如文件描述符)进行匹配.

如果客户端与同一目的地上的同一端口有许多连接,则其中三个字段将相同 - 只是source_port区别于不同的连接.端口是16位数,因此任何给定客户端对任何给定主机端口的最大连接数为64K.

但是,多个客户端每个最多可以有64K连接到某个服务器的端口,如果服务器有多个端口或者是多宿主,那么您可以进一步增加.

所以真正的限制是文件描述符.每个单独的套接字连接都有一个文件描述符,因此限制实际上是系统已配置为允许的资源和要处理的资源的文件描述符数.最大限制通常超过300K,但可以配置,例如使用sysctl.

对于普通盒子来说,现实的限制是大约80K,例如单线程Jabber消息服务器.


sysctl限制适用于整个系统,对吧?还有一个可配置ulimit的限制,它限制了进程的最大文件描述符数.默认情况下,这通常小于300K,通常为1024.
如果您(a)使用SO_REUSEADDR并且(b)定位不同的目标IP地址,理论上理论上可以有超过64K的传出连接.但内核内存限制可能会先阻止你.
@威尔精美解释!非常有帮助...想给+100赞...谢谢:-)

2> Spaceghost..:

如果您正在考虑运行服务器并尝试确定从一台计算机可以提供多少连接,您可能需要了解C10k问题 以及同时为大量客户端提供服务所涉及的潜在问题.


C10k已有10年历史,不再有趣.[阅读本文]了解如何处理C1024K.
@Chandranshu - 读什么?我假设你打算在评论中加上一个链接......
@Chandranshu - 有12M连接的戴尔演示:https://mrotaru.wordpress.com/2013/06/20/12-million-concurrent-connections-with-migratorydata-websocket-server/

3> sbirch..:

如果您使用了原始套接字(SOCK_RAW)并在用户区重新实现了TCP,我认为答案在这种情况下仅受(local address, source port, destination address, destination port)元组数量的限制(每个本地地址约为2 ^ 64).

它当然需要大量内存来保持所有这些连接的状态,并且我认为你必须设置一些iptables规则来防止内核TCP堆栈代表你感到不安和/或响应.

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