基于 IPv4 的 IPv6 隧道

网络工程 ipv4 ip ipv6 隧道
2021-07-09 12:07:07

我愿意构建一个程序来模拟 IPv6 数据包通过 IPv4 覆盖网络(隧道)的路由过程。根据我目前所读到的内容,我了解到 IPv4 隧道数据包包括将传入的 IPv6 数据包(标头 + 数据)附加到唯一公共 IPv4 的标头。事实是:IPv6 固定标头长 288 位,而 IPv4 标头只有 160 位。我的问题是:IPv6 和 IPv4 标头如何同时适合一个 IPv4 标头?

2个回答

隧道涉及将要通过隧道传输的数据包封装在外部数据包中。隧道数据包是封装数据包的有效载荷。

您将创建一个新的 IPv4 数据包头来封装 IPv6 数据包,就像 IPv6 数据包是 TCP 段一样。新的 IPv4 数据包头并不真正关心负载中的内容,除了设置 IPv4 头的协议字段。

检查数据包格式是研究网络协议的一个很好的方法。
存在的答案非常好,我提供了更多详细信息。

我给出了两种类型的协议 6to4:GRE 和 ipip6。

1. 这是一个 icmp6 数据包,IPv6 隧道通过 IPv4,使用 GRE 协议。

帧 2:在线 144 字节(1152 位),捕获的 144 字节(1152 位)
Linux 熟捕获
Internet 协议版本 4,Src:192.168.247.134,Dst:192.168.247.136
  0100 .... = 版本:4
  ... . 0101 = 标头长度:20 字节 (5)
  区分服务字段:0x00(DSCP:CS0,ECN:Not-ECT)
  总长度:128
  标识:0x9c79(40057)
  标志:0x4000,不要分片
  生存时间:128
  协议:Generic Routing Encapsulation (47)
  Header checksum: 0xed74 [validation disabled]
  [Header checksum status: Unverified]
  Source: 192.168.247.134
  Destination: 192.168.247.136
Generic Routing Encapsulation (IPv6)
  标志和版本:0x0000
    0... .... .... .... = 校验和位:否
    .0.. .... .... .... = 路由位:否
    ..0 . .... .... .... = 密钥位:否
    ...0 .... .... .... = 序列号位:否
    .... 0 ... ... . .... = 严格源路由位:否
    .... .000 .... .... = 递归控制:0
    .... .... 0000 0... = 标志(保留): 0
    .... .... .... .000 = 版本:GRE (0)
  协议类型:IPv6 (0x86dd)
Internet 协议版本 6,Src:2001:0:0:20::2,Dst:2001 :0:0:20::3
  0110 .... = 版本:6
  .... 0000 0000 .... .... .... .... = 流量等级:0x00 ( DSCP: CS0, ECN: Not-ECT)
  .... .... .... 1101 0011 0011 1110 0101 = 流标签:0xd33e5
  有效载荷长度:64
  下一个标头:ICMPv6 (58)
  跳数限制:64
  源:2001:0:0:20::2
  目的地:2001:0:0:20::3
  [源 Teredo 服务器 IPv4:0.0.0.32]
  [源 Teredo 端口:65535]
  [源 Teredo 客户端 IPv4:255.255.255.253]
  [目标 Teredo 服务器 IPv4:0.0.0.32]
  [目标 Teredo 端口:65535]
  [目标 Teredo 客户端 IPv4:255.255265
Internet 控制协议v4]消息

在 GRE 协议中,Protocol: Generic Routing Encapsulation (47) Internet Protocol Version 4 中有一个字段

2. 这是一个 icmp6 数据包,IPv6 隧道通过 IPv4,使用 ipip6 协议。

帧 6:在线 140 字节(1120 位),捕获 140 字节(1120 位)
Linux 熟捕获
互联网协议版本 4,Src:192.168.247.134,Dst:192.168.247.136
  0100 .... = 版本:4
  ... . 0101 = 标头长度:20 字节 (5)
  区分服务字段:0x00(DSCP:CS0,ECN:Not-ECT)
  总长度:124
  标识:0xceb9 (52921)
  标志:0x4000,不要分片
  生存时间:128
  协议:IPv6 (41)
  标头校验和:0xbb3e [禁用验证]
  [标头校验和状态:未验证]
  来源:192.168.247.134
  目的地:192.168.247.136
Internet 协议版本 6,Src:2001:0:0:2::2,Dst :2001:0:0:3::3
  0110 .... = 版本:6
  .... 0000 0000 .... .... .... .... .... = 流量类别:0x00(DSCP:CS0,ECN:Not-ECT )
  .... .... .... 1100 0110 0110 0111 1111 = 流标签:0xc667f
  有效载荷长度:64
  下一个标头:ICMPv6 (58)
  跳数限制:64
  来源:2001:0:0:2::2
  目标:2001:0:0:3::3
  [源 Teredo 服务器 IPv4:0.0.0.2]
  [源 Teredo 端口:65535]
  [源 Teredo 客户端 IPv4:255.255.255.253]
  [目标 Teredo 服务器 IPv4:0.0.0.3]
  [目标 Teredo 端口:65535]
  [目标 Teredo 客户端 IPv4:255.255.255.252]
Internet 控制消息协议 v6

在 ipip6 协议中,Protocol: IPv6 (41) Internet Protocol Version 4 中有一个字段

您可以在维基百科的帮助下研究数据包。