Windows 2000 和 Windows Server 2003 TCP 功能的说明

Support for Windows Server 2003 ended on July 14, 2015

Microsoft ended support for Windows Server 2003 on July 14, 2015. This change has affected your software updates and security options. Learn what this means for you and how to stay protected.

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 224829
概要
本文介绍以下的 TCP 功能,在 Microsoft Windows 2000 和 Microsoft Windows Server 2003 中:
  • TCP 窗口大小
  • 现在支持的 TCP 选项
  • Windows 缩放的 RFC 1323
  • 时间戳的 RFC 1323
  • 防止换行的序列号 (PAWS)
  • 选择性确认 (SACKS)-RFC 2018
  • TCP 重新传输行为和快速传
TCP 功能可以通过更改注册表项来进行更改。
更多信息
重要此分区、 方法,或任务包含告诉您如何修改注册表的步骤。但是,如果注册表修改不当可能会出现严重问题。因此,请确保您仔细按照这些步骤。附加的保护注册表之前先备份您对其进行修改。然后,您可以在出现问题时还原注册表。有关如何备份和还原注册表的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
322756如何备份和还原在 Windows 注册表

TCP 窗口大小

TCP 接收窗口大小为量的接收 (以字节为单位) 在连接期间可以缓冲的数据。它必须等待确认和 $ 窗口更新从接收主机之前,发送主机可以发送仅该数量的数据。Windows TCP/IP 堆栈旨在自行本身调整在大多数的环境中,并使用与早期版本相比更大的默认窗口大小。

而不是使用硬编码默认的接收窗口大小,TCP 调整到的最大段大小 (MSS) 是协商连接在安装过程中的偶数增量。调整接收窗口将 MSS 的偶数增量增加大 TCP 段的大容量数据传输过程中使用的百分比。

按以下方式确定接收窗口大小:
  1. 第一个连接请求发送到远程主机通告接收窗口大小为 16k (16,384 字节为单位)。
  2. 在建立连接时接收窗口大小是向上舍入到在 MSS 的偶数增量。
  3. 窗口大小将调整为 4 次该 MSS,以最大大小为 64 的 K,除非使用缩放选项 (RFC 1323) 窗口。
注意请参阅"windows 缩放比例"一节。

对于以太网连接窗口大小通常将设置为 17,520 字节 (16k 舍入多达 12 个 1460年字节段)。当支持扩展的 TCP 头选项,如选择性确认 (SACKS) 和时间戳的计算机建立连接时,可能会降低窗口大小。这两个选项在 TCP 标头大小增加到超过 20 个字节这会导致数据所需的空间更少。

在早期版本的 Windows NT,窗口大小的以太网连接,8,760 的字节或 $ 六个 1460年字节段。

若要设置为特定值的接收窗口大小,将 TcpWindowSize 值添加到该特定于您的 Windows 版本的注册表子项中。 若要这样做,请按照下列步骤操作:
  1. 单击 开始、 单击 运行,键入 注册表编辑器,然后单击 确定
  2. 展开到您的 Windows 版本的特定注册表子项:
    • 对于 Windows 2000 展开以下子项:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
    • 对于 Windows Server 2003 中,展开以下子项:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  3. 编辑 菜单上指向 新建,然后单击 DWORD 值
  4. 新值 框和 thne 类型 TcpWindowSize 按 Enter 键
  5. 编辑 菜单上,单击 修改
  6. 数值数据 框中键入所需的窗口大小。

    注意。窗口大小的有效范围是 0 0x3FFFC000 十六进制。
此值不存在默认情况下。当您添加 TcpWindowSize 值时,它将替代上面讨论的默认窗口大小算法。

注意此外可以将 TcpWindowSize 添加到窗口的大小为所有接口的全局设置参数键。

现在支持的 TCP 选项

在过去使用 TCP 选项主要用于协商最大段大小。在 Windows 中,窗口缩放、 时间戳和选择性 ACK.使用 TCP 选项

有两种类型的 TCP 选项:
  1. 单字节用来指明特定选项类型的 TCP 选项。
  2. 多个字节的选项类型、 一个选项的长度和一系列选项八位字节组成的 TCP 选项。
下面的列表显示了每个 TCP 选项类型、 长度、 名称,和说明。
类型: 0
长度: 1
选项: 选项列表的结尾
说明: 这使用时填充所需的最后一个的 TCP 选项。

类型: 1
长度: 1
无操作选项:
说明: 这使用时需要填充,并遵循同一数据包内的更多的 TCP 选项。

