Назад | Перейти на главную страницу

Почему я могу получать кадры Ethernet, размер которых превышает текущий размер MTU?

Я настроил размер 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)...