TCP-соединение localhost с обратной связью в Windows: увеличьте узкое место до 65535 байт на сегмент.
У меня есть такой сценарий: у меня есть сеанс TCP с обратной связью, и я хочу улучшить его производительность. У меня есть объекты, подобные сокетам (точнее, System.Net.Sockets в .NET Framework), отправляющие сообщения размером до 9 МБ каждое, передаваемые в обоих направлениях TCP-соединения. Я наблюдал типичную задержку около 20 мс для того, чтобы такое большое сообщение дошло до другой стороны.
С помощью WireShark я обнаружил, что поток TCP ограничен 65535 байтами на сегмент. Я подозреваю, что это узкое место в скорости работы. В заголовках TCP включена опция масштабирования окна, и вычисляемый размер окна достаточно велик. Я подозреваю, что «Опция TCP — Максимальный размер сегмента» (MSS) в пакете SYN ограничивает размер каждого сегмента TCP. Пожалуйста, посмотрите изображения WireShark и укажите, если я ошибаюсь.
TCP-сегменты с ограниченным размером и параметры масштабирования окна.Пакет SYN и MSS.
Теперь вернемся к вопросу, вынесенному в заголовок. Есть ли способ увеличить ограничение размера сегмента TCP в Windows 7/8/10/11? Я надеюсь найти метод, который увеличит MSS только для шлейфовых соединений или только для определенных портов или чего-то еще.
1 ответ
Сегмент TCP инкапсулируется IP-пакетом, размер которого обычно ограничен 65535 байтами (2^16-1), поскольку поле общей длины составляет 16 бит. Это конец лестницы как для TCP, так и для IP.
Если вы не можете достичь требуемой пропускной способности, вам нужно либо более быстрое оборудование, либо более быстрое программное обеспечение. По умолчанию мой настольный компьютер работает в однопоточном режиме ~35 Гбит/с. Возможно, вы захотите спросить в Stack Overflow об оптимизации вашего кода.