Факты (определите любые ложные операторы):
У меня есть соединение на 100 Мбит/с между двумя сайтами, которые на расстоянии в 80 мс
Это - долгое толстое соединение, которое могло извлечь выгоду из большого размера окна TCP, возможно, до 100 Мбит/с * 0,08 секунды = 1 000 000 байтов
Обе машины выполняют Windows Server 2012. "Окно приема автоматический настраивающий уровень" нормально на обоих. "Эвристика масштабирования окна" отключена на обоих.
Я работал "iperf-s" на одной стороне и "iperf-c" на другом. Передача произошла на уровне 5 Мбит/с. Я получаю тот же результат, идущий другое направление.
Обе стороны рекламировали поддержку раздвижных окон TCP в их SYNs.
Получатель запросил размер окна TCP 64 512 байтов (0xFC00) во время всего выполнения со значением масштаба окна TCP "никакого сдвига" (0x000).
Сеть смогла обработать больший размер окна (см. диаграммы последовательности ниже),
Получатель сохранил окно меньшим, чем сетевые поддержки
Это соединение происходит в VPN IPSEC. MTU туннельного интерфейса уменьшается до 1 400 байтов в обоих направлениях.
Вопрос
Неответы
Сеть повреждается
Машины Linux, работающие на той же сети, открывают окно TCP для 1,5 мегабайтов и передают данные в 6 раз пропускной способности
Эвристика масштабирования окна включена
Эвристика масштабирования окна отключена (см., что вывод "netsh соединяет интерфейсом с выставочной эвристикой tcp" ниже),
Уровень Автоматической настройки Окна приема не нормален
Уровень Автоматической настройки Окна приема нормален (см., что вывод "netsh соединяет интерфейсом с шоу tcp, глобальным" ниже),
Это просто не работает хорошо над виртуальной машиной в ESXI
Я получаю в 6 раз лучшую производительность на виртуальной машине Linux, работающей на том же хосте.
Обновите 1 июня 12, 2015 16:30 PDT
Я изменил тест путем помещения Linux на одну сторону соединения. Конечно же, когда Linux отправляет данные в Windows Server 2012, Windows предлагает также маленькое окно приема TCP (64 512 байтов).
Когда я отправляю данные от Windows до Linux, Linux предлагает достаточно большое окно приема TCP (1 365 120 байтов). Однако Windows ограничивает, отправляет к макс. ~60 000 байтам в полете.
Обновите 2 июня 13, 2015 15:00 PDT
Шаг ближе к первопричине. В моей установке ни SO_SNDBUF, ни SO_RCVBUF не установлены (iperf). Они - отправление и получают буферы, которые эффективно связали окно приема. Если не указывая эти значения, Windows Server 2012 обеспечивает значение по умолчанию 64 КБ. Таким образом, вопрос теперь:
Вопрос
Неответы
"netsh winsock выставочная автоматическая настройка" отключен
Это включено.
Обновите 3 августа 24, 2015 16:00 PDT
netsh, по-видимому, был заменен Набором-NetTCPSetting и семейством. Будьте объединены с, Получают-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
Похоже на ошибку автонастройки Windows, возможно, это как-то связано с этим? https://support.microsoft.com/en-us/kb/932170
Пытались ли вы вручную запросить большее значение SO_RCVBUF, используя WskControlSocket?
.Используйте оптимизатор сети, например Cisco WAAS или Riverbed. Они быстро отправляют локальные подтверждения, поэтому вам не нужно беспокоиться о настройках сервера. В более крупной сети вы в любом случае не можете повлиять на настройку сервера, так как это другие команды или это аутсорсинг.
Я рассматривал это как проблему, связанную с драйверами; в моем случае с сетевыми контроллерами QLogic, которые пытались использовать TCPChimney. Эта ссылка описывает функциональность TCPChimney, добавленную в Windows 2008 - но я уверен, что она все еще применима: https://support.microsoft.com/en-us/kb/951037
Я бы порекомендовал тестировать следующее, по порядку; после каждого теста перезагружайте и проверяйте, начинает ли приемник увеличивать TCP RWIN, как и ожидалось.
1) Загружайте последние версии драйверов для сетевого адаптера на принимающем компьютере. 1) Отключите TCPChimney на принимающем компьютере. 2) Отключите всю разгрузку 'TCP Receive'. Это можно найти в Расширенных настройках Свойств сетевого адаптера (та же область, где будут установлены Скорость и Дуплекс) 3) Отключите всю разгрузку 'TCP Send' (также в расширенных свойствах сетевого адаптера)
( И вопреки замечанию "И большие TCP окна размером более 65k вредны для серверов, так как тогда возрастает потребность в памяти для соединений". Одни только 65k также могут не порадовать вас. - user303507 6 '15 августа в 11:30", большие окна получения TCP не являются по своей природе плохими для сервера. В случае широкополосных, высоколатентных соединений (например, спутниковых реле), большие значения RWIN необходимы для того, чтобы у нас было больше TCP-данных "в трубе". Представьте себе соединение 600 Мбит/с с задержкой 3000 мс; широкополосное соединение будет ограничено примерно 20 КБ/с; так как только 65 КБ неупакованных TCP-данных могут находиться "в трубе" одновременно. )
Вот некоторая информация Я обнаружил, что это может быть ответ, который вы ищете. Обратите внимание, что упоминание 64kb ограничения на отключенный режим может быть ключом к аналогичным ограничениям на обычный режим, которые не документированы.
Попробуйте включить "экспериментальный" режим для уровней астрономической автонастройки.
При настройке уровня автонастройки Windows возможны следующие настройки являются следующими:
- normal: значение по умолчанию, позволяет увеличить окно получения, чтобы приспособиться к большинству условий
- disabled: использует фиксированное значение для окна получения tcp. Ограничено до 64 КБ (ограничено 65535).
- Highrestricted: позволяет окну получения вырасти за пределы его значения по умолчанию, очень консервативно
- limited: несколько ограничивает рост окна получения tcp за пределы его значения по умолчанию
- experimental: позволяет увеличить окно приема, чтобы приспособиться к экстремальным сценариям (не рекомендуется, это может ухудшить производительность в общие сценарии, предназначенные только для исследовательских целей. Это позволяет RWIN значения более 16 МБ)