类型: 2
长度: 4
选项: 最大段大小
说明: 这表明可以在网络上发送一个 TCP 段的最大大小。

类型: 3
长度: 3
选项: 窗口缩放选项
说明: 标识使用窗口大小大于 64k 时要使用缩放系数。

类型: 8
长度: 10
选项: 时间戳选项
说明: 用于帮助计算双向时间 (RTT) 传输的数据包。

类型: 4
长度: 2
选项: TCP SACK 允许
说明: 提示允许选择性确认其他主机。

类型: 5
长度: 不同而不同
选项: TCP SACK 选项
说明: 使用的主机确定还是接收到的无序的数据包。

缩放的 Windows

更有效地使用高带宽网络,可能使用更大的 TCP 窗口大小。TCP 窗口大小字段控制数据的流,并限制为 2 的字节或窗口大小为 65,535 个字节。

由于无法扩展大小字段,使用一个刻度因子。TCP 窗口缩放是用来增加 65,535 个字节的最大窗口大小,以 1 千兆字节的选项。

只能在 TCP 三向握手的过程中使用窗口缩放选项。窗口的缩放值表示左移 16 位窗口的大小字段的位数。可以将窗口缩放值从 0 (没有移) 设置为 14。

若要计算,则返回 true 窗口大小,乘以窗口大小 2 ^ S 其中 S 是缩放值。
例如:
如果窗口大小为 65,535 字节的窗口缩放因子为 3。
真正的窗口的大小 = 65535 * 2 ^3
真正的窗口的大小 = 524280
下面的网络监视器跟踪显示了如何使用窗口缩放比例选项:
TCP:....s。 len:0、 seq:725163-725163,ack:0、 赢: 65535、 src:1217 dst:139(NBT Session)
TCP: 源端口 = 0x04C1
TCP: 目标端口 = NETBIOS 会话服务
TCP: 序号 = 725163 (0xB10AB)
TCP: 确认号 = 0 (0x0)
TCP: 数据偏移量 = 44 (0x2C)
TCP: 保留 = 0 (0x0000)
+ TCP: 标志 = 0x02:....s。
TCP: 窗口 = 65535 (0xFFFF)
TCP: 校验和 = 0x8565
TCP: 紧急指针 = 0 (0x0)
TCP: 选项
+ TCP: 最大段大小选项
TCP: 选项 Nop = 1 (0x1)
TCP: 窗口缩放选项
TCP: 选项类型 = 窗口缩放
TCP: 选项长度 = 3 (0x3)
TCP: 窗口缩放 = 3 (0x3)

TCP: 选项 Nop = 1 (0x1)
TCP: 选项 Nop = 1 (0x1)
+ TCP: 时间戳选项
TCP: 选项 Nop = 1 (0x1)
TCP: 选项 Nop = 1 (0x1)
+ TCP: SACK 允许选项
值得注意的是实际的三向握手中使用的窗口大小不是按比例缩放窗口大小的。这是每个 RFC 1323 节 2.2,"一个 SYN 中的窗口字段 (例如对于一个 [SYN] 或 [SYN,ACK]) 本身段永远不会按比例缩放"

这意味着,第一个数据数据包发送后三向握手实际窗口大小。如果有一个刻度因子总是使用 65,535 个字节的初始窗口大小。窗口大小然后乘以 3 次握手中标识的缩放系数。下表表示缩放因子边界的各种窗口大小。

比例因子缩放值初始窗口缩放窗口
0165535 或更少65535 或更少
1265535131,070
2465535262,140
3865535524,280
416655351,048,560
532655352,097,120
664655354,194,240
7128655358,388,480
82566553516,776,960
95126553533,553,920
1010246553567,107,840
11204865535134,215,680
12409665535268,431,360
13819265535536,862,720
1416384655351,073,725,440

例如:

如果在大小窗口注册表 269000000 (269 M) 作为输入十进制,在三向握手期间比例因子为 13,因为 12 的一个刻度因子只允许一个窗口的大小最多 268,431,360 字节 (268 M)。

在此示例中的初始窗口大小将按如下进行计算:
使用窗口缩放因子为 13 的 65,535 个字节。
真正的窗口的大小 = 65535 * 2 ^13
真正的窗口的大小 = 536,862,720
当窗口大小的值添加到注册表的大小大于默认值时则 Windows 将尝试使用适应新的窗口大小的比例值。

