受信者はTCPウィンドウサイズを64,512に制限します


34

事実(虚偽の記述を特定してください):

  1. 80ミリ秒離れた2つのサイト間に100 Mbpsの接続があります

  2. これは、おそらく最大100 Mbps * 0.08秒= 1,000,000バイトまでの大きなTCPウィンドウサイズの恩恵を受けることができる長い太った接続です。

  3. 両方のマシンでWindows Server 2012が実行されています。「ウィンドウ自動調整レベルの受信」は両方で正常です。「ウィンドウスケーリングヒューリスティック」は両方で無効になっています。

  4. 一方で「iperf -s」を実行し、もう一方で「iperf -c」を実行しました。転送は5 Mbpsで発生しました。私は同じ結果を別の方向に向かって得ます。

  5. 双方は、SYNでのTCPスライディングウィンドウのサポートをアドバタイズしました。

  6. 受信者は、「no shift」(0x000)のTCPウィンドウスケール値を使用して、全体の実行中に64,512バイト(0xFC00)のTCPウィンドウサイズを要求しました。

  7. ネットワークは、より大きなウィンドウサイズを処理できました(以下のシーケンス図を参照)

  8. 受信機は、ネットワークがサポートするよりもウィンドウを小さくしました

  9. この接続はIPSEC VPN内で発生しています。トンネルインターフェイスのMTUは、両方向で1400バイトに削減されます。

質問

  • 受信機がウィンドウを小さくしているのはなぜですか?

非回答

  • ネットワークが壊れています

    同じネットワークで実行されているLinuxマシンは、TCPウィンドウを1.5メガバイトまで開き、帯域幅の6倍でデータを送信します

  • ウィンドウスケーリングヒューリスティックが有効になっています

    ウィンドウスケーリングヒューリスティックは無効です(以下の「netsh interface tcp show heuristics」の出力を参照)

  • 受信ウィンドウの自動調整レベルは正常ではありません

    受信ウィンドウの自動調整レベルは正常です(以下の「netsh interface tcp show global」の出力を参照)

  • これは、ESXi内の仮想マシンではうまく機能しません。

    同じホストで実行されている仮想Linuxマシンで6倍のパフォーマンスが得られます。


更新 2015年6月12日午後4時30分(PDT)

接続の片側にLinuxを配置することで、テストを変更しました。案の定、LinuxがWindows Server 2012にデータを送信するとき、Windowsは小さすぎるTCP受信ウィンドウ(64,512バイト)を提供します。

WindowsからLinuxにデータを送信すると、Linuxは十分に大きいTCP受信ウィンドウ(1,365,120バイト)を提供します。ただし、Windowsは送信中に最大で最大60,000バイトに送信を制限します。


更新2 2015年6月13日午後3:00 PDT

根本原因により近いステップ。私の設定では、SO_SNDBUFもSO_RCVBUFも(iperfによって)設定されていません。これらは、受信ウィンドウを効果的にバインドする送信および受信バッファーです。これらの値を指定しない場合、Windows Server 2012は64 kBのデフォルト値を提供します。質問は次のとおりです。

質問

  • 指定されていない場合、MSDNで説明されているように、Windows Server 2012がSO_SNDBUF / SO_RCVBUFを動的に増やして長い太いパイプに対応しないのはなぜですか?

無回答

  • 「netsh winsock show autotuning」が無効になっています

    有効になっています。


更新 2015年8月24日午後4時(太平洋夏時間)

netshはSet-NetTCPSettingおよびファミリに置き換えられたようです。Get-NetTCPSettingとGet-NetTCPConnectionを組み合わせると、これらの設定を提供する「インターネット」体制で動作していることがわかります。

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
正確な構成を追加してください-両側に関連するソフトおよびハードウェア(ネットワークカード)?
トムトム

1
ウィンドウチューニングのような音は制限されています。
デビッドシュワルツ

@TomTom両方のマシンは、HP Proliant DL380 G5で実行されているESXi内のVMです。仮想イーサネットアダプターはIntel 82574Lです。ハードウェアイーサネットアダプターはBCM5719です。
クリススタンケビッツ

@David Schwartzの「ウィンドウ自動調整レベルの受信」は両方とも正常で、「ウィンドウスケーリングヒューリスティック」は無効になっています(OPの更新された構成を参照)。これは、チューニングが制限されていないことを示していると思います。
クリススタンケビッツ

2
私はこの質問が意見に基づいているとは思わない、良い答えを出すにはOPのシステム/ネットワークのデバッグが必要であり、私たちではなく彼だけが行うことができるという本当の問題だと思う。
ペテルはモニカを2015

回答:


1

