数据通信网络之 IPv6 基础
文章及资源归档至公众号【AIShareLab】,回复 通信系统与网络 可获取。
一、目的
掌握网络设备静态 IPv6 地址配置的方法。
掌握 IPv6 地址无状态自动配置的应用。
掌握通过 DHCPv6 部署 IPv6 地址配置自动化。
掌握基本的 IPv6 网络连通性测试方法。
理解 RA 报文及无状态地址自动配置过程。
分析 Ping 与 Tracert 应用所使用的 ICMPv6 报文及工作原理。
二、环境及网络拓扑
如图 1 所示,路由器 R1 通过两个物理接口分别连接物联网终端 R4(通过一台路由器模拟)及计算机 PC1。其中,路由器 R1 和 R4 推荐使用 AR2220 及以上设备。
图 1 网络拓扑图
三、需求
完成 R1 的 IPv6 基础配置。
在 R1 的 GE0/0/2 接口上启动 RA 报文通告,使得物联网终端 R4 的 GE0/0/0 接口能够通过无状态自动配置获取 IPv6 地址。
在 R1 的 GE0/0/1 接口上部署 DHCPv6,使得 PC1 能够通过 DHCPv6 协议自动获取 IPv6 地址。
观察各类常见的 ICMPv6 报文在网络中的功能与应用。
四、步骤及结果分析
1.完成 R1 的 IPv6 基础配置。在 R1 上完成如下配置, 配置结果如图 2 所示:
图 2 R1 的 IPv6 基础配置
备注:以上配置展示的是在华为路由器上通过手工方式配置静态 IPv6 地址的过程。在多数情况下,络设备的 IPv6 地址需要固定,因此大多采用手工配置的方式为设备配置静态 IPv6 地址。
阶段性验证:在 R1 上查看 IPv6 接口信息并展示相应结果,验证 R1 的 GE0/0/1 与 GE0/0/2 接口是否正确获得了相应的静态 IPv6 地址。
备注:在设备系统视图上执行 display ipv6 interface brief 命令可查看设备的 IPv6 接口信息,其中包括接口 IPv6 地址、接口物理状态及协议状态。
经过验证, R1 的 GE0/0/1 与 GE0/0/2 接口正确地获得了相应的静态 IPv6 地址,结果如图 3 所示, 其相应的静态 IPv6 地址分别为 FC00:1000::1、FC00:14::1。
图 3 在 R1 上查看 IPv6 接口信息
(2)完成 IPv6 地址无状态自动配置
①在 R1 上完成如下配置:
备注:在华为路由器上 ipv6 nd ra halt 命令用来取消使能设备发布路由器通告(Router Advertisement,RA)报文功能,缺省情况下,设备发布 RA 报文功能处于未使能状态,可以认为该命令缺省时已经被配置在接口上了。在本实验中,我们需要在 R1 的 GE0/0/2 接口上发布 RA 报文,因为 RA 报文中携带 IPv6 地址前缀信息,通过 RA 报文的通告,R4 可解析出报文中携带的 IPv6 地址前缀,并且使用该前缀结合 R4 本地生成的接口 ID 构造一个 IPv6 地址,这个过程被称为无状态地址自动配置。为实现这个功能,需要在 R1 的 GE0/0/2 接口上使能发布 RA 报文功能,即执行undo ipv6 nd ra halt
命令。
图 4 在 R1 上完成 IPv6 地址无状态自动配置在 R1 的 GE0/0/2 接口上单击鼠标右键,按图 5 所示开始抓包,以试图捕获 R1 的 GE0/0/2 接口上的入向与出向数据包。
图 5 在 R1 上完成 IPv6 地址无状态自动配置②在物联网终端 R4 上完成如下配置, 配置结果如图 6 所示:
图 6 配置物联网终端 R4
备注:在以上配置中,ipv6 address auto global 命令用来使能无状态自动生成 IPv6 全局地址功能,命令末尾的 default 关键字用于指定学习缺省路由,这样一来 R4 在收到 RA 报文生成 IPv6 地址同时,还可以学习 RA 报文中的源 IPv6 地址,并且把它作为 IPv6 缺省路由的下一跳地址。完成上述配置后,R4 便会通过 IPv6 无状态地址自动配置功能在 GE0/0/0 接口上自动配置一个 IPv6 地址。在 R4 上查看 IPv6 接口地址信息:
备注:以上面的结果为例,R1 通告给 R4 的 RA 报文中缺省时携带的 IPv6 地址前缀是前者 GE0/0/2 接口的 IPv6 地址前缀 FC00:14::/64,R4 将该 64bit 前缀与自己本地 GE0/0/0 接口的 IPv6 接口 ID(2E0:FCFF:FECB:6980)构成了一个 IPv6 地址:FC00:14::2E0:FCFF:FECB:6980。其中,接口 ID 2E0:FCFF:FECB:6980 是 R4 在 GE0/0/0 接口上根据接口 MAC 地址自动生成的,采用的是 EUI-64 规范,该规范可确保生成的接口 ID 唯一。
阶段性验证⑴ 在 R4 系统视图下执行 display interface GigabitEthernet 0/0/0 命令,查看 R4 的 GE0/0/0 接口的相关信息并展示相应结果,验证接口 MAC 地址与上述接口 ID 是否符合 EUI-64 规范。R4 的 GE0/0/0 接口信息如图 6 所示,可知接口 MAC 地址与上述接口 ID 符合 EUI-64 规范。
图 6 R4 的 GE0/0/0 接口信息
⑵ 在 R4 上 ping R1 GE0/0/2,具体命令格式为 ping ipv6 IPv6 地址,验证 R4 是否可与 R1 成功通信。结果如图 7 所示, R4 与 R1 成功通信。
图 7 在 R4 上 ping R1 GE0/0/2
(3)观察 RA 报文与无状态地址自动配置过程(1)捕获数据包,查看协议栈。在 Wireshark 界面中,查看前面开启抓包后所捕获的信息, R1 和 R2 接口配置完成后网络中产生了多个 ICMPv6 数据包交互,具体的包含 Neighbor Solicitation、Router Solicitation 和 Router Advertisement,其中,1 号 Neighbor Solicitation 报文为 R4 GE0/0/0 接口获得 IPv6 地址后为确保该地址在链路上的唯一性而启动重复地址检测(Duplicate Address Detection,DAD)机制所发出的邻居请求报文,2 号 ICMPv6 Router Solicitation 报文为 R4 主动发送的路由器请求(Router Solicitation,RS)报文以请求 R1 发送 RA 路由器通告报文,3 号 ICMPv6 Router Advertisement 报文即为 R1 周期性发送的 RA 报文。
图 8 R1 和 R2 接口配置完成后,R2 GE 0/0/0 所捕获的数据包
回答下列问题:
结合捕获信息,说明 ICMPv6 数据包自下而上的协议栈及封装结构答:ICMPv6 是 IPv6 协议栈中的一个核心协议,它主要用于在 IPv6 网络中传递控制信息和错误报告。ICMPv6 数据包的协议栈和封装结构如下所示:数据链路层:ICMPv6 数据包首先被封装在数据链路层的帧中。这个帧包含了目标 MAC 地址、源 MAC 地址以及帧类型等信息。IPv6 层:ICMPv6 数据包被封装在 IPv6 数据报中。IPv6 数据报包含了目标 IP 地址、源 IP 地址、下一个头部字段等信息。上层协议:ICMPv6 数据包被封装在 IPv6 数据报的上层协议字段中。这个字段指定了封装在 IPv6 数据报中的上层协议类型,其中包括 ICMPv6 协议。ICMPv6 头部:ICMPv6 数据包的头部包含了类型、代码、校验和等字段。这些字段指定了 ICMPv6 数据包的类型和用途。数据部分:ICMPv6 数据包的数据部分取决于 ICMPv6 数据包的类型和代码。例如,当 ICMPv6 数据包的类型为 Echo Request(类型值为 128)时,数据部分包含了发送方发送的数据。如果 ICMPv6 数据包的类型为 Router Advertisement(类型值为 134),则数据部分包含了路由器的信息。
⑵分析单一数据包格式。①RA 报文:以实际捕获数据为准,选中一个 RA 报文,回答下列问题:a. 包含 RA 报文的以太网帧的源地址和目的地址的十六进制值是多少?答:包含 RA 报文的以太网帧的源地址为 00:e0:fc:1c:7d:1b 目的地址为 33:33:00:00:00:01b. 包含 RA 报文的 IPv6 数据报源地址和目的地址的十六进制值是多少?答:包含 RA 报文的 IPv6 数据报源地址和目的地址的十六进制值分别是 fe80::2e0:fcff:fe1c:7d1b 和 ff02::1c. 给出 ICMPv6 中类型字段的十进制值。答:134d. RA 报文中是否包含发送者的 IPv6 地址?答:RA 报文中包含发送者的 IPv6 地址
②RS 报文:以实际捕获数据为准,选中一个与上面 RA 对应并由 R4 主动发送的 RS 报文,然后展开该数据包的详细信息。回答下列问题:a. 包含 RS 报文的以太网帧的源地址和目的地址的十六进制值是多少?答:包含 RS 报文的以太网帧的源地址和目的地址的十六进制值分别是: Source:00:e0:fc:ca:38:20 Destination:33:33:00:00:00:01b. 包含 RS 报文的 IPv6 数据报源地址和目的地址的十六进制值是多少?答:包含 RS 报文的 IPv6 数据报源地址和目的地址的十六进制值分别是 Source:fe80::2e0:fcff:feca:3820 Destination:ff02::1c. 给出 ICMPv6 中类型字段的十进制值。答:133d. RS 报文中是否包含发送者的 IPv6 地址?答:RS 报文中不包含发送者的 IPv6 地址
图 9 RS 报文捕捉
(4)完成 DHCPv6 部署①在 R1 上完成如下配置, 配置结果如图 10 所示。
图 10 R1 上完成 DHCPv6 部署②配置 PC1 的以太网卡,开启 DHCPv6 客户端功能,如图 11 所示:
图 11 开启 PC1 的 DHCPv6 客户端功能阶段性验证:在 PC1 的配置界面上选择“命令行”选项卡,然后执行 ipconfig 查看网卡信息并展示相应结果,验证 PC1 是否通过 DHCPv6 获取到了正确地址,如图 12 所示。
图 12 PC1 查看网卡信息(5)联通性测试。
R4 ping PC1:以 PC1 获取的动态地址为 fc00:1000::2 为例,在 R4 上执行如下命令,测试到达 PC1 的连通性,可以发现二者已经可以正常通信, 如图 13 所示。
图 13 R4 ping PC1(6)抓包分析。①启动抓包。本实验中,可保持之前在 R1 的 GE0/0/2 接口上持续抓包,期间各种阶段性测试命令及设备间状态更新均会触发多个数据包的产生和交互。另外,也可在前期阶段性抓包分析后停止抓包,此处重新启动抓包。②运行命令。在 R4 上依次执行以下命令:ping ipv6 fc00:1000::2;tracert ipv6 fc00:1000::2,分别完成测试与 fc00:1000::2(以 PC1 获取的动态地址为 fc00:1000::2 为例)的联通性,以及跟踪到 fc00:1000::2 的路由信息。结果如图 14 所示:
图 14 在 R4 中执行命令备注: 在网络日常运维和管理过程中,Tracert 是被广泛使用的应用程序,该应用使用 ICMPv6 的相关报文来实现其功能。Tracert 可以帮助网络管理员检测从源节点到目的节点之间所经过的逐跳设备。由图 6 中执行 tracert ipv6 fc00:1000::2 命令结果可见,从 R4 到 PC1 经过了 FC00:14::1,最终到达 FC00:1000::2。当源与目的节点之间存在多跳设备时,Tracert 执行的结果更加直观。因此面对一个复杂的网络时,这个工具可以方便地帮助网络管理员识别流量的转发路径。以图 7 为例,Tracert 的实现原理及过程如下:①R1 首先构造第一个发往目标地址 FC00:23::3 的 UDP(UDP 目的端口为特殊的 33434,该端口不会被具体的应用所使用)报文,这个报文的内容是随机填充的,没有实际意义,但是在该报文的 IPv6 头部中,R1 将 Hop Limit 字段设置为 1,这意味着报文在发出去之后,只能传递一跳。R1 可能一次会发出多个相同的 UDP 报文。②R2 收到该 UDP 报文后将 Hop Limit 字段值减 1 后发现值已为 0,因此立即向 R1 发送 ICMPv6 错误消息,告知报文的生存时间截止,这个错误消息的源地址为 R2 的接口地址;R1 收到这个报错消息后,获得了第一跳设备 R2 的接口地址,然后将该地址打印在回显中;③接着 R2 以 Hop Limit=2 继续发送 UDP 报文,如此反复;④直到报文到达目的地 R3,由于 R1 在 Tracert 中所使用的 UDP 端口在 R3 处并未侦听,因此 R3 回应 ICMPv6 差错报文,告知 R1 目的端口不可达。R1 收到该差错报文后即知晓最后一跳已到达。
③分析报文Ⅰ 分析 ping 报文在 ICMPv6 报文中,Echo Request 和 Echo Reply 报文是非常基础且重要的报文,被用于 Ping 应用程序等,当我们在一个 IPv6 节点上执行 Ping 操作探测到某个目的地址的可达性时,实际上该应用将触发一个 ICMPv6 Echo Request 报文发往目的地址,如果收到了对方回应的 Echo Reply,则认为网络是可达的。当 R4 ping PC1 时(即执行相应的命令 ping ipv6fc00:1000::2)捕获到多对 Echo Request 和 Echo Reply 报文,如图 15 所示。
图 15 捕获 Echo Request 报文
图 16 捕获 Echo Reply 报文
回答下列问题:a. 此处分别出现多少个 ICMPv6 Echo Request 和 Echo Reply 报文?与测试命令显示的结果是否一致?答:如图 15 所示, 一共有 5 个 ICMPv6 Echo Request 报文 和 5 个 Echo Reply 报文,并且与测试命令显示的结果一致。b. 查看 Echo Request 报文,ICMPv6 类型和代码号取值为多少?包含该报文的 IPv6 数据报源地址和目的地址分别是多少?包含该报文的以太网帧源地址和目的地址分别是多少?答:如图 15 所示, ICMPv6 类型和代码号取值为 128. 包含该报文的 IPv6 数据报源地址和目的地址分别是 Source:fc00:14::2e0:fcff:feca:3820, Destination:fc00:1000::2,包含该报文的以太网帧源地址和目的地址分别是 Source:00:e0:fc:ca:38:20, Destination:00:e0:fc:1c:7d:1bc. 查看 Echo Reply 报文,ICMPv6 类型和代码号取值为多少?包含该报文的 IPv6 数据报源地址和目的地址分别是多少?包含该报文的以太网帧源地址和目的地址分别是多少?答:如图 16 所示, ICMPv6 类型和代码号取值为 129,包含该报文的 IPv6 数据报源地址和目的地址分别是 Source:fc00:1000::2, Destination:fc00:14::2e0:fcff:feca:3820,包含该报文的以太网帧源地址和目的地址分别是 Source:00:e0:fc:1c:7d:1b, Destination:00:e0:fc:ca:38:20.Ⅱ 分析 Tracert 报文当 R4 tracert PC1 时(即执行相应的命令 tracert ipv6 fc00:1000::2)捕获到多个 UDP 和 ICMPv6 报文,如图 17 所示。
图 17 捕获的 Tracert 报文
图 18 捕获的 ICMPv6 Time Exceeded 报文
图 19 捕获的 ICMPv6 Destination Unreachable 报文
以实际捕获数据为准,回答下列问题:a.实际捕获结果中分别出现多少个 UDP、ICMPv6 Time Exceeded 和 ICMPv6 Destination Unreachable 报文?与测试命令显示的结果是否一致?答:如图 17 所示,一共有 6 个 UDP、3 个 ICMPv6 Time Exceeded 和 3 个 ICMPv6 Destination Unreachable 报文,与测试命令显示的结果一致。b.查看 UDP 报文,源端口号和目的端口号分别是多少?不同 UDP 报文所采用的源端口号 是否相同?不同 UDP 报文所采用的目的端口号是否相同?包含该报文的 IPv6 数据报源地址和目的地址分别是多少?包含该报文的 IPv6 数据报中 Hop Limit 取值分别是多少?答:如图 18 所示,源端口号是:30037,目的端口号是:33434.不同 UDP 报文所采用的目的端口号不同,包含该报文的 IPv6 数据报 Source:fc00:14::2e0:fcff:feca:3820,Destination:fc00:1000::2.包含该报文的 IPv6 数据报中 Hop Limit 取值是 1.c.查看 ICMPv6 Time Exceeded 报文,ICMPv6 类型和代码号取值为多少?包含该报文的 IPv6 数据报源址和目的地址分别是多少?包含该报文的以太网帧源地址和目的地址分别是 多少?答:ICMPv6 类型和代码号取值为 3,包含该报文的 IPv6 数据报源址和目的地址分别是 Source:fc00:14::1,Destination:fc00:14::2e0:fcff:feca:3820,包含该报文的以太网帧 Source:00:e0:fc:1c:7d:1b,Destination:00:e0:fc:ca:38:20d.查看 ICMPv6 Destination Unreachable 报文,ICMPv6 类型和代码号取值为多少?包含该 报文的 IPv6 数据报源址和目的地址分别是多少?包含该报文的以太网帧源地址和目的地址分别是多少?答:如图 19 所示,ICMPv6 类型和代码号取值为 1,包含该报文的 IPv6 数据报 Source:fc00:1000::2,Destination:fc00:14::2e0:fcff:feca:3820,包含该报文的以太网 Source:00:e0:fc:1c:7d:1b,Destination:00:e0:fc:ca:38:20.
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/82a3679b9615c36e638dcf02f】。未经作者许可,禁止转载。
评论