我愿意构建一个程序来模拟 IPv6 数据包通过 IPv4 覆盖网络(隧道)的路由过程。根据我目前所读到的内容,我了解到 IPv4 隧道数据包包括将传入的 IPv6 数据包(标头 + 数据)附加到唯一公共 IPv4 的标头。事实是:IPv6 固定标头长 288 位,而 IPv4 标头只有 160 位。我的问题是:IPv6 和 IPv4 标头如何同时适合一个 IPv4 标头?
基于 IPv4 的 IPv6 隧道
隧道涉及将要通过隧道传输的数据包封装在外部数据包中。隧道数据包是封装数据包的有效载荷。
您将创建一个新的 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 中有一个字段。
您可以在维基百科的帮助下研究数据包。