Какое значение, содержащееся в заголовке ipv4, уменьшается каждым маршрутизатором, получающим пакет

Обновлено: 21.11.2024

Маршрутизаторы

Маршрутизатор состоит из компьютера с как минимум двумя сетевыми картами, поддерживающими протокол IP. Маршрутизатор получает пакеты от каждого интерфейса через сетевой интерфейс и перенаправляет полученные пакеты на соответствующий выходной сетевой интерфейс. Ключевым моментом здесь является то, что маршрутизаторы в сети имеют представление о правильном пути для достижения пункта назначения.

Маршрутизатор получает пакеты от каждого интерфейса через сетевой интерфейс. В полученных пакетах удалены все заголовки протоколов ссылок.

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

По умолчанию маршрутизатор не пересылает пакет с широковещательным IP-адресом. Протоколы, использующие широковещательные пакеты, обычно работают только в пределах одного широковещательного домена. (Иногда маршрутизаторы могут быть специально настроены для поддержки этого.)

После выбора интерфейса передачи маршрутизатор проверяет максимальную единицу передачи (MTU) интерфейса. Если размер пакета меньше или равен MTU, обработка продолжается. Все IP-пакеты содержат значение TTL, которое определяет количество переходов маршрутизатора, через которые может быть направлен пакет. Большинство маршрутизаторов уменьшает это значение (хотя маршрутизаторы могут быть настроены на уменьшение значения более чем на 1). Оно используется для предотвращения петель маршрутизации, и гарантирует, что топологии с петлями не приведут к тому, что пакеты будут циркулировать бесконечно.

На выходном интерфейсе пакет (вместе с новым заголовком канального уровня) помещается в очередь передачи до тех пор, пока процессор канального уровня не будет готов передать пакет. Это, как приемная очередь. Каждый исходящий пакет требует добавления нового заголовка протокола канального уровня (инкапсуляция) с адресом назначения, установленным для следующей системы, которая получит пакет. Контроллер протокола связи также поддерживает таблицу аппаратных адресов, связанную с интерфейсом. Обычно это включает использование протокола Address ReResit Exam Solution Protocol (arp) для определения аппаратных (MAC) адресов других компьютеров или маршрутизаторов, напрямую подключенных к тому же кабелю (или локальной сети). Пакет, наконец, отправляется с использованием медиа-интерфейса с аппаратным адресом, установленным для системы следующего перехода. Таким образом, к передаваемым пакетам добавляется новый заголовок протокола канала перед передачей каждого пакета.

Пакеты IPv4, превышающие MTU интерфейса, не могут быть отправлены. Они могут быть фрагментированы маршрутизатором на два или более меньших пакета. Если получен пакет IPv4, в заголовке которого установлен бит «Не фрагментировать» (DF) или используется IPv6, пакет не фрагментируется, а вместо этого отбрасывается. В этом случае отправителю (т. е. на исходный IP-адрес исходного пакета) возвращается сообщение об ошибке ICMP, информирующее его о размере MTU интерфейса. Это формирует основу для обнаружения Path MTU (PMTU).

Таблицы маршрутизации и фильтрации

Таблицы маршрутизации и фильтрации напоминают аналогичные таблицы в мостах и ​​коммутаторах канального уровня. За исключением того, что вместо указания аппаратных адресов канала (MAC-адресов) таблица маршрутизатора определяет сеть (IP-адреса). В таблице маршрутизации перечислены известные IP-адреса назначения с соответствующим сетевым интерфейсом, который будет использоваться для достижения этого места назначения. Запись по умолчанию может быть указана для использования для всех адресов, не указанных явно в таблице (это очень распространено на маршрутизаторах, расположенных близко к краю сети, где пакеты по умолчанию направляют пакеты к магистрали Интернета).

Таблица фильтров также может использоваться для исключения нежелательных пакетов. Фильтр может использоваться для запрета доступа к определенным протоколам или для предотвращения несанкционированного доступа с удаленных компьютеров путем отбрасывания пакетов на указанный адрес назначения. Маршрутизаторы на границе сетей интернет-провайдеров также часто выполняют фильтрацию исходного IP-адреса, чтобы предотвратить «подделку» адресов, принадлежащих другим сетям.

