TCP的Windows计时器使用一个称为的时间单位 重传超时 (RTO)基于估计 往返时间 (或RTT)发送方和接收方之间,以及此往返时间的差异。此计时器的行为在。中指定 RFC 6298 。
有关更多信息,请参阅Wikipedia文章 传输控制协议 。
它在Windows中的工作方式如下:
- 首先建立估计的RTO
- 发送TCP消息,我们等待ACK(确认)数据包
- 如果ACK尚未到达,我们将等待时间加倍并返回步骤2
- 如果接收到ACK,则计算新的RTO
- 如果从未收到ACK,则连接中止,错误为WSAECONNABORTED。
Windows使用此协议的两个注册表参数,如本Microsoft文章中所述
如何修改TCP / IP最大重传超时 。
TcpMaxDataRetransmissions的
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
Value Name: TcpMaxDataRetransmissions
Data Type: REG_DWORD - Number
Valid Range: 0 - 0xFFFFFFFF
Default: 5
说明:
此参数控制TCP重新传输的次数
中止之前的个别数据段(非连接段)
连接。重传超时每次加倍
连接上的连续重传。响应时重置
恢复。基本超时值由动态确定
测量连接的往返时间。
TCPInitialRtt
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID for Adapter
Value Name: TCPInitialRtt
Data Type: REG_DWORD
Valid Range: 300-65535 (milliseconds in decimal)
Default: 0xBB8 (3000 milliseconds expressed in hexadecimal)
描述:
此参数控制初始重新传输超时
TCP在每个新连接上使用。它适用于连接
请求(SYN)以及在每个数据段上发送的第一个数据段
连接。例如,“5000十进制”的值数据设置
初始重传时间为五秒。
注意:您只能为初始超时增加该值。
不支持减小该值。
虽然TCPInitialRtt以初始超时开始
3秒,它将被平滑到更多
正确传输数据包时的合理值。
例如,这是如何工作的,
如果我们采用默认值3秒RTO和5次重试,
总等待时间将是:
- 第一次超时时间:3秒
- 第二次超时:6秒
- 第三次超时:12秒
- 第四次超时:24秒
- 第五次和最后一次超时:48秒
在连接中止之前,总等待时间为93秒。
在大多数情况下,如果连接已正常工作,则超时
将会少得多。