Сбой сборки в пункте назначения

Скажем, у меня есть 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

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

Редактировать:
This is kind of stress scenario from router perspective. I should not change anything on source/destination side.

1 ответ

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

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

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

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

Другие вопросы по тегам