5.31 调整动态TCP端口号的上限
http://scz.617.cn/windows/200605091159.txt
Q:
4台Windows客户机访问一台Linux服务器,服务器入连接数可以支持15000以上,平均 每台客户机出连接数大致在4000左右,之后客户机再connect()就会报10055错误:
An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
A: flier@nsfocus
参看:
http://support.microsoft.com/kb/q196271
动态TCP端口号的上限缺省是5000,动态TCP端口号的范围缺省是[1024,5000],这是 一个闭区间。在XP SP1上如果启用了"SSDP Discovery Service",5000/TCP将被这个 服务占用,则动态TCP端口号上限下降成4999。可以用一个多线程的端口扫描程序大 量创建TCP连接,再用"netstat -na"观察动态TCP端口号的上限。
有一个注册表项用于控制动态TCP端口号上限:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters] "MaxUserPort"=dword:0000fffe
该注册表项有效范围是[5000,65534],缺省是5000。如果注册表项不在有效范围内, 将自动选用最接近的有效值(5000或65534),不会引起别的麻烦。最终动态TCP端口号 的范围是闭区间[1024,MaxUserPort]。
D: scz@nsfocus 2007-04-11 21:00
XP SP2的"SSDP Discovery Service"不再使用5000/TCP,换成了2869/TCP。
检查PFW例外设置中的"UPnP框架"。默认情况下2869/TCP并未侦听中,PFW默认开放了 这个端口,但只允许子网内IP访问该端口。注意一些潜在的安全问题。