Windows下TCP连接设置

来源:互联网 发布:python 函数执行一次 编辑:程序博客网 时间:2024/05/29 17:00
 
 

如果某个 TCP 对等方发起了一个 TCP连接终止且该连接终止已经完成,该 TCP 连接将进入 TIME WAIT 状态。一旦到达了 TIME WAIT 状态,TCP必须等待报文段最大生存时间 (MSL) 的两倍后才能创建一个具有相同的套接字地址集的连接。套接字地址集包括源和目标 IP 地址与源和目标TCP 端口的组合。MSL 是 TCP 段可以在一个网络上存在的最长时间,其推荐值是 120秒。这一延迟可以防止使用相同的套接字地址集的新连接的 TCP 段与旧连接的重复 TCP 段相混淆。

处于 TIME WAIT 状态的连接中的 TCP 端口被视为可用端口,可分配给应用程序使用。这会导致出现以下情况:

1.

应用程序请求任意可用的 TCP 端口。

2.

TCP/IP 分配一个 TCP 端口供应用程序套接字使用。

3.

应用程序尝试使用特定的目标 IP 地址打开一个套接字。

4.

应用程序建立一个 TCP 连接并发送数据。

5.

应用程序终止该 TCP 连接。

6.

TCP/IP 在两倍于 MSL 的时间内将应用程序的 TCP 连接置于 TIME WAIT 状态。

7.

同一应用程序请求另一个可用的 TCP 端口。

8.

TCP/IP 分配一个 TCP 端口供应用程序套接字使用。因为处于 TIME WAIT 状态的连接所用的端口被视为开放的,所以它可以被选作下一个将分配给发出请求的应用程序的端口。

9.

假定 TCP/IP 分配了同一个 TCP 端口号,应用程序试图打开一个具有相同的目标 IP 地址的套接字。

10.

因为该连接与处于 TIME WAIT 状态的连接使用了相同的套接字地址集,所以 TCP/IP 会向应用程序显示一个错误。

您可以通过以下方法来减少这种情况:

将HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters下的 MaxFreeTWTcbs(类型为 REG_DWORD)注册表项设置为一个较低值。MaxFreeTWTcbs 的值控制着可以处于TIME WAIT 状态的连接的数目。一旦超出了此数目,最旧的连接将被自动从 TIME WAIT 状态中删除。

将HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters下的 TcpTimedWaitDelay(类型为 REG_DWORD)注册表项设置为一个较低值。TcpTimedWaitDelay的值确定了一个连接可以处于 TIME WAIT 状态的时间长度。

不过,减小这些注册表项的值违反了 TCP 和 MSL 的原始设计。

有关这些注册表项的详细信息,请参见 Microsoft Windows Server 2003 TCP/IP Implementation Details(Microsoft Windows Server 2003 TCP/IP 实施细节)。

为阻止应用程序创建与处于 TIME WAIT 状态的连接具有相同的套接字地址集的连接,Windows Server 2003 SP1 中的TCP/IP 实施了智能 TCP 端口分配算法。当应用程序请求任意可用的 TCP 端口时,TCP/IP 首先尝试查找与处于 TIME WAIT状态的连接不对应的可用端口。如果找不到这样的端口,它便选择任意可用的端口。

这一新功能减小了应用程序在连接到同一目标时被分配一个处于 TIME WAIT 状态的 TCP 端口的可能性。您不再需要修改 MaxFreeTWTcbs 和 TcpTimedWaitDelay 两个注册表项的值。

 

 

 

 

 

 

 

 

linux下:在 /proc/sys/net/ipv4/tcp_tw_reuse文件里 可以配置

 

原创粉丝点击