Маршрутизатор перенаправляет пакеты из одной IP-сети в другую IP-сеть. Как и другие системы, маршрутизация осуществляется на основе совпадения самого длинного префикса IP-адресов в таблице маршрутизации.

Единственным исключением из этого правила является получение маршрутизатором IP-пакета на сетевой широковещательный адрес. В этом случае маршрутизатор внутренне обработает пакет (чтобы узнать, нужно ли ему отвечать), а затем отбросит пакет. Пересылка широковещательного пакета может привести к сильному шторму пакетов, а неконтролируемое действие может привести к перегрузке сети.

На выходном интерфейсе пакет (вместе с новым заголовком канального уровня) помещается в очередь передачи до тех пор, пока процессор канального уровня не будет готов передать пакет. Это, как приемная очередь.Каждый исходящий пакет требует добавления нового заголовка протокола канального уровня (инкапсуляция) с адресом назначения, установленным для следующей системы, которая получит пакет. Контроллер протокола связи также поддерживает таблицу аппаратных адресов, связанную с интерфейсом. Обычно это включает использование протокола Address ReResit Exam Solution Protocol (arp) для определения аппаратных (MAC) адресов других компьютеров или маршрутизаторов, напрямую подключенных к тому же кабелю (или локальной сети). Наконец, пакет отправляется с использованием мультимедийного интерфейса с аппаратным адресом, установленным для системы следующего перехода.

Задержка

Маршрутизатор вносит задержку (латентность) при обработке получаемых пакетов. Общая наблюдаемая задержка представляет собой сумму многих компонентов, включая:

