stringtranslate.com

Пакет IPv6

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

Пакеты IPv6 обычно передаются по канальному уровню (т. е. по Ethernet или Wi-Fi ), который инкапсулирует каждый пакет в кадр . Пакеты также могут передаваться по туннельному протоколу более высокого уровня , такому как IPv4 при использовании технологий перехода 6to4 или Teredo .

В отличие от IPv4, маршрутизаторы не фрагментируют пакеты IPv6, превышающие максимальный размер передаваемого блока (MTU), это является исключительной ответственностью исходного узла. Минимальный размер MTU в 1280 октетов предписан IPv6, но хостам «настоятельно рекомендуется» использовать Path MTU Discovery, чтобы воспользоваться преимуществами MTU, превышающими минимальный. [1]

С июля 2017 года Управление по распределению адресов в Интернете (IANA) отвечает за регистрацию всех параметров IPv6, которые используются в заголовках пакетов IPv6. [1]

Фиксированный заголовок

Фиксированный заголовок начинает пакет IPv6 и имеет размер 40 октетов (320 бит ). [1] Байты многобайтовых полей располагаются в сетевом порядке байтов .

Версия: 4 бита
Константа 6 (битовая последовательность 0110 ).
Класс трафика: 6+2 бита
Биты этого поля содержат два значения. Шесть старших бит содержат поле дифференцированных услуг (поле DS), которое используется для классификации пакетов. [2] [3] В настоящее время все стандартные поля DS заканчиваются битом «0». Любое поле DS, заканчивающееся двумя битами «1», предназначено для локального или экспериментального использования. [4] Оставшиеся два бита используются для явного уведомления о перегрузке (ECN); [5] значения приоритета подразделяются на диапазоны: трафик, где источник обеспечивает контроль перегрузки, и трафик без контроля перегрузки.
Метка потока: 20 бит
Высокоэнтропийный идентификатор потока пакетов между источником и местом назначения. Поток — это группа пакетов, например, сеанс TCP или медиапоток. Специальная метка потока 0 означает, что пакет не принадлежит ни одному потоку (использующему эту схему). Более старая схема идентифицирует поток по адресу источника и порту, адресу назначения и порту, протоколу (значение последнего поля Next Header ). [6] Кроме того, было предложено использовать метку потока для обнаружения поддельных пакетов. [7]
Длина полезной нагрузки: 16 бит
Размер полезной нагрузки в октетах, включая любые заголовки расширения. Длина устанавливается в ноль, когда заголовок расширения Hop-by-Hop несет опцию Jumbo Payload. [8]
Следующий заголовок: 8 бит
Указывает тип следующего заголовка. Это поле обычно указывает протокол транспортного уровня , используемый полезной нагрузкой пакета. Если в пакете присутствуют заголовки расширения, это поле указывает, какой заголовок расширения следует за ним. Значения совпадают со значениями, используемыми для поля протокола IPv4, поскольку оба поля имеют одинаковую функцию (см. Список номеров протоколов IP ).
Лимит прыжков: 8 бит
Заменяет поле времени жизни в IPv4. Это значение уменьшается на единицу на каждом узле пересылки, и пакет отбрасывается, если оно становится равным 0. Однако узел назначения должен обработать пакет обычным образом, даже если он получен с ограничением переходов 0.
Исходный адрес: 128 бит
Одноадресный IPv6-адрес отправляющего узла.
Адрес назначения: 128 бит
Одноадресный или многоадресный адрес IPv6 узла(ов) назначения.

Для повышения производительности, а также поскольку предполагается, что современные технологии канального уровня и протоколы транспортного уровня обеспечивают достаточное обнаружение ошибок [9] , заголовок не имеет контрольной суммы для его защиты. [1]

Заголовки расширений

Заголовки расширений несут необязательную информацию уровня Интернета и размещаются между фиксированным заголовком и заголовком протокола верхнего уровня. [1] Заголовки расширений образуют цепочку, используя поля Next Header . Поле Next Header в фиксированном заголовке указывает тип первого заголовка расширения; поле Next Header последнего заголовка расширения указывает тип заголовка протокола верхнего уровня в полезной нагрузке пакета. Все заголовки расширений имеют размер, кратный 8 октетам; некоторые заголовки расширений требуют внутреннего заполнения для выполнения этого требования.

