接收器将TCP窗口大小限制为64,512


34

事实(请指出任何虚假陈述):

  1. 我在两个相距80毫秒的站点之间建立了100 Mbps的连接

  2. 这是一个漫长的胖连接,可以从较大的TCP窗口大小(可能高达100 Mbps * 0.08秒= 1,000,000字节)中受益

  3. 两台机器都运行Windows Server2012。“接收窗口自动调整级别”在这两者上都是正常的。两者均禁用“窗口缩放试探法”。

  4. 我在一侧运行“ iperf -s”,在另一侧运行“ iperf -c”。传输速度为5 Mbps。我得到相同的结果去另一个方向。

  5. 双方都在其SYN中宣传了对TCP滑动窗口的支持。

  6. 在整个运行过程中,接收器请求的TCP窗口大小为64,512字节(0xFC00),TCP窗口比例值为“ no shift”(0x000)。

  7. 网络能够处理更大的窗口大小(请参见下面的序列图)

  8. 接收器使窗口小于网络支持的范围

  9. 此连接在IPSEC VPN中发生。隧道接口的MTU在两个方向上均减小到1400字节。

  • 为什么接收器使窗口小?

无答案

  • 网络坏了

    在同一网络上运行的Linux机器将TCP窗口打开到1.5兆字节,并以6倍的带宽传输数据

  • 启用窗口缩放启发式

    禁用窗口缩放试探法(请参见下面的“ netsh interface tcp show heuristics”的输出)

  • 接收窗口自动调整级别不正常

    接收窗口自动调整级别是正常的(请参见下面的“ netsh接口tcp show global”输出)

  • 这只是在ESXi中的虚拟机上无法正常工作

    在同一主机上运行的虚拟linux计算机上,我的性能提高了6倍。


更新1 PDT 2015年6月12日下午4:30

我通过将linux放在连接的一侧来修改了测试。当然,当linux将数据发送到Windows Server 2012时,Windows提供的TCP接收窗口太小(64,512字节)。

当我从Windows向Linux发送数据时,Linux提供了足够大的TCP接收窗口(1,365,120字节)。但是,Windows将发送中的最大发送限制为约60,000字节。


2015年6月13日更新,太平洋夏令时间下午3:00

离根本原因更近了一步。在我的设置中,既未设置SO_SNDBUF也未设置SO_RCVBUF(通过iperf)。这些是有效限制接收窗口的发送和接收缓冲区。如果未指定这些值,则Windows Server 2012将提供默认值64 kB。现在的问题是:

  • 如果未指定,则Windows Server 2012为什么不动态增加SO_SNDBUF / SO_RCVBUF来容纳MSDN中所述的长胖管道?

非答案

  • “ netsh winsock显示自动调整”已禁用

    已启用。


2015年8月24日更新,太平洋夏令时间下午4:00

netsh显然已被Set-NetTCPSetting和family取代。将Get-NetTCPSetting与Get-NetTCPConnection结合使用可显示我在“ Internet”机制下运行,该机制为我提供了以下设置:

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

发件人TCP设置

PS C:\Users\acs> netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : disabled
NetDMA State                        : disabled
Direct Cache Access (DCA)           : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : enabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Receive Segment Coalescing State    : enabled

PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : disabled
Qualifying Destination Threshold  : 3
Profile type unknown              : normal
Profile type public               : normal
Profile type private              : normal
Profile type domain               : normal

PS C:\Users\acs> Get-NetTCPSetting

SettingName                   : Automatic
MinRto(ms)                    : 
InitialCongestionWindow(MSS)  : 
CongestionProvider            : 
CwndRestart                   : 
DelayedAckTimeout(ms)         : 
MemoryPressureProtection      : 
AutoTuningLevelLocal          : 
AutoTuningLevelGroupPolicy    : 
AutoTuningLevelEffective      : 
EcnCapability                 : 
Timestamps                    : 
InitialRto(ms)                : 
ScalingHeuristics             : 
DynamicPortRangeStartPort     : 
DynamicPortRangeNumberOfPorts : 

SettingName                   : Custom
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Compat
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 2
CongestionProvider            : Default
CwndRestart                   : False
DelayedAckTimeout(ms)         : 200
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Datacenter
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

发件人SYN

No.     Time           Source                Destination           Protocol Length Delta      Sequence number Acknowledgment number Bytes in flight Calculated window size Info
    814 5.036577000    10.10.0.21            10.11.0.1             TCP      66     0.000000000 0               0                                     64512                  49758→5001 [SYN, ECN, CWR] Seq=0 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1

