태그 보관물: tcp-window-scaling

tcp-window-scaling

수신자가 TCP 창 크기를 64,512로 제한

사실 (거짓 진술을 식별하십시오) :

  1. 80ms 떨어진 두 사이트 사이에 100Mbps 연결이 있습니다.

  2. 이것은 최대 100Mbps * 0.08 초 = 1,000,000 바이트의 큰 TCP 창 크기에서 이점을 얻을 수있는 긴 연결입니다.

  3. 두 시스템 모두 Windows Server 2012를 실행하고 있습니다. “수신 창 자동 튜닝 수준”은 두 시스템 모두에서 정상입니다. “창 크기 조정 휴리스틱”은 둘 다 비활성화되어 있습니다.

  4. 한쪽에서는 “iperf -s”를 실행하고 다른 쪽에서는 “iperf -c”를 실행했습니다. 5Mbps로 전송되었습니다. 나는 다른 방향으로가는 동일한 결과를 얻습니다.

  5. 양측은 SYN에서 TCP 슬라이딩 윈도우를 지원한다고 광고했다.

  6. 수신자는 TCP 창 스케일 값이 “shift 없음”(0x000) 인 전체 실행 중에 64,512 바이트 (0xFC00)의 TCP 창 크기를 요청했습니다.

  7. 네트워크는 더 큰 창 크기를 처리 할 수있었습니다 (아래 시퀀스 다이어그램 참조).

  8. 수신기는 네트워크 지원보다 창을 작게 유지

  9. 이 연결은 IPSEC VPN 내에서 발생합니다. 터널 인터페이스의 MTU가 양방향으로 1400 바이트로 줄었습니다.

의문

  • 수신기가 왜 창을 작게 유지합니까?

답변 없음

  • 네트워크가 고장났다

    동일한 네트워크에서 실행되는 Linux 시스템은 TCP 창을 1.5MB로 열고 대역폭의 6 배로 데이터를 전송합니다

  • 창 스케일링 휴리스틱이 활성화됩니다

    창 스케일링 휴리스틱이 비활성화되어 있습니다 (아래 “netsh 인터페이스 tcp show 휴리스틱”출력 참조).

  • 수신 창 자동 조정 레벨이 정상이 아닙니다

    수신 창 자동 조정 레벨이 정상입니다 (아래 “netsh interface tcp show global”출력 참조).

  • ESXi 내의 가상 머신에서는 제대로 작동하지 않습니다.

    동일한 호스트에서 실행되는 가상 Linux 시스템에서 6 배 더 나은 성능을 얻습니다.


업데이트 2015 년 6 월 12 일 오후 4시 30 분 (PDT)

나는 연결의 한쪽에 리눅스를 두어 테스트를 수정했다. 리눅스가 Windows Server 2012에 데이터를 보낼 때 Windows는 너무 작은 TCP 수신 창 (64,512 바이트)을 제공합니다.

Windows에서 Linux로 데이터를 보낼 때 Linux는 충분히 큰 TCP 수신 창 (1,365,120 바이트)을 제공합니다. 그러나 Windows는 전송을 최대 60,000 바이트로 전송을 제한합니다.


업데이트 2015 년 6 월 13 일 오후 3시 PDT

근본 원인에 더 가까운 단계. 내 설정에서 SO_SNDBUF 또는 SO_RCVBUF가 설정되지 않았습니다 (iperf에 의해). 수신 창을 효과적으로 바인딩하는 송신 및 수신 버퍼입니다. 이러한 값을 지정하지 않으면 Windows Server 2012는 기본값 64kB를 제공합니다. 따라서 질문은 다음과 같습니다.

의문

  • 하나를 지정하지 않으면 MSDN에 설명 된대로 긴 지방 파이프를 수용하기 위해 Windows Server 2012가 SO_SNDBUF / SO_RCVBUF를 동적으로 늘리지 않는 이유는 무엇입니까?

무답

  • “netsh winsock show autotuning”이 비활성화되었습니다

    사용 가능합니다.