Определено несколько заголовков расширений, и в будущем могут быть определены новые заголовки расширений. Большинство заголовков расширений проверяются и обрабатываются в месте назначения пакета. Параметры Hop-by-Hop могут обрабатываться и изменяться промежуточными узлами и, если они присутствуют, должны быть первым расширением. Все заголовки расширений являются необязательными и должны появляться не более одного раза, за исключением расширения заголовка Destination Options , которое может появляться дважды. [1]

Если узел не распознает определенный заголовок расширения, он должен отбросить пакет и отправить сообщение о проблеме с параметрами ( ICMPv6 тип 4, код 1). [1]

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

Значение 59 (No Next Header) в поле Next Header указывает на то, что за этим заголовком вообще нет следующего заголовка , даже заголовка протокола верхнего уровня. Это означает, что с точки зрения заголовка пакет IPv6 заканчивается сразу после него: полезная нагрузка должна быть пустой. Однако в полезной нагрузке все еще могут быть данные, если длина полезной нагрузки в первом заголовке пакета больше длины всех заголовков расширения в пакете. Эти данные должны игнорироваться хостами, но передаваться маршрутизаторами без изменений. [1] : 4.7 

Варианты пересадок и варианты назначения

Заголовок расширения Hop-by-Hop Options может быть проверен и изменен всеми узлами на пути пакета, включая отправляющие и принимающие узлы. (Для аутентификации значения опций, которые могут меняться по пути, игнорируются.) Заголовок расширения Destination Options должен быть проверен только узлом(ами) назначения. Оба заголовка расширения имеют размер не менее 8 октетов; если присутствует больше опций, чем помещается в этом пространстве, блоки из 8 октетов, содержащие опции и заполнение, добавляются к заголовку повторно, пока все опции не будут представлены.

Следующий заголовок: 8 бит
Указывает тип следующего заголовка.
Длина расширения заголовка: 8 бит
Длина этого заголовка в 8-октетных единицах, не включая первые 8 октетов.
Параметры и заполнение: переменные
Содержит одну или несколько опций и необязательные поля заполнения для выравнивания опций и для того, чтобы сделать общую длину заголовка кратной 8 октетам. Опции кодируются TLV .

Маршрутизация

Заголовок расширения маршрутизации используется для направления пакета на один или несколько промежуточных узлов перед отправкой в ​​пункт назначения. Заголовок имеет размер не менее 8 октетов; если требуется больше данных, специфичных для типа , чем помещается в 4 октета, блоки по 8 октетов добавляются к заголовку повторно, пока все данные, специфичные для типа, не будут размещены. [1]

Следующий заголовок: 8 бит
Указывает тип следующего заголовка.
Длина расширения заголовка: 8 бит
Длина этого заголовка, кратная 8 октетам, не включая первые 8 октетов.
Тип маршрутизации: 8 бит
Значение от 0 до 255, присвоенное IANA . [13]
Осталось сегментов: 8 бит
Количество узлов, которые пакету еще предстоит посетить, прежде чем он достигнет своего конечного пункта назначения.
Данные, зависящие от типа: переменная
Данные, относящиеся к этому типу заголовка маршрутизации.

Фрагмент

Чтобы отправить пакет, который больше, чем MTU пути , отправляющий узел разбивает пакет на фрагменты. Заголовок расширения Fragment несет информацию, необходимую для повторной сборки исходного (нефрагментированного) пакета. [1]

Следующий заголовок: 8 бит
Определяет тип следующего заголовка.
Зарезервировано: 8 бит; Зарезервировано == 0
Инициализировано всеми нулями.
Смещение фрагмента: 13 бит
Смещение в 8-октетных единицах относительно начала фрагментируемой части исходного пакета.
Reserved2  (Res): 2 бита; Res == 0
Зарезервировано; инициализировано нулями.
Флаг M  (M): 1 бит
1 означает, что следуют еще фрагменты; 0 означает последний фрагмент.
Идентификация: 32 бита
Значение идентификации пакета, сгенерированное исходным узлом. Необходимо для повторной сборки исходного пакета.

Заголовок аутентификации (AH) и инкапсуляция полезной нагрузки безопасности (ESP)

