Справочник по сетевым протоколам

       

Протокол IPv6 решает потенциальную проблему




Протокол IPv6 решает потенциальную проблему нехватки IP- адресов посредством использования 128- разрядных адресов вместо 32- разрядных адресов IPv4, благодаря чему адресное пространство расширяется в 296 раз. Формат заголовка приведен на рис.1.

0                           8                       16                                                              31


Version Prio Flow Label
Payload Length Next Header Hop Limit
Source Address
Destination Address


Рис. 1. Основной заголовок протокола IPv6

Version
(4 бита). Версия протокола. Значением этого поля равно 6.



Prio
(4 бита). Приоритет. Поле приоритета позволяет отправителю назначать дейтаграмме определенный уровень приоритета по отношению к другим отправляемым пакетам. Возможные 16 значений этого поля разделены на две категории: значение поля от 0 до 7 используется для дейтаграмм, которые могут не передаваться при слишком переполненной линии. Сюда относится ТСР - трафик, передача e-mail, FTP, NFS, TELNET, X-interactive. Значения поля от 8 до 15 назначаются пакетам, которые должны быть отправлены при любом состоянии (кроме обрыва) линии. Например, приоритет 8 пользователь может назначить пакетам, которые он может позволить себе отправить в последнюю очередь при перегруженной линии, а приоритет 15 — в первую. Последние представляют пакеты реального времени с видео-, аудио- и аналогичными данными, которые должны передаваться с постоянной скоростью.


Метка потока. Это поле может использоваться отправителем для того, чтобы помечать пакеты, которые требуют специальной обработки сетевыми модулями IPv6. Хосты или шлюзы, не поддерживающие этой опции, должны установить это поле в 0 и игнорировать при обработке пакета.

Поток представляет собой последовательность пакетов, отправляемых определенному получателю (или группе получателей), на пути к которым пакеты должны пройти специальную обработку (например, информация о прохождении определенного потока будет регистрироваться). Таких потоков между одними и теми же хостами может быть несколько, и значение этого поля позволяет идентифицировать отдельный поток. Если значение этого поля установлено в 0, то считается, что дейтаграмма не принадлежит ни к какому потоку. Меткой потока служит псевдо-случайное число в диапазоне 1 — FFFFFF. Это число также может служить хеш-ключом для шлюзов-обработчиков определенного потока.

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



Payload Length
(16 бит). Длина данных. Это длина данных пакета (в байтах), которые следуют за заголовком. Если величина этого поля равна 0, то длина данных дейтаграммы более 65535 и хранится в поле Jumbo Payload (сверхдлина) заголовка Hop-by-Hop Options (см. далее).

Поле протокола IPv4 Total Length было переименовано в протоколе IPv6 в поле Payload Length.



Эти два поля сходны между собой, но не тождественны, поскольку поле Payload Length содержит длину данных после заголовка, в то время как поле Total Length учитывает длину заголовка.



Next Header
(8 бит). Поле следующего заголовка. Это поле содержит информацию типа заголовка, который следует за заголовком IPv6.

Еще одно переименованное и измененное поле IPv4 — это поле Protocol. Оно превратилось в поле Next Header в IPv6. В IPv4 значение поля Protocol, например 6 для TCP или 17 для UDP, определяет, данные какого транспортного протокола следуют за IP-заголовком. В IPv6 поле Next Header позволяет вставлять дополнительные заголовки между данными IP и TCP или UDP. Оно также сообщает тип транспортных данных, следующих за основным или дополнительным IP-заголовком. Кроме того, так как поле Next Header предоставляет информацию о наличии дополнительных заголовков, следующих за основным, данный механизм исключает необходимость в поле Internet Header Length, или IHL.



Hop Limit
(8 бит). Поле ограничения пересылок. Величина этого поля уменьшается на 1 при прохождении дейтаграммой шлюза или хоста. Если величина этого поля равна 0, дейтаграмма уничтожается.

Единица измерения в поле Time to Live в IPv4 — секунды. Однако при прохождении пакета через маршрутизатор, ввиду трудности определения времени ожидания в очереди, значение этого поля уменьшается реально на 1 секунду. Признав эффективность использования числа транзитных маршрутизаторов в качестве способа определения срока жизни пакета, IPng Directorate заменил поле Time To Live на поле Нор Limit в IPv6.