可以将以下注册表项中的 Tcp1323Opts 值添加到控制缩放窗口和时间戳:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters
  1. 在工具栏上单击 开始,单击 运行,然后键入 注册表编辑器 以启动注册表编辑器。
  2. 在注册表编辑器中单击 编辑,指向 新建,然后单击 DWORD 值
  3. 新值 框中键入 Tcp1323Opts、 按 ENTER,然后在 编辑 菜单上单击 修改注意有效范围是 0,1,2 或 3 的位置:
0 (禁用 RFC 1323 选项)
1 (只启用的窗口缩放)
2 (只启用了时间戳)
3 (启用这两个选项)
该注册表项控制 RFC 1323 时间戳和缩放选项窗口。时间戳和窗口缩放默认情况下会启用,但可以使用标志位进行操作。位 0 控件窗口缩放比例和位 1 控件时间戳。

时间戳

以前,TCP/IP 堆栈使用一个示例,每个计算往返时间 (RTT) 发送的数据的窗口。确认已收到之前发送的数据包时,已设置计时器 (传计时器)。例如对于如果窗口大小是 64,240 字节数 (44 完整段) 上的以太网网络,每个 44 数据包之一未用于重新计算的往返行程时间。65,535 个字节的一个最大窗口大小与此采样率就已足够。使用缩放窗口,和 $ 最大窗口大小为 1 千兆字节此 RTT 采样速率是不够的。

TCP 时间戳选项可以现在是设置为将其用于以执行操作 (如 PAWS 复选的 RTT 计算堆栈,认为适当段 (数据和确认) 等。使用此数据 RTT 可以准确地计算与较大的窗口大小。RTT 用于计算重传间隔。精确的 RTT 和重新传输超时是所需的最佳吞吐量。

当 TCP 时间戳用于 TCP 会话中时,该会话的原始发件人在 TCP 三种方法同步 (SYN 数据包) 的第一个数据包发送选项。任意一侧然后可以使用 TCP 选项,在会话期间。

TCP 时间戳选项 (TSopt):

类型 = 8长度 = 10TS 值 (Tsval)TS 回显回复 (Tsecr)
1 个字节1 个字节4 个字节4 个字节

在时间戳选项字段中查看网络监视器跟踪通过展开 TCP 选项字段,如下所示:
TCP: 时间戳选项
TCP: 选项类型 = 时间戳
TCP: 选项长度 = 10 (0xA)
TCP: 时间戳 = 2525186 (0x268802)
TCP: 答复时间戳 = 1823192 (0x1BD1D8)

防止换行的序列号 (PAWS)

TCP 序列号字段仅限于 32 的位的限制可用的序列号数。高容量的网络和大型数据传送,就可以自动换行序列号之前的数据包通过网络传输。如果在第二个 (Gbps) 网络每一个 1 Giga 字节上发送的数据,序列号可能在短短 34 秒换行。如果延迟的数据包不同的数据包可能潜在地存在具有相同的序列号。若要不必重复序列号的混淆 TCP 时间戳被用作扩展序列号。 数据包具有当前和进度的时间戳。旧的数据包都有一个较早的时间戳,并将被丢弃。

选择性确认 (SACKs)

Windows 引入了对称为有选择的确认或 $ SACK 一性能功能的支持。SACK 是特别重要的连接的使用较大的 TCP 窗口大小。才能 SACK,一个接收器可能仅确认已经被接收的连续数据流的最新的序列号或接收窗口的"左边的缘"。启用 SACK,与接收方将继续使用确认接收窗口的左边的缘的 ACK 数,但它也可以分别确认收到的数据的其他块。SACK 使用 TCP 的标头选项,如下所示。

SACK 使用两种类型的 TCP 选项。

TCP Sack-Permitted 选项仅用于在中 SYN 数据包 (在 TCP 连接建立过程中) 来表示它可以执行选择性 ACK.

第二个的 TCP 选项 TCP Sack 选项,包含一个或多个数据块的确认。使用序列号,开始和末尾的块的数据标识的数据块。这也是数据块的左和右边缘。

类型 4 TCP Sack-Permitted 选项,种类 5,是 TCP Sack 选择。长度为此 TCP 选项的长度以字节为单位)。

Tcp Sack 允许:

类型 = 4长度 = 2
1 个字节1 个字节

Tcp SACK 选项:

类型 = 5长度 = 变量
1 个字节第一个块的右边缘的第一个块的左侧的边缘
...
左边的缘 Nth 阻止到第 n 个块的右边缘

使用 SACK 启用 (默认),可以删除一个数据包或一系列的数据包,和接收方会通知发件人收到哪些数据以及数据中可能有"漏洞"的位置。重新发件人可以然后有选择地传输没有已成功接收的数据块的一次重新传输丢失的数据。SACK 是由 SackOpts 注册表参数来控制的。