Заголовок аутентификации и инкапсулирующая полезная нагрузка безопасности являются частью IPsec и используются одинаково в IPv6 и IPv4. [19] [20]

Полезная нагрузка

За фиксированными и необязательными заголовками IPv6 следует полезная нагрузка верхнего уровня , данные, предоставляемые транспортным уровнем, например, сегмент TCP или датаграмма UDP . Поле Next Header последнего заголовка IPv6 указывает, какой тип полезной нагрузки содержится в этом пакете.

Стандартная длина полезной нагрузки

Поле длины полезной нагрузки IPv6 (и IPv4 ) имеет размер 16 бит, что позволяет указать максимальную длину65 535 октетов для полезной нагрузки. На практике хосты определяют максимальную полезную длину полезной нагрузки с помощью Path MTU Discovery (выдавая минимальный MTU по пути от отправителя к получателю), чтобы избежать необходимости фрагментировать пакеты. Большинство протоколов канального уровня имеют MTU значительно меньше, чем65 535 октетов.

Джамбограмма

Дополнительная функция IPv6, опция jumbo payload в заголовке расширения Hop-By-Hop Options [8], позволяет обмениваться пакетами с полезной нагрузкой до одного октета менее 4 ГБ (2 32 − 1 =    4 294 967 295 октетов), используя 32-битное поле длины. Пакеты с такой полезной нагрузкой называются джамбограммами .

Поскольку и TCP , и UDP включают поля, ограниченные 16 битами (длина, указатель срочных данных), поддержка джамбограмм IPv6 требует внесения изменений в реализацию протокола транспортного уровня. [8] Джамбограммы актуальны только для соединений, имеющих MTU больше, чем65 583 октета (более65 535 октетов для полезной нагрузки, плюс 40 октетов для фиксированного заголовка, плюс 8 октетов для заголовка расширения Hop-by-Hop ). Только несколько протоколов канального уровня могут обрабатывать пакеты размером более65 535 октетов. [ необходима ссылка ]

Фрагментация

В отличие от IPv4, маршрутизаторы IPv6 никогда не фрагментируют пакеты IPv6. Пакеты, превышающие размер максимального блока передачи (MTU) целевого канала, отбрасываются, и это состояние сигнализируется сообщением ICMPv6 Packet too big исходному узлу, аналогично методу IPv4, когда установлен бит Don't Fragment . [1] Ожидается, что конечные узлы в IPv6 выполнят Path MTU Discovery для определения максимального размера отправляемых пакетов, а протокол верхнего уровня должен ограничить размер полезной нагрузки. Если протокол верхнего уровня не может этого сделать, отправляющий хост может вместо этого использовать заголовок расширения Fragment.

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

Фрагментация

Пакет, содержащий первый фрагмент исходного (более крупного) пакета, состоит из пяти частей: заголовков каждого фрагмента (важнейшие исходные заголовки, которые многократно используются в каждом фрагменте), за которыми следует заголовок расширения фрагмента , содержащий нулевое смещение, затем все оставшиеся исходные заголовки расширения, затем исходный заголовок верхнего уровня (альтернативно заголовок ESP) и часть исходной полезной нагрузки. [1] Каждый последующий пакет состоит из трех частей: заголовков каждого фрагмента, за которыми следует заголовок расширения фрагмента и часть исходной полезной нагрузки, идентифицированная смещением фрагмента.

Заголовки по фрагментам определяются на основе того, содержит ли оригинал заголовок расширения Routing или Hop-by-Hop . Если ни один из них не существует, то фрагментная часть представляет собой только фиксированный заголовок. Если существует заголовок расширения Routing , то фрагментные заголовки включают фиксированный заголовок и все заголовки расширения вплоть до заголовка Routing включительно . Если существует заголовок расширения Hop-by-Hop , то фрагментные заголовки состоят только из фиксированного заголовка и заголовка расширения Hop-by-Hop .

В любом случае, последний заголовок части per-fragment имеет значение Next Header, установленное на 44, чтобы указать, что следует заголовок расширения Fragment . Каждый заголовок расширения Fragment имеет свой флаг M , установленный на 1 (указывающий на то, что следуют еще фрагменты), за исключением последнего, флаг которого установлен на 0. Длина каждого фрагмента кратна 8 октетам, за исключением, возможно, последнего фрагмента.