Source Address
(128 бит). Адрес отправителя.



Destination Address
(128 бит). Адрес получателя. Если в заголовке присутствует вложенный заголовок маршрутизации (Routing header), это поле может и не быть адресом назначения.



Адресация IPv6



Адреса назначения и источника в IPv6 имеют длину 128 бит или 16 байт. Версия 6 обобщает специальные типы адресов версии 4 в следующих типах адресов:

Unicast - индивидуальный адрес. Определяет отдельный узел - компьютер или порт маршрутизатора. Пакет должен быть доставлен узлу по кратчайшему маршруту.
Cluster - адрес кластера. Обозначает группу узлов, которые имеют общий адресный префикс (например, присоединенных к одной физической сети). Пакет должен быть маршрутизирован группе узлов по кратчайшему пути, а затем доставлен только одному из членов группы (например, ближайшему узлу).
Multicast - адрес набора узлов, возможно в различных физических сетях. Копии пакета должны быть доставлены каждому узлу набора, используя аппаратные возможности групповой или широковещательной доставки, если это возможно.
<



/p>

Как и в версии IPv4, адреса в версии IPv6 делятся на классы, в зависимости от значения нескольких старших бит адреса.

Большая часть классов зарезервирована для будущего применения. Наиболее интересным для практического использования является класс, предназначенный для провайдеров услуг Internet, названный Provider-Assigned Unicast.

Адрес этого класса имеет следующую структуру:

0       3                  8                       N                           64                           127
010 Registry ID Provider ID Subscriber ID Intra- Subscriber
Поле RegistryID идентифицирует ответственную за присвоение адреса регистратуру Internet, например, InterNIC в Северной Америке или APNIC в Азии. Поле ProviderID идентифицирует оператора Internet. Поле SubscriberID, ответственность за назначение которого несет оператор, идентифицирует конкретного пользователя. Оставшиеся 64 разряда в адресе по принадлежности к провайдеру идентифицируют сеть и хост во многом тем же образом, что и адреса IPv4 с класса А по класс С.

Каждому провайдеру услуг Internet назначается уникальный идентификатор, которым помечаются все поддерживаемые им сети. Далее провайдер назначает своим абонентам уникальные идентификаторы, и использует оба идентификатора при назначении блока адресов абонента. Абонент сам назначает уникальные идентификаторы своим подсетям и узлам этих сетей.

Абонент может использовать технику подсетей, применяемую в версии IPv4, для дальнейшего деления поля идентификатора подсети на более мелкие поля.



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

Под поле идентификатора узла требуется выделения не менее 6 байт, для того чтобы можно было использовать в IP-адресах МАС - адреса локальных сетей непосредственно.

Для обеспечения совместимости со схемой адресации версии IPv4, в версии IPv6 имеется класс адресов, имеющих 00000000 в старших битах адреса. Младшие 4 байта адреса этого класса должны содержать адрес IPv4. Маршрутизаторы, поддерживающие обе версии адресов, должны обеспечивать трансляцию при передаче пакета из сети, поддерживающей адресацию IPv4, в сеть, поддерживающую адресацию IPv6, и наоборот.

В IPv6 128-разрядные адреса записываются в виде восьми 16-разрядных целых чисел, разделенных двоеточием. Каждое целое число представлено четырьмя шестнадцатеричными цифрами; иными словами, вы будете вынуждены ввести 32 шестнадцатеричных цифры для задания IP-адреса. При задании адреса IPv6 разрешает опустить начальные нули в шестнадцатеричных числах, а также использовать пару двоеточий (::) внутри адреса для замены последовательности нулевых чисел.

В качестве иллюстрации мы рассмотрим следующий 128-разрядный адрес:

