Детали

ICMPv6

Все сообщения в ICMPv6 (RFC4443) можно разделить на:

  • Информационные
  • Сообщения об ошибках

Существует несколько типов сообщений, конкретный тип может дополняться детализирующим кодом. Структура всех сообщений однотипна:
тип(8бит)-код(8бит)-контрольная сумма(16бит)-сообщение(..до общей длины 1280 байтов).

Вот сообщения об ошибках (тип-код-сообщение-комментарий). У них старший бит всегда установлен в «0», то есть тип может принимать значения от 0 до 127.

1:0:Destination unreacheable:No route to destination
В таблице маршрутизации нет нужного маршрута

1:1:Destination unreacheable:Administratively Prohibited
Пакет попал под запрещающее правило в фильтре-файерволе

1:2:Destination unreacheable:Beyond the scope of source address
Пакет попал не на тот интерфейс

1:3:Destination unreacheable:Address unreacheable
не определяется link-layer адрес получателя

1:4:Destination unreacheable:Port unreacheable
Получатель не «слушает» на этом порту

1:5:Destination unreacheable:Source address failed ingress/egress policy
С таким адресом источника сюда не пускают

1:6:Destination unreacheable:Reject route to destination
Пакет попал под действие запрещающего фильтра на роутере

2:0:Packet too big
MTU на интерфейсе меньше, чем длина пакета. В таком сообщении сразу за контрольной суммой идет MTU интерфейса, которое затем может быть использовано в процессе MTU Discovery отправителем

3:0:Time exceeded:Hop limit reached
После обработки пакета поле Hop Limit стало равным нулю.

3:1:Time exceeded:Fragmentation reassembly timeout
За 60 секунд не удалось собрать пакет из фрагментов

4:0:Parameter problem:Error in header
Ошибка в заголовке IPv6-пакета или ошибка в расширении заголовка

4:1:Parameter problem:Unknown next header
В поле Next Header обнаружена ошибка

4:2:Parameter problem:Unknown option
В заголовке просто что-то непонятное

Эти сообщения не отправляются в ответ на каждую ошибку, существуют ограничение на частоту их отправки.

А вот информационные сообщения: тут старший бит всегда установлен в «1», то есть тип может принимать значения от 128 до 255, например тип 128 и тип 129, Echo request и Echo reply соответственно.

128:0:Echo Request

129:0 Echo Reply

В этих пакетах содержится дополнительная информация: идентификатор (16 бит) и порядковый номер (16 бит), чтобы можно было увязать запрос и ответ.

Path MTU Discovery

Поскольку MTU на пути от отправителя к получателю может меняться, существует механизм определения минимального MTU для всего пути. Это значение и будет использоваться. Алгоритм прост: отправитель отправляет пакеты с MTU исходящего интерфейса. Если придет сообщение Packet Too Big, то новое MTU будет взято из него. И так до достижения консенсуса.

Neighbor Discovery

Немного терминологии:
Node — любое устройство с сетевым интерфейсом (c ip-адресом)
Host — устройство, работающее тслько с пакетами, адресованными ему
Router — устройство, работающее с пакетами,не адресованными ему (с транзитными)

Внутри ND-пакета (то есть ICMPv6-пакета) содержится информация: Next Header=58 (то есть протокол ICMPv6), далее идет Neighbor Discovery Message Header, затем идут опции.
Структура информации в опциях — TLV, то есть тип-длина-значение.

ND используют:
Nodes: для определения link-layer адресов соседей, отслеживание изменений в этих адресах и отслеживание доступности соседей
Hosts: для поиска роутеров, для автоконфигурации адреса и других параметров
Routers: для анонсирования своих префиксов, для уведомления хостов о наличии предочитаемых next-hop адресов для конкретного получателя

Основные процессы в ND

Router discovery
Prefix discovery
Parameter discovery
Address autoconfiguration
Address resolution
Next-hop determination
Neighbor unreachability detector
Duplicate address detection
Redirect function

Формат сообщений: тип сообщений от 133 до 137:
133 — Router Solicitation
134 — Router Advertisement
135 — Neighbor Solicitation
136 — Neighbor Advertisement
137 — Redirect

