RFC: 2460
Оригинал: Internet Protocol, Version 6 (IPv6) Specification
Предыдущие версии: RFC 1883
Категория: Проект стандарта
Дата публикации:
Авторы: ,
Перевод: Мельников Дмитрий Анатольевич

Групповые IPv6-адреса никогда не должны присутствовать в заголовке «Маршрутизация» если поле «Тип маршрутизации» содержит нулевое значение, или в поле «Адрес получателя пакета» IPv6-заголовка, если в пакете имеет место заголовок «Маршрутизация» с нулевым полем «Тип маршрутизации».

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

if Segments Left = 0 {
   proceed to process the next header in the packet, whose type is
   identified by the Next Header field in the Routing header
}
else if Hdr Ext Len is odd {
      send an ICMP Parameter Problem, Code 0, message to the Source
      Address, pointing to the Hdr Ext Len field, and discard the
      packet
}
else {
   compute n, the number of addresses in the Routing header, by
   dividing Hdr Ext Len by 2

   if Segments Left is greater than n {
      send an ICMP Parameter Problem, Code 0, message to the Source
      Address, pointing to the Segments Left field, and discard the
      packet
   }
   else {
      decrement Segments Left by 1;
      compute i, the index of the next address to be visited in
      the address vector, by subtracting Segments Left from n

      if Address [i] or the IPv6 Destination Address is multicast {
         discard the packet
      }
      else {
         swap the IPv6 Destination Address and Address[i]

         if the IPv6 Hop Limit is less than or equal to 1 {
            send an ICMP Time Exceeded -- Hop Limit Exceeded in
            Transit message to the Source Address and discard the
            packet
         }
         else {
            decrement the Hop Limit by 1

            resubmit the packet to the IPv6 module for transmission
            to the new destination
         }
      }
   }
}

Для понимания работы представленного выше алгоритма будем полагать, что узел-отправитель S передает пакет узлу-получателю D, используя для этого заголовок «Маршрутизация», который «заставляет» пакет пройти промежуточные узлы I1, I2 и I3. Возможные значения в соответствующих полях IPv6-заголовка и заголовка «Маршрутизация» на каждом ретрансляционном участке представлены в Таблице 1.

Ретрансляционный
участок
Значения полей
IPv6-заголовка
Значения полей заголовка
«Маршрутизация»
S ⇒ I1Source Address = S
Destination Address = I1
Hdr Ext Len = 6
Segments Left = 3
Address[1] = I2
Address[2] = I3
Address[3] = D
I1 ⇒ I2Source Address = S
Destination Address = I2
Hdr Ext Len = 6
Segments Left = 2
Address[1] = I1
Address[2] = I3
Address[3] = D
I2 ⇒ I3Source Address = S
Destination Address = I3
Hdr Ext Len = 6
Segments Left = 1
Address[1] = I1
Address[2] = I2
Address[3] = D
I3 ⇒ DSource Address = S
Destination Address = D
Hdr Ext Len = 6
Segments Left = 0
Address[1] = I1
Address[2] = I2
Address[3] = I3
Таблица 1
2007 - 2017 © Русские переводы RFC, IETF, ISOC.