ข้อเท็จจริง (โปรดระบุข้อความเท็จใด ๆ ):
ฉันมีการเชื่อมต่อ 100 Mbps ระหว่างสองไซต์ที่ห่างกัน 80 ms
นี่คือการเชื่อมต่อที่ยาวนานซึ่งสามารถได้รับประโยชน์จากขนาดหน้าต่าง TCP ขนาดใหญ่อาจสูงถึง 100 Mbps * 0.08 วินาที = 1,000,000 ไบต์
ทั้งสองเครื่องกำลังเรียกใช้ Windows Server 2012 "การรับระดับการปรับอัตโนมัติของหน้าต่าง" เป็นเรื่องปกติสำหรับทั้งสองเครื่อง "ฮิวริสติกการปรับสเกลหน้าต่าง" ถูกปิดใช้งานทั้งคู่
ฉันวิ่ง "iperf -s" ข้างหนึ่งและ "iperf -c" ที่อีกด้านหนึ่ง การถ่ายโอนเกิดขึ้นที่ 5 Mbps ฉันได้ผลลัพธ์เดียวกันไปในทิศทางอื่น
ทั้งสองฝ่ายได้โฆษณาการสนับสนุนสำหรับหน้าต่างบานเลื่อน TCP ใน SYN
ผู้รับร้องขอขนาดหน้าต่าง TCP ที่ 64,512 ไบต์ (0xFC00) ในระหว่างการทำงานทั้งหมดด้วยค่าระดับหน้าต่าง TCP ที่ "ไม่มีการเปลี่ยนแปลง" (0x000)
เครือข่ายสามารถจัดการขนาดหน้าต่างที่ใหญ่ขึ้น (ดูแผนภาพลำดับด้านล่าง)
ผู้รับทำให้หน้าต่างเล็กกว่าที่รองรับเครือข่าย
การเชื่อมต่อนี้เกิดขึ้นภายใน IPSEC VPN MTU ของอินเตอร์เฟสอุโมงค์ลดลงเป็น 1,400 ไบต์ทั้งสองทิศทาง
คำถาม
- ทำไมเครื่องรับทำให้หน้าต่างเล็ก
ที่ไม่ใช่คำตอบ
เครือข่ายใช้งานไม่ได้
เครื่อง Linux ที่ทำงานบนเครือข่ายเดียวกันเปิดหน้าต่าง TCP ไปที่ 1.5 เมกะไบต์และส่งข้อมูลที่ 6 เท่าของแบนด์วิดท์
เปิดใช้งานการแก้ปัญหาการปรับขนาดหน้าต่าง
การปรับขนาดหน้าต่างการวิเคราะห์พฤติกรรมถูกปิดใช้งาน (ดูผลลัพธ์ของ "ส่วนต่อประสาน netsh tcp แสดงการวิเคราะห์พฤติกรรม" ด้านล่าง)
รับระดับการปรับอัตโนมัติของหน้าต่างไม่ปกติ
รับหน้าต่างปรับระดับอัตโนมัติเป็นเรื่องปกติ (ดูผลลัพธ์ของ "ส่วนต่อประสาน netsh tcp แสดงทั่วโลก" ด้านล่าง)
สิ่งนี้ใช้ไม่ได้กับเครื่องเสมือนภายใน ESXi
ฉันได้รับประสิทธิภาพที่ดีขึ้น 6 เท่าในเครื่อง linux เสมือนที่ทำงานบนโฮสต์เดียวกัน
อัปเดต 1 12 มิถุนายน 2558 16:30 น. PDT
ฉันแก้ไขการทดสอบโดยวาง linux ไว้ที่ด้านหนึ่งของการเชื่อมต่อ เมื่อลินุกซ์ส่งข้อมูลไปยัง Windows Server 2012 Windows จะเสนอหน้าต่างรับ TCP ขนาดเล็กเกินไป (64,512 ไบต์)
เมื่อฉันส่งข้อมูลจาก Windows ไปยัง linux linux เสนอหน้าต่างรับ TCP ที่ใหญ่พอ (1,365,120 bytes) อย่างไรก็ตาม Windows จะ จำกัด การส่งสูงสุดถึง 60,000 ไบต์ในเที่ยวบิน
อัปเดต 2 13 มิถุนายน 2558 15:00 น. PDT
ขั้นตอนที่ใกล้เคียงกับสาเหตุที่แท้จริง ในการตั้งค่าของฉันจะไม่มีการตั้งค่า SO_SNDBUF หรือ SO_RCVBUF (โดย iperf) เหล่านี้คือบัฟเฟอร์การส่งและรับซึ่งผูกกับหน้าต่างการรับอย่างมีประสิทธิภาพ เมื่อไม่ได้ระบุค่าเหล่านี้ Windows Server 2012 จะให้ค่าเริ่มต้นเป็น 64 kB ดังนั้นคำถามคือตอนนี้:
คำถาม
- เมื่อหนึ่งไม่ได้ระบุเหตุผลที่ไม่ได้ Windows Server 2012 แบบไดนามิกที่เพิ่มขึ้น SO_SNDBUF / SO_RCVBUF เพื่อรองรับท่อไขมันยาวตามที่อธิบายไว้ในMSDN ?
ที่ไม่ใช่คำตอบ
"netsh winsock show autotuning" ถูกปิดการใช้งาน
มันเปิดใช้งาน
อัปเดต 3 24 สิงหาคม 2558 16:00 น. PDT
เห็นได้ชัดว่า netsh ถูกแทนที่ด้วย Set-NetTCPStingting และตระกูล Get-NetTCPS การตั้งค่าเมื่อรวมกับ 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