これはドライバー固有の問題だと考えています。私の場合、TCPChimneyを使用しようとしたQLogicネットワークコントローラーを使用しました。このリンクは、Windows 2008で追加されたTCPChimney機能について説明していますが、まだ適用されると確信しています:https ://support.microsoft.com/en-us/kb/951037

以下を順番にテストすることをお勧めします。各テストの後、再起動して、受信者が期待どおりにTCP RWINの増加を開始するかどうかを確認します。

1)受信コンピューターにネットワークアダプターのドライバーの最新バージョンを読み込みます。1)受信側コンピューターでTCPChimneyを無効にします2)すべての「TCP受信」オフロードを無効にします。これは、ネットワークアダプターのプロパティの詳細設定(速度とデュプレックスが設定されるのと同じ領域)にあります3)すべての「TCP送信」オフロードを無効にします(ネットワークアダプターの詳細プロパティでも)

(そして、「65kを超える大きなTCPウィンドウサイズは、サーバーに悪い。接続のメモリ需要が増加するため、65kだけでは十分に満足できないかもしれない。-user303507 15年8月6日11:30に」、大きなTCP受信ウィンドウは、サーバーにとって本質的に悪いものではありません高帯域幅、高遅延リンク(サテライトリレーなど)の場合、より多くのTCPデータが「パイプ内」にあるように、大きなRWIN値が必要です。 3000ミリ秒の遅延を伴う600 Mbps接続、高帯域幅リンクは約20 KBpsに制限されます。一度に「パイプ内」にあるのは、65 KBの未確認TCPデータのみです。


0

私にはWindowsの自動調整バグのように見えますが、おそらくこれと関係があるのでしょうか?https://support.microsoft.com/en-us/kb/932170

WskControlSocketを使用して、より大きなSO_RCVBUF値を手動で要求しようとしましたか?


技術的には、これらのバッファーはTCPウィンドウサイズとは関係ありません: stackoverflow.com/questions/14381303/increasing-tcp-window-size
Mary

Phil:リンクが適用されないように、Windows Server 2012を両側で実行していますが、何らかのバグが疑われます。より大きなSO_RCVBUFをリクエストできます-そしてそれは役立ちます-しかし、それは何が壊れているかを理解するのに役立ちません(「アップデート2」を参照)。
クリススタンケビッツ

Mary:バッファは、ウィンドウサイズに間接的に関連しています。ネットワークスタックは小さなバッファを認識​​するため、ウィンドウサイズは増加しません。これについては、「Update 2」で手を振って説明しています。
クリススタンケヴィッツ

0

Cisco WAASやRiverbedなどのネットワークオプティマイザーを使用します。ローカルの確認は迅速に行われるため、サーバーの設定を気にする必要はありません。大規模なネットワークでは、これらは他のチームであるか外部委託されているため、とにかくサーバー設定に影響を与えません。


また、65kを超える大きなTCPウィンドウサイズは、接続に必要なメモリが増加するため、サーバーにとって不適切です。65kだけでは十分に満足できないかもしれません。
user303507

user303507:Windows Server 2012ネットワークスタックで何が起こっているのかを理解したい。ネットワークアプライアンスの問題を隠すことに興味はありません。しかし、ネットワークアプライアンスを購入するか、オフィスを近くに移動すると、この問題を回避できることに同意します。
クリススタンケ

user303507のコメントは正しい道にあるかもしれません-メモリーの問題が原因で、ウィンドウが目に見えないヒューリスティックまたはレジストリ設定に基づいてウィンドウサイズを制限しているのでしょうか。それは適切な動作ではなく、ドキュメントについて正しいことを前提としています。
ダンプリッツ

0

ここにあるいくつかの情報あなたが探している答えかもしれ私が発見したが。無効モードでの64kb制限の言及は、文書化されていない通常モードでの同様の制限の手がかりになるかもしれないことに注意してください。

天体の自動調整レベルの「実験」モードを有効にしてみてください。

Windows Auto-Tuningレベルを設定する場合、可能な設定は次のとおりです。

  • normal:デフォルト値。ほとんどの条件に対応するために受信ウィンドウを拡大できます
  • 無効:TCP受信ウィンドウに固定値を使用します。64KBに制限します(65535で制限)。
  • 非常に制限されている:受信ウィンドウがデフォルト値を超えて大きくなり、非常に保守的
  • 制限:tcp受信ウィンドウのデフォルト値を超えた成長の制限
  • 実験的:極端なシナリオに対応するために受信ウィンドウを拡大できます(推奨されません。一般的なシナリオではパフォーマンスを低下させる可能性があり、研究目的のみ。16MBを超えるRWIN値を有効にします)

それは意味をなさないだろうがOPのショーは、彼がいなくてもで、64Kで蓋をしています1024
ジム・B
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.