首页 » 通讯 » IPv6 排障对象之 ping6 完整过程细节剖析_报文_地址

IPv6 排障对象之 ping6 完整过程细节剖析_报文_地址

雨夜梧桐 2024-12-08 10:47:02 0

扫一扫用手机浏览

文章目录 [+]

ICMPv6 定义了一些,如:目的不可达、数据包超长、超时、相应要乞降相应应答等。
在 IPv6 中,ICMPv6 除了供应 ICMPv4 常用的功能之外,还有其它一些功能,如毗邻点创造、无状态地址配置(包括重复地址检测)、PMTUD 等。

二、ICMPv6 报文格式

ICMPv6 报文格式如下图所示:

IPv6 排障对象之 ping6 完整过程细节剖析_报文_地址 通讯

ICMPv6 属于 OSI 七层协议栈的网络层,虽然和 IPv6 属于同一层,但是封装时必须先封装 IPv6 报文头部。

ICMPv6 字段注释:

Type:表明的类型,0 至 127 表示差错报文类型,128 至 255 表示信息报文类型。
Code:表示此类型细分的类型。
Checksum:表示 ICMPv6 报文的校验和。
三、ICMPv6 差错报文

ICMPv6 差错报文用于报告在转发 IPv6 数据包过程中涌现的缺点,可以分为以下 4 种:

1. 目的不可达缺点报文

在 IPv6 中间设备转发 IPv6 报文过程中,当设备创造目的地址不可达时,就会向发送报文的源地址发送 ICMPv6 目的不可达缺点报文,同时报文中会携带引起该缺点报文的详细缘故原由。

目的不可达缺点报文的 Type 字段值为 1,根据缺点详细缘故原由又可以细分为:

Code=0:没有到达目标设备的路由。

Code=1:与目标客户真个通信被管理策略禁止。

Code=2:未指定。

Code=3:目的 IP 地址不可达。

Code=4:目的端口不可达。

2. 数据包过大缺点报文

在 IPv6 中间设备转发 IPv6 报文过程中,创造报文超过出接口的链路 MTU 时,则向发送报文的源地址发送 ICMPv6 数据包过大缺点报文,个中携带出接口的链路 MTU 值。
数据包过大缺点报文是 Path MTU 创造机制的根本。

数据包过大缺点报文的 Type 字段值为 2,Code 字段值为 0。

3. 韶光超时缺点报文

在 IPv6 报文收发过程中,当设备收到 Hop Limit 字段值即是 0 的数据包,或者当设备将 Hop Limit 字段值减为 0 时,会向发送报文的源地址发送 ICMPv6 超时缺点报文。
对付分段重组报文的操作,如果超过定时韶光,也会产生一个 ICMPv6 超时报文。

韶光超时缺点报文的 Type 字段值为 3,根据缺点详细缘故原由又可以细分为:

Code=0:在传输中超越了跳数限定。

Code=1:分片重组超时。

4. 参数缺点报文:

当目的节点收到一个 IPv6 报文时,会对报文进行有效性检讨,如果创造问题会向报文的源地址回应一个 ICMPv6 参数缺点差错报文。

参数缺点报文的 Type 字段值为 4,根据缺点详细缘故原由又可以细分为:

Code=0:IPv6 基本头或扩展头的某个字段有缺点。

Code=1:IPv6 基本头或扩展头的 NextHeader 值不可识别。

Code=2:扩展头中涌现未知的选项。

四、ICMPv6 信息报文

ICMPv6 信息报文供应诊断功能和附加的主机功能,比如组播侦听创造和邻居创造。

常见的 ICMPv6 信息报文紧张包括回应要求报文(Echo Request)和回应应答报文(Echo Reply),这两种报文也便是常日利用的 Ping6 报文。
可以分为以下 2 种:

1. 回应要求报文

回应要求报文用于发送到目标地址,以使目标地址立即发回一个回应应答报文。
回应要求报文的 Type 字段值为 128,Code 字段的值为 0。

2. 回应应答报文

当收到一个回应要求报文时,ICMPv6 会用回应应答报文相应。
回应应答报文的 Type 字段的值为 129,Code 字段的值为 0。

五、ping6 完全过程梳理