Поскольку эти сообщения не должны покидать local-link, у них устанавливается Hop-limit равным 255. Если обнаруживается ND-пакет с другим значением этого параметра, то он должен быть уничтожен. Роутеры не пересылают такие пакеты.

Поле Type в опциях занимает 8 бит. Основные типы:
1 — link-layer адрес источника (NS, RS, RA)
2 — link-layer адрес приемника
3 — информация о префиксах
4 — Redirected Header
5 — MTU
7 — Advertisement Interval
8 — Host Agent Information
24 — Route Information

С содержимым полей типа 1 и 2 все ясно, для Ethernet — это 48-битный mac-адрес.
Поле типа 3 устроено интереснее: тип=3, длина=4(х8 байт), дальше идет длина префикса (обычно 64 бит) и побитные флажки:

On-Link flag 1:данный префикс доступен, 0:данный префикс анонсится, но недоступен. Хитро…
Autonomous flag 1:данный префикс используется для SLAAC, то есть для stateless-автоконфигурации адреса, 0:-не используется для SLAAC.
Router address flag — используется в Mobile IPv6
Site prefix flag — вроде бы уже не используется
(и еще 4 бита зарезервировано)
Далее следуют:
Valid lifetime — время, в течение которого действителен адрес, полученный путем автоконфигурации. 32 бита, для «вечного» адреса все устанавливаются в 1
Preferred lifetime — по истечению этого времени адрес, полученый при автоконфигурации, не следует использовать для новых соединений. Старые можно продолжать
(и еще 3 байта зарезервировано)
Site prefix length (1 байт) — используется только если Sie prefix flag := 1
Prefix (16 байт, 128 бит) — сам префикс, используемый для автоконфигурации

Neighbor Discovery messages

1. Router Solicitation
2. Router Advertisement
3. Neighbor Solicitation
4. Neighbor Adverticement
5. Redirect

1. Тип сообщения — 133, код 0. Сообщение отправляется хостом для нахождения роутера. Отправка такого сообщения позволяет получить информацию о роутерах не дожидаясь прихода RA. В IPv6-заголовке такого собщения в качестве источника укзаывается unspecified address, то есть ::, или link-local адрес хоста. Адрес получателя устанавливается FF02::2, hop-limit задается равным 255.

2. Роутер отправляет такое сообщение по своей инициативе через заданный интервал плюс-минус случайная величина, или в ответ на RS, при этом ответ также следует с произвольной задержкой,, чтобы несколько роутеров не ответили одновременно. В RA содержится следующая информация:
тип — 1байт — равен 134
код — 1байт — равен 0
контрольная сумма — 2 байта
hop limit — 1байт
Managed address configuration flag — 1бит — если установлен в 1, то хост должен использовать DHCP-сервер для получения адреса
Other stateful configuration bit — 1бит —  если установлен в 1, то хост должен использовать DHCP-сервер для получения дополнительных параметров, например адреса DNS-сервера
Home Agent flag — используется в Mobile IP
Default router preference — 2 бита, приоритет данного роутера в качестве роутера по умолчанию. 01 — высокий, 00 — средний, 11 — низкий. Значение 10 запрещает использование данного роутера в качестве дефолтного.
Router lifetime — время, в течение которого данный роутер может быть дефолтным. От нуля до 65535 секунд. Значение 0 запрещает использование роутера в качестве дефолтного.
Reachable time — 32 бита — время в милисекундах, в течение которого хост считает этот роутер достижымым. 0 означает, что роутер не устанавливает этот параметр.
Retransmission timer — 32 бита — интервал между NS-сообщениями. Используется для проверки достижимости хостов.
Prefix information option — содержит префиксы, которые можно использовать для автоконфигурации
Route information options — содержит дополнительные пути, которые следует включить в локальную таблицу маршрутизации у хоста, чтобы обеспечить оптимальную маршрутизацию.

Neighbor solicitation

Сообщение отправляется хостом в ответ на NA или по своей инициативе, например при изменении link-layer адреса. В сообщении содержится информация о роли отправителя в сети, о Link-layer адресе и др.
Структура сообщения:
Тип — 1байт = 136
Код — 1байт = 0
Контрольная сумма
Router flag — 1бит — установлен в 1, если отправитель — роутер. У хоста установлен в 0.
Solicited flag — 1бит — если это ответ на запрос NA. Используется как индикатор достижимости.
Override flag — 1бит — если установлен в 1, то следует переписать link-layer адрес на тот, что в пакете
(резерв 29 бит)
Анонсируемый адрес — 8 байтов
Опции адреса получателя — используется для получения link-layer адреса хоста, сделавшего анонс

