Я играл с dpkt в Python, пытаясь декодировать PPPoE - и программа работала нормально, пока я не заметил, что смещение в IP-пакетах инкапсуляции всегда было 0, даже с явно фрагментированными пакетами.
Как можно видеть, сервер отправляет 1492-байтовые пакеты (я полагаю, из-за инкапсуляции PPPoE) и последний пакет 1365. Но смещение всегда равно 0 - не должно ли оно увеличиваться?
Я конечно подозревал свою программу, но я проверил тот же перенос с помощью Wireshark и получил тот же результат.
Я неправильно это понимаю?
Нет, это не фрагменты. Вы видите 1492-байтовые пакеты от сервера и 40-байтовые пакеты (TCP ACK?) Обратно на сервер. Поскольку они не являются фрагментами, смещение действительно всегда равно 0.
Wireshark покажет вам, являются ли пакеты фрагментами или нет. Если вы покажете более подробную информацию от Wireshark, мы сможем предоставить вам больше информации о том, что именно находится в каждом пакете.
Я бы порекомендовал установить tracepath (а не traceroute) и использовать его для проверки MTU на всех переходах. Если вы не хотите использовать фрагментированные пакеты, установите MTU на сервере ниже самого низкого MTU на пути перехода.