高性能网络编程(一):单台服务器并发TCP连接数到底可以有多少
虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务器上,那我们只需要扩展出数十台电脑就可以解决问题,但是我们更希望能更大的挖掘单台服务器的资源,先努力垂直扩展,再进行水平扩展,这样可以有效的节省服务器相关的开支(硬件资源、机房、运维人力、电力其实也是一笔不小的开支)。那么到底一台服务器能够支持多少TCP并发连接呢?这就是本文要讨论的问题。在linux下编写网络服务器程序的朋友肯定都知道每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,新的连接到来返回给我们的错误是这时你需要明白操作系统对可以打开的最大文件数的限制。1进程限制执行 ulimit -n 输出 1024,说明对于一个进程而言最多只能打开1024个文件,所以你要采用此默认配置最多也就可以并发上千个TCP连接。临时修改:ulimit -n 1000000,但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。重启后失效的修改(不过我在CentOS 6.5下测试,重启后未发现失效),编辑 /etc/security/limits.conf 文件, 修改后内容为:永久修改:编辑/etc/rc.local,在其后添加如下内容:2全局限制执行cat /proc/sys/fs/file-nr输出9344 0 592026 ,分别为:但在kernel 2.6版本中第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件描述符无一浪费的都已经被使用了 。我们可以把这个数值改大些,用 root 权限修改 /etc/sysctl.conf 文件:操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。我想有这种错误思路朋友不在少数吧?(其中我过去就一直这么认为)我们来分析一下吧。如何标识一个TCP连接:系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。好吧,我们拿出《UNIX网络编程:卷一》第四章中对accept的讲解来看看概念性的东西,第二个参数cliaddr代表了客户端的ip地址和端口号。而我们作为服务端实际只使用了bind时这一个端口,说明端口号65535并不是并发量的限制。server最大tcp连接数:server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对我们的需求现在可以做到数十万级的并发了,你的呢?

单台服务器上的并发TCP连接数可以有多少
1、在linux下,一个进程而言最多只能打开1024个文件,所以采用此默认配置最多也就可以并发上千个TCP连接。而通过临时修改:ulimit -n 1000000,就可以达到100万个TCP连接。但是这种临时修改只对当前登录用户目前的使用环境有效,系统重启或用户退出后就会失效。 2、端口限制:操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接。3、因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。 4、上面给出的结论都是理论上的单机TCP并发连接数,实际上单机并发连接数肯定要受硬件资源(内存)、网络资源(带宽)的限制,至少对现在可以做到数十万级的并发了。

如何修改windows服务器最大的tcp连接数
在做性能测试测试时候,如果被测试的系统页面很简单,并且性能很好,这样会导致压力机得tcp链接数不够而导致如下错误:HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersTcpTimedWaitDelay to30andHKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersMaxUserPortto65534andrebootingthemachineSeethereadme.docfileformoreinformation通过百度搜索介绍最多的还是让修改TimedWaitDelay和MaxUserPort这2个值,其中是将TimedWaitDelay修改的相对小点,可以根据实际情况来定,同时将MaxUserPort这个值修改大些,但是修改完并重启机器后,该问题仍然存在,通过多方查资料,然后对一些注册表进行修改:[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParameters]TcpNumConnections=0x00fffffe(Default=16,777,214)以上注册表信息配置单机的最大允许的TCP连接数,默认为16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP连接的最大连接数。最大动态端口数TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为1024-5000,也就是说默认情况下,客户端最多可以同时发起3977个Socket连接。我们可以修改如下注册表来调整这个动态端口的范围[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesTcpipParameters]MaxUserPort=5000(Default=5000,Max= 65534)
在做性能测试测试时候,如果被测试的系统页面很简单,并且性能很好,这样会导致压力机得tcp链接数不够而导致如下错误: HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersTcpTimedWaitDelay to 30and HKEY_LOCAL_MACHINESystemCurrentControlSetServicestcpipParametersMaxUserPort to 65534and rebooting the machineSee the readme.doc file for more information通过百度搜索介绍最多的还是让修改TimedWaitDelay 和MaxUserPort这2个值,其中是将TimedWaitDelay修改的相对小点,可以根据实际情况来定,同时将MaxUserPort这个值修改大些,但是修改完并重启机器后,该问题仍然存在,通过多方查资料,然后对一些注册表进行修改:[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]TcpNumConnections = 0x00fffffe (Default = 16,777,214)以上注册表信息配置单机的最大允许的TCP连接数,默认为 16M。这个数值看似很大,这个并不是限制最大连接数的唯一条件,还有其他条件会限制到TCP 连接的最大连接数。最大动态端口数TCP客户端和服务器连接时,客户端必须分配一个动态端口,默认情况下这个动态端口的分配范围为 1024-5000 ,也就是说默认情况下,客户端最多可以同时发起3977 个Socket 连接。我们可以修改如下注册表来调整这个动态端口的范围[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]MaxUserPort = 5000 (Default = 5000, Max = 65534)最大TCB 数量系统为每个TCP 连接分配一个TCP 控制块(TCP control block or TCB),这个控制块用于缓存TCP连接的一些参数,每个TCB需要分配 0.5 KB的pagepool 和 0.5KB 的Non-pagepool,也就说,每个TCP连接会占用 1KB 的系统内存。系统的最大TCB数量由如下注册表设置决定[HKEY_LOCAL_MACHINE System CurrentControlSet Services Tcpip Parameters]MaxFreeTcbs = 2000 (Default = RAM dependent, but usual Pro = 1000, Srv=2000)非Server版本,MaxFreeTcbs 的默认值为1000 (64M 以上物理内存)Server 版本,这个的默认值为 2000。也就是说,默认情况下,Server 版本最多同时可以建立并保持2000个TCP 连接。最大TCB Hash table 数量TCB 是通过Hash table 来管理的,下面注册表设置决定了这个Hash table 的大小HKEY_LOCAL_MACHINE System CurrentControlSet services Tcpip Parameters]MaxHashTableSize = 512 (Default = 512, Range = 64-65536)这个值指明分配 pagepool 内存的数量,也就是说,如果MaxFreeTcbs = 1000 , 则 pagepool 的内存数量为 500KB那么 MaxHashTableSize 应大于 500 才行。这个数量越大,则Hash table 的冗余度就越高,每次分配和查找 TCP连接用时就越少。这个值必须是2的幂,且最大为65536.MaxUserPort = 65534 (Decimal)MaxHashTableSize = 65536 (Decimal)MaxFreeTcbs = 16000 (Decimal) 这里我们可以看到 MaxHashTableSize 被配置为比MaxFreeTcbs 大4倍,这样可以大大增加TCP建立的速度。

100m宽带TCP连接数
没有限制。 运营商没有限制tcp连接数。只有带宽限制。物理设备是不存在链接数限制的。只有带宽限制。如果带宽满载,那么一部分可以缓存,如果缓存也满了,那这个数据报文只能被丢弃了。只要带宽没有占满就不会被限制。

一个TCP端口的最大连接数是多少
端口号的理论值范围是从0到65535,公认的是0-1023 ,注册端口是1024-49152,还有随机动态端口是49152-65535,共是65536个端口。 计算机常用端口 HTTP:80:www服务。 DHCP:服务器端的端口号是67 DHCP:客户机端的端口号是68 POP3:POP3仅仅是接...

本文由 在线网速测试 整理编辑,转载请注明出处。