Групповые 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 ⇒ I1 | Source Address = S Destination Address = I1 |
Hdr Ext Len = 6 Segments Left = 3 Address[1] = I2 Address[2] = I3 Address[3] = D |
I1 ⇒ I2 | Source Address = S Destination Address = I2 |
Hdr Ext Len = 6 Segments Left = 2 Address[1] = I1 Address[2] = I3 Address[3] = D |
I2 ⇒ I3 | Source Address = S Destination Address = I3 |
Hdr Ext Len = 6 Segments Left = 1 Address[1] = I1 Address[2] = I2 Address[3] = D |
I3 ⇒ D | Source Address = S Destination Address = D |
Hdr Ext Len = 6 Segments Left = 0 Address[1] = I1 Address[2] = I2 Address[3] = I3 |
Таблица 1 |