文章及资源归档至公众号【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所示:
less
<Huawei> system-view
[Huawei] sysname R1
[R1] ipv6
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] ipv6 enable
[R1-GigabitEthernet0/0/1] ipv6 address FC00:1000::1 64
[R1-GigabitEthernet0/0/1] quit
[R1] interface GigabitEthernet 0/0/2
[R1-GigabitEthernet0/0/2] ipv6 enable
[R1-GigabitEthernet0/0/2] ipv6 address FC00:14::1 64
[R1-GigabitEthernet0/0/2] quit
图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 上完成如下配置:
csharp
[R1] interface GigabitEthernet 0/0/2
[R1-GigabitEthernet0/0/2] undo ipv6 nd ra halt
备注:在华为路由器上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所示:
scss
<Huawei> system-view
[Huawei] sysname R4
[R4] ipv6
[R4] interface GigabitEthernet 0/0/0
[R4-GigabitEthernet0/0/0] ipv6 enable
[R4-GigabitEthernet0/0/0] ipv6 address auto global default
图6 配置物联网终端 R4
备注:在以上配置中,ipv6 address auto global 命令用来使能无状态自动生成IPv6 全局地址功能,命令末尾的default 关键字用于指定学习缺省路由,这样一来R4 在收到RA 报文生 成IPv6 地址同时,还可以学习RA 报文中的源IPv6 地址,并且把它作为IPv6 缺省路由的 下一跳地址。 完成上述配置后,R4 便会通过IPv6 无状态地址自动配置功能在GE0/0/0 接口上自动配 置一个IPv6 地址。在R4 上查看IPv6 接口地址信息:
makefile
[R4] display ipv6 interface brief
*down: administratively down
(l): loopback
(s): spoofing
Interface Physical Protocol
GigabitEthernet0/0/0 up up
[IPv6 Address] FC00:14::2E0:FCFF:FECB:6980
备注:以上面的结果为例,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:01 b. 包含 RA 报文的 IPv6 数据报源地址和目的地址的十六进制值是多少? 答:包含 RA 报文的 IPv6 数据报源地址和目的地址的十六进制值分别是fe80::2e0:fcff:fe1c:7d1b 和ff02::1 c. 给出 ICMPv6 中类型字段的十进制值。 答:134 d. RA 报文中是否包含发送者的 IPv6 地址? 答:RA 报文中包含发送者的 IPv6 地址
②RS 报文:以实际捕获数据为准,选中一个与上面 RA 对应并由 R4 主动发送的 RS 报文, 然后展开该数据包的详细信息。 回答下列问题: a. 包含 RS 报文的以太网帧的源地址和目的地址的十六进制值是多少? 答:包含 RS 报文的以太网帧的源地址和目的地址的十六进制值分别是: Source:00:e0:fc:ca:38:20 Destination:33:33:00:00:00:01 b. 包含 RS 报文的 IPv6 数据报源地址和目的地址的十六进制值是多少? 答:包含 RS 报文的 IPv6 数据报源地址和目的地址的十六进制值分别是Source:fe80::2e0:fcff:feca:3820 Destination:ff02::1 c. 给出 ICMPv6 中类型字段的十进制值。 答:133 d. RS 报文中是否包含发送者的 IPv6 地址? 答:RS 报文中不包含发送者的 IPv6 地址
图9 RS报文捕捉
(4)完成 DHCPv6 部署 ①在 R1 上完成如下配置, 配置结果如图10所示。
ini
[R1] dhcp enable
[R1] dhcpv6 pool pool1
[R1-dhcpv6-pool-pool1] address prefix fc00:1000::/64
[R1-dhcpv6-pool-pool1] excluded-address fc00:1000::1
[R1-dhcpv6-pool-pool1] quit
[R1] interface GigabitEthernet 0/0/1
[R1-GigabitEthernet0/0/1] dhcpv6 server pool1 #在接口上绑定地址池
[R1-GigabitEthernet0/0/1] quit
图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所示。
python
<R4> ping ipv6 fc00:1000::2
PING fc00:1000::2 : 56 data bytes, press CTRL_C to break
Request time out
Reply from FC00:1000::2
bytes=56 Sequence=2 hop limit=254 time = 30 ms
Reply from FC00:1000::2
bytes=56 Sequence=3 hop limit=254 time = 30 ms
Reply from FC00:1000::2
bytes=56 Sequence=4 hop limit=254 time = 20 ms
Reply from FC00:1000::2
bytes=56 Sequence=5 hop limit=254 time = 30 ms
--- fc00:1000::2 ping statistics --- 5 packet(s) transmitted
4 packet(s) received
20.00% packet loss
round-trip min/avg/max = 20/27/30 ms
图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 ipv6 fc00: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:1b c. 查看 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:20 d.查看 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.