Назад | Перейти на главную страницу

Повторная сборка не удалась в пункте назначения

Скажем, у меня есть Host1 и 2, подключенные к маршрутизатору с разными скоростями.

Host1  <--100 Mbps-->  Router  <--10 Mbps-->  Host2

Host1 отправляет 10 МБ данных UDP, используя NC на Host2, но Host2 не может повторно собрать фрагментированные пакеты и отправляет ICMP (Превышено время жизни / истекло время повторной сборки фрагмента).

Когда на обоих концах 100 Мбит / с, я не вижу сбоев и не происходит фрагментации.

Я пытался избежать фрагментации следующими методами

1. Enabling PMTU on destination, router 
        echo 0 > /proc/sys/net/ipv4/ip_no_pmtu_disc
2. Reducing MTU to 576 from 1500

Но все же происходит фрагментация. Я могу видеть через журнал wirehark. Не могли бы вы посоветовать мне избежать фрагментации и как справиться с этим сценарием.

Редактировать:
Это своего рода стрессовый сценарий с точки зрения маршрутизатора. Я не должен ничего менять на стороне источника / назначения.

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

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

Ты можешь использовать socat который позволяет вам установить размер вашего пакета с помощью UDP (функция, которая netcat похоже, нет, так как он просто сбрасывает все данные, которые у него есть в буфере, в один пакет) и устанавливает его так, чтобы фрагментация не происходила, и наблюдайте результаты, предсказанные выше.

В общем, описанное выше является природой чистого UDP, которого можно избежать, только реализовав определенный протокол управления потоком поверх UDP.