Заголовки по фрагментам исторически назывались «нефрагментируемой частью», имея в виду возможность фрагментации остальной части заголовка до 2014 года. Теперь ни один заголовок не является фактически фрагментируемым. [21]

Повторная сборка

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

Если не все фрагменты получены в течение 60 секунд после получения первого пакета с фрагментом, повторная сборка исходного пакета прекращается, и все фрагменты отбрасываются. Если был получен первый фрагмент (содержащий фиксированный заголовок), а один или несколько других отсутствуют, то узлу, отправившему фрагментированный пакет, возвращается сообщение Time Exceeded ( ICMPv6 тип 3, код 1).

Когда узел повторной сборки обнаруживает фрагмент, который перекрывается с другим фрагментом, повторная сборка исходного пакета прерывается, и все фрагменты отбрасываются. Узел может опционально игнорировать точные дубликаты фрагмента вместо того, чтобы рассматривать точные дубликаты как перекрывающие друг друга. [1]

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

Безопасность

Исследования показали, что использование фрагментации может быть использовано для обхода контроля сетевой безопасности. В результате в 2014 году ранее допускаемое переполнение цепочки заголовков IPv6 за пределы первого фрагмента было запрещено, чтобы избежать некоторых очень патологических случаев фрагментации. [21] Кроме того, в результате исследования обхода Router Advertisement Guard, [22] использование фрагментации с Neighbor Discovery устарело, а использование фрагментации с Secure Neighbor Discovery (SEND) не рекомендуется. [23]

