赞
踩
网络网络层之(6)ICMPv6协议
Author: Once Day Date: 2024年6月2日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN博客。
参考文章:
- 《TCP/IP详解卷一》
- RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification
(ietf.org)- RFC 4861: Neighbor Discovery for IP version 6 (IPv6) (rfc-editor.org)
- RFC 4884 - Extended ICMP to Support Multi-Part Messages (ietf.org)
- TCP/IP 笔记 - ICMPv4和ICMPv6 : Internet控制报文协议 - 野兽’ - 博客园 (cnblogs.com)
- ICMPv6报文详解-CSDN博客
- IPv6/ICMPv6-原理介绍+报文分析+配置示例_ipv6地址获取过程报文交互-CSDN博客
- IP报文格式大全(html) - 华为 (huawei.com)
- TCP/IP卷一:44—ICMP之(ICMP(控制报文协议)简介、ICMPv4、ICMPv6报文格式/报文处理)_大量的icmpv6报文-CSDN博客
- IPv6基础篇(三):ICMPv6的整体介绍 - 知乎 (zhihu.com)
ICMPv6是互联网控制消息协议第6版(Internet Control Message Protocol version 6)的缩写,它是IPv6协议族中的一个重要协议,与IPv4中的ICMPv4协议相对应。ICMPv6同样用于传递网络层的控制和错误信息,辅助IPv6协议完成高效、可靠的数据传输任务。
与ICMPv4类似,ICMPv6报文封装在IPv6数据报中进行传输。报文主要由报头和数据部分组成。报头包含了类型、代码和校验和等重要信息,用于识别报文的类型和检测传输错误,数据部分则携带了与具体报文类型相关的信息。
ICMPv6报文可以分为两大类:差错报告报文和信息报文。
(1) 差错报告报文用于向源节点通知在数据传输过程中遇到的各种错误情况:
(2) 信息报文则用于IPv6网络中的各种功能:
与ICMPv4相比,ICMPv6在功能上有所增强,特别是在支持IPv6的新特性方面,如组播管理、邻居发现等。
以下是与ICMPv6相关的主要RFC文档列表:
RFC 2463 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification (1998),定义了ICMPv6协议的基本规范,包括报文格式、类型和代码等。
RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification (2006),更新和取代了RFC 2463,对ICMPv6进行了细化和完善。
RFC 4861 - Neighbor Discovery for IP version 6 (IPv6) (2007),定义了IPv6的邻居发现协议,包括路由器发现、前缀发现、地址解析等,邻居发现协议大量使用ICMPv6报文进行通信。
RFC 4884 - Extended ICMP to Support Multi-Part Messages (2007),扩展了ICMPv4和ICMPv6,支持多部分消息,增加了对大型诊断消息的传输能力。
RFC 4890 - Recommendations for Filtering ICMPv6 Messages in Firewalls (2007),为防火墙过滤ICMPv6报文提供了指导和建议,以提高IPv6网络的安全性。
RFC 5837 - ICMP Extensions for Multiprotocol Label Switching (2010),定义了用于MPLS的ICMPv4和ICMPv6扩展,支持MPLS网络的错误报告和诊断。
RFC 6437 - IPv6 Flow Label Specification (2011),重新定义了IPv6流标签的用途和处理规则。
RFC 7045 - Transmission and Processing of IPv6 Extension Headers (2013),规定了IPv6扩展头的处理规则和顺序。
RFC 7112 - Implications of Oversized IPv6 Header Chains (2014),分析了IPv6过长头部链对网络设备和协议处理的影响。
RFC 8335 - PROBE: A Utility for Probing Interfaces (2018),定义了一种探测接口的通用机制,使用ICMPv6回显请求进行探测。
ICMPv6报文格式由类型、代码和校验和三个固定字段组成,后面紧跟与具体报文类型相关的数据部分。
字段说明:
ICMPv6报文位于0个或多个扩展头部之后,其中最后一个扩展头部包含值为58的下一个头部字段(Next Header)。
Type(类型,8位)标识ICMPv6报文的类型,不同的类型对应不同的报文格式和用途,如128表示回显请求,129表示回显应答等。ICMPv6类型报文从0127都是差错报文,从128255都是信息类报文。
Code(代码,8位)与类型字段一起标识ICMPv6报文的具体含义,同一类型的报文可能有多个代码值,表示不同的错误原因或附加信息。
Checksum(校验和,16位)用于检测报文在传输过程中是否出现错误,计算方法与ICMPv4类似,但有些不同,ICMPv6除了整个ICMP数据段,还要包含IPv6头部中的源和目的IPv6地址,长度和下一个头部字段。
Message Body(消息体):长度可变,携带与具体报文类型相关的数据,如错误信息、回显数据等,不同类型的报文有不同的消息体格式。
ICMPv6的主要报文类型如下:
类型 | 名称 | RFC文档 | 用途描述 |
---|---|---|---|
1 | Destination Unreachable | RFC4443 | 目标不可达,用于通知源主机 |
2 | Packet Too Big | RFC4443 | 报文过大,需要分片但IPv6不允许中间设备分片 |
3 | Time Exceeded | RFC4443 | 超时,用于通知源主机 |
4 | Parameter Problem | RFC4443 | 参数问题,用于向源主机指出错误 |
100/101 | 为私人实验保留 | RFC4443 | 为实验保留 |
127 | 为ICMPv6差错报文扩充保留 | RFC4443 | 为更多的差错报文保留 |
128 | Echo Request | RFC4443 | 回显请求,用于诊断网络连通性 |
129 | Echo Reply | RFC4443 | 回显应答,用于诊断网络连通性 |
130 | Multicast Listener Query | RFC2710 | 组播侦听器查询,用于查询链路上的组播组成员 |
131 | Multicast Listener Report | RFC2710 | 组播侦听器报告,用于主机加入组播组 |
132 | Multicast Listener Done | RFC2710 | 组播侦听器终止,用于主机离开组播组 |
133 | Router Solicitation | RFC4861 | 路由器请求,用于主机发现本地路由器 |
134 | Router Advertisement | RFC4861 | 路由器通告,用于路由器通告其存在及相关链路参数 |
135 | Neighbor Solicitation | RFC4861 | 邻居请求,用于链路层地址解析、重复地址检测等 |
136 | Neighbor Advertisement | RFC4861 | 邻居通告,用于响应邻居请求或主动通告链路层变化 |
137 | Redirect | RFC4861 | 重定向,用于路由器通知主机有更好的下一跳 |
138 | Router Renumbering | RFC2894 | 路由器重编号,用于管理员重新编址路由器 |
139 | ICMP Node Information Query | RFC4620 | ICMP节点信息查询,用于获取相邻节点的名字和地址信息 |
140 | ICMP Node Information Response | RFC4620 | ICMP节点信息响应,用于应答节点信息查询 |
141 | Inverse Neighbor Discovery Solicitation | RFC3122 | 反向邻居发现请求,用于检查IPv6到链路层地址的映射 |
142 | Inverse Neighbor Discovery Advertisement | RFC3122 | 反向邻居发现通告,用于响应反向邻居发现请求 |
143 | Multicast Listener Discovery (MLDv2) reports | RFC3810 | 组播侦听器发现(MLDv2)报告,用于MLDv2管理组播组成员 |
144 | Home Agent Address Discovery Request | RFC6275 | 家乡代理地址发现请求,用于移动IPv6中发现家乡代理 |
145 | Home Agent Address Discovery Reply | RFC6275 | 家乡代理地址发现响应,用于移动IPv6中响应家乡代理发现 |
146 | Mobile Prefix Solicitation | RFC6275 | 移动前缀请求,由移动节点请求家乡代理前缀 |
147 | Mobile Prefix Advertisement | RFC6275 | 移动前缀通告,由家乡代理向移动节点通告移动前缀 |
148 | 证书路径请求报文 | RFC3971 | 一条证书路径的保护邻居发现(SEND)请求 |
149 | 证书路径通告报文 | RFC3971 | 相应一个证书路径请求的SEND |
151 | 组播路由器通告 | RFC4286 | 提供组播路由器的地址 |
152 | 组播路由器请求 | RFC4286 | 请求组播路由器的地址 |
153 | 组播路由器终止 | RFC4286 | 组播路由器使用结束 |
154 | FMIPv6 | RFC5568 | MIPv6快速切换报文 |
200/201 | 为私人实验保留 | RFC4443 | 为实验保留 |
255 | 为ICMPv6信息类报文扩充保留 | RFC4443 | 为更多的信息类报文保留 |
类型 | 代码 | 名称 | 描述 |
---|---|---|---|
1 | 0 | No route to destination | 无法路由到目标 |
1 | 1 | Communication with destination administratively prohibited | 与目标通信被管理员禁止 |
1 | 2 | Beyond scope of source address | 超出源地址的作用域 |
1 | 3 | Address unreachable | 地址不可达 |
1 | 4 | Port unreachable | 端口不可达 |
1 | 5 | Source address failed ingress/egress policy | 源地址未通过入口/出口策略 |
1 | 6 | Reject route to destination | 拒绝到目标的路由 |
1 | 7 | Error in Source Routing Header | 源路由头部错误 |
3 | 0 | Hop limit exceeded in transit | 传输过程中超过跳数限制 |
3 | 1 | Fragment reassembly time exceeded | 分片重组超时 |
4 | 0 | Erroneous header field encountered | 遇到错误的头部字段 |
4 | 1 | Unrecognized Next Header type encountered | 遇到无法识别的下一个头部类型 |
4 | 2 | Unrecognized IPv6 option encountered | 遇到无法识别的IPv6选项 |
类型1的目标不可达有多达8种情况,比如无法路由、地址或端口不可达、通信被禁止、超出作用域等,对应了在数据包转发过程中可能遇到的各种问题。
类型3的超时有2种情况,分别是超过跳数限制和分片重组超时。其中跳数限制反映了IPv6网络直径的限制,防止数据包无限循环转发。
类型4的参数问题有3种情况,分别涉及头部字段错误、无法识别的下一个头部类型和IPv6选项,反映了数据包解析过程中可能遇到的问题。
在某些情况下,网络设备不会产生ICMPv6差错报文,以避免网络拥塞、安全问题或无用的错误报告:
RFC 4443中对ICMPv6差错报文的生成和发送做了一些限制和规定,主要涉及令牌桶限速:
ICMPv6基础消息指定义在RFC 4443中的基础控制消息,不涉及IPv6网络地址和路由协商的部分。
ICMPv6的目的不可达报文(Destination Unreachable Message)是类型1的差错报文,用于在数据包无法送达目标时,由路由器或主机向源端发送,告知其发生了不可达的情况。
RFC 4443报文的格式如下:
Destination Unreachable Message(RFC 4443)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [IPv6] |
字段说明如下:
RFC 4884报文格式如下(支持扩展数据结构):
Destination Unreachable Message(RFC 4884)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Length | Unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [RFC4443] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ICMPv6扩展头部以及零个或多个关联对象 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
当路由器或主机无法转发或处理接收到的数据包时,就会向源端发送一个相应的目的不可达报文。源端收到该报文后,可以根据Code值判断具体的不可达原因,并结合数据部分携带的原始报文信息进行问题的定位和调整。
ICMPv6的PTB(Packet Too Big)报文是一种重要的错误报告消息,用于通知源节点发送的数据包超过了链路的MTU(最大传输单元),需要进行分片。
Packet Too Big Message(RFC 4443)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| MTU |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [IPv6] |
PTB报文属于ICMPv6的类型2报文,代码字段固定为0。当路由器收到一个IPv6数据包,且该数据包的大小超过了出接口的MTU时,路由器会丢弃该数据包,并向源节点发送一个PTB报文。
当源节点收到PTB报文时,会更新其路径MTU发现(PMTUD)状态,并根据PTB报文中指示的MTU值对后续数据包进行分片或调整大小,这有助于提高网络效率和避免不必要的数据包丢失。
PTB报文是实现IPv6路径MTU发现(PMTUD)机制的关键,PMTUD允许源节点动态地发现端到端路径上的最小MTU,并相应地调整数据包大小,从而优化网络性能。
为防止PTB报文被恶意节点用于攻击,如欺骗源节点使用较小的MTU导致分片和重组开销增加,源节点通常会对收到的PTB报文进行验证,如检查报文中包含的原始数据包是否为自己发送的。
ICMPv6超时报文是一种错误报告消息,用于通知源节点在数据包传输过程中发生了超时。当路由器或目的节点在规定的时间内未能完成数据包的转发或处理时,就会向源节点发送超时报文。
Time Exceeded Message(RFC 4443)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [IPv6] |
字段说明:
当源节点收到超时报文时,可以根据Code字段确定具体的超时原因:
源节点收到超时报文后,可以根据需要调整发送策略,如增加Hop Limit的初始值,或者调整分片大小以减少重组超时的可能性。超时报文可能指示网络中存在某些问题,如路由环路、链路拥塞或MTU配置不当等。
ICMPv6参数问题报文是一种错误报告消息,用于通知源节点在处理IPv6数据包头部或扩展头部时发现了错误的参数值。当路由器或目的节点检测到数据包中存在无法识别或无法处理的参数时,会向源节点发送参数问题报文。
Parameter Problem Message(RFC 4443)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [IPv6] |
字段说明:
当源节点收到参数问题报文时,可以根据Code字段和Pointer字段确定具体的错误类型和位置:
源节点根据这些信息可以识别和修复数据包构造过程中的错误,如使用正确的头部字段值、支持的下一个头部类型和选项等。
参数问题报文可能指示网络中存在配置错误、软件缺陷或互操作性问题。但需要注意参数问题报文可能被恶意节点用于探测网络拓扑或发起攻击,因此应采取适当的安全措施,如过滤和速率限制等。
ICMPv6回显请求(Echo Request)和回显应答(Echo Reply)报文是用于诊断网络连通性和延迟的重要工具。它们的功能与IPv4中的ICMP回显请求和应答报文类似,通常用于实现ping命令。
Parameter Problem Message(RFC 4443)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Sequence Number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明:
Type(8位),表示ICMPv6报文的类型。对于回显请求报文,该字段值为128,对于回显应答报文,该字段值为129。
Code(8位),表示ICMPv6报文的代码。对于回显请求和应答报文,该字段始终为0。
Checksum(16位),ICMPv6报文的校验和,计算方法与PTB报文相同。
Identifier(16位),用于匹配回显请求和应答报文,发送方在请求报文中设置一个标识符,接收方在对应的应答报文中使用相同的标识符。
Sequence Number(16位),用于匹配回显请求和应答报文。发送方在请求报文中设置一个序列号,接收方在对应的应答报文中使用相同的序列号,发送方通常在每次发送请求时递增序列号。
Data(可变长度),载荷数据。发送方可以在请求报文中包含任意数据,接收方在应答报文中返回相同的数据,这可以用于测量网络的往返时间(RTT)和数据完整性。
当源节点发送ICMPv6回显请求报文时,目的节点接收到报文后,将报文中的Type字段修改为129,表示回显应答,并将Identifier、Sequence Number和Data字段保持不变,然后将应答报文发送回源节点。
源节点通过比较发送请求和接收应答之间的时间差,可以计算出到目的节点的RTT。同时,通过检查应答报文中的Data字段,可以确认数据在传输过程中是否被修改。
通过分析ping6的输出结果,如RTT统计信息、丢包率等,可以帮助识别网络中的故障和性能瓶颈。此外,ICMPv6回显请求和应答报文还可以用于其他网络管理和诊断工具的开发。
在RFC 6275(Mobility Support in IPv6)中定义了两种ICMPv6报文类型:
这两种报文用于支持移动IPv6(MIPv6)中的家乡代理地址发现功能,允许移动节点动态地发现和选择家乡代理。
家乡代理地址发现请求报文格式:
Home Agent Address Discovery Request Message(144)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
家乡代理地址发现回复报文格式:
Home Agent Address Discovery Reply Message(145)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. Home Agent Addresses .
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明:
Type(8位),表示ICMPv6报文的类型。对于家乡代理地址发现请求报文,该字段值为144。对于家乡代理地址发现回复报文,该字段值为145。
Code(8位),表示ICMPv6报文的代码,对于这两种报文,该字段始终为0。
Checksum(16位),ICMPv6报文的校验和,计算方法与其他ICMPv6报文类似。
Identifier(16位),用于匹配请求和回复报文,发送方在请求报文中设置一个标识符,接收方在对应的回复报文中使用相同的标识符。
Reserved(16位),保留字段,必须初始化为0。
Home Agent Addresses(可变长度,仅出现在回复报文中),包含一个或多个家乡代理的IPv6地址,每个地址占用128位。
家乡代理地址发现的过程如下:
家乡代理地址发现报文可能被恶意节点用于发起攻击,如欺骗移动节点使用恶意家乡代理,一般使用IPsec对家乡代理地址发现报文进行保护,以确保网络的安全性。
在RFC 6275中,类型146对应的是移动前缀请求(Mobile Prefix Solicitation)报文,类型147对应的是移动前缀广告(Mobile Prefix Advertisement)报文。
移动前缀请求报文格式:
Mobile Prefix Solicitation Message(146)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
移动前缀广告报文格式:
Mobile Prefix Advertisement(147)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identifier | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
字段说明:
移动前缀请求和广告报文用于在移动IPv6中实现移动前缀的动态分配和管理,其基本过程如下:
通过使用移动前缀请求和广告报文,移动IPv6可以实现移动前缀的动态分配和管理,简化了网络配置和维护。
与家乡代理地址发现报文类似,需要采取适当的安全措施,如使用IPsec对这些报文进行保护,以确保网络的安全性。
RFC 2710中定义的ICMPv6类型130(Multicast Listener Query)、类型131(Multicast Listener Report)和类型132(Multicast Listener Done)报文及其格式。这些报文用于实现MLDv1(Multicast Listener Discovery Version 1)协议,支持IPv6组播管理。
组播监听者查询(Multicast Listener Query)报文格式:
Multicast Listener Query(130)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Response Delay | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ Multicast Address +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
组播监听者报告(Multicast Listener Report)报文格式:
Multicast Listener Report(131)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ Multicast Address +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
组播监听者结束(Multicast Listener Done)报文格式:
Multicast Listener Done(132)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ Multicast Address +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明:
Type(8位),表示ICMPv6报文的类型,对于组播监听者查询报文,该字段值为130,对于组播监听者报告报文,该字段值为131,对于组播监听者结束报文,该字段值为132。
Code(8位),表示ICMPv6报文的代码,对于这三种报文,该字段始终为0。
Checksum(16位),ICMPv6报文的校验和,计算方法与其他ICMPv6报文类似。
Maximum Response Delay(16位,仅出现在查询报文中),指定主机在发送报告报文之前应该等待的最大延迟时间,以毫秒为单位。
Reserved(16位或32位),保留字段,必须初始化为0。
Multicast Address(128位),指定查询、报告或结束消息所针对的组播地址。
MLDv1协议的基本工作原理如下:
通过使用MLDv1协议,IPv6网络可以高效地管理和优化组播流量的分发,减少不必要的网络开销,常用于支持IPTV、在线会议等大规模组播应用。
RFC 3810中定义的ICMPv6类型143(Multicast Listener Discovery Version 2 Reports)报文及其格式。MLDv2是MLDv1的增强版本,提供了更多的功能和灵活性,如支持源特定组播(SSM)、更细粒度的组播过滤等。
MLDv2协议的基本工作原理与MLDv1类似,但引入了一些新的机制和概念:
MLDv2协议的实现和部署比MLDv1更加复杂,需要主机和路由器都支持MLDv2的功能。此外,MLDv2报文的长度和处理开销也较MLDv1有所增加。因此,在实际网络中部署MLDv2时,需要仔细评估其必要性和可行性,并采取适当的优化措施,如使用SSM映射、配置合适的查询间隔等。
RFC 4286中定义的ICMPv6类型151、152和153这三种报文用于实现多播路由器广告(Multicast Router Advertisement, MRA)和多播路由器请求(Multicast Router Solicitation, MRS)功能,支持在IPv6网络中发现和管理多播路由器。
多播路由器广告(Multicast Router Advertisement)报文格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Query Interval | Robustness Variable |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
多播路由器请求(Multicast Router Solicitation)和多播路由器终止(Multicast Router Termination)报文格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段说明:
Query Interval(16位,仅出现在广告报文中),指定多播路由器发送广告报文的时间间隔,以秒为单位。
Robustness Variable(16位,仅出现在广告报文中),指定系统的鲁棒性变量,用于调整协议的容错能力。
Reserved(32位),保留字段,必须初始化为0。
MRA和MRS协议的基本工作原理如下:
MRA和MRS协议本身并不负责实际的多播路由和转发,而只是提供了一种发现和管理多播路由器的机制。实际的多播路由功能通常由其他协议(如PIM-SM、PIM-DM等)来实现。
IPv6邻居发现协议(Neighbor Discovery Protocol, NDP)是IPv6中的一个重要协议,它集成了IPv4中ARP、ICMP router discovery和ICMP redirect等多个协议的功能,用于在IPv6网络中发现邻居并与之交互。
NDP主要有以下几个作用:
地址解析,通过邻居请求(NS)和邻居公告(NA)消息,将IPv6地址解析为链路层地址,类似于IPv4中的ARP。
路由器发现,通过路由器请求(RS)和路由器公告(RA)消息,允许主机自动发现本地链路上的路由器,并从路由器获取相关配置信息,如IPv6前缀、MTU等。
地址自动配置,结合路由器公告信息,主机可以使用无状态地址自动配置(SLAAC)机制自动生成IPv6地址,简化IP配置过程。
重复地址检测,在分配IPv6地址前,主机会通过邻居请求消息检测地址是否冲突,避免地址重复的问题。
链路状态探测,通过邻居不可达检测(NUD)机制,定期验证邻居的可达性,快速感知链路故障。
重定向,当路由器发现主机使用次优路径时,可通过重定向消息通知主机,优化路由路径。
NDP定义了5种ICMPv6消息类型:路由器请求(RS, type 133)、 路由器公告(RA, type 134)、邻居请求(NS, type 135)、邻居公告(NA, type 136) 、重定向(Redirect, type 137)。
ICMPv6广泛在链路层和网络层使用组播地址,而IPv4主要是广播地址。不过ND并不倾向于采用链路层组播功能,因此在非广播和非组播链路层上的操作会有一些差别。
ND报文基于ICMPv6报文实现,发送时IPv6的跳数限制字段值会被设置为255,接收方会验证这个值,以防止被非本链路上的发送者给欺骗。
ICMPv6重定向报文是一种重要的控制消息,用于通知源节点有一条更优的路由可以到达目的地。当路由器发现源节点发送的数据包不是通过最佳路径到达目的地时,会向源节点发送重定向报文,建议其更新路由表以使用更优路径。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| As much of invoking packet |
+ as possible without the ICMPv6 packet +
| exceeding the minimum IPv6 MTU [IPv6] |
字段说明:
Type(8位),表示ICMPv6报文的类型,对于重定向报文,该字段固定为137。
Code(8位),表示ICMPv6重定向报文的代码,该字段有以下四种取值:
Checksum(16位),ICMPv6报文的校验和,计算方法与PTB报文相同。
Reserved(32位),保留字段,必须初始化为0,并在处理时忽略。
Target Address(128位),表示更优路径上的下一跳路由器地址,源节点应将后续数据包发送到该地址。
Destination Address(128位),表示触发重定向的原始数据包的目的IPv6地址。
As much of invoking packet(可变长度),包含触发重定向报文生成的原始IPv6数据包的IPv6头部和尽可能多的负载数据。
当源节点收到重定向报文时,应验证报文的合法性,并根据Target Address字段更新其路由表,以便后续数据包能够通过更优路径到达目的地。
为防止重定向报文被滥用于攻击,如误导源节点将数据包发送到恶意节点,通常会对重定向报文应用一些安全措施,如仅接受来自默认网关的重定向报文,或在路由器上禁用生成重定向报文的功能。
根据RFC 4861,ICMPv6类型133(路由器请求,RS)和134(路由器公告,RA)是IPv6邻居发现协议(NDP)中两种重要的消息类型,它们在主机自动配置和发现默认路由器方面发挥着关键作用。
路由器请求(Router Solicitation, RS)消息由主机发送,用于请求链路上的路由器生成路由器公告(RA)消息。当主机启动或需要获取路由器信息时,会向链路本地范围内的所有路由器组播地址(ff02::2)发送RS消息。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
路由器公告(Router Advertisement,RA)消息由路由器定期发送或响应主机的RS消息。它包含路由器的各种配置参数,用于主机自动配置IPv6地址、默认网关等信息。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Pref|P|00| Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
路由器周期性地向所有节点组播地址(ff02::1)发送RA消息,主机接收到RA后,可从中获取IPv6前缀、默认路由器、DNS等信息,用于自动配置。同时,当路由器收到主机发送的RS消息时,会及时响应一个RA消息。
RS和RA消息的交互构成了IPv6无状态地址自动配置(SLAAC)的基础,大大简化了主机的配置过程。主机可以根据获取的前缀信息自动生成全球唯一的IPv6地址,并使用公告的路由器作为默认网关,实现即插即用。
邻居请求(NS)/邻居公告(NA)消息用于链路层地址解析、重复地址检测以及链路可达性检测等功能。
邻居请求(Neighbor Solicitation, NS)消息主要用于链路层地址解析,即将IPv6地址解析为对应的MAC地址。当主机需要与同一链路上的其他节点通信时,如果缺乏目标节点的链路层地址信息,就会发送NS消息进行地址解析。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ Target Address +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
NS消息通常发送到被请求节点的请求节点组播地址,该地址根据目标地址的后24位自动计算得出。
邻居公告(Neighbor Advertisement,NA)消息由目标节点响应NS消息而发送,用于通告自身的链路层地址信息和响应重复地址检测过程。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ Target Address +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
当节点收到NS消息时,会回复NA消息,将自己的链路层地址通告给请求者,以便请求者可以更新邻居缓存。NA消息通常发送给NS请求中的源地址。
对于重复地址检测(DAD),新加入的节点会发送DAD NS消息到自己的待定地址,如果收到NA回复,则表明地址已经被占用,否则可以确定该地址未被使用,可以安全地分配。
根据RFC 3122,ICMPv6类型141(邻居请求,INQ)和142(邻居公告,INA)是IPv6逆向邻居发现协议(Inverse Neighbor Discovery,IND)中定义的两种消息类型。与常规的NDP协议不同,IND允许节点请求邻居的IPv6地址信息,即根据已知的链路层地址反向解析IPv6地址。
逆向邻居请求(Inverse Neighbor Query,INQ消息由请求节点发送,用于请求目标节点的IPv6地址信息。请求节点根据自己的需求,选择包含目标节点完整链路层地址或部分前缀的链路层地址。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
逆向邻居公告(Inverse Neighbor Advertisement, INA)消息由目标节点响应INQ消息而发送,用于公告自身的IPv6地址信息。收到INQ消息的节点,如果其链路层地址与INQ中请求的地址匹配,则回复INA消息,提供自己的IPv6地址。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
INQ消息通常发送到被请求节点的请求节点组播地址,INA消息通常作为单播发送给INQ请求的源IPv6地址。
IND协议扩展了NDP的功能,支持根据链路层地址反向解析IPv6地址的需求。这在某些场景下很有用,比如网络管理和故障诊断时,管理员已知设备的MAC地址,需要查询其IPv6地址。
通过INQ/INA消息的交互,请求节点可以从目标节点获取IPv6地址信息,建立起反向邻居映射关系。
IPv6邻居不可达检测(Neighbor Unreachability Detection,NUD)通过定义一系列的邻居缓存项状态,来跟踪记录邻居的可达性信息。RFC 4861中定义了5种邻居缓存项状态:INCOMPLETE、REACHABLE、STALE、DELAY和PROBE。
这些状态之间可以相互转换,构成了完整的NUD状态机:
INCOMPLETE状态,当节点发送邻居请求(NS)消息,但还没有收到对应的邻居公告(NA)响应时,邻居缓存项处于INCOMPLETE状态。如果收到NA响应,状态将转换为REACHABLE;如果重传NS超过一定次数仍未收到NA,缓存项将被删除。
REACHABLE状态,当节点收到NA响应,确认邻居可达时,邻居缓存项进入REACHABLE状态。REACHABLE状态表明最近一次邻居可达性确认在ReachableTime时间内发生。在此期间,无需发送探测消息。当ReachableTime超时,状态将转换为STALE。如果期间发生向邻居转发数据包,REACHABLE定时器将重置。
STALE状态,当REACHABLE状态超时,邻居缓存项进入STALE状态。STALE状态表明节点不再确定邻居的可达性,但仍然认为地址映射有效。如果在STALE状态下需要向邻居发送数据包,将启动DELAY定时器,状态转换为DELAY;否则,持续保持STALE状态。
DELAY状态,当STALE状态下需要向邻居发送数据包时,启动DELAY定时器,状态转换为DELAY。DELAY状态用于延迟探测,以避免不必要的网络流量。如果在延迟期间收到邻居的上层协议回应,状态将直接转换为REACHABLE。当DELAY定时器超时,将发送一个NS探测消息,状态转换为PROBE。
PROBE状态,当DELAY定时器超时,状态转换为PROBE,同时发送NS探测消息,确认邻居可达性。如果收到NA响应,状态将转换为REACHABLE;如果重传NS超过一定次数仍未收到NA,邻居缓存项将被删除。
总结NUD状态机的关键转换:
在IPv4到IPv6的过渡过程中,需要在协议栈之间进行转换和映射,以确保跨协议的互通性。
RFC 7915和RFC 7757定义了ICMPv4和ICMPv6消息类型和代码的映射关系,以指导实现协议转换功能。
转换ICMP时,IP和ICMP头部都需要转换,如果是ICMP差错报文,还需要转换内部的错误IP数据报。
ICMPv4到ICMPv6的转换原则:
ICMPv4到ICMPv6的类型和代码映射表:
ICMPv4类型/代码 | ICMPv4描述 | ICMPv6类型 | ICMPv6描述 |
---|---|---|---|
0/0 | Echo Reply | 129/0 | Echo Reply |
8/0 | Echo Request | 128/0 | Echo Request |
3/0 | Dest. Network Unreachable | 1/0 | Dest. Unreachable (No route) |
3/1 | Dest. Host Unreachable | 1/0 | Dest. Unreachable (No route) |
3/2 | Protocol Unreachable | 4/1 | 参数问题-无法识别的下一个头部 |
3/3 | Port Unreachable | 1/4 | Dest. Unreachable (Port) |
3/4 | Fragmentation Needed & DF | 2/0 | Packet Too Big |
3/5 | Source Route Failed | 1/0 | Dest. Unreachable (No route) |
3/6 | Dest. Network Unknown | 1/0 | Dest. Unreachable (No route) |
3/7 | Dest. Host Unknown | 1/0 | Dest. Unreachable (No route) |
3/8 | Source Host Isolated | 1/0 | Dest. Unreachable (No route) |
3/9 | Network Prohibited | 1/1 | Dest. Unreachable (Admin) |
3/10 | Host Prohibited | 1/1 | Dest. Unreachable (Admin) |
3/11 | Network Unreachable for TOS | 1/0 | Dest. Unreachable (No route) |
3/12 | Host Unreachable for TOS | 1/0 | Dest. Unreachable (No route) |
3/13 | Communication Prohibited | 1/1 | Dest. Unreachable (Admin) |
3/14 | 目的不可达-违反主机优先级 | - | (丢弃) |
3/15 | 目的不可达-优先级终止生效 | 1/1 | Dest. Unreachable (Admin) |
11/0 | Time Exceeded | 3 | Time Exceeded (Hop limit) |
12/0-2 | Parameter Problem | 4/0 | Parameter Problem |
以上映射表总结了常见的ICMPv4类型和代码到ICMPv6的转换关系。
ICMPv6到ICMPv4的转换原则:
ICMPv6到ICMPv4的类型和代码映射表:
ICMPv6类型 | ICMPv6描述 | ICMPv4类型 | ICMPv4描述 |
---|---|---|---|
1/0 | Dest. Unreachable (No route) | 3/1 | 目的不可达-主机 |
1/1 | Dest. Unreachable (Admin) | 3/10 | 目的不可达-管理上禁止目的主机 |
1/2 | Dest. Unreachable (Beyond scope) | 3/1 | 目的不可达-主机 |
1/3 | Dest. Unreachable (Address) | 3/1 | 目的不可达-主机 |
1/4 | Dest. Unreachable (Port) | 3/3 | 目的不可达-端口 |
2/0 | Packet Too Big | 3/4 | Fragmentation Needed & DF |
3/0 | Time Exceeded (Hop limit) | 11/0 | Time Exceeded |
3/1 | Time Exceeded (Fragment) | 11/1 | Time Exceeded |
4/0 | Parameter Problem (Header) | 12/0 | Parameter Problem |
4/1 | Parameter Problem (Option) | 3/2 | 目的不可达-协议 |
4/2 | Parameter Problem (Other) | - | (丢弃) |
128/0 | Echo Request | 8/0 | Echo Request |
129/0 | Echo Reply | 0/0 | Echo Reply |
以上映射表总结了常见的ICMPv6类型和代码到ICMPv4的转换关系。需要注意的是:
ICMPv6协议涉及的内容相比于ICMPv4复杂很多,ICMPv4最主要用途是链路探测和差错报文。ICMPv6则增加了路由器发现、邻居发现、移动IP、组播管理等多个子模块,协议内容大幅增加。
ICMPv6路由器和邻居发现一定程度上拜托了对DHCP的依赖,并且不再需要ARP这样的中间协议,但这样也导致ICMPv6看起来非常臃肿。可以从ICMPv6基础消息逐步扩展,组播和移动代理相关知识可以先忽略,邻居发现类知识单独总结学习,这样就简单很多了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。