Вопрос или проблема
Я совершенно нов в принципах проектирования сетевых драйверов и хотел бы получить помощь и направление в диагностике странного поведения, которое я наблюдаю по tcpdump, захваченному на устройстве.
Логи показывают, что устройство (на базе Linux) время от времени отправляет пакеты с размером, превышающим установленное значение MSS. Я довольно уверен, что захваченные данные отражают то, что отправляется в сети. Это предположение основано на том, что пир не подтверждает эти пакеты, нарушающие MSS, и что устройство действительно повторно отправляет эти потерянные пакеты. Пир не имеет проблем с подтверждением пакетов TCP правильного размера, поэтому я сильно верю, что проблема заключается в устройстве.
Я пытаюсь сузить область проблемы, но хотел бы получить более четкое представление о различных обстоятельствах, при которых эта проблема может возникнуть. Насколько я знаю, логи tcpdump с хоста означают, что пакеты, которые я вижу, захвачены между слоем ядра и драйвером NIC/оборудования. Мое первоначальное предположение о том, где может быть проблема, заключается в ядре; это основано на моем дилетантском предположении, что ядро/драйвер TCP должно отвечать за правильную сегментацию данных перед отправкой их в NIC.
Если это предположение верно, то значит ли это, что аппаратное обеспечение сетевого интерфейса является областью проблемы и что эти сетевые устройства имеют возможность обрабатывать TCP-пакеты и объединять их в один пакет?
Если это предположение неверно, значит ли это, что эти сетевые устройства обычно предназначены для хранения информации на основе соединений, чтобы правильно сегментировать данные, полученные от ЦП?
Также мне нужно отметить, что это проблемное устройство, которое я анализирую, действительно имеет внешний коммутатор между ним и сетью.
Заранее спасибо за любые советы, которые кто-то сможет предоставить.
Ответ или решение
Проблема превышения максимального размера сегмента (MSS) в передаваемых TCP-пакетах может возникнуть по нескольким причинам. Давайте разберём основные возможности, почему это происходит, и как их можно диагностировать.
### 1. Корректность настройки MSS
Первое, что стоит проверить, — это правильность настройки MSS как на отправляющей, так и на принимающей стороне. Превышение MSS может происходить, если:
– Установлены противоречивые значения MSS на разных устройствах в цепочке передачи (например, на роутерах или свитчах).
– В процессе работы меняются параметры подключения, не учитывающие текущие ограничения MSS (например, при использовании VPN, который может изменять MTU).
### 2. Поведение приложений и стеков TCP/IP
Следующий аспект — это взаимодействие приложений с TCP/IP стеком:
– Некоторые приложения могут игнорировать настройки MSS, если они неправильно указывают размеры сегментов при отправке данных.
– Проверьте, не происходит ли абстракция на уровне пользовательских приложений, что может вызывать несоответствие в пределах TCP/IP стека.
### 3. Упаковка и сегментация на уровне драйвера или ядра
Ваше предположение о том, что проблема может быть в ядре или драйверах, тоже является допустимым:
– В некоторых случаях драйверы сетевых устройств могут некорректно обрабатывать сегментацию, что может привести к отправке пакетов, превышающим установленный MSS.
– Когда приложение вызывает отправку данных, и если система разрабатывает сегменты некорректно, может происходить превышение, особенно если данные не были должным образом разбиты на сегменты заранее.
### 4. Проблемы на уровне аппаратуры
Рассматривая аппаратное обеспечение:
– Сетевые устройства, такие как свитчи и маршрутизаторы, могут выполнять обобщение пакетов не в соответствии с установленными параметрами MSS. В этом случае, если ваша машина пересылает большие пакеты, свитч может их некорректно обрабатывать.
– Убедитесь, что настройки MTU на всех устройствах в сети согласованы, и что они соответствуют требованиям MSS. Неисправная конфигурация на уровне аппаратуры часто является источником таких проблем.
### 5. Влияние промежуточных устройств
Как вы упомянули, между вашей машиной и сетью находится внешний свитч:
– Отладьте все промежуточные устройства и убедитесь в их правильной конфигурации на уровне MSS и MTU.
– Попробуйте временно убрать промежуточные устройства и провести тестовый набор пакетов на прямом соединении, чтобы понять, влияет ли свитч на трафик.
### Заключение
Для диагностики проблемы с превышением MSS, вам нужно систематически проверить настройки со стороны приложения, сетевой стек, драйверы и конфигурации всех устройств в цепочке. Используйте инструменты TCP-отладки и детализированные логирования, чтобы проанализировать поведение пакетов и ошибки, которые могут возникнуть в процессе передачи.
Если у вас есть возможность, также может быть полезно просмотреть настройки взаимодействия и спецификации оборудования, чтобы исключить возможные априорные ошибки.