Frame 814: 66 bytes on wire (528 bits), 66 bytes captured (528 bits) on interface 0
Ethernet II, Src: 00:11:22:33:44:55, Dst: aa:bb:cc:dd:ee:ff
Internet Protocol Version 4, Src: 10.10.0.21 (10.10.0.21), Dst: 10.11.0.1 (10.11.0.1)
Transmission Control Protocol, Src Port: 49758 (49758), Dst Port: 5001 (5001), Seq: 0, Len: 0
    Source Port: 49758 (49758)
    Destination Port: 5001 (5001)
    [Stream index: 73]
    [TCP Segment Len: 0]
    Sequence number: 0    (relative sequence number)
    Acknowledgment number: 0
    Header Length: 32 bytes
    .... 0000 1100 0010 = Flags: 0x0c2 (SYN, ECN, CWR)
    Window size value: 64512
    [Calculated window size: 64512]
    Checksum: 0x1451 [validation disabled]
    Urgent pointer: 0
    Options: (12 bytes), Maximum segment size, No-Operation (NOP), Window scale, No-Operation (NOP), No-Operation (NOP), SACK permitted
        Maximum segment size: 1460 bytes
        No-Operation (NOP)
        Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        No-Operation (NOP)
        No-Operation (NOP)
        TCP SACK Permitted Option: True

序列图的发件人角度 在此处输入图片说明

在此处输入图片说明

接收器TCP设置

PS C:\Users\acs> netsh interface tcp show global
Querying active state...

TCP Global Parameters
----------------------------------------------
Receive-Side Scaling State          : enabled
Chimney Offload State               : disabled
NetDMA State                        : disabled
Direct Cache Access (DCA)           : disabled
Receive Window Auto-Tuning Level    : normal
Add-On Congestion Control Provider  : none
ECN Capability                      : enabled
RFC 1323 Timestamps                 : disabled
Initial RTO                         : 3000
Receive Segment Coalescing State    : enabled

PS C:\Users\acs> netsh interface tcp show heuristics
TCP Window Scaling heuristics Parameters
----------------------------------------------
Window Scaling heuristics         : disabled
Qualifying Destination Threshold  : 3
Profile type unknown              : normal
Profile type public               : normal
Profile type private              : normal
Profile type domain               : normal

PS C:\Users\acs> Get-NetTCPSetting

SettingName                   : Automatic
MinRto(ms)                    : 
InitialCongestionWindow(MSS)  : 
CongestionProvider            : 
CwndRestart                   : 
DelayedAckTimeout(ms)         : 
MemoryPressureProtection      : 
AutoTuningLevelLocal          : 
AutoTuningLevelGroupPolicy    : 
AutoTuningLevelEffective      : 
EcnCapability                 : 
Timestamps                    : 
InitialRto(ms)                : 
ScalingHeuristics             : 
DynamicPortRangeStartPort     : 
DynamicPortRangeNumberOfPorts : 

SettingName                   : Custom
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Compat
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 2
CongestionProvider            : Default
CwndRestart                   : False
DelayedAckTimeout(ms)         : 200
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Datacenter
MinRto(ms)                    : 20
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : DCTCP
CwndRestart                   : True
DelayedAckTimeout(ms)         : 10
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

SettingName                   : Internet
MinRto(ms)                    : 300
InitialCongestionWindow(MSS)  : 4
CongestionProvider            : CTCP
CwndRestart                   : False
DelayedAckTimeout(ms)         : 50
MemoryPressureProtection      : Enabled
AutoTuningLevelLocal          : Normal
AutoTuningLevelGroupPolicy    : NotConfigured
AutoTuningLevelEffective      : Local
EcnCapability                 : Enabled
Timestamps                    : Disabled
InitialRto(ms)                : 3000
ScalingHeuristics             : Disabled
DynamicPortRangeStartPort     : 49152
DynamicPortRangeNumberOfPorts : 16384

接收器SYN

No.     Time           Source                Destination           Protocol Length Delta      Sequence number Acknowledgment number Bytes in flight Calculated window size Info
    817 5.110501000    10.11.0.1             10.10.0.21            TCP      70     0.073924000 0               1                                     64512                  5001→49758 [SYN, ACK, ECN] Seq=0 Ack=1 Win=64512 Len=0 MSS=1460 WS=1 SACK_PERM=1 [ETHERNET FRAME CHECK SEQUENCE INCORRECT]

Frame 817: 70 bytes on wire (560 bits), 70 bytes captured (560 bits) on interface 0
Ethernet II, Src: aa:bb:cc:dd:ee:ff, Dst: 00:11:22:33:44:55
Internet Protocol Version 4, Src: 10.11.0.1 (10.11.0.1), Dst: 10.10.0.21 (10.10.0.21)
Transmission Control Protocol, Src Port: 5001 (5001), Dst Port: 49758 (49758), Seq: 0, Ack: 1, Len: 0
    Source Port: 5001 (5001)
    Destination Port: 49758 (49758)
    [Stream index: 73]
    [TCP Segment Len: 0]
    Sequence number: 0    (relative sequence number)
    Acknowledgment number: 1    (relative ack number)
    Header Length: 32 bytes
    .... 0000 0101 0010 = Flags: 0x052 (SYN, ACK, ECN)
    Window size value: 64512
    [Calculated window size: 64512]
    Checksum: 0xb5bb [validation disabled]
    Urgent pointer: 0
    Options: (12 bytes), Maximum segment size, No-Operation (NOP), Window scale, No-Operation (NOP), No-Operation (NOP), SACK permitted
        Maximum segment size: 1460 bytes
        No-Operation (NOP)
        Window scale: 0 (multiply by 1)
            Kind: Window Scale (3)
            Length: 3
            Shift count: 0
            [Multiplier: 1]
        No-Operation (NOP)
        No-Operation (NOP)
        TCP SACK Permitted Option: True
    [SEQ/ACK analysis]

