导语 | 关于ping的原理详解,网上可以搜索出很多相关内容,而ping6的详解,则很少看见高质量的文章。希望本文能够让更多朋友了解ping6的原理。通过本文你将了解到什么是ICMPV6协议,以及一个完整的ping6过程究竟是怎样发生的。(本文作者:腾讯云售后架构师 李彬文)

一、ICMPv6简介

ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。ICMPv6具备向源地址报告关于向目的地传输IPv6数据包过程中的差错信息和控制信息。

ICMPv6定义了一些消息,如:目的不可达、数据包超长、超时、响应请求和响应应答等。在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还有其它一些功能,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTUD等。

二、ICMPv6报文格式

ICMPv6报文格式如下图所示:

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的过程就结束了,同样的道理,其他协议报文也是有这样的一个封装和解封装过程,希望本文能够让对大家有所帮助。

关注「云加社区」公众号,回复“ IP ”,获取更多IPv6相关内容。

推荐阅读

腾讯课堂点播上云客户端实践总结

IPv6排障工具之ping6完整过程细节剖析相关推荐

  1. 5大网络排障工具,擅长使用这些的网工受益无穷

    网络排障作为每个网工的必备技能,也是工作上的一个难点,如果能用好网络故障排除工具能高效提升你的工作效率,非常的好用!还不快来看看吗? 1.局域网分析工具 IP Tools:Network Utilit ...

  2. Linux 网络排障工具 MTR --鸟枪换炮事半功倍

    目录 介绍 安装 使用 输出解读 参数说明 -r or --report -s or --packetsize -c -n 结果分析 网络丢包 网络延迟 介绍 常用的 ping,tracert,nsl ...

  3. linux启用日志记录功能,Linux下启用Open vSwitch的日志功能以便调试和排障

    问题 我试着为我的Open vSwitch部署排障,鉴于此,我想要检查它的由内建日志机制生成的调试信息.我怎样才能启用Open vSwitch的日志功能,并且修改它的日志等级(如,修改成INFO/DE ...

  4. 网络管理:3分钟排障秘技,一招胜过十年功 | 文末有彩蛋

    别管你是在网络管理方面沉浮多年的老司机,还是新近入行的小白白,每当遇到网络故障,争分夺秒的焦灼感一定深刻到难以言喻. 虽说条条大路通罗马,通过不同的方式总能找到导致网络故障的原因. 但业务高度依赖于网 ...

  5. FTP基础知识及排障方法

    FTP基础知识及排障方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" / ...

  6. 记一次 K8s 控制平面排障的血泪经历!

    集群以及环境信息的信息: k8s v1.18.4 3 节点 Master 均为 8 核 16Gi, 50Gi-SSD 差异化配置的 19 节点 Minion control-plane 组件 (kub ...

  7. 个人对win7开机黑屏只有鼠标排障总结

    个人对win7开机黑屏只有鼠标排障总结 个人对win7开机黑屏只有鼠标排障总结 第一种情况 explorer.exe进程丢失或损坏: 第二种情况 安全模式修复系统或驱动错误 第三种情况 整个C盘分区格 ...

  8. Netapp 3200 7mode排障经验

    最近通过几起Netapp存储排障经历,积累了一些经验,集中总结一下. 本文基于以下情景: 一个控制器发生了硬件故障,另一个控制器发生了Takeover接管操作,但单节点性能不足以承载全部业务,由此性能 ...

  9. 【原】个人对win7开机黑屏只有鼠标排障总结

    个人对win7开机黑屏只有鼠标排障总结 文:铁乐猫 第一种情况是explorer.exe进程丢失或损坏有关: 判断方法是按Ctrl+Alt+Del键能呼出任务管理器,结束explorer.exe进程, ...

最新文章

  1. msp430入门学习16
  2. VTK:Utilities之Screenshot
  3. java面试的题积累【持续更新中......】
  4. 自定义Cell的流程
  5. Java调用exe阻塞
  6. Linux学习系列之Linux入门(一)linux安装与入门
  7. range函数python_range()函数以及Python中的示例
  8. realme Q3 Pro跑分曝光:天玑1100加持新一代“千元机皇”
  9. java里面super(),Java中super
  10. 做你最后的Administrator
  11. 【GCN】2021年,我终于决定入门GCN
  12. windows安装node.js和cnpm
  13. 为移动Web应用创建快速响应按钮
  14. 电子元件-555时基芯片
  15. python数据库模糊查询_python中的mysql数据库like模糊查询
  16. 技术架构图-大数据架构
  17. (BFS/状态压缩)HDU 5025 Saving Tang Monk
  18. elementui中表格的表头设置背景颜色
  19. css怎么设置图片卷角效果,CSS3 带分隔线卷角贴纸效果
  20. 汉印HPRT HN-3208SR 驱动

热门文章

  1. 视频跟踪算法--TLD跟踪算法介绍
  2. Win10下 60行代码实现多线程PDF转Word 运行错误摘要
  3. 达梦触发器的作用与基本操作
  4. FPGA烧录jic文件问题
  5. Android 豆瓣电影-开源
  6. JPEG 编解码器 霍夫曼编码
  7. 最高效的近似算法——贪心算法
  8. 智慧停车将再次迎来发展的春天
  9. 停车场收费软件兼容电脑操作系统问题如何搞定?
  10. Android逆向之--------常用软件安装