如下图所示,云主机 CVM1 要和 CVM2 通信(假设 CVM 的 IPV6 地址和 VPC 已经按文档 https://cloud.tencent.com/document/product/213/40010 正常配置且 IPV6 路由和地址检讨都正常)。

从 CVM1 输入命令 ping6 2402:4e00:1200:2001::2020 -c 10,输出的结果如下图所示:

这是一次成功的 ping6 测试,但是这次 ping6 的细节大家大概不太理解。
接下来我们紧张按 OSI 协议栈来阐发全体 ping6 的事情过程以及全体过程会用到的干系报文。

Step1:ICMPv6 创建一个 56 字节的回应要求:

Step2:ICMPv6 在 56 字节的要求数据根本上加上 ICMPv6 头部:

回应要求报文的 Type 字段值为 128,Code 字段的值为 0,然后交给 IPv6 协议封装;

Step3:IPv6 协议在 ICMPv6 根本上增加 IPv6 头部:(网络层封装)

封装的源 IPv6 地址是接口网卡 v6 地址:2402:4e00:1200:2002::2011

封装的目标 IPv6 地址:2402:4e00:1200:2001::2020

Step4:根据目标 IPv6 地址和本地网段前缀做比拟,创造目标地址不属于本地网段 2402:4e00:1200:2002::/64。
只能查路由表进行跨网段路由,查找路由表创造没有匹配的明细路由,终极只能选择默认路由::/0 进行转发。

Step5:通过默认路由找到可以通过网卡 eth0 进行转发,但是须要数据链路层封装成功后才能从网卡转发出去。
数据链路层封装的源 MAC 便是出接口 eth0 的 MAC 地址,目标 MAC 地址要从 ip -6 neigh 表(类似 IPv4 的 ARP 表)中查询到。

这里并没有学习到目标 IPv6 地址 2402:4e00:1200:2001::2020 对应的 MAC 地址,导致无法进行数据链路层封装。

Step6:为了学习到目标地址 2402:4e00:1200:2001::2020 对应的 MAC 地址,首先发送 NS 报文:Type 字段值为 135,Code 字段值为 0,在地址解析中的浸染类似于 IPv4 中的 ARP 要求报文。

这里面存在着两个问题,下面我们也会给出相应的阐明:

(1)被要求节点组播 IPv6 地址 FF02::1:FF00:2020 如何天生?

IPv6 中没有广播地址,也不该用 ARP。
但是仍旧须要从 IP 地址解析到 MAC 地址的功能。

在 IPv6 中,这个功能通过邻居要求 NS(Neighbor Solicitation)报文完成。
当一个节点须要解析某个 IPv6 地址对应的 MAC 地址时,会发送 NS 报文,该报文的目的 IP 便是须要解析的 IPv6 地址对应的被要求节点组播地址,只有具有该组播地址的节点会检讨处理。

被要求节点组播地址由前缀 FF02::1:FF00:0/104 和目标单播地址的末了 24 位组成。
由于目标单播地址是 2402:4e00:1200:2001::2020, 以是天生的被要求节点组播地址是:FF02::1:FF00:2020。

(2)被要求节点组播 MAC 地址 33:33:ff:00:20:20 如何天生?

组播 MAC 地址 48bit 的前 24bit 默认固定是 33:33:ff,后半部分是被要求节点组播地址的后 24bit,以是天生的组播 MAC 地址是 33:33:ff:00:20:20。

Step7:CVM1 发送的 NS 要求报文给到虚拟网关路由器,虚拟网关路由器收到 NS 报文后查看路由表匹配到路由 2402:4e00:1200:2001::/64,代理目标地址回答一个 NA 报文:Type 字段值为 136,Code 字段值为 0,在地址解析中的浸染类似于 IPv4 中的 ARP 应答报文。

IPv6 地址解析示意图:

学习到目标地址 2402:4e00:1200:2001::2020 对应的 MAC 地址是 fe:ee:1e:1b:cb:e0。
学习到的 MAC 存入到 IPV6 邻居表中:

Step8:回到 Step5 有了目标 IPv6 地址 2402:4e00:1200:2001::2020 对应的 MAC 地址可以进行数据链路层封装,然后从网卡 eth0 发出第一个 ICMPv6 的回应要求报文:

从第一个 NS 到第一个 ICMPv6 回应要求的发出顺序如下:(CVM1 的网卡抓包)

Step9:该回应要求报文到达虚拟网关路由器 A 后查路由表找到对应的 overlay 网络隧道(这里的虚拟网关和 overlay 网络暂不用展开)转发到目标虚拟网关路由器 B,然后由虚拟网关路由器 B 转发给 CVM2 的 eth0 网卡。

Step10:CVM2 的网卡 eth0 收到回应要求报文后通过二层帧头的 type 字段,确认递交给 IPv6 协议处理。

Step11:IPv6 协议处理头部,检讨目标 IP 精确,检讨下一个协议头部类型是 ICMPv6。

Step12:当收到一个回应要求报文时,ICMPv6 会用回应应答报文相应。
回应应答报文的 Type 字段的值为 129,Code 字段的值为 0。

CVM2 按同样的办法去查路由表封装网络层报文,按 Step5 到 Step7 解析到 MAC 后,查 ipv6 邻居表封装数据链路层的目的 MAC。

详细 CVM2 从收到第一个回应要求报文到发出第一个回应应答报文顺序如下:

NS 报文:

NA 报文:

学习到 MAC 后发送回应应答报文:

Step13:该回应应答报文到达虚拟网关路由器 B 后查路由表找到对应的 overlay 网络隧道转发到目标虚拟网关路由器 A,然后由虚拟网关路由器 A 转发给 CVM1 的 eth0 网卡。

Step14:CVM1 和 CVM2 以及虚拟路由器 A 和 B 都已经缓存了对应 IPv6 地址的 MAC,后续封装无效再发送 NS 与 NA,直接数据链路层封装后路由转发即可。

CVM1 完全的 10 个 ping6 报文截图如下:

CVM2 完全的 10 个 ping6 报文截图如下:

CVM1 的 ping6 成功的截图如下:

到此一次完全的 ping6 的过程就结束了,同样的道理,其他协议报文也是有这样的一个封装和解封装过程,希望本文能够让对大家有所帮助。

本文转载自"大众年夜众号云加社区(ID:QcloudCommunity)。

标签:

相关文章

CSS可见性,介绍网页元素展示的秘密武器

随着互联网的飞速发展,网页设计在用户体验方面越来越受到重视。而CSS可见性作为网页设计中的关键技术之一,直接影响着用户的浏览体验。...

通讯 2024-12-28 阅读1 评论0

CSS固定布局,技术与艺术的完美融合

随着互联网技术的飞速发展,网页设计已成为一门融合了艺术与技术的学科。在这其中,CSS(层叠样式表)固定布局技术成为了网页设计师们不...

通讯 2024-12-28 阅读0 评论0