Почему мой принтер HP C7200 может иметь MTU 1498?

Почему мой принтер HP C7200 может иметь MTU 1498?

В моей беспроводной сети я могу проследить путь к компьютеру Mac, используя MTU 1500 на Ubuntu Linux 12.04.

(По какой-то причине MTU для Mac установлен на 1470, но кадры ответов не такие уж большие, так что это не имеет значения)

Когда я выполняю tracepath на своем принтере HP, он никогда не отвечает на кадры длиной 1514 байт: MTU(1500) + Ethernet(14) (SRC(6) + DST(6) + type(2)) = 1514

Но если я устанавливаю MTU на 1498, мой принтер отвечает. MTU на 1499 тоже не отвечает.

Примечание: установка MTU на 1500 на моем Mac также приводит к сбоям печати, поэтому я сомневаюсь, что это как-то связано с компьютером или моим маршрутизатором.

Обновление: если я проведу трассировку до google.com, то увижу, что мой маршрутизатор (на своем WAN-соединении) отвечает пакетами ICMP, сообщающими о необходимости фрагментации и о том, что MTU последующего кадра должен быть равен 1474.

tracepath изменяет размер кадра, чтобы соответствовать этому, и продолжает. Это означает, что теперь он отправляет кадры длиной 1488 байт.

Для моего принтера он не отправляет обратно ни одного ICMP-пакета, сообщающего, что он не может обработать полезную нагрузку размером 1500 байт. Это как если бы он загонял в черные дыры кадры размером более 1512 байт.

Обновление: Новые Mac используют 1500 и печатают нормально. Когда я посмотрел, что происходит, мой Mac сначала пробовал 1500, а если не получалось, то снижал MTU до 1470 (насколько я помню) — интересный обходной путь от Apple.

решение1

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


Если вы установите MTU вашего компьютера на 1500, то он будет отправлять пакеты общим размером до 1500 байт (а не 1514, как вы описали).

Другой способ определения MTU вашего пути или конкретного хоста — использование команды ping:

-f sets the Do Not Fragment bit 
-l configures the data size (remember to add 28 bytes for the header)

Таким образом, чтобы проверить host.example.com на MTU 1500, вы должны использовать

ping -f -l 1472 host.example.com.

Связанный контент