Получатель ограничивает размер окна TCP 64 512

Факты (определите любые ложные операторы):

  1. У меня есть соединение на 100 Мбит/с между двумя сайтами, которые на расстоянии в 80 мс

  2. Это - долгое толстое соединение, которое могло извлечь выгоду из большого размера окна TCP, возможно, до 100 Мбит/с * 0,08 секунды = 1 000 000 байтов

  3. Обе машины выполняют Windows Server 2012. "Окно приема автоматический настраивающий уровень" нормально на обоих. "Эвристика масштабирования окна" отключена на обоих.

  4. Я работал "iperf-s" на одной стороне и "iperf-c" на другом. Передача произошла на уровне 5 Мбит/с. Я получаю тот же результат, идущий другое направление.

  5. Обе стороны рекламировали поддержку раздвижных окон TCP в их SYNs.

  6. Получатель запросил размер окна TCP 64 512 байтов (0xFC00) во время всего выполнения со значением масштаба окна TCP "никакого сдвига" (0x000).

  7. Сеть смогла обработать больший размер окна (см. диаграммы последовательности ниже),

  8. Получатель сохранил окно меньшим, чем сетевые поддержки

  9. Это соединение происходит в 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 КБ. Таким образом, вопрос теперь:

Вопрос

  • Когда каждый не указан, почему Windows Server 2012 динамично не увеличивает SO_SNDBUF/SO_RCVBUF для размещения длинных толстых каналов, как описано в MSDN?

Неответы

  • "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

Перспектива отправителя графика последовательности enter image description here

enter image description here

Получатель настройки 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]

Перспектива получателя графика последовательности enter image description here enter image description here

Окно TCP enter image description here

34
задан 31 March 2016 в 18:25
4 ответа

Похоже на ошибку автонастройки Windows, возможно, это как-то связано с этим? https://support.microsoft.com/en-us/kb/932170

Пытались ли вы вручную запросить большее значение SO_RCVBUF, используя WskControlSocket?

.
0
ответ дан 28 November 2019 в 19:53

Используйте оптимизатор сети, например Cisco WAAS или Riverbed. Они быстро отправляют локальные подтверждения, поэтому вам не нужно беспокоиться о настройках сервера. В более крупной сети вы в любом случае не можете повлиять на настройку сервера, так как это другие команды или это аутсорсинг.

0
ответ дан 28 November 2019 в 19:53

Я рассматривал это как проблему, связанную с драйверами; в моем случае с сетевыми контроллерами 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-данных могут находиться "в трубе" одновременно. )

1
ответ дан 28 November 2019 в 19:53

Вот некоторая информация Я обнаружил, что это может быть ответ, который вы ищете. Обратите внимание, что упоминание 64kb ограничения на отключенный режим может быть ключом к аналогичным ограничениям на обычный режим, которые не документированы.

Попробуйте включить "экспериментальный" режим для уровней астрономической автонастройки.

При настройке уровня автонастройки Windows возможны следующие настройки являются следующими:

  • normal: значение по умолчанию, позволяет увеличить окно получения, чтобы приспособиться к большинству условий
  • disabled: использует фиксированное значение для окна получения tcp. Ограничено до 64 КБ (ограничено 65535).
  • Highrestricted: позволяет окну получения вырасти за пределы его значения по умолчанию, очень консервативно
  • limited: несколько ограничивает рост окна получения tcp за пределы его значения по умолчанию
  • experimental: позволяет увеличить окно приема, чтобы приспособиться к экстремальным сценариям (не рекомендуется, это может ухудшить производительность в общие сценарии, предназначенные только для исследовательских целей. Это позволяет RWIN значения более 16 МБ)
0
ответ дан 28 November 2019 в 19:53

Теги

Похожие вопросы