Ссылки

  1. ^ abcdefghijklm S. Deering ; R. Hinden (июль 2017 г.). Спецификация протокола Интернета версии 6 (IPv6). IETF . doi : 10.17487/RFC8200 . STD 86. RFC 8200. Интернет-стандарт 86. Устаревший RFC 2460.
  2. ^ К. Николс; С. Блейк; Ф. Бейкер ; Д. Блэк (декабрь 1998 г.). Определение поля дифференцированных услуг (поле DS) в заголовках IPv4 и IPv6. Сетевая рабочая группа. doi : 10.17487/RFC2474 . RFC 2474. Предложенный стандарт. Отменяет RFC 1455 и 1349. Обновлен RFC 3168, 3260 и 8436.
  3. ^ Д. Гроссман (апрель 2002 г.). Новая терминология и разъяснения для DiffServ. doi : 10.17487/RFC3260 . RFC 3260. Информационное. Обновления RFC 2474, 2475 и 2597.
  4. ^ abc B. Fenner (ноябрь 2006 г.). Экспериментальные значения в заголовках IPv4, IPv6, ICMPv4, ICMPv6, UDP и TCP. Сетевая рабочая группа. doi : 10.17487/RFC4727 . RFC 4727. Предлагаемый стандарт.
  5. ^ K. Ramakrishnan; S. Floyd; D. Black (сентябрь 2001 г.). Добавление явного уведомления о перегрузке (ECN) к IP. Сетевая рабочая группа. doi : 10.17487/RFC3168 . RFC 3168. Предложенный стандарт. Отменяет RFC 2481. Обновляет RFC 2474, 2401 и 793. Обновлен RFC 4301, 6040 и 8311.
  6. ^ С. Аманте; Б. Карпентер ; С. Цзян; Дж. Раджахалме (ноябрь 2011 г.). Спецификация метки потока IPv6. IETF . дои : 10.17487/RFC6437 . ISSN  2070-1721. РФК 6437. Предложенный стандарт. Отменяет RFC 3697. Обновляет RFC 2205 и 2460.
  7. ^ Использование метки потока IPv6 в качестве одноразового значения транспортного уровня для защиты от атак с подменой вне пути
  8. ^ abc D. Borman; S. Deering ; R. Hinden (август 1999). IPv6 Jumbograms. Сетевая рабочая группа. doi : 10.17487/RFC2675 . RFC 2675. Предложенный стандарт. Отменяет RFC 2147.
  9. ^ C. Partridge; F. Kastenholz (декабрь 1994 г.). Технические критерии выбора IP следующего поколения (IPng). Сетевая рабочая группа. doi : 10.17487/RFC1726 . RFC 1726. Информационный. раздел 2.6.
  10. ^ T. Heer; P. Jokela; T. Henderson (апрель 2015 г.). R. Moskowitz (ред.). Host Identity Protocol Version 2 (HIPv2). Internet Engineering Task Force (IETF). doi : 10.17487/RFC7401 . ISSN  2070-1721. RFC 7401. Предложенный стандарт. Отменяет RFC 5201. Обновлен RFC 8002 и 9374.
  11. ^ E. Nordmark; M. Bagnulo (июнь 2009 г.). Shim6: протокол многоадресной коммутации уровня 3 для IPv6. Сетевая рабочая группа. doi : 10.17487/RFC5533 . RFC 5533. Предлагаемый стандарт.
  12. ^ abcd T. Narten (январь 2004 г.). Назначение экспериментальных и тестовых номеров, считающихся полезными. Сетевая рабочая группа. doi : 10.17487/RFC3692 . BCP 82. RFC 3692. Лучшая общепринятая практика. Обновления RFC 2434.
  13. ^ "Параметры протокола Интернета версии 6 (IPv6): типы маршрутизации". IANA . Получено 15 октября 2021 г. .
  14. ^ Филипп Бионди, Арно Эбалард (апрель 2007 г.). "Безопасность заголовка маршрутизации IPv6" (PDF) . EADS . Получено 3 декабря 2010 г. . Тип 0: злой механизм...
  15. ^ J. Abley; P. Savola; G. Neville-Neil (декабрь 2007 г.). Устаревание заголовков маршрутизации типа 0 в IPv6. doi : 10.17487/RFC5095 . RFC 5095. Проект стандарта. Обновления RFC 2460 и 4294.
  16. ^ I. Castineyra; N. Chiappa; M. Steenstrup (август 1996 г.). Архитектура маршрутизации Nimrod. doi : 10.17487/RFC1992 . RFC 1992. Информационный.
  17. ^ J. Hui; JP. Vasseur; D. Culler; V. Manral (март 2012 г.). Заголовок маршрутизации IPv6 для исходных маршрутов с протоколом маршрутизации для сетей с низким энергопотреблением и потерями (RPL). Internet Engineering Task Force . doi : 10.17487/RFC6554 . RFC 6554. Предлагаемый стандарт.
  18. ^ S. Previdi; J. Leddy; S. Matsushima; D. Voyer (март 2020 г.). C. Filsfils; D. Dukes (ред.). Заголовок маршрутизации сегмента IPv6 (SRH). Internet Engineering Task Force (IETF). doi : 10.17487/RFC8754 . ISSN  2070-1721. RFC 8754. Предлагаемый стандарт.
  19. ^ S. Kent (декабрь 2005 г.). Заголовок аутентификации IP. Сетевая рабочая группа. doi : 10.17487/RFC4302 . RFC 4302. Предложенный стандарт. Отменяет RFC 2402.
  20. ^ S. Kent (декабрь 2005 г.). IP-инкапсуляция безопасной полезной нагрузки. Сетевая рабочая группа. doi : 10.17487/RFC4303 . RFC 4303. Предложенный стандарт. Отменяет RFC 2406.
  21. ^ ab F. Gont; V. Manral; R. Bonica (январь 2014 г.). Последствия использования слишком больших цепочек заголовков IPv6. Internet Engineering Task Force (IETF). doi : 10.17487/RFC7112 . ISSN  2070-1721. RFC 7112. Предложенный стандарт. Обновления RFC 2460.
  22. ^ F. Gont (февраль 2014 г.). Рекомендации по внедрению IPv6 Router Advertisement Guard (RA-Guard). Internet Engineering Task Force (IETF). doi : 10.17487/RFC7113 . ISSN  2070-1721. RFC 7113. Информационное. Обновления RFC 6105.
  23. ^ Ф. Гонт (август 2013 г.). Последствия фрагментации IPv6 для безопасности с обнаружением соседей IPv6. Internet Engineering Task Force (IETF). doi : 10.17487/RFC6980 . ISSN  2070-1721. RFC 6980. Предложенный стандарт. Обновления RFC 3971 и 4861.