<УЛ>
  • Время, необходимое для обработки кадра протоколом передачи данных
  • Время, затраченное на выбор правильной выходной ссылки (т. е. фильтрация и маршрутизация)
  • Задержка в очереди на исходящей ссылке (когда ссылка занята)
  • Другие действия, которые потребляют ресурсы процессора (вычисление таблиц маршрутизации, управление сетью, создание журналов)
  • Очередь пакетов маршрутизатора, ожидающих отправки, также является потенциальной причиной потери пакетов. Поскольку маршрутизатор имеет ограниченный объем буферной памяти для хранения очереди, маршрутизатор, который получает пакеты со слишком высокой скоростью, может столкнуться с переполнением очереди. В этом случае у маршрутизатора нет другого выхода, кроме как просто отбрасывать лишние пакеты. При необходимости они могут быть позже повторно переданы транспортным протоколом.

    Архитектура маршрутизатора

    Маршрутизаторы часто используются для соединения сетей, использующих разные типы ссылок. Оптимальная (и максимальная) длина пакета (т. е. максимальная единица передачи (MTU)) различна для разных типов сетей. Таким образом, маршрутизатор может использовать IP для сегментации пакетов до подходящего размера для передачи по сети.

    IP-маршрутизаторы позволяют динамически выбирать альтернативные пути, когда маршрутизаторы пересылают пакеты. Добавление параллельных путей в сети повышает устойчивость к сбоям: если один канал, интерфейс (или маршрутизатор) выходит из строя, можно выбрать альтернативный путь для восстановления сквозного соединения. Все IP-пакеты содержат значение TTL, которое определяет количество переходов маршрутизатора, через которые может быть направлен пакет. Маршрутизатор уменьшает поле количества переходов (IPv4 TTL или IPv6 HopCount) каждый раз, когда он пересылает пакет. Если пакет застревает в петле, значение TTL уменьшается до нуля, после чего пакет автоматически отбрасывается.

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

    Пройдемся по всем этим полям:

    • Версия: первое поле сообщает нам, какую версию IP мы используем, только IPv4 использует этот заголовок, поэтому вы всегда найдете здесь десятичное значение 4.
    • Длина заголовка: это 4-битное поле сообщает нам длину IP-заголовка с шагом 32 бита. Минимальная длина IP-заголовка составляет 20 байт, поэтому при 32-битном приращении вы увидите здесь значение 5. Максимальное значение, которое мы можем создать с 4 битами, равно 15, поэтому с шагом 32 бита длина заголовка будет 60 байт. Это поле также называется длиной интернет-заголовка (IHL).
    • Тип службы: используется для QoS (качество обслуживания). Есть 8 бит, которые мы можем использовать, чтобы пометить пакет, который мы можем использовать, чтобы придать пакету определенную обработку. Подробнее об этом поле можно прочитать в моем уроке о приоритетах IP и DSCP.
    • Общая длина: это 16-битное поле указывает полный размер IP-пакета (заголовок и данные) в байтах. Минимальный размер – 20 байт (если у вас нет данных), а максимальный – 65 535 байт. Это максимальное значение, которое можно создать с помощью 16 бит.
    • Идентификация. Если IP-пакет фрагментирован, каждый фрагментированный пакет будет использовать один и тот же 16-битный идентификационный номер для определения того, к какому IP-пакету он принадлежит.
    • Флаги IP: Эти 3 бита используются для фрагментации:
      • Первый бит всегда равен 0.
      • Второй бит называется битом DF (не фрагментировать) и указывает, что этот пакет не должен быть фрагментирован.
      • Третий бит называется битом MF (больше фрагментов) и устанавливается для всех фрагментированных пакетов, кроме последнего.

      Вот реальный пример IP-пакета в Wireshark, где вы можете увидеть, как используются эти поля:

      Я надеюсь, что этот урок был полезен для понимания различных полей в заголовке пакета IPv4.Если у вас есть какие-либо вопросы, не стесняйтесь оставлять комментарии на нашем форуме.

      IP – ненадежный маршрутизируемый протокол доставки пакетов. Все протоколы верхнего уровня используют IP для отправки и получения пакетов, который получает сегменты с транспортного уровня, фрагментирует их на пакеты и передает на сетевой уровень.

      IP-адрес — это логический адрес, назначаемый каждому узлу в сети TCP/IP. IP-адресация предназначена для обеспечения маршрутизации пакетов через объединенные сети. Поскольку IP-адреса легко изменить или подделать, не следует полагаться на них для идентификации в ненадежных средах. Как показано на рис. 1.8, адреса источника и получателя включены в заголовок IP.

      Рисунок 1.8. IP-заголовок

      Давайте взглянем на каждое из этих полей на рис. 1.8.

      Ver документирует номер версии IP. Этот шаблон предназначен для IP версии 4, обычно используемой в Интернете.

      IHL – это длина заголовка Интернета в 32-разрядных словах, указывающая на начало сегмента данных. Обратите внимание, что минимальное допустимое значение IHL равно 5, если нет вариантов.

      В разделе Тип услуги предлагается желаемое качество обслуживания. В Интернете нельзя гарантировать какой-либо конкретный тип обслуживания; как правило, это поле установлено равным нулю.

      Общая длина указывает длину дейтаграммы. В зависимости от размера самая большая дейтаграмма составляет 65535 байт; это действительно (редко) происходит на некоторых ядрах. Как правило, самый большой размер, который вы видите, равен 1500.

      Поле Идентификация содержит уникальный идентификатор, подготовленный отправителем для помощи в повторной сборке пакетов.

      Есть три флага. Первый бит зарезервирован и всегда равен нулю. Второй бит — это бит «Не фрагментировать», который устанавливается, если маршрутизаторам не разрешено фрагментировать пакет при его передаче. Третий бит — это бит «Больше фрагментов», который устанавливается, если существуют дополнительные фрагменты этого пакета, или не устанавливается, если это последний фрагмент в пакете.

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

      Поле Time To Live указывает максимальное количество переходов через маршрутизатор, которое пакет выдержит, прежде чем будет отброшен. Хост, сгенерировавший пакет, установит значение на некоторое число — Windows часто использует 128, некоторые Unix используют 64 — и по мере маршрутизации пакета это число уменьшается.

      Контрольная сумма вычисляется только для заголовка, поэтому она не проверяет целостность полезной нагрузки данных.

      Поля исходный адрес и адрес назначения заполняются IP-адресами соответствующих устройств; обратите внимание, что IP-адрес состоит из четырех октетов, поэтому его можно рассматривать как 32-битное число.

      Поле options похоже на поле опций TCP и аналогичным образом позволяет заполнять нулевыми байтами параметры плюс padding до числа, кратного 32 битам.

      Урон и защита…

      Проникновение острыми осколками

      Поскольку не все каналы позволяют передавать фрагменты одинакового размера, иногда маршрутизаторам приходится фрагментировать дейтаграммы (сегментировать часть данных и разбивать их на несколько пакетов), а конечным хостам приходится повторно собирать фрагменты в исходную дейтаграмму. Повторная сборка пакетов может отнимать много времени у детективных систем, поэтому злоумышленники часто искусственно фрагментируют свои пакеты перед доставкой, чтобы обойти брандмауэры и системы обнаружения вторжений. Один из приемов заключался в использовании отрицательных фрагментов пакета для создания пакета с перезаписанными адресами источника и получателя!

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

      Сетевая криминалистика

      Чет Хосмер, Python Forensics, 2014 г.

      Распаковка буферов

      Извлечение информации из буфера, подобного этому, может показаться довольно утомительным, так как мы должны проанализировать соответствующую информацию из буфера. Чтобы иметь дело с буферизованными данными, подобными этому, с определенной структурой, Python предоставляет функцию unpack(). В Интернете доступно множество примеров и приложений unpack, которые анализируют различные известные структуры данных, однако объяснение того, как работают функции, обычно оставляется воображению читателя или, по крайней мере, требует дальнейшего изучения.

      Для иллюстрации вы найдете в Интернете примеры, подобные этому, для извлечения информации из заголовка IPv4.

      buffer = unpack('!BBHHHBBH4 s4 s' , ipHeader)

      Как и во всех главах этой книги, я хочу убедиться, что вы глубоко понимаете, как работают функции, чтобы вы могли применить их к текущей задаче, а также к другим проблемам в будущем. Функция unpack() принимает два параметра: первый — это строка, определяющая формат данных, хранящихся в буфере, а второй — буфер, который необходимо проанализировать.Функция возвращает кортеж, который можно обрабатывать так же, как список.

      Чтобы понять это, мы должны сначала изучить структуру заголовка пакета IPv4, как показано на рис. 9.4, и сравнить ее со строкой формата «!BBHHHBBH4 s4 s».

      Рисунок 9.4. Типичный заголовок пакета IPv4.

      Каждый из символов строки формата имеет особое значение, которое управляет обработкой функции unpack(). Если вы ошибетесь в строке формата, вы получите обратно мусор, или если буфер, который вы передаете в качестве второй переменной, не соответствует точному формату, который вы указали, результаты будут неверными.

      Давайте рассмотрим значение каждого символа в строке формата «!BBHHHBBH4 s4 s». Примечание: существуют и другие спецификации формата, которые задокументированы в документации стандартной библиотеки [UNPACK]:

      ФорматТип PythonБайты
      ! Big Endian
      B Целое число 1
      H Целое число2
      s Строкаn

      Первый символ в строке формата представляет собой порядок байтов данных, для сетевых пакетов это формат с обратным порядком байтов. Это представлено в виде восклицательного знака, который является первым символом в спецификации формата. Вы также можете использовать знак «>» больше, чем, что также означает обратный порядок байтов, но пояснение здесь для тех из нас, кто никогда не может вспомнить типичный порядок байтов сетевых данных. На самом деле хорошо использовать восклицательный знак, потому что он сразу идентифицирует строку формата как относящуюся к сетевому пакету.

      В приведенной ниже таблице показано сопоставление каждого из символов формата, связанных с заголовком IPv4.

      Теперь, когда вы понимаете значение строки формата и базовой функции unpack(). Следующий код распаковывает заголовок IPv4, а затем извлекает каждое из полей в переменные для обработки. Я также включил сюда код для преобразования IP-адресов источника и получателя в удобочитаемую форму с использованием встроенного метода сокетов.

      ipHeaderTuple = распаковать('!BBHHHBBH4s4s' , пакет)

      Далее мы будем использовать тот же процесс для извлечения полей из части данных пакета, которая в данном случае является заголовком TCP. Вы можете определить тип части данных пакета, изучив поле протокол. На рис. 9.5 показан типичный заголовок TCP и строка формата «!HHLLBBHHH» вместе с функцией unpack(), которую можно использовать для извлечения отдельных полей заголовка TCP.

      Рисунок 9.5. Типичный заголовок TCP-пакета.

      stripTCPHeader = пакет[ipHdrLength:ipHdrLength + 20]

      tcpHeaderBuffer = unpack('!HHLLBBHHH' , stripTCPHeader)

      tcpHeaderLength = (dataOffsetandReserve > > 4) * 4

      FIN = флаги и 0x01

      SYN = (флаги > > 1) & 0x01

      RST = (флаги > > 2) & 0x01

      PSH = (флаги > > 3) & 0x01

      ACK = (флаги > > 4) & 0x01

      URG = (флаги > > 5) & 0x01

      ECE = (флаги > > 6) & 0x01

      CWR = (флаги > > 7) & 0x01

      Теперь, когда у нас есть основы, давайте рассмотрим:

      Как перевести нашу сетевую карту в неразборчивый режим

      Как создать необработанный сокет в Linux

      Как распаковать пакет, чтобы получить отдельные поля

      Мы готовы создать приложение, которое может перехватывать сетевые пакеты и извлекать информацию, которая позволит нам отслеживать трафик.

      Настройка Sniffer Pro для мониторинга сетевых приложений

      Панель сведений

      Панель «Подробности» удобна для того, чтобы заглянуть внутрь пакета и провести серьезный анализ декодирования. Эта панель показывает вам все более мелкие детали протокола, который вы записали. На рис. 4.8 вы можете видеть, что мы все еще смотрим на ARP, но теперь в панели Details. Панель «Подробности» — это хороший способ более подробно изучить каждый выбранный вами кадр (в панели «Сводка»); именно здесь вам нужно будет знать фактическую разбивку каждого протокола и то, что содержится внутри. Как вы можете видеть на рис. 4.8, вы просматриваете кадр ARP, чтобы увидеть больше «подробностей» о протоколе.

      Рисунок 4.8. Просмотр области сведений

      Рисунок 4.9. Просмотр примера снимка

      Следующий раздел фрейма, который мы изучаем на панели сведений, — это заголовок IP. Вы можете видеть, что мы минимизировали заголовок DLC и максимизировали заголовок IP для просмотра на рис. 4.10. Теперь, как было кратко рассмотрено в главе 1, важно знать поля IP-заголовка, но что все это значит? Вы узнаете ответ на этот вопрос, просмотрев панель сведений.

      Рисунок 4.10. Просмотр заголовка IP в области сведений

      На рис. 4.11 показаны поля заголовка IP. Теперь сопоставьте их с деталями данных, найденными в области сведений Sniffer Pro на рис. 4.10. Давайте посмотрим на них:

      Рисунок 4.11. Просмотр заголовка IP

      Версия Версия 4, что означает IPv4.

      IHL Длина заголовка Интернета составляет 20 байт.

      ToS Тип службы (ToS) — 00, и мы видим все нули, ведущие вниз к полю Total Length. Биты ToS предоставляют информацию о качестве обслуживания (QoS); каждый бит означает что-то другое в зависимости от того, как он установлен. Например, для параметра «Нормальная задержка» установлено значение 0, что означает, что у него нет настройки низкой задержки, равной 1. Sniffer Pro предоставляет вам информацию, поэтому вам не нужно ее искать.

      Общая длина Общая длина этих данных составляет 1476 байт. Это общая длина интернет-заголовка и данных.

      ID Это идентификационная часть заголовка, которая показывает вам значение (число), которое используется хостом-отправителем, чтобы после фрагментации дейтаграммы ее можно было собрать заново.

      Флаги Дейтаграмма имеет «помеченные» обязанности, такие как фрагментировать (обозначается 0) или не фрагментировать (обозначается 1) дейтаграмму.

      Смещение фрагмента Смещение фрагмента равно 0 байт. Вы можете увидеть, что для этого параметра установлено значение 0 для последнего фрагмента или 1 для дополнительных фрагментов. Здесь он отображается как 0. Смещение фрагмента используется для указания того, к какому месту принадлежит этот конкретный фрагмент в этой дейтаграмме.

      TTL Время жизни (TTL) составляет 113 секунд. TTL отмечает количество времени, в течение которого дейтаграмма может оставаться активной. Эта информация полезна, потому что она предотвращает бесконечную циркуляцию данных без назначения в системе. Если для этого числа установлено значение 0, это означает конец жизни дейтаграммы, и она отбрасывается.

      Протокол Протокол равен 6; Sniffer Pro пометил этот протокол как TCP. Протокольная часть заголовка помечает только следующий используемый протокол верхнего уровня, который оказывается TCP. (Вы увидите это в следующей части данных, которые мы обсудим.)

      Контрольная сумма Контрольная сумма (используется только в этом заголовке) — B597, и Sniffer Pro пометил ее как «правильную».

      SA Исходный адрес (SA) — это веб-сайт Syngress. Это говорит о том, что это пакет и вся идея этой передачи заключается в том, что это, скорее всего, ответ.

      DA Адрес назначения (DA) — это рабочая станция, посещающая веб-сайт Syngress; следовательно, сюда отправляется ответ.

      Параметры и отступы В поле «Параметры» здесь нет параметров. У вас не должно быть опций в заголовке.

      Возможно, вы никогда не думали, что знаете все это, но та чушь, которую вы читали о протоколах, OSI, битах и ​​байтах, теперь должна иметь немного больше смысла. На рис. 4.11 вы видите заголовок IP в том виде, в каком он был представлен в главе 1.

      Ваша следующая остановка при просмотре этого декодирования на панели сведений — свернуть заголовок IP, чтобы мы могли изучить заголовок TCP. На рис. 4.12 мы расширили заголовок TCP так же, как ранее расширили заголовок IP. Мы также уменьшили заголовок IP, чтобы он теперь был вне поля зрения.

      Рисунок 4.12. Просмотр заголовка TCP

      Порт назначения В качестве порта назначения используется порт 3689 (выше общеизвестного диапазона).

      Порядковый номер Порядковый номер (и следующий ожидаемый порядковый номер) используются для управления последовательностью.

      Номер подтверждения Поскольку бит ACK установлен (как показано несколькими полями ниже, где подтверждение установлено на 1), поле номера подтверждения содержит номер следующего порядкового номера, который ожидает получить отправитель этих данных.

      Смещение Смещение данных устанавливается равным 20 байтам, что помогает указать, где начинаются данные.

      Флаги Флаги равны 10.

      U Указатель срочности (URG) установлен на 0 или нет.

      A Для подтверждения (ACK) установлено значение 1 или Да.

      P Для функции push (PSH) установлено значение 0 или Нет.

      R Для сброса соединения (RST) установлено значение 0 или Нет.

      S Для номера последовательности синхронизации (SYN) установлено значение 0 или нет.

      F Для параметра "Нет данных от отправителя" (FIN) установлено значение 0 или Нет.

      Window Окна равны 7425.

      Контрольная сумма Контрольная сумма равна 94Feh и является правильной.

      Параметры + заполнение В настоящее время параметры не установлены.

      Данные: 1436 байт данных.

      Это становится все интереснее по мере того, как мы углубляемся, а мы еще даже не добрались до полной полезной нагрузки. Sniffer Pro — это бесценный инструмент, который вы можете использовать для изучения деталей данных, как мы делаем здесь. Помните, что мы по-прежнему смотрим только на один фрейм данных!Даже если вы не понимаете всего, на что смотрите (объем информации о декодировании протоколов огромен), вы можете, по крайней мере, получить захват, а затем изучить информацию в Интернете или в RFC, чтобы узнать больше о конкретные протоколы, которые вы декодируете. Как видите, до сих пор мы просто показывали вам, как использовать панели Sniffer Pro Analysis Decide (Summary, Details и Hex) для чтения собранных вами данных. Вы будете использовать этот навык до конца этой книги и до конца своей карьеры в качестве SCP, анализирующего сети и протоколы.

      Заголовки IPv4 и IPv6

      Заголовок пакета IPv4

      Общая структура пакета IPv4 показана на рис. 7.3. Минимальный заголовок (без опций, наиболее распространенная ситуация) имеет длину 20 байт (всегда отображается в формате 4 байта на строку) и максимальную длину (встречается очень редко) 60 байт. Некоторые поля говорят сами за себя, например поля для 4-байтового (32-битного) адреса источника и получателя IPv4, но другие имеют особое назначение.

      Рисунок 7.3. Пакет и заголовок IPv4

      Версия: в настоящее время установлено значение 0x04 для IPv4.

      Длина заголовка – технически это длина заголовка Интернет (IHL). Это длина IP-заголовка в 4-байтовых (32-битных) единицах, известных как «слова», и включает в себя любые присутствующие поля параметров и заполнение, необходимое для выравнивания заголовка по 32-битной границе. На рис. 7.2 это 20 байт, что является наиболее распространенным.

      Тип службы (TOS) – содержит параметры, влияющие на то, как пакет обрабатывается маршрутизаторами и другим оборудованием. Никогда широко не использовавшийся, он был переопределен как кодовые точки дифференцированных служб (DiffServ или DS). Значение этих битов, для которых на рис. 7.2 установлено значение 0, было подробно описано ранее в этой главе.

      Следующие четыре поля, выделенные курсивом на рис. 7.3, непосредственно связаны с процессом фрагментации. Фрагментация, описанная в главе 4, происходит, когда пакет пересылается по каналу передачи данных, и содержимое пакета не помещается в один кадр. В этих случаях содержимое пакета должно быть фрагментировано и распределено по нескольким кадрам, а затем повторно собрано на хосте назначения. Фрагментация будет подробно обсуждаться в следующем разделе этой главы.

      Общая длина пакета — это длина всего пакета в байтах. Максимальное значение для этого двухбайтового поля составляет 65 535 байт. К этой длине не приближается никакая стандартная реализация TCP/IP или размер сетевого MTU. Пакет на рис. 7.2 имеет длину 1500 байт, наиболее распространенную длину из-за преобладания локальных сетей Ethernet.

      Идентификация — 16-битный номер, установленный для каждого пакета, чтобы помочь хосту назначения собрать фрагменты с одинаковыми номерами. Даже неповрежденные отдельные пакеты могут быть фрагментированы маршрутизаторами (иногда неоднократно) на пути к месту назначения, поэтому это поле необходимо заполнить. На рисунке 7.2 это поле имеет значение 0×78be ( 30910 ).

      Флаги: определены только первые 3 бита этого поля. Бит 1 зарезервирован и должен быть установлен на 0. Бит 2 (DF) установлен на 0, если фрагментация разрешена, или на 1, если фрагментация не разрешена. Бит 3 (MF) устанавливается в 0, если пакет является последним фрагментом, или в 1, если ожидается больше фрагментов. Обратите внимание, что поле MF не подразумевает какой-либо последовательности прибывающих фрагментов и не гарантирует, что набор будет полным. Другие поля проверяются для определения последовательности и полноты. Пакет на рис. 7.2 вызовет ошибку при обнаружении устройства, которое хочет фрагментировать содержимое пакета.

      Остальные поля заголовка IP не связаны с фрагментацией.

      Контрольная сумма заголовка — поле обнаружения ошибок только для IP-заголовка, а не для полей данных пакета. Если вычисленная контрольная сумма не совпадает у получателя, заголовок поврежден и не маршрутизируется. На рис. 7.2 не только показана контрольная сумма заголовка 0x4f6b, но и Ethereal сообщает нам, что она верна.

      Исходный и конечный адреса – 32-разрядные IPv4-адреса исходного и конечного хостов. Пакет на рис. 7.2 отправлен с 10.10.12.222 на 10.10.12.1.

      Параметры. В настоящее время параметры IPv4 редко используются для передачи данных и не будут описываться далее, а также не показаны на рис. 7.2.

      Заполнение — при использовании параметров поле заполнения гарантирует, что заголовок заканчивается 32-битной границей. То есть заголовок должен быть целым числом 4-байтовых «слов». Заголовок на рис. 7.2 не дополнен, и некоторые из них заполнены, поскольку использование опций необычно.

      В этой главе из Понимание IPv6, 3-е издание рассматривается структура пакета IPv6, заголовок IPv6, заголовки расширения IPv6, MTU IPv6 и контрольные суммы верхнего уровня.

      К концу этой главы вы сможете делать следующее:

      Опишите структуру пакета IPv6.

      Перечислите и опишите поля в заголовке IPv4.

      Перечислите и опишите поля в заголовке IPv6.

      Сравните и сопоставьте поля в заголовке IPv4 с полями в заголовке IPv6.

      Перечислите и опишите каждый заголовок расширения IPv6.

      Опишите максимальную единицу передачи (MTU) IPv6.

      Опишите новый псевдозаголовок, используемый для контрольных сумм верхнего уровня.

      Структура пакета IPv6

      Пакет Интернет-протокола версии 6 (IPv6) состоит из заголовка IPv6, расширенных заголовков и блока данных протокола верхнего уровня. На рис. 4-1 показана структура пакета IPv6.

      Рис. 4-1. Структура пакета IPv6.

      Компоненты пакета IPv6 следующие:

      Заголовок IPv6 Заголовок IPv6 присутствует всегда и имеет фиксированный размер 40 байт. Поля заголовка IPv6 описаны в разделе «Заголовок IPv6» этой главы.

      Заголовки расширения. Может присутствовать ноль или более заголовков расширения, и они могут иметь разную длину. Если присутствуют заголовки расширения, поле «Следующий заголовок» в заголовке IPv6 указывает на первый заголовок расширения. Внутри каждого заголовка расширения есть еще одно поле «Следующий заголовок», указывающее следующий заголовок расширения. Последний заголовок расширения указывает заголовок для протокола верхнего уровня, такого как протокол управления передачей (TCP), протокол пользовательских дейтаграмм (UDP) или протокол управляющих сообщений Интернета для версии 6 (ICMPv6), который содержится в данных протокола верхнего уровня. единица.

      Заголовок IPv6 и заголовки расширения заменяют существующий заголовок IPv4 и его параметры. Новый формат заголовка расширения позволяет улучшить IPv6 для поддержки будущих потребностей и возможностей. В отличие от опций в заголовке IPv4, заголовки расширения IPv6 не имеют максимального размера и могут расширяться для размещения всех данных расширения, необходимых для связи IPv6. Заголовки расширения IPv6 описаны в разделе «Заголовки расширения IPv6» этой главы.

      Блок данных протокола верхнего уровня Блок данных протокола верхнего уровня (PDU) обычно состоит из заголовка протокола верхнего уровня и его полезной нагрузки (например, сообщения ICMPv6, сегмента TCP или сообщения UDP).< /p>

      Полезная нагрузка пакета IPv6 представляет собой комбинацию заголовков расширения IPv6 и PDU верхнего уровня. Обычно он может иметь длину до 65 535 байт. Также можно отправлять пакеты IPv6 с полезными данными длиной более 65 535 байт, известные как jumbograms.

      Читайте также: