当前位置:   article > 正文

Linux内核之ICMPv6详解_icmpv6报文解析代码

icmpv6报文解析代码

要知道什么是ICMPv6协议、我们首先要知道什么是ICMP?ICMP是一种面向无连接的协议,负责传递可能需要注意的差错和控制报文,差错指示通信网络是否存在错误(如目的主机无法到达、IP路由器无法正常传输数据包等。注意,路由器缓冲区溢出导致的丢包不包括在ICMP响应范围内,在TCP负责范围)。

ICMPv4和ICMPv6分别指用于IPv4和IPv6的ICMP版本。在IPv4网络中,ICMP协议用于在路由器、主机之间传递控制消息,主要有控制报文与信息报文。比如主机不可达、路由是否可用或者网络通不通等消息。这些信息也是我们日常去排查网络所用到的基本手段。当然,控制消息本身不会传输数据,但对于整个网络而言,对于传输数据而言,都是不可或缺的一部分。

与IPv4一样,IPv6也需要使用到ICMP报文;在IPv6中,ICMP开发了新的版本,称之为ICMPv6。ICMPv6 全称 Internet Control Message Protocol for the IPv6,它是IPv6的基础协议之一。那么它和ICMPV4有什么区别呢?相较于ICMPv4,ICMPv6实现的功能更多,IPv4网络中使用的ICMP、ARP、IGMP、RARP等功能,在IPv6网络中均由ICMPv6替代实现。除此之外,ICMPv6报文还用于IPv6的无状态自动配置、重复地址检测、前缀重新编址、路径MTU(Maximum Transmission Unit,最大传输单元)发现等。在IPv4中,协议字段值为1表示该报文携带了ICMPv4;在IPv6中,ICMPv6报文位于扩展头部里,ICMPv6扩展头部上一个头部包含了值为58的”下一个头部”字段。

当然、 ICMPv6协议还用以汇报IPv6节点在数据文件处理方式中发生的不正确信息,并完成简易的网络诊断作用。ICMPv6新增多的邻居发现作用替代了ARP协议的作用,因此 ,在IPv6网络体系结构中早已沒有ARP协议了。除了支持IPv6详细地址文件格式以外,ICMPv6还给支持IPv6中的路由器优化、IP组播、移动IP等增多了一些新的报文格式种类。

下面我们一起来看看IMCPv6的三个重要知识点:ICMPv6差错报文、ICMPv6消息报文和PMTU(路径MTU)。

3.1、ICMPv6差错报文

ICMP报文可分为两类:有关IP数据报传递的ICMP报文(差错报文)和信息采集和配置的ICMP报文(查询或者信息类报文)。ICMP差错报文不会对以下报文进行响应:

另一个ICMP差错报文;

头部损坏的数据报;

IP层的广播/组播数据报;

封装在链路层广播或者组播帧中的数据报;

无效或者网络为零的源地址数据报;

或除第一个之外的其他分片。

限制生成ICMP差错报文的原因是限制生成广播风暴。在[RFC4443]中,推荐采用令牌桶(token bucket)方法来限制ICMP报文速率。过程如下(一令牌大小为一字节):

假设”桶”里保存了最大数量”B”的”令牌”,如果”令牌”到达时”桶”满了,则”令牌”被丢弃;

当一个N字节的数据包达到,如果”桶”中多于N个”令牌”,则删除N个”令牌”,且数据包被发送到网络;如果”桶”中少于N个”令牌”,则不删除”令牌”,且认为这个数据包在流量限制之外。

ICMPv4到ICMPv6的转换只有回显请求和回显应答报文被转换,为了执行这个转换,类型值(8和0)分别被转换到值128和129。在转换之后,计算并应用ICMPv6的伪头部校验和。当转换ICMPv4差错报文时,只有下面的差错报文被转换了:目的不可达(类型3),超时(类型11),参数问题(类型12)。ICMPv6到ICMPv4的转换回显请求(类型128)和回显应答(类型129)报文被分别转换到ICMPv4回显请求(类型8)和回显应答(类型0),更新校验和以体现类型值变化和缺少为头部计算,其他信息类报文将被丢弃。

好了、说了这么多;我们在试验环境中抓一个ICMPv6的数据包看看。试验拓扑和

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/819186
推荐阅读
相关标签
  

闽ICP备14008679号