업데이트 2015 년 8 월 24 일 오후 4시 PDT

netsh는 분명히 Set-NetTCPSetting 및 제품군으로 대체되었습니다. Get-NetTCPConnection과 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 창
여기에 이미지 설명을 입력하십시오



답변

나는 이것을 드라이버 특정 문제로 보았다. TCPChimney를 사용하려고 시도한 QLogic 네트워크 컨트롤러의 경우 이 링크는 Windows 2008에 추가 된 TCPChimney 기능에 대해 설명하지만 여전히 적용되는지는 확신합니다. https://support.microsoft.com/en-us/kb/951037

다음을 순서대로 테스트하는 것이 좋습니다. 각 테스트 후에 재부팅하고 수신자가 예상대로 TCP RWIN 증가를 시작하는지 확인하십시오.

1) 수신 컴퓨터에 네트워크 어댑터 용 최신 버전의 드라이버를로드하십시오. 1) 수신 컴퓨터에서 TCPChimney를 비활성화합니다. 2) 모든 ‘TCP Receive’오프로드를 비활성화합니다. 이는 네트워크 어댑터 속성의 고급 설정 (속도 및 이중 모드가 설정되는 영역과 동일)에서 찾을 수 있습니다. 3) 모든 ‘TCP 전송’오프로드 비활성화 (네트워크 어댑터의 고급 속성)

(그리고 65k를 초과하는 큰 TCP 창 크기는 서버에 나쁜 영향을 미치므로 연결에 대한 메모리 요구가 증가합니다. 65k만으로는 충분히 만족하지 못할 수 있습니다. – user303507 Aug 6 ’15 at 11:30 “, 큰 TCP 수신 Windows는 본질적으로 서버에 좋지 않습니다. 위성 릴레이와 같은 고 대역폭, 대기 시간이 긴 링크의 경우 파이프에 더 많은 TCP 데이터가 포함되도록 큰 RWIN 값이 필요합니다. 3000ms의 대기 시간으로 600Mbps 연결, 고 대역폭 링크는 약 20KBps로 제한됩니다. 한 번에 65KB의 비 킹킹 TCP 데이터 만 “파이프에”있을 수 있습니다.)


답변

나에게 Windows 자동 튜닝 버그처럼 보이는가? https://support.microsoft.com/en-us/kb/932170

WskControlSocket을 사용하여 더 큰 SO_RCVBUF 값을 수동으로 요청하려고 했습니까?


답변

Cisco WAAS 또는 Riverbed와 같은 네트워크 최적화 도구를 사용하십시오. 로컬 acks를 빠르게 수행하므로 서버 설정에 신경 쓸 필요가 없습니다. 더 큰 네트워크에서는 다른 팀이거나 아웃소싱되므로 서버 설정에 아무런 영향을 미치지 않습니다.


답변

내가 찾은 몇 가지 정보 는 다음과 같습니다 . 비활성화 모드에 대한 64kb 제한에 대한 언급은 문서화되지 않은 일반 모드에 대한 유사한 제한에 대한 단서 일 수 있습니다.

천문학적 자동 조정 레벨에 대해 “실험”모드를 활성화하십시오.

Windows 자동 조정 레벨을 설정할 때 가능한 설정은 다음과 같습니다.

  • normal : 기본값, 대부분의 조건을 수용하도록 수신 창이 커질 수 있습니다.
  • 비활성화 됨 : tcp 수신 창에 고정 값을 사용합니다. 64KB로 제한합니다 (65535로 제한).
  • 매우 제한적 : 수신 창이 기본값보다 커질 수 있으며 매우 보수적으로
  • 제한됨 : tcp 수신 창의 성장이 기본값보다 약간 제한됨
  • 실험적 : 극단적 인 시나리오를 수용하기 위해 수신 창을 확장 할 수 있습니다 (권장되지 않음, 일반적인 시나리오에서 성능을 저하시킬 수 있으며 연구 목적으로 만 사용됩니다. 16MB 이상의 RWIN 값 사용)

답변