怎样设置TCP的连接数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样设置TCP的连接数相关的知识,希望对你有一定的参考价值。

Windows 下单机的TCP连接数有多个参数共同决定
最大TCP连接数
[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.
参考技术A 为了防范蠕虫病毒的传播和攻击,Windows XP SP2将并发线程最多限制为10个。SP2利用Messages动态链接库,来实时监控每个进程的并发线程数目,一旦它发现某进程的线程数超过10个,就会屏蔽掉部分线程。SP2这样做,虽然可以防范震荡波类型的蠕虫病毒,加强系统安全,但是也带了一些负面影响,例如当你使用BT、P2P或FlashGet软件下载时,部分线程将被屏蔽掉,因此下载速度会变得很慢。为此,你可以采取以下对策,来突破TCP并发连接数,从而提高SP2的多线程访问速度。

注意限制仅仅在Windows XP SP2下,更高版本系统不会受限;

一、注册表修改法的误区

为了突破SP2对TCP并发连接数的限制,网上曾经流传过一种修改注册表的方法,操作步骤如下:
单击“开始”/运行,输入Regedit打开注册表,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,修改的“TcpNumConnections”的键值,将之由10改为250,即设置TCP最大并发连接数为250。

经过实际测试,我们发现该方法看起来有效,但实质上并不能突破并发连接数限制,提高SP2的多线程访问速度。因为SP2对线程数目的控制,是通过“Tcpip.sys”这个系统文件来实现的,并不是通过注册表实现的,因此,该方法不能增加SP2的TCP并发连接数。

二、使用工具来替换Tcpip.sys

为了突破SP2的TCP并发连接数限制,正确地方法是修改Windows XP SP2的系统文件Tcpip.sys。Tcpip.sys是Windows XP SP2重要的系统文件,位于“C:\Windows\system32\drivers目录下。该文件由于平时受到系统保护,所以正常情况下你是无法替换它的,必须在安全模式或纯DOS模式下才能替换,建议你使用以下专门工具、来替换“Tcpip.sys”文件,操作步骤如下:

从网上下载替换工具(仅为30KB),用它来修改系统文件Tcpip.sys最大安全并发连接限制;然后备份一下C:\Windows\system32\drivers\Tcpip.sys文件。
接下来,双击打开下载文件ZIP压缩包,运行其中的替换工具EvID4226Patch.exe,随之将弹出一个命令行提示符窗口,首先显示Windows当前的Tcpip.sys文件版本,以及并发连接的限制数值(默认为10);接着询问你是否将连接数限制在50(如下图1),你可以选择“Yes/No/Change”,如果你输入“Y”,则会将并发连接数改为“50”,如果想改为其他数(例如250),可以在提示符后输入“c”,然后输入最大的并发连接数(例如250)回车,最后在提示符下输入“Y”并回车,这样就替换了Tcpip.sys文件;Tcpip.sys文件被替换后,随之会弹出系统文件保护对话框,你可以点击“取消”按钮,然后点击“是”按钮,重新启动后,Tcpip.sys文件的替换就大功告成了!

现在你的最大并发连接数已超过10个,达到了250个,因此Windows XP SP2的多线程访问速度得到了提升,当你用FlashGet、BT等多线程下载时,就不会感到网络带宽的限制了。

三、DOS下修改Tcpip.sys文件

以上替换程序EvID4226Patch.exe也可以在DOS下使用,方法是:首先把EvID4226Patch.exe拷贝到C盘根目录下;然后再进入DOS模式,进入C盘根目录,输入命令EvID4226Patch/L=$n$/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可修改Tcpip.sys文件。

注意:以上$n$为你要设置的最大安全连接数,假如要把最大并发连接数设置为250个线程,那么输入命令EvID4226Patch/L=150/w=C:\WINDOWS\system32\drivers/L=tcpip.sys即可。

四、使用比特精灵附带的工具

比特精灵附带的工具“TCP/IP连接数破解补丁”也可以替换Tcpip.sys,突破SP2的TCP并发连接数限制。

从网上下载比特精灵(BitSpirit)V2.7.2.225简体中文正式版,然后双击下载文件进行安装。你可以选择安装哪些组件(下图2),应该安装“用于Windows XP SP2的TCP/IP连接数破解补丁”,安装结束后,XP开始菜单中就会有BitSpirit程序组,单击其中的“XP SP2连接数破解补丁”,即可修改Tcpip.sys文件。

单击“XP SP2连接数破解补丁”,弹出该软件的界面,界面中列出了当前Tcpip.sys的版本、及最大并发连接数(右图3),你可以在“TCP/IP Linitation”输入一个数,来设置最大并发连接数,例如输入250,然后按“Apply”按钮,重启系统后,你的SP2最大并发连接数就改为了250。

以上几种方法虽然提高了Windows XP SP2的多线程访问速度,但却降低了SP2的安全性能,如果你的电脑感染了病毒和木马,过多地启用新线程,会加速病毒和木马地蔓延,因此你在追求网络下载速度的同时,也要注意网络安全。建议你及时安装升级杀毒软件和防火墙,如果是普通用户,可以利用上面的方法,将TCP最大并发连接数设置为5~8,BT用户可以设置为160~400。

redis客户端连接,最大连接数查询与设置

##redis客户端连接数

 redis通过监听一个TCP端口或socket的方式接收来自客户端的连接,
当与客户端建立连接后,redis内部会进行如下操作:
(1)客户端socket会被设置为非阻塞模式,因为redis在网络时间处理上采用的是非阻塞多路复用模型;
(2)然后为这个socket设置TCP_NODELAY属性,禁用Nagle算法;
(3)然后创建一个可读的文件事件用于监听这个客户端socket的数据发送。

##redis连接数与最大连接数

1.查看

技术图片
方法1:在redis-cli命令行使用:info clients可以查看当前的redis连接数

127.0.0.1:6379> info clients
#Clients
connected_clients:621
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
127.0.0.1:6379>

方法2:config get maxclients 可以查询redis允许的最大连接数

127.0.0.1:6379> CONFIG GET maxclients
    ##1) "maxclients"
    ##2) "10000"
127.0.0.1:6379>
技术图片

 2.设置、修改

技术图片
1. 在2.6之后版本,可以修改最大连接数配置,默认10000,可以在redis.conf配置文件中修改
...
# maxclients 10000
...

2.config set maxclients num 可以设置redis允许的最大连接数

127.0.0.1:6379> CONFIG set maxclients 10
OK
127.0.0.1:6379>


3.启动redis.service服务时加参数--maxclients 100000来设置最大连接数限制

redis-server --maxclients 100000 -f /etc/redis.conf
技术图片

 

##redis-cli命令控制行中获取客户端信息命令

CLIENT LIST获取客户端列表

CLIENT SETNAME    设置当前连接点redis的名称

CLIENT GETNAME    查看当前连接的名称

CLIENT KILL ip:port    杀死指定连接

技术图片
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name= age=7 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
CLIENT SETNAME js
    ##OK
CLIENT LIST
    ##id=3 addr=127.0.0.1:36588 fd=5 name=js age=37 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
CLIENT GETNAME
    ##"js"
CLIENT KILL id 3
    ##(integer) 0
技术图片

 

参考:http://blog.51cto.com/jschu/1851998

以上是关于怎样设置TCP的连接数的主要内容,如果未能解决你的问题,请参考以下文章

怎样修改windows服务器中最大的tcp连接数?

怎样修改windows服务器中最大的tcp连接数?

在windows2003 下,怎样使用命令来统计 tcp 连接状态数

设置内核tcp连接数

oracle老提示限制连接数,怎样让oracle无限连接

【TCP】单台服务器并发 TCP 连接数到底可以有多少 ?