Концепция туннелирования 6to4 заключается в инкапсуляции и декапсуляции пакета ipv6 через сеть ipv4. Процесс инкапсуляции:
[IPv6 header][Transport Header][Application Protocol data]
=> инкапсуляция:
[Ip4 Header][IPv6 header][Transport Header][Application Protocol data]
Я говорю из этой инфраструктуры:
Хост A (IPv6) -> Маршрутизатор R1 (двойной стек) -> Сеть IPv4 -> Маршрутизатор R2 (двойной стек) -> Пакет Host B (Ipv6).
Заголовок Ipv4 в инкапсуляции, среди каких заголовков Ipv4: Хост A, Маршрутизатор R1, Маршрутизатор R2 и Хост B?
Заранее спасибо.
6to4 - это обычное туннелирование IP через IP. Кто бы ни делал туннелирование, отправляет пакеты. Поскольку ваш хост A не имеет возможности подключения по протоколу IPv4, он не может действовать как конечная точка туннеля.
В качестве примера у меня есть маршрутизатор (R1) Linux с маршрутом 6to4, который выглядит следующим образом:
2000 :: / 3 через :: 192.88.99.1 dev sit0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
и маршрут IPv4 таким образом:
по умолчанию через XXX.YYY.210.1 dev br0
Интернет-трафик IPv6, поступающий из LAN (например, от хоста A), направляется к sit0. Boxen в локальной сети считает, что они напрямую подключены к Интернету IPv6. Трафик от sit0 упаковывается в пакеты IPv4 с R1 в качестве адреса источника и вводится в br0, который подключается к Интернету IPv4.
Два маршрутизатора R1 и R2 будут выполнять туннелирование. Пакеты, исходящие от R1, будут иметь заголовок IPv4 с IPv4-адресом R1 в качестве источника и IPv4-адресом R2 в качестве пункта назначения (R1 отправляет R2). В ответных пакетах IPv4 адреса отправителя и получателя будут перевернуты (R2 отправляет R1). Адреса IPv6 хостов A и B будут передаваться непереведенными в заголовке инкапсулированного пакета. Обычно используется минимальный 20-байтовый заголовок IP4v, поэтому MTU IPv6 (максимальная единица передачи) в туннеле не превышает 1480 байтов.
Инкапсуляция просто заключается в добавлении заголовка IPv4 к пакету IPv6 и его маршрутизации с использованием обычной маршрутизации IPv6. Деинкапсуляция просто удаляет заголовок IPv4 и нормально маршрутизирует оставшийся пакет IPv6. Пакет IPv6 может проходить более чем через один туннель между двумя хостами. Адреса IPv4 в IPv4 всегда будут адресом туннельного маршрутизатора (источника) и адресом маршрутизатора конечной точки туннеля (получателем).
РЕДАКТИРОВАТЬ: Следующее было написано для описания случая, описанного в следующем абзаце. В других параграфах содержится дополнительная информация.
HostA (IPv6) и HostB (IPv4) не смогут взаимодействовать, поскольку у них нет совместимых стеков. Если бы у HostB был стек IPv6, они могли бы общаться.
Хост с двойным стеком может выполнять собственное туннелирование, и в этом случае его адрес IPv4 будет использоваться в качестве адреса конечной точки IPv4. Если используется NAT, то адрес его маршрутизатора будет адресом конечной точки IPv4, когда пакет находился в сети IPv4 между маршрутизаторами.
IPv6 не имеет NAT, поэтому адреса IPv6 никогда не будут транслироваться.
Чтобы хост только IPv6 мог взаимодействовать с хостом IPv4, требуется трансляция протокола. Хост A может обращаться к хосту B, используя одну из схем IPv6 для кодирования адресов IPv4 в IPv6. Маршрутизатору R1 потребуется выполнить трансляцию протокола. (Хотя я не думаю, что на рынке есть такие маршрутизаторы.) Опять же, адрес конечной точки IPv4 в сети IPv4 будет адресом IPv4 R1. Некоторые параметры сети могут не переводиться во время трансляции протокола.