Кадры выше 2000 байтов не подтверждены клиентом / получателем

300
lukasz139

Я работаю над добавлением функциональности jumbo frame в мое приложение. Моя проблема в том, что я не получаю ACK для кадров с полезной нагрузкой выше 2000 байтов. Моя система выглядит следующим образом: сервер отправляет запрошенное время измерения клиенту. Серверная сторона представляет собой процессор ARM с lwip-реализацией стека tcp / ip и с включенной поддержкой больших кадров. Клиентская сторона - это сценарий Python на моем ПК с сетевым интерфейсом, на котором включены Jumbo-кадры.

С конфигурацией как выше и полезной нагрузкой выше по умолчанию система 1460 работает отлично. Я работаю с полезной нагрузкой в ​​2000 байт без проблем. MSS на стороне клиента - 9158, WIN 64320. На стороне сервера: MSS 2000 и WIN 8000. Однако, как только я увеличиваю MSS на стороне сервера выше 2000 байтов, связь прекращается. На Wireshark я вижу, что первый кадр длиной более 2000 не получает подтверждения от клиента (на стороне ПК), и начинается повторная передача.

Буду благодарен за любые советы опытных пользователей. Мне кажется, что гигантский фрейм не должен быть проблемой, так как я работаю намного больше стандартного размера полезной нагрузки Ethernet без проблем.

Ссылка на облачную акулу (с tcp-фильтром): https://www.cloudshark.org/captures/5bf2180b65cf?filter=tcp

Заранее спасибо.

1
Это все проводной Ethernet? И вы убедились, что ваше оборудование и драйверы сетевых адаптеров Ethernet поддерживают и настроены для больших кадров? Включен ли переключатель? Вы проверили поддержку Jumbo Frame? Кроме того, какие операционные системы на клиенте и сервере? Spiff 6 лет назад 0
Да, все это проводное. Я проверил MTU для сетевого интерфейса, который я использую на моем ПК, и он включен для 9k кадров. На моем сервере также включены гигантские кадры, и я вижу на Wireshark, что передаются 2000-байтовые кадры. На пути нет переключателя. Так как в прикрепленном захвате, когда paylaod превышает 2000 байтов, ACK от клиента отсутствует. Как упоминалось в почтовом сервере, это ARM со стеком LwIP, клиент - это скрипт Python, получающий через сокет TCP. lukasz139 6 лет назад 0

0 ответов на вопрос