размер ICMP Тип 11 нагрузка пакета

каков размер полезной нагрузки пакета ICMP, когда Тип 11, т. е. превышено время? Поскольку он содержит IP-заголовок и первые 8 байтов полезной нагрузки IP-пакета, генерирующего сообщение ICMP, я думал, что его размер составляет 20 + 8 = 28.

Я проигрываю некоторый общий пользовательский трафик с TTL=1. В сообщениях ICMP, которые я сбросил, я заметил, что:

  • все пакеты ICMP, генерируемые пакетами UDP, имеют полезную нагрузку размером 28 байт
  • все те, которые порождаются Пакеты TCP имеют полезную нагрузку размером 40 байт

поскольку мне нужно сопоставить сообщения с превышением времени ICMP с пакетами, которые вызвали их, сравнивая эти байты, эта часть информации важна, но я не могу понять, почему это происходит.

3 ответов


проблема в том, что вы цитируете 8-байтовую полезную нагрузку заголовка из RFC 792, Страница 4, но требования были изменены RFC 1812...

Time Exceeded Message (in RFC 792)

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Type      |     Code      |          Checksum             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             unused                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      Internet Header + 64 bits of Original Data Datagram      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RFC 1812, раздел 4.3.2.3 резко увеличивает допустимую полезную нагрузку в сообщении об ошибке ICMP (акцент мой):

4.3.2.3 Заголовок Исходного Сообщения

исторически каждое сообщение об ошибке ICMP включало интернет верхнего и по минимум первые 8 байтов данных дейтаграммы, которые сработала ошибка. Это больше не адекватно, должный к пользе IP-in-IP туннелирование и другие технологии. таким образом, ICMP дейтаграмма должна содержать как можно больше исходной дейтаграммы без длины дейтаграммы ICMP, превышающей 576 байт. Этот возвращенный IP-заголовок (и пользовательские данные) должен быть идентичен тому, который был получен, за исключением того, что маршрутизатор не требуется отменять изменения заголовка IP, которые обычно выполняются в пересылка, выполненная до обнаружения ошибки (например, уменьшение TTL или обновление параметров).

ошибки ICMP, которые вы генерируете из пакетов Scapy, должны содержать всю информацию из слоев IP и TCP исходного пакета.


Как вы отметили, полезная нагрузка ICMP-это IP-заголовок плюс 8 октетов полезной нагрузки исходного пакета. Однако IP-заголовки не всегда имеют длину 20 октетов; 20 - это только минимум. Сам IP-заголовок может содержать параметры,а длина заголовка указывается значением в поле IHL заголовка. П. 3.1 в RFC 791. Таким образом, похоже, что пакеты TCP имеют 12 дополнительных октетов опций в своих IP-заголовках. RFC 791 определяет некоторые стандартные параметры, такие как маршрутизация источника и timestamping. Вам нужно будет декодировать заголовок, чтобы определить, какие параметры используются.


Я хотел бы добавить для дальнейшего использования, что не только ICMP полезные нагрузки различаются по размеру, как сказал Майк, они также могут быть длиннее, чем 128 байт в случае расширения ICMP для MPLS. См.этот проект для получения дополнительной информации