Understanding IPv6 第5章——ICMPv6

写在前面:
一直监督自己写读书笔记的原因是因为之前也读过很多书,但是没有做笔记。导致过了一段时间之后啥也没记住,感觉像没读一样。但是最近又渐渐的发现,我这样的读书笔记就是简单的把书上的内容照搬过来,意义也不大,对效率倒是影响不少。而且将来也不太可能用这个笔记来复习,因为看原书效果可能更好,有目录,也有细节。所以从今天起开始改变一下风格,只大概列一下目录。以及自己对于一些关键点的理解或者说疑惑。
2018.05.06

ICMPv6和ICMPv4的作用一样,用来报告报文在传递过程中的错误提供请求响应服务
ICMPv6为邻居节点发现和组播侦听发现提供了数据包框架结构。

ICMPv6分为两类:
1. 错误类 中间路由器或目标节点报告报文在传递过程中遇到的错误。如主机不可达,报文过大。类型范围为0-127
2. 消息类 提供问题定位和其他附加功能,如MLD和ND。类型范围为128-255

ICMPv6 header

IP报文头的HEADER字段值58表示ICMPv6。ICMPv6头部结构如下:
这里写图片描述
Type,Code和ICMPv4中字段意思一致。
Checksum 需要添加在上一章介绍过的伪头部。

ICMPv6 Error Messages

ICMPv6报文(加IP头部)长度都不会超过1280字节,即IPv6要求的链路层最小MTU。
错误消息有以下几种:

1. Destination Unreachable

印象中就只有路由不可达这一种,但是实际上有多达6种目的不可达:
路由不可达
与目的地址的通信被管理员禁止
超过地址的范围:我理解为比如是一个源地址是私网地址的报文,需要通过一个公网接口转发,就是超过了地址的范围。
地址不可达:无法解析出链路层地址
端口不可达
源地址未通过出入口策略的检查
配置到拒绝路由

2. packet too big

当报文的长度超过链路层MTU时报此错误,并会在报文在包含链路层MTU

3. time exceed

hop limit 字段变为0或者报文组装超时会发送此错误。code分别为0和1

4. Parameter Problem

在解析的过程中出错。会一个指针指向出错的位置,哪怕这个位置已经超出能够包含的原报文。
错误分成三种
0 头部某个字段出错
1 无法识别的header字段
2 无法识别的选项

ICMPv6 Information Messages

和IPv4中的定义一样,用来进行故障定位。有echo request, 和echo reply两种。
每个请求有两个标识此请求的字段:identifier,一般每个程序的标识都会不一样 ,sequence Number,标识具体的请求。
echo request可以发往组播地址,RFC4443规定了此类请求应该被响应。源地址选择接收此请求的接口上的一个单播地址。

Path MTU Discovery

在不分片的前提下,发送单个报文的的长度越大,则效率越高,因为头部等不是有效载荷。PMTU用来发现整个路径的最小MTU。原来非常简单,先发送大小为本机接口MTU的报文,收到ICMPv6的packet too big报文之后再调整包的大小。直到未收到packet too big报文或收到了确认或响应。
如果不支持PMTU,那么就必须发送大小为最小链路MTU——1280字节的包。

当PMTU发生变化时,如果是变小,那么收到packet too big报文后很快就能调整包的大小。但是当PMTU变大之后,需要主动探测才能发现,RFC1981要求收到packet too big报文5分钟之后才能尝试,推荐值为10。



参考

understanding IPv6

深入解析IPv6 第3版

猜你喜欢

转载自blog.csdn.net/qq_31567335/article/details/80211232
今日推荐