Я настроил размер MTU на 1000 с ip link set eth0 mtu 1000
по ссылке eth0. Я отключил общий прием разгрузки (gro) с помощью ethtool -K gro off
(так как это может привести к "ложной" длине кадра в tcpdump (посмотреть здесь)) Но если я сделаю захват сейчас с помощью tcpdump, я все равно получу пакеты размером больше 1000, например 1500 байт.
Что я делаю не так?
На принимающей стороне с MTU, установленным на 1000:
eth0: mtu 1000
14: 27: 38.361168 IP XXXXXX> YYYYYY: ICMP echo> запрос, id 3273, seq 1, длина 1480 14: 27: 38.361495 IP ГГГГГГ> XXXXXX: эхо-ответ ICMP, идентификатор 3273, последовательность 1, длина 976
MTU - это максимальный размер пакета, который может быть послал через интерфейс. MTU не ограничивает максимальный размер пакета, который может быть получен.
RFC 1191 говорит:
... Когда один IP-хост имеет большой объем данных для отправки другому хосту, данные передаются в виде серии IP-дейтаграмм. Обычно предпочтительно, чтобы эти дейтаграммы были самого большого размера, что не требует фрагментации где-либо на пути от источника к месту назначения. (Случай против фрагментации см. В [5].) Этот размер дейтаграммы называется MTU пути (PMTU), и он равен минимуму MTU каждого перехода на пути. Недостатком текущего набора Интернет-протоколов является отсутствие стандартного механизма, позволяющего хосту обнаруживать PMTU произвольного пути.
Note: The Path MTU is what in [1] is called the "Effective MTU for sending" (EMTU_S). A PMTU is associated with a path, which is a particular combination of IP source and destination address and perhaps a Type-of-service (TOS)...