501А.-0000: 0000:0000:OOFC: ABCD: 3F1F:3D5A. Так как IPv6 позволяет пропустить начальные нули в каждом блоке из 4 шестнадцатеричных цифр в адресе, данный адрес можно записать в сокращенном виде следующим образом: 501A:0:0:0:FC:ABCD:3F1F:3D5A. Однако, если воспользоваться принятым соглашением об исключении последовательных блоков нулей, адрес можно записать еще короче 501A::FC: ABCD:3F1F:3D5A. Теперь адрес состоит всего из пяти шестнадцатеричных чисел вместо восьми. Таким образом, пара двоеточий представляет 3 целых числа, значение которых равно нулю.



Инкапсуляция заголовка



Протокол IPv6 предусматривает возможность помещения отдельных дополнительных заголовков между IP- заголовкам и заголовком транспортного уровня.



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

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

На рис. 2. представлена схема пакета IPv6 без дополнительных заголовков. За основным заголовком IPv6 идет структура TCP.

Ipv6 header

Next header =

TCP
 TCP header + data


Рис. 2. Структура пакета Ipv6 без дополнительных заголовков.



На рис. 3 представлена структура пакета IPv6 с одним дополнительным заголовком пакета, определяющим маршрутизацию дейтаграммы, за ним идет структура TCP.

Ipv6 header

Next header = Routing
Routing header

Next header =

TCP
TCP header + data


Рис. 3. Структура пакета Ipv6 с одним дополнительным заголовком пакета.



На рис. 4 представлена схема пакета IPv6 с двумя дополнительными заголовками, за которыми идет структура TCP.

Ipv6 header

Next header = Routing
Routing header

Next header =

Fragment
Fragment header

Next header =

TCP
TCP header + data


Рис. 4. Структура пакета Ipv6 с двумя дополнительными заголовками.



Полная спецификация протокола IPv6 включает следующие заголовки (приводим их в порядке следования в дейтаграмме):

1. IPv6 header.

2. Hop-by-Hop Options header.

3. Destination Options header (опции получателя 1). Этот заголовок обрабатывается первым получателем, адрес которого указан в поле адреса назначения основного заголовками получателями, перечисленными в заголовке маршрутизации (Routing).

4. Routing header (маршрутизация).

5. Fragment header (фрагментация).

6. Authentication header (аутентификация).

7. Encapsulating Security Payload header (дополнительная аутентификация). Обсуждение этого протокола выходит за рамки данной книги.

8. Destination Options header (опции получателя 2). Этот заголовок обрабатывается только на хосте назначения. Заголовок Destination Option header-1 и заголовок Destination Option header-2 используются для передачи определенных параметров обработки пакета, обсуждение которых выходит за рамки данной книги.

<



/p>

9. Заголовок верхнего уровня (например, TCP).



Hop-by-Hop Options Header



Заголовок ( его формат представлен на рис. 5) содержит информацию, которая должна проверяться на каждом узле по пути следования пакета. Его идентификатор в основном заголовке — число 0.

0                     8                             16                                        31
Next Header Hdr Ext Len Options
 


Рис.4. Формат Hop-by-Hop Options Header

Next Header
(8 бит). Поле идентифицирует тип следующего заголовка.



Hdr Ext Len
(8 бит). Длина данного заголовка в 64-битных единицах (не считая первые 64 бита).



Options.
Поле дополнительных параметров. Оно содержит параметры, определяющие некоторые стандартные операции над дейтаграммой. Кроме этих параметров, поле Options заголовка Hop-by-Hop Options содержит параметр Jumbo Payload (сверхдлина). Он используется IPv6 в тех пакетах, длина которых более 65535 байт. Значение этого параметра представляет собой длину пакета в байтах, включая длину заголовка Hop-by-Hop Options и должно быть больше 65535. При этом значение поля Payload Length в основном заголовке IPv6 должно содержать 0.



ПРИМЕЧАНИЕ.



Следует помнить, что опция Jumbo Payload не используется, если пакет содержит заголовок фрагментации (Fragment header).



Routing Header (заголовок маршрутизации)



Заголовок (рис. 6) используется отправителем IPv6 для того, чтобы указать пакету список (состоящий из одного или более) промежуточных хостов, через которые пакет должен пройти по пути к адресу назначения. Эта функция очень похожа на аналогичную (LSRR или SSRR) в IPv4.



Заголовок маршрутизации идентифицируется значением 43 в заголовке предыдущего заголовка.

