6to4隧道的概念是通过ipv4networking对ipv6报文进行封装和解封装。 封装过程是:
[IPv6 header][Transport Header][Application Protocol data]
=>封装:
[Ip4 Header][IPv6 header][Transport Header][Application Protocol data]
我正在从这个基础设施谈话:
主机A(IPv6) – >路由器R1(双栈) – > Ipv4networking工作 – >路由器R2(双栈) – >主机B(Ipv6)数据包。
Ipv4头部封装中的Ipv4头部,其中Ipv4头部是:主机A,路由器R1,路由器R2和主机B?
提前致谢。
6to4是普通的IP over IP隧道。 无论谁是隧道发起的数据包。 由于您的主机A没有IPv4连接,因此无法充当隧道端点。
举个例子,我有一个6to4路由的路由器(R1)Linux,看起来如此:
2000 :: / 3 via :: 192.88.99.1 dev sit0 metric 1024 mtu 1480 advmss 1420 hoplimit 0
和一个IPv4路由,从而:
默认通过XXX.YYY.210.1 dev br0
从局域网(例如从主机A)进入的Internet IPv6stream量到达sit0。 局域网上的boxen认为他们直接连接到IPv6互联网。 来自sit0的stream量被封装在以R1作为源地址的IPv4分组中,并被注入到连接到IPv4互联网的br0中。
两台路由器R1和R2将执行隧道。 来自R1的数据包将有一个IPv4头,R1的IPv4地址为源,R2的IPv4地址为目的地(R1发送给R2)。 返回IPv4数据包将使源地址和目标地址相反(R2发送到R1)。 主机A和B的IPv6地址将在封装数据包的头部传递未经转换。 通常使用最less20个字节的IP4v报头,所以隧道的最大传输单元(IPv6 MTU)最多为1480字节。
封装仅包括将IPv4头添加到IPv6数据包,并使用正常的IPv6路由进行路由。 un-encapsulation只是删除IPv4头,并正常路由剩余的IPv6数据包。 IPv6数据包有可能通过两台主机之间的多个隧道。 IPv4中的IPv4地址将始终是隧道路由器(源)的地址和隧道端点路由器(目标)的地址。
编辑:下面是写在描述下面的段落中描述的情况。 其他段落提供了额外的背景。
HostA(IPv6)和HostB(IPv4)将无法通信,因为它们没有兼容的堆栈。 如果HostB有一个IPv6栈,他们可以进行通信。
双栈主机可以做自己的隧道,在这种情况下,它的IPv4地址将被用作它的IPv4端点地址。 如果使用NAT,则路由器的地址将是IPv4端点地址,而数据包位于路由器之间的IPv4networking中。
IPv6没有NAT,因此永远不会翻译IPv6地址。
对于仅IPv6主机与IPv4主机进行通信,需要协议转换。 主机A可以使用其中一种IPv6scheme在IPv6中对IPv4地址进行编码来对主机B进行寻址。 路由器R1需要执行协议转换。 (尽pipe我不相信市场上有这样的路由器。)同样,IPv4networking上的IPv4端点地址也是R1的IPv4地址。 在协议转换过程中,某些networking选项可能无法翻译。