Neighbor discovery process

ND-протокол используется в процессах:
— определение link-layer адресов (включая проверку на занятость адреса)
— обнаружение роутера
— определение недостижимости хостов
— перенаправление трафика (определение оптимального next-hop)

Каждый хост хранит такие данные (RFC4861):
Neighbor cache — Кэш с информацией о соседях в пределах общего линка: IP-адреса, соответствующие им link-layer адреса, индикатор доступности
Destination cache — кэш с информацией о адресах, служащих шлюзом для достижения получателей. Содержит информацию: адрес получателя, соотвествующий ему next-hop адрес, значение MTU для данного получателя
Prefix list — список префиксов — список префиксов для данного линка. Составляется из RA.
Default router list IP addresses — список адресов, которые могут служить шлюзом по умолчанию. Составлен из RA.

«Разрешение» адресов, то есть получение link-layer адреса по ip-адресу делается путем обмена NS-NA. NS отправляется на multicast адрес, получатель обновляет свою таблицу соседей, и отвечает unicast-NA. Отправитель добавляет данные в свою таблицу соседей.

Neighbor Unreachability Detection

Узел считается достижимым, если есть подтверждение того, что пакет отправленный к нему, был им получен. Поскольку между узлами могут быть другие (транзитные) узлы, недостижимость может быть связана с проблемами на транзитном оборудовании. По этой причине под достижимостью понимается только достижимость на первом хопе.
Один из путей проверки достижимости — обмен NS-NA. Полученные unsolicitated NA и RA не считаются индикаторами достижимости.
Если А отправил NS к B, а тот ответил NA к А, то А считает B достижимым, но не наоборот. Для того, чтобы B считал А достижимым, он должен отправить NS к А и получить от А NA в ответ. Другой метод получения информации о достижимости — это информация от протоколов верхнего уровня, например от ТСР.

Состояние Neighbor cache:
Incomplete — запрос отправлен, но link-layer адрес еще не получен
Reachable — получено подтверждение от соседа
Stale — истекло время, в течение которого сосед считался достижимым, или получено unsolicited NA
Delay — ожидается подтверждение от протокола верхнего уровня, как правило в течение 5 сек. При неполучении — переход в состояние Probe
Probe — отправлен NS для соседей в состоянии Delay или Stale
No entry exists — нет такой записи..

Duplicate address detection

Хост отправляет NS со своим предполагаемым адресом в качестве адреса получателя и слушает ответ. Если услышит NA — то адрес занят. После такого события требуется конфигурирование адреса вручную.

Router discovery

-Проходит через процесс обмена RS-RA. Роутер, кроме своего адреса, сообщает:
-значение hop limit, которое будет использоваться по умолчанию
-будет ли node использовать dhcp или нет
-значения таймеров для определения достижимости соседей
-список префиксов для данного линка
-MTU
-маршруты, ведущие к отдельным узлам

Роутер посылает RA по псевдослучайному закону или в ответ на RS.

Host sending algorithm

(алгоритм обмена между хостами)

Unicast-обмен описывается в RFC4861 (пункт 5.2) и выглядит так:
Проверяются Destination cache, Prefix list, Default router list для определения next-hop адреса, а затем по Neighbor cache определяется link-layer адрес получателя.
Отправитель просматривает таблицу префиксов и ищет совпадение («попадание») по самому длинному префиксу и проверяет, находятся ли они на одном линке с получателем. Если да — то next-hop адрес совпадает с адресом получателя, в противном случае выбирается адрес роутера из списка роутеров по умолчанию, то есть очень похоже на IPv4.
После определения next-hop адреса он заносится в Destination Cache и дальше определение next-hop адреса для последующих пакетов для этого получателя не делается.
После определения next-hop адреса отправитель ищет его link-layer адрес в Neighbor cache, и если его нет, то создает новую запись с типом INCOMPLETE, и начинает процесс определения адреса. Все просто..


  *** Via IPv4 ***  

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.