0                     8                       16                     24                   31
Next Header Hdr Ext Len Routing Type Segments Left
Type – specific data


 Рис.6. Заголовок Routing header



 Next Header (8 бит). Поле идентификатора следующего заголовка.



Hdr Ext Len
(8 бит). Длина заголовка в 64-битных единицах.



Routing Type
(8 бит). Поле идентификатора типа маршрутизации.



Segment Left
(8 бит). Поле содержит количество тех промежуточных хостов (из указанных в списке), которые дейтаграмма посетила перед приходом к получателю.



Type-specific data
. Поле данных. Структура этого поля определяется форматом типа маршрутизации (Routing Type). Поле выравнивается по 64-битной границе.

В качестве примера рассмотрим структуру этого заголовка Routing Type = 0 (рис.7).

0                           8                             16                             24                      31
Next Header Hdr Ext Len Routing Type = 0 Segments Left
Reserved Strict/Loose Bit Map
Address [1]
. . .
Address [n]
<



/p>



Рис. 7. Заголовок маршрутизации (тип маршрутизации 0)



При значении поля Routing Type = 0, значение полей, описанных ранее не изменяется. Максимальное значение поля Segment Left будет равно 23. Если значение поля Segment Left равно 0, данный заголовок не учитывается и обработчик переходит к работе над заголовком, идентификатор которого указан в поле Next Header.

Reserved (8 бит). Поле не используется.

Strict/Loose Bit Map (24 бита). Каждый бит этого поля (слева направо) обозначает "видимость" каждого следующего сегмента маршрутизации (хост на пути к адресату) по отношению к предыдущему. Если соответствующий бит равен 1, это означает, что данный хост должен лежать в прямой видимости (быть следующим) от предшествующего хоста (шлюза). Если бит равен 0 — путь до следующего хоста может быть произвольным (сравните с полями опции IPv4 SSRR и LSRR). При обработке этого поля учитываются только биты с номерами до величины поля Segment Left.

Address[1..n]. 128-битные адреса.

Fragment header (заголовок фрагментации)



Заголовок фрагментации (рис. 8) используется в IPv6 для отправки пакетов, размер которых превышает допустимый размер дейтаграммы, которая может быть передана через хосты, расположенные на пути к получателю. (Обратите внимание, в версии IPv4 фрагментация могла производиться по пути следования дейтаграммы прозрачно для отправителя, в версии IPv6 фрагментировать дейтаграмму может только отправитель). Идентификатор заголовка равен 44.

0                     8                       16                                 28         31
Next Header Reserved Fragment Offset Res M
Identification
<



/p>



Рис. 8. Заголовок фрагментации

Next Header
(8 бит). Поле идентификатора следующего заголовка.



Reserved
(8 бит). Поле не используется.



Fragment Offset
(13 бит). Поле смещения фрагмента. Смещение задается в 64-битных единицах по отношению к началу фрагментируемой части пакета.



Res
(2 бита). Поле принимает значение 0 в случае передачи и игнорируется и случае приема пакета.



М
(1 бит). Поле принимает значение 1, если имеется следующий фрагмент, и 0, если этот фрагмент последний.



Identification
(32 бита). Идентификатор дейтаграммы. Длинную дейтаграмму отправитель разбивает на несколько небольших фрагментов и отправляет эти фрагменты отдельно. Каждый фрагмент группы содержит идентификатор, который должен быть отличным от идентификатора другой группы, отправленной с теми же адресами отправителя и получателя в тот же период времени, т. е. за период времени, пока все части фрагментированного пакета не достигнут получателя и не соберутся в исходный пакет.



Authentication header (заголовок аутентификации)



Заголовок аутентификации АН (Authentication Header) представляет собой механизм, который обеспечивает целостность передаваемых данных и аутентификацию отправителя на уровне IP-протокола как для IPv4, так и для IPv6. Он обеспечивает защиту передаваемой информации благодаря шифрованию данных на основе криптографического ключа с использованием асимметричных методов кодирования (например, RSA). Данный механизм безопасности более эффективен, чем ранее использовавшийся в IPv4.

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

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



