Сейчас все пояню пределельно подробно.
Имеются 2 хоста, скажем, А и B.
Мне необходимо отправлять пакеты с нагрузкой больше чем 1500 байт c учетом IP-заголовка. Т. е. мне необходимо фрагментировать пакеты на уровне IP, а не TCP (это к словам о "маршрутизатору вообще покласть на фрагментацию, он работает на уровне ip", спасибо за информацию).
Далее, оба провайдера на обоих концах разрешают отправку пакетов с МTU больше 1500, проверял пингом командой "ping -s 1600 GW_A" и "ping -s 1600 GW_B". Tcpdump показывает, что пакеты удачно фрагментируются собираются у шлюзов, снова фрагментируется, отправляются и собирается на моем сервере.
Но когда я отправляю аналогичный пинг с хоста A на хост B, конечный хост B получает лишь первую часть пакета. Нагляднее:
Отправляет хост А
04:53:20.723446 IP host_A > host_B: ICMP echo request, id 5730, seq 3, length 1480
04:53:20.723467 IP host_A > host_B: ip-proto-1
04:53:21.731443 IP host_A > host_B: ICMP echo request, id 5730, seq 4, length 1480
04:53:21.731464 IP host_A > host_B: ip-proto-1
Получает хост B
11:53:20.753000 IP host_A > host_B: ICMP echo request, id 5730, seq 3, length 1480
11:53:21.761175 IP host_A > host_B: ICMP echo request, id 5730, seq 4, length 1480
Однако в обратном направлении от хоста B к хосту A фрагментированные пакеты доходят все без потерь.
Дальше я сделал tracepath от хоста А к хосту B и получил приблизительно следующую информацию:
1. host_A
2. GW_A
3. X1
3. X2
4. X3
5. X4
6. X5
7. GW_B
8. host_B
После пинга с MTU > 1500 с обоих концов было выяснено, что маршрутизатор X3 не отвечает на подобный пинг. Из чего я и сделал вывод, что маршрутизатор X3 не передает фрагментированные пакеты.
Теперь повторяю вопрос: "обязан ли этот маршрутизатор по стандарту разрешать фрагментацию пакетов или это делается исключительно по желанию администраторов?"
Если мои анализы где-то неверны, прошу поправить.