序列图的接收器透视图 在此处输入图片说明 在此处输入图片说明

TCP窗口 在此处输入图片说明


1
您能否为双方添加确切的配置-与软硬件相关的功能(网卡)?
TomTom

1
听起来像是窗口调整受到限制
David Schwartz 2015年

@TomTom两台计算机都是在HP Proliant DL380 G5上运行的ESXi中的VM。虚拟以太网适配器是Intel 82574L。硬件以太网适配器为BCM5719。
克里斯·斯坦科维茨

@David Schwartz的“接收窗口自动调整级别”在两者上都是正常的,并且“窗口缩放试探法”已禁用(请参阅OP中的更新配置)。我认为这表明调优不受限制
克里斯·斯坦科维茨

2
我不认为这个问题是基于观点的,我认为真正的问题是要做出好的回答就需要调试OP的系统/网络,这只能由他来完成,而不能由我们来完成。
彼得说恢复莫妮卡2015年

Answers:


1

我将其视为特定于驱动程序的问题;以我尝试使用TCPChimney的QLogic网络控制器为例。该链接描述了Windows 2008中添加的TCPChimney功能-但我很确定它仍然适用: https //support.microsoft.com/zh-cn/kb/951037

我建议按顺序测试以下内容;每次测试后,请重新启动并查看接收器是否开始按预期方式增加TCP RWIN。

1)在接收计算机上加载网络适配器驱动程序的最新版本。1)在接收计算机上禁用TCPChimney。2)禁用所有“ TCP接收”卸载。这可以在网络适配器属性的“高级”设置(将在其中设置“速度和双工”的同一区域)中找到3)禁用所有“ TCP发送”卸载(也在网络适配器的“高级”属性中)

(与评论“和超过65k的大TCP窗口大小不利于服务器,因为随之而来的是对连接的内存需求增加。单独使用65k可能也不足以使您感到满足。– user303507 2015年8月6日,11:30”),较大的TCP接收Windows并不是对服务器固有的不利影响,在高带宽,高延迟的链接(如Satellite中继)的情况下,较大的RWIN值是必需的,以便“管道中”有更多的TCP数据。 600 Mbps的连接和3000毫秒的延迟;高带宽链接将被限制为大约20 KBps;因为一次只能有65 KB的未确认TCP数据“在管道中”。)


0

对我来说好像是Windows自动调整错误,也许与此有关?https://support.microsoft.com/zh-CN/kb/932170

您是否尝试过使用WskControlSocket手动请求更大的SO_RCVBUF值?


从技术上讲,这些缓冲区与TCP窗口的大小没有关系: stackoverflow.com/questions/14381303/increasing-tcp-window-size
玛丽

Phil:我都在运行Windows Server 2012,因此该链接不适用,但我确实怀疑存在某种错误。我可以请求更大的SO_RCVBUF-这很有帮助-但这并不能帮助我了解损坏的地方(请参阅“更新2”)。
克里斯·斯坦科维茨

玛丽:缓冲区与窗口大小间接相关。网络堆栈将识别较小的缓冲区,因此不会增加窗口大小。我在“更新2”中使用手工描述了这一点。
克里斯·斯坦科维茨

0

使用网络优化器,例如Cisco WAAS或Riverbed。它们可以快速进行本地处理,因此您无需关心服务器设置。在更大的网络中,无论如何您都不会影响服务器设置,因为它们是其他团队或已外包。


超过65k的较大TCP窗口大小对服务器不利,因为连接的内存需求增加。仅65k可能还不足以使您感到幸福。
2015年

user303507:我想了解Windows Server 2012网络堆栈所发生的情况。我对掩盖网络设备的问题不感兴趣。但是我同意购买网络设备或将我的办公室更靠近在一起可以解决此问题。
克里斯·斯坦科维茨

user303507的注释可能在正确的轨道上-我想知道是否由于内存问题导致窗口基于某些不可见的启发式或注册表设置来限制窗口大小。假设您对文档是正确的,那不是适当的行为。
丹·普里兹

0

这是我发现的一些信息,可能是您正在寻找的答案。请注意,提及禁用模式下的64kb限制可能是未记录的普通模式下类似限制的线索。

尝试为天文自动调整级别启用“实验”模式。

设置Windows自动调整级别时,可能的设置如下:

  • 正常:默认值,允许接收窗口增长以适应大多数条件
  • 禁用:对tcp接收窗口使用固定值。将其限制为64KB(限制为65535)。
  • 高度限制:非常保守地允许接收窗口超过其默认值
  • 受限:tcp接收窗口的增长受到限制,超出了其默认值
  • 实验性:允许接收窗口增长以适应极端情况(不建议这样做,它可能会降低普通情况下的性能,仅用于研究目的。它的RWIN值超过16 MB)

这将使意义,但OP显示他的上限为64K,甚至没有在1024
吉姆乙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.