Technorati 标签: IPv6,ICMPv6,CCIE,路由,ICMP差错
概要
--ICMPv6 (Internet Control Message protocol for the IPv6)是IPv6的基础协议之一.定义在RFC2463中.
--用于传递报文转发中产生的信息或者错误.
--ICMPv6定义的报文被广泛的应用在其他协议中.包括:NDP(neighbor discovery protocol, PathMTU路径发现机制,MLD协议[替代IPv4中组播的IGMP协议]等等)
ICMPv6包头是属于上层协议的报头.他一定会处于所有的扩展报头后面.
在指明ICMPv6的报头的时候,基本包头或者是扩展报头中的"Next header=58"[Next-header=0x3a],这样IPv6的基本包头或者扩展报头才能和ICMPv6报头进行关联.
下面的报文,就是一个ICMPv6的报文.
这里面,有一个IPv6的基本包头,在Next-header里面指定的是0x3a.指定的就是ICMPv6的协议报头.
附件是相关的抓包.
ICMPv6的type类:
1, 错误类消息(error message),也称为差错报文,最高bit为0,也就是ICMPv6 type=[0-127].
NOTES:如果是错误消息的话,那么ICMPv6报头中的type会是在0-127之间.
差错报文:
---1,差错报文(RFC2463)
~~~~目的不可达Destination unreachable (type=1)
●Code=0: 没有达到目标的路由
如果在网络中,R1--R2--R3.
R1 ping "R5"的环回口,保证这个"R5"在所有网络中都没有路由存在.
那么R1会把ICMP送向R2这个默认网关,但是R2会给R1回应一个差错报文,code=0.标示没有达到目标的路由.
R1--R2--R3
在R1上面ping 2055::1,这个环回口没有任何路由有这个路由.
通过抓包来看,R1 ping 2055:1,把ICMPv6报文甩给R2的e0/0 input,结果因为R2收到了以后没有路由信息,就直接R2给R1回应ICMPv6的差错报文.Type=1, code=0,没有路由.
●Code=1: 与目标的通信被管理策略禁止
这种情况,一般是在中途链路做了ACL等策略禁止ICMP报文通行.
下面就是一个做了ACL的策略ping包的抓包.
R1---[e0/0]R2---R3
在R2上面的e0/0的input方向应用了一个ACL.禁止R1发送的所有ICMP报文.
下面红色框中就是R2回应R1的一个ICMP差错报文,code=1.与目标的通信被管理策略禁止.
●Code=2: 未指定
●Code=3: 地址不可达
这里先还是要说一下,地址不可达,和code=0,路由不可达..有什么区别.code=3,是说我有Destination的路由,但是地址通不了.Code=0是说完全没有路由.
模拟过程:这里是说,R1--R2---2023::x/64---R3
这里R2和R3相互连接的接口地址分别是:2023::2/64和2023::3/64
但是,在R1上面去ping 2023::10/64这个完全不存在的地址.数据从R1甩到R2以后,R2有路由,但是这个"2023::10/64"是完全不可达的.
模拟拓扑图为:R1---2012::x/64---R2(2023::2/64)-----(2023::3/64)R3
在R1上面ping 2023::10这个不存在的地址.
在R1上面debug的信息如下:
*Apr 18 16:31:24.045: ICMPv6: Sent echo request, Src=2012::1, Dst=2023::10.
*Apr 18 16:31:27.265: ICMPv6: Received Unreachable code 3, Src=2012::2, Dst=2012::1
PS.R2在返回ICMP报文code=3的时候,会有一定的时延,因为R2收到报文以后,因为有路由,所以R2还要花时间进行地址查找,发送NS出去,等待NA回来.如果NA连续不会超时,这个时候R2才会反馈ICMPv6的差错报文.
●Code=4: 端口不可达
关于这点,用traceroute 工具即可.
R1---R2---R3
登陆到R1上面traceroute R3的环回口.这个时候会相应端口不可达.
R1: traceroute 2033::1
这个时候在R1上面收到ICMP差错报文,code=4的报文.
*Apr 18 17:32:23.110: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1
*Apr 18 17:32:23.116: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1
*Apr 18 17:32:23.121: ICMPv6: Received Time Exceeded, Src=2012::2, Dst=2012::1
*Apr 18 17:32:23.127: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1
*Apr 18 17:32:23.132: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1
*Apr 18 17:32:23.137: ICMPv6: Received Unreachable code 4, Src=2023::3, Dst=2012::1
~~~~数据包超长Packet Too Big (Type=2)
●Code=0
~~~~超时Time Exceeded (Type=3)
●Code=0: 在传输中超越了跳数限制(hot-limit超时,IPv4的TTL超时)
●Code=1: 分片重组时超时
~~~~参数问题Parameter Problem (Type=4)
●Code=0: 遇到错误的报头字段
●Code=1: 遇到无法识别的Next-header
●Code=2: 遇到无法识别的IPv6选项
---2,信息类消息(information message),也称为信息报文,最高bit为1,也就是ICMPv6 Type=[128-255].
NOTES:如果是信息类的消息,那么type的值会在128-255之间.
信息类报文(RFC2463),我们用得最多的就是type=128 Echo request和129, echo reply.
~~~~回送请求报文(Echo Request)
●Type=128, Code=0.
~~~~回送应答报文(Echo Reply)
●Type=129, Code=0.
附件有我做实验的相关ICMP6的抓包,有需要的朋友可以下载对比进行梳理概念.
本文出自 “hank--我,只关注原理” 博客,请务必保留此出处http://361531.blog.51cto.com/351531/1765168
2016-4-18 ICMPv6协议[RFC2463]--报文详解
原文地址:http://361531.blog.51cto.com/351531/1765168