可以控制的选择性确认使用编辑 SackOpts 值在以下注册表项中:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  1. 在工具栏上单击 开始,单击 运行,然后键入 注册表编辑器 以启动注册表编辑器。
  2. 查找并单击上面的项在注册表编辑器中,然后单击 编辑 菜单上的 修改
  3. 数值数据 框中键入所需的值。
: 的有效的二进制值是 0 或 1,则默认值为 1。 启用选择性确认 (SACK-RFC 2018) 支持此参数控制。

下面的网络监视器跟踪阐释了确认所有数据,最大可达序列号 54857341,再加上数据的序列号 54858789 54861685 主机。丢失的数据是从 54857341 54858788。
TCP: A....、 len:0、 seq:925104-925104,ack:54857341、 赢: 32722、 src:1242 dst:139
TCP: 源端口 = 0x04DA
TCP: 目标端口 = NETBIOS 会话服务
TCP: 序号 = 925104 (0xE1DB0)
TCP: 确认号 = 54857341 (0x3450E7D)
TCP: 数据偏移量 = 44 (0x2C)
TCP: 保留 = 0 (0x0000)
+ TCP: 标志 = 0x10: A....
TCP: 窗口 = 32722 (0x7FD2)
TCP: 校验和 = 0x4A72
TCP: 紧急指针 = 0 (0x0)
TCP: 选项
TCP: 选项 Nop = 1 (0x1)
TCP: 选项 Nop = 1 (0x1)
+ TCP: 时间戳选项
TCP: 选项 Nop = 1 (0x1)
TCP: 选项 Nop = 1 (0x1)
TCP: SACK 选项
TCP: 选项类型 = 0x05
TCP: 选项长度 = 10 (0xA)
TCP: 左块的边缘 = 54858789 (0x3451425)
TCP: 块的右边缘 = 54861685 (0x3451F75)

TCP 重新传输行为和快速重新传输

TCP 重新传输

作为一项检查正常的重新传输行为,TCP 在每个出站段传递为 Internet 协议 (IP) 时将启动重新传输计时器。如果没有确认已收到为给定段中数据计时器到期之前再重新传输该段。

重新传输超时 (RTO) 不断调整,以匹配的连接使用平滑双向时间 (SRTT) 计算,如在 RFC 793 中所述特征。为给定段计时器加倍后该线段的每次重新传输。使用此算法 TCP 调整自身以正常延迟的连接。

快速传

在某些情况下的重新传输计时器过期前,TCP 重新传输数据。最常见的这些发生的原因一种功能称为快速传。当支持快速的接收方重新传输接收序列号超出了当前的预期不同的数据,并很可能删除了某些数据。为了帮助通知此事件的发件人,接收器立即发送 ACK 处理 ACK 数设置为它所那序列号。它将继续执行此操作为每个附加的 TCP 段到达的。当发件人开始接收的确认相同的序列号的确认流时,很可能在一段已被删除。 发件人将立即重新发送该线段的接收方是那,而无需等待重新传输计时器过期。这种优化可以极大地提高了性能,经常丢弃的数据包时。

默认状态下,Windows 重发段如果它收到相同的序列号、 (一个 ACK 和 2 的重复项) 的三个确认和该序列号 lags 当前的不同。这是可控制与 TcpMaxDupAcks 注册表参数。

可以编辑 TcpMaxDupAcks 值在以下注册表项中的,以确认必要启动较快的重新传输的控件:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
  1. 在工具栏上单击 开始,单击 运行,然后键入 注册表编辑器 以启动注册表编辑器。
  2. 查找并单击上面的项在注册表编辑器中,然后单击 编辑 菜单上的 修改
  3. 数值数据 框中键入所需的值。
: 的有效范围是 1-3,默认值为 2。

此参数确定的"快速重新传输"触发重新发送已被删除,在传输过程中在段前,必须为发送的数据的相同的序列号中收到重复确认的数量。

属性

文章 ID:224829 - 上次审阅时间:10/30/2006 21:25:42 - 修订版本: 6.3

Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server, Microsoft Windows 2000 Professional Edition, Microsoft Windows 2000 Datacenter Server, Microsoft Windows Server 2003 Enterprise Edition, Microsoft Windows Server 2003 Standard Edition, Microsoft Windows Server 2003 Datacenter Edition

  • kbmt kbenv kbinfo kbnetwork KB224829 KbMtzh
反馈