Значения полей и опций дейтаграммы, изменяющиеся в процессе передачи, при вычислении информации аутентификации полагаются равными 0.

Информация аутентификации определяется отправителем дейтаграммы и проверяется только получателем данного пакета. Поскольку промежуточные хосты (или шлюзы) никак не контролируют безопасность передачи, наличие АН не сказывается на скорости обработки пакета. Кроме того, наличие АН ни к чему не обязывает уже сложившуюся инфраструктуру Internet. Данные АН расположены в отдельном заголовке (в случае IPv6 АН располагается после заголовка фрагментации, в случае IPv4 — сразу после основного заголовка IPv4) и, если система не работает с пакетами с АН, она их попросту может игнорировать.

Данные пакета шифруются криптостойким алгоритмом с использованием несимметричного секретного ключа. Структура пакета построена таким образом, что алгоритм работы с секретным ключом не интегрирован в механизм аутентификации IP.

Такое разделение позволяет использовать разные механизмы генерации ключа без изменений основных принципов IP-безопасности. Для того чтобы не передавать ключи и множество параметров алгоритма шифрования для каждого шифруемого пакета, механизм генерации ключа строит логическую таблицу соответствий SA (Security Association), хранящую параметры для каждой шифруемой пары (ключ-алгоритм). Механизм IP АН должен прочитать запись этой таблицы, чтобы определить алгоритм и ключ, используемый при аутентификации каждой дейтаграммы.

При формировании отправляемого IP АН-пакета, первым шагом является построение ассоциации в таблице SA для данной дейтаграммы. Выбор ассоциации в SA осуществляется на основе идентификатора отправителя и адреса получателя пакета. Выбранная SA ассоциация определяет алгоритм, тип алгоритма, ключ и другие параметры шифрования.

Своеобразным связующим звеном между механизмом построения ключа и выбором алгоритма является индекс соответствия параметров шифрования SPI (Security Parameters Index). Это своеобразный код таблицы ассоциаций SA (Security Association), передаваемый в IP АН, по которому (в совокупности с адресом получателя) и происходит поиск соответствия в таблице SA получателя, т.



е., при поступлении пакета, содержащего IP АН, получатель, на основании адреса назначения пакета и значения поля SPI заголовка АН дейтаграммы, определяет запись в таблице соответствий SA, тем самым определяет алгоритм и ключ дешифровки (дополнительную часть несимметричного ключа). Затем он проверяет целостность и дешифрует данные.

Заголовок аутентификации должен появиться в очереди вложенных заголовков только после заголовков, проверяемых у дейтаграммы на каждом хосте и перед любым из так называемых "непроверяемых" заголовков. Его идентификатор в поле Next Header предыдущего заголовка равен 51.

Например, его положение может быть таким IPv6 (рис. 9):

0                     8                             16                                                           31
Next Header Length Reserved
Security Parameters Index
Authentication Data


Рис. 9. Формат АН-заголовка

Next Header
(8 бит). Поле идентификатора следующего заголовка.



Length
(8 бит). Добавочная длина. Это поле содержит длину данных аутентификации в 32-битных единицах. Минимальное значение этого поля равно 0, что означает отсутствие шифрования данных (нулевой алгоритм).



Reserved
(16 бит). Поле не используется.



Security Parameters Index (SPI)
(32 бита). Поле индекса параметра. Псевдослучайное число, определяющее индекс соответствия в SA (определяющей тип алгоритма, параметры шифрования и т. д.). Значение равное 0 используется при отсутствии соответствий, значения 1—255 зарезервированы.



Authentication Data
. Данные аутентификации — это результат работы алгоритма шифрования на основании содержимого всей дейтаграммы (неизменяемых в процессе передачи полей). Данные аутентификации сохраняют свой формат (но не содержание) для определенной пары (SPI и адрес получателя).

Наряду с заголовком АН, для обеспечения секретности передаваемых данных используется другой "псевдопротокол" IP Encapsulating Security Payload (ESP). Он построен примерно по тем же принципам, что и IP АН. <



table border="0" cellpadding="0" cellspacing="0" width="100%">
Flow Label (24 бита).


Содержание раздела