Сообщения TCP выше определенного размера (~ 1450) застревают - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь отправить пакеты различной длины через мое оборудование, и у меня возникла проблема, когда пакеты достигают определенного размера, ~ 1450 байт. Все работает нормально, когда размер пакета меньше ~ 1450 байт.

Я отлаживал эту проблему с помощью своего драйвера NIC и выводил то, что получил, прежде чем отправлять данные. Я вижу рукопожатие TCP и мой пакет при отправке <~ 1450 байт. </p>

Как только я пытаюсь отправить пакет размером ~ 1450 байт, я никогда не вижу рукопожатие TCP или пакет в моем драйвере NIC. Поэтому я уверен, что пакет потерян где-то в Linux ... Это похоже на какую-то ошибку с фрагментацией пакета в Linux, но я не уверен.

Кто-нибудь сталкивался с потерей пакетов при попытке отправить пакеты с определенным порогом, а в моем случае ~ 1450 байт в Linux?

Я не уверен, с чего начать искать, где мой пакет задерживается или почему ...

Я использую Linux 3.10.39, его нельзя изменить. Я также увеличил размер MTU до большего значения в моем драйвере NIC, но, похоже, это никак не отразилось, и пакеты размером ~ 1450 байт продолжают зависать.

Я использую базовый TCP / сервер Perl , найденный здесь , для проверки связи.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Это может быть признаком того, что ваш ящик или какой-то маршрутизатор между ними неправильно отбрасывают ICMP-пакеты, участвующие в обнаружении Path MTU (https://en.wikipedia.org/wiki/Path_MTU_Discovery). Может быть, что-то их душит, например, исходя из предположения, что ICMPвсе про пинги и поэтому не важно?

2 голосов
/ 23 апреля 2019

TCP-пакеты, которые превышают MTU сети, должны быть потеряны.Фрагментация серьезно снижает производительность TCP, поэтому использование пакетов, достаточно больших для фрагментации, неэффективно.

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

См. Ответ Томаша Ноински, в котором обсуждается возможность того, что неправильно настроенный брандмауэр может мешать обнаружению MTU пути.ICMP является требованием к Интернет-хосту, и его блокировка без разбора нарушит TCP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...