ToB企服应用市场:ToB评测及商务社交产业平台

标题: 网络网络层之(6)ICMPv6协议 [打印本页]

作者: 商道如狼道    时间: 2024-7-10 19:59
标题: 网络网络层之(6)ICMPv6协议
网络网络层之(6)ICMPv6协议

  
   Author: Once Day Date: 2024年6月2日


  一位热衷于Linux学习和开辟的菜鸟,试图谱写一场冒险之旅,大概尽头只是一场白日梦…


   漫漫长路,有人对你微笑过嘛…


  全系列文章可参考专栏: 通信网络技能_Once-Day的博客-CSDN博客。


  参考文章:
  
  

  
1. 概述

1.1 ICMPv6介绍

ICMPv6是互联网控制消息协议第6版(Internet Control Message Protocol version 6)的缩写,它是IPv6协议族中的一个重要协议,与IPv4中的ICMPv4协议相对应。ICMPv6同样用于传递网络层的控制和错误信息,辅助IPv6协议完成高效、可靠的数据传输任务
与ICMPv4雷同,ICMPv6报文封装在IPv6数据报中进行传输。报文主要由报头和数据部分组成。报头包含了类型、代码和校验和等重要信息,用于辨认报文的类型和检测传输错误,数据部分则携带了与具体报文类型相干的信息。
ICMPv6报文可以分为两大类:差错报告报文和信息报文
(1) 差错报告报文用于向源节点关照在数据传输过程中遇到的各种错误情况:

(2) 信息报文则用于IPv6网络中的各种功能:

与ICMPv4相比,ICMPv6在功能上有所加强,特别是在支持IPv6的新特性方面,如组播管理、邻居发现等。
1.2 相干RFC文档

以下是与ICMPv6相干的主要RFC文档列表:

2. 报文格式

2.1 ICMPv6首部

ICMPv6报文格式由类型、代码和校验和三个固定字段组成,后面紧跟与具体报文类型相干的数据部分

字段说明:

2.2 ICMPv6报文类型

ICMPv6的主要报文类型如下:
类型名称RFC文档用途描述1Destination UnreachableRFC4443目标不可达,用于关照源主机2Packet Too BigRFC4443报文过大,需要分片但IPv6不答应中间装备分片3Time ExceededRFC4443超时,用于关照源主机4Parameter ProblemRFC4443参数问题,用于向源主机指出错误100/101为私人实验保存RFC4443为实验保存127为ICMPv6差错报文扩充保存RFC4443为更多的差错报文保存128Echo RequestRFC4443回显请求,用于诊断网络连通性129Echo ReplyRFC4443回显应答,用于诊断网络连通性130Multicast Listener QueryRFC2710组播侦听器查询,用于查询链路上的组播组成员131Multicast Listener ReportRFC2710组播侦听器报告,用于主机加入组播组132Multicast Listener DoneRFC2710组播侦听器终止,用于主机离开组播组133Router SolicitationRFC4861路由器请求,用于主机发现本地路由器134Router AdvertisementRFC4861路由器通告,用于路由器通告其存在及相干链路参数135Neighbor SolicitationRFC4861邻居请求,用于链路层所在解析、重复所在检测等136Neighbor AdvertisementRFC4861邻居通告,用于相应邻居请求或自动通告链路层变革137RedirectRFC4861重定向,用于路由器关照主机有更好的下一跳138Router RenumberingRFC2894路由器重编号,用于管理员重新编址路由器139ICMP Node Information QueryRFC4620ICMP节点信息查询,用于获取相邻节点的名字和所在信息140ICMP Node Information ResponseRFC4620ICMP节点信息相应,用于应答节点信息查询141Inverse Neighbor Discovery SolicitationRFC3122反向邻居发现请求,用于检查IPv6到链路层所在的映射142Inverse Neighbor Discovery AdvertisementRFC3122反向邻居发现通告,用于相应反向邻居发现请求143Multicast Listener Discovery (MLDv2) reportsRFC3810组播侦听器发现(MLDv2)报告,用于MLDv2管理组播组成员144Home Agent Address Discovery RequestRFC6275家乡代理所在发现请求,用于移动IPv6中发现家乡代理145Home Agent Address Discovery ReplyRFC6275家乡代理所在发现相应,用于移动IPv6中相应家乡代剃头现146Mobile Prefix SolicitationRFC6275移动前缀请求,由移动节点请求家乡代理前缀147Mobile Prefix AdvertisementRFC6275移动前缀通告,由家乡代理向移动节点通告移动前缀148证书路径请求报文RFC3971一条证书路径的掩护邻居发现(SEND)请求149证书路径通告报文RFC3971相应一个证书路径请求的SEND151组播路由器通告RFC4286提供组播路由器的所在152组播路由器请求RFC4286请求组播路由器的所在153组播路由器终止RFC4286组播路由器使用结束154FMIPv6RFC5568MIPv6快速切换报文200/201为私人实验保存RFC4443为实验保存255为ICMPv6信息类报文扩充保存RFC4443为更多的信息类报文保存 2.3 ICMPv6常见代码

类型代码名称描述10No route to destination无法路由到目标11Communication with destination administratively prohibited与目标通信被管理员禁止12Beyond scope of source address超出源所在的作用域13Address unreachable所在不可达14Port unreachable端口不可达15Source address failed ingress/egress policy源所在未通过入口/出口策略16Reject route to destination拒绝到目标的路由17Error in Source Routing Header源路由头部错误30Hop limit exceeded in transit传输过程中超过跳数限定31Fragment reassembly time exceeded分片重组超时40Erroneous header field encountered遇到错误的头部字段41Unrecognized Next Header type encountered遇到无法辨认的下一个头部类型42Unrecognized IPv6 option encountered遇到无法辨认的IPv6选项 类型1的目标不可达有多达8种情况,比如无法路由、所在或端口不可达、通信被禁止、超出作用域等,对应了在数据包转发过程中可能遇到的各种问题。
类型3的超时有2种情况,分别是超过跳数限定和分片重组超时。此中跳数限定反映了IPv6网络直径的限定,防止数据包无限循环转发。
类型4的参数问题有3种情况,分别涉及头部字段错误、无法辨认的下一个头部类型和IPv6选项,反映了数据包解析过程中可能遇到的问题。
2.4 ICMPv6差错报文限定

在某些情况下,网络装备不会产生ICMPv6差错报文,以克制网络拥塞、安全问题或无用的错误报告:

RFC 4443中对ICMPv6差错报文的生成和发送做了一些限定和规定,主要涉及令牌桶限速

3. ICMPv6底子消息

ICMPv6底子消息指定义在RFC 4443中的底子控制消息,不涉及IPv6网络所在和路由协商的部分。
3.1 ICMPv6目标不可达

ICMPv6的目标不可达报文(Destination Unreachable Message)是类型1的差错报文,用于在数据包无法送达目标时,由路由器或主机向源端发送,告知其发生了不可达的情况。
RFC 4443报文的格式如下:
  1.                         Destination Unreachable Message(RFC 4443)
  2.    0                   1                   2                   3
  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
  4.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.   |     Type      |     Code      |          Checksum             |
  6.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.   |                             Unused                            |
  8.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.   |                    As much of invoking packet                 |
  10.   +                as possible without the ICMPv6 packet          +
  11.   |                exceeding the minimum IPv6 MTU [IPv6]          |
复制代码
字段说明如下:

RFC 4884报文格式如下(支持扩展数据结构):
  1.                         Destination Unreachable Message(RFC 4884)
  2.    0                   1                   2                   3
  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
  4.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.   |     Type      |     Code      |          Checksum             |
  6.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.   |    Length     |                  Unused                       |
  8.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.   |                    As much of invoking packet                 |
  10.   +                as possible without the ICMPv6 packet          +
  11.   |                exceeding the minimum IPv6 MTU [RFC4443]       |
  12.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  13.   |             ICMPv6扩展头部以及零个或多个关联对象                      |
  14.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码

当路由器或主机无法转发或处理接收到的数据包时,就会向源端发送一个相应的目标不可达报文。源端收到该报文后,可以根据Code值判断具体的不可达原因,并团结数据部分携带的原始报文信息进行问题的定位和调解。

3.2 ICMPv6报文太大

ICMPv6的PTB(Packet Too Big)报文是一种重要的错误报告消息,用于关照源节点发送的数据包超过了链路的MTU(最大传输单位),需要进行分片。
  1.                         Packet Too Big Message(RFC 4443)
  2.    0                   1                   2                   3
  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
  4.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.   |     Type      |     Code      |          Checksum             |
  6.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.   |                             MTU                               |
  8.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.   |                    As much of invoking packet                 |
  10.   +               as possible without the ICMPv6 packet           +
  11.   |               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报文进行验证,如检查报文中包含的原始数据包是否为自己发送的。
3.3 ICMPv6超时报文

ICMPv6超时报文是一种错误报告消息,用于关照源节点在数据包传输过程中发生了超时。当路由器或目标节点在规定的时间内未能完成数据包的转发或处理时,就会向源节点发送超时报文。
  1.                            Time Exceeded Message(RFC 4443)
  2.    0                   1                   2                   3
  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
  4.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.   |     Type      |     Code      |          Checksum             |
  6.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.   |                             Unused                            |
  8.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.   |                    As much of invoking packet                 |
  10.   +               as possible without the ICMPv6 packet           +
  11.   |               exceeding the minimum IPv6 MTU [IPv6]           |
复制代码
字段说明:

当源节点收到超时报文时,可以根据Code字段确定具体的超时原因:

源节点收到超时报文后,可以根据需要调解发送策略,如增加Hop Limit的初始值,或者调解分片大小以淘汰重组超时的可能性。超时报文可能指示网络中存在某些问题,如路由环路、链路拥塞或MTU设置不当等。
3.4 ICMPv6参数问题

ICMPv6参数问题报文是一种错误报告消息,用于关照源节点在处理IPv6数据包头部或扩展头部时发现了错误的参数值。当路由器或目标节点检测到数据包中存在无法辨认或无法处理的参数时,会向源节点发送参数问题报文。
  1.                            Parameter Problem Message(RFC 4443)
  2.    0                   1                   2                   3
  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
  4.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.   |     Type      |     Code      |          Checksum             |
  6.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.   |                             Unused                            |
  8.   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.   |                    As much of invoking packet                 |
  10.   +               as possible without the ICMPv6 packet           +
  11.   |               exceeding the minimum IPv6 MTU [IPv6]           |
复制代码
字段说明:
当源节点收到参数问题报文时,可以根据Code字段和Pointer字段确定具体的错误类型和位置:

源节点根据这些信息可以辨认和修复数据包构造过程中的错误,如使用正确的头部字段值、支持的下一个头部类型和选项等
参数问题报文可能指示网络中存在设置错误、软件缺陷或互使用性问题。但需要注意参数问题报文可能被恶意节点用于探测网络拓扑或发起攻击,因此应接纳适当的安全措施,如过滤和速率限定等。
3.5 ICMPv6请求和回复

ICMPv6回显请求(Echo Request)和回显应答(Echo Reply)报文是用于诊断网络连通性和耽误的重要工具。它们的功能与IPv4中的ICMP回显请求和应答报文雷同,通常用于实现ping下令。
  1.                                 Parameter Problem Message(RFC 4443)
  2.     0                   1                   2                   3
  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
  4.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5.     |     Type      |     Code      |          Checksum             |
  6.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7.     |           Identifier          |        Sequence Number        |
  8.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9.     |                            Data                               |
  10.     +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
字段说明:

当源节点发送ICMPv6回显请求报文时,目标节点接收到报文后,将报文中的Type字段修改为129,表现回显应答,并将Identifier、Sequence Number和Data字段保持不变,然后将应答报文发送回源节点。
源节点通过比较发送请求和接收应答之间的时间差,可以计算出到目标节点的RTT。同时,通过检查应答报文中的Data字段,可以确认数据在传输过程中是否被修改。
通过分析ping6的输出结果,如RTT统计信息、丢包率等,可以帮助辨认网络中的故障和性能瓶颈。别的,ICMPv6回显请求和应答报文还可以用于其他网络管理和诊断工具的开辟。
4. ICMPv6网络控制消息

4.1 本地代理所在发现请求和应答

在RFC 6275(Mobility Support in IPv6)中定义了两种ICMPv6报文类型:

这两种报文用于支持移动IPv6(MIPv6)中的家乡代理所在发现功能,答应移动节点动态地发现和选择家乡代理。
家乡代理所在发现请求报文格式:
  1.                 Home Agent Address Discovery Request Message(144)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |     Code      |          Checksum             |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |          Identifier           |           Reserved            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
家乡代理所在发现回复报文格式:
  1.                 Home Agent Address Discovery Reply Message(145)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |     Code      |          Checksum             |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |          Identifier           |           Reserved            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. |                                                               |
  10. .                      Home Agent Addresses                     .
  11. |                                                               |
  12. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
字段说明:

家乡代理所在发现的过程如下:
家乡代理所在发现报文可能被恶意节点用于发起攻击,如诱骗移动节点使用恶意家乡代理,一样平常使用IPsec对家乡代理所在发现报文进行掩护,以确保网络的安全性。
4.2 移动前缀请求和通告

在RFC 6275中,类型146对应的是移动前缀请求(Mobile Prefix Solicitation)报文,类型147对应的是移动前缀广告(Mobile Prefix Advertisement)报文。
移动前缀请求报文格式:
  1.               Mobile Prefix Solicitation Message(146)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |     Code      |          Checksum             |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |          Identifier           |           Reserved            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
移动前缀广告报文格式:
  1.                Mobile Prefix Advertisement(147)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |     Code      |          Checksum             |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |          Identifier           |           Reserved            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. |   Options ...
  10. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码
字段说明:

移动前缀请求和广告报文用于在移动IPv6中实现移动前缀的动态分配和管理,其根本过程如下:
通过使用移动前缀请求和广告报文,移动IPv6可以实现移动前缀的动态分配和管理,简化了网络设置和维护。
与家乡代理所在发现报文雷同,需要接纳适当的安全措施,如使用IPsec对这些报文进行掩护,以确保网络的安全性。
4.3 组播侦听查询、报告和完成

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)报文格式:
  1.                Multicast Listener Query(130)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |      Code     |           Checksum            |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |     Maximum Response Delay    |           Reserved            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. +                       Multicast Address                       +
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
组播监听者报告(Multicast Listener Report)报文格式:
  1.                Multicast Listener Report(131)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |      Code     |           Checksum            |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |                           Reserved                            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. +                       Multicast Address                       +
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
组播监听者结束(Multicast Listener Done)报文格式:
  1.                Multicast Listener Done(132)
  2. 0                   1                   2                   3
  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
  4. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. |     Type      |      Code     |           Checksum            |
  6. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  7. |                           Reserved                            |
  8. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  9. +                       Multicast Address                       +
  10. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
字段说明:

MLDv1协议的根本工作原理如下:
通过使用MLDv1协议,IPv6网络可以高效地管理和优化组播流量的分发,淘汰不须要的网络开销,常用于支持IPTV、在线集会等大规模组播应用。
4.4 组播侦听发现

RFC 3810中定义的ICMPv6类型143(Multicast Listener Discovery Version 2 Reports)报文及其格式。MLDv2是MLDv1的加强版本,提供了更多的功能和灵活性,如支持源特定组播(SSM)、更细粒度的组播过滤等。
MLDv2协议的根本工作原理与MLDv1雷同,但引入了一些新的机制和概念:

MLDv2协议的实现和部署比MLDv1更加复杂,需要主机和路由器都支持MLDv2的功能。别的,MLDv2报文的长度和处理开销也较MLDv1有所增加。因此,在现实网络中部署MLDv2时,需要细致评估其须要性和可行性,并接纳适当的优化措施,如使用SSM映射、设置合适的查询间隔等。
4.5 组播路由器发现

RFC 4286中定义的ICMPv6类型151、152和153这三种报文用于实现多播路由器广告(Multicast Router Advertisement, MRA)和多播路由器请求(Multicast Router Solicitation, MRS)功能,支持在IPv6网络中发现和管理多播路由器。
多播路由器广告(Multicast Router Advertisement)报文格式:
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |         Query Interval        |     Robustness Variable       |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
多播路由器请求(Multicast Router Solicitation)和多播路由器终止(Multicast Router Termination)报文格式:
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                            Reserved                           |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
复制代码
字段说明:
MRA和MRS协议的根本工作原理如下:
MRA和MRS协议本身并不负责现实的多播路由和转发,而只是提供了一种发现和管理多播路由器的机制。现实的多播路由功能通常由其他协议(如PIM-SM、PIM-DM等)来实现。
5. ICMPv6邻居发现类消息

5.1 ICMPv6邻居发现协议

IPv6邻居发现协议(Neighbor Discovery Protocol, NDP)是IPv6中的一个重要协议,它集成了IPv4中ARP、ICMP router discovery和ICMP redirect等多个协议的功能,用于在IPv6网络中发现邻居并与之交互。
NDP主要有以下几个作用:

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,接收方会验证这个值,以防止被非本链路上的发送者给诱骗。
5.2 ICMPv6重定向报文

ICMPv6重定向报文是一种重要的控制消息,用于关照源节点有一条更优的路由可以到达目标地。当路由器发现源节点发送的数据包不是通过最佳路径到达目标地时,会向源节点发送重定向报文,建议其更新路由表以使用更优路径。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                           Reserved                            |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |                       Target Address                          |
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |                     Destination Address                       |
  11. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  12. |                    As much of invoking packet                 |
  13. +               as possible without the ICMPv6 packet           +
  14. |               exceeding the minimum IPv6 MTU [IPv6]           |
复制代码
字段说明:

当源节点收到重定向报文时,应验证报文的正当性,并根据Target Address字段更新其路由表,以便后续数据包能够通过更优路径到达目标地。
为防止重定向报文被滥用于攻击,如误导源节点将数据包发送到恶意节点,通常会对重定向报文应用一些安全措施,如仅担当来自默认网关的重定向报文,或在路由器上禁用生成重定向报文的功能。
5.3 路由器请求和通告

根据RFC 4861,ICMPv6类型133(路由器请求,RS)和134(路由器公告,RA)是IPv6邻居发现协议(NDP)中两种重要的消息类型,它们在主机自动设置和发现默认路由器方面发挥着关键作用。
路由器请求(Router Solicitation, RS)消息由主机发送,用于请求链路上的路由器生成路由器公告(RA)消息。当主机启动或需要获取路由器信息时,会向链路本地范围内的全部路由器组播所在(ff02::2)发送RS消息。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                            Reserved                           |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |   Options ...+-+-+-+-+-+-+-+-+-+-+-+-
复制代码
路由器公告(Router Advertisement,RA)消息由路由器定期发送或相应主机的RS消息。它包含路由器的各种设置参数,用于主机自动设置IPv6所在、默认网关等信息
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. | Cur Hop Limit |M|O|H|Pref|P|00|       Router Lifetime         |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |                         Reachable Time                        |
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |                          Retrans Timer                        |
  11. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  12. |   Options ...
  13. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码

路由器周期性地向全部节点组播所在(ff02::1)发送RA消息,主机接收到RA后,可从中获取IPv6前缀、默认路由器、DNS等信息,用于自动设置。同时,当路由器收到主机发送的RS消息时,会及时相应一个RA消息。
RS和RA消息的交互构成了IPv6无状态所在自动设置(SLAAC)的底子,大大简化了主机的设置过程。主机可以根据获取的前缀信息自动生成环球唯一的IPv6所在,并使用公告的路由器作为默认网关,实现即插即用。
5.4 邻居请求和通告

邻居请求(NS)/邻居公告(NA)消息用于链路层所在解析、重复所在检测以及链路可达性检测等功能。
邻居请求(Neighbor Solicitation, NS)消息主要用于链路层所在解析,即将IPv6所在解析为对应的MAC所在。当主机需要与同一链路上的其他节点通信时,如果缺乏目标节点的链路层所在信息,就会发送NS消息进行所在解析。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                           Reserved                            |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. +                       Target Address                          +
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |   Options ...
  11. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码

NS消息通常发送到被请求节点的请求节点组播所在,该所在根据目标所在的后24位自动计算得出。
邻居公告(Neighbor Advertisement,NA)消息由目标节点相应NS消息而发送,用于通告自身的链路层所在信息和相应重复所在检测过程。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |          Checksum             |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |R|S|O|                     Reserved                            |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. +                       Target Address                          +
  9. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10. |   Options ...
  11. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码

当节点收到NS消息时,会回复NA消息,将自己的链路层所在通告给请求者,以便请求者可以更新邻居缓存。NA消息通常发送给NS请求中的源所在。
对于重复所在检测(DAD),新加入的节点会发送DAD NS消息到自己的待定所在,如果收到NA回复,则表明所在已经被占用,否则可以确定该所在未被使用,可以安全地分配。
5.5 反向邻居发现请求和通告

根据RFC 3122,ICMPv6类型141(邻居请求,INQ)和142(邻居公告,INA)是IPv6逆向邻居发现协议(Inverse Neighbor Discovery,IND)中定义的两种消息类型。与常规的NDP协议差别,IND答应节点请求邻居的IPv6所在信息,即根据已知的链路层所在反向解析IPv6所在。
逆向邻居请求(Inverse Neighbor Query,INQ消息由请求节点发送,用于请求目标节点的IPv6所在信息。请求节点根据自己的需求,选择包含目标节点完备链路层所在或部分前缀的链路层所在。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |           Checksum            |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                           Reserved                            |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |   Options ...
  9. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码

逆向邻居公告(Inverse Neighbor Advertisement, INA)消息由目标节点相应INQ消息而发送,用于公告自身的IPv6所在信息。收到INQ消息的节点,如果其链路层所在与INQ中请求的所在匹配,则回复INA消息,提供自己的IPv6所在。
  1. 0                   1                   2                   3
  2. 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
  3. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. |     Type      |     Code      |           Checksum            |
  5. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6. |                           Reserved                            |
  7. +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8. |   Options ...
  9. +-+-+-+-+-+-+-+-+-+-+-+-
复制代码

INQ消息通常发送到被请求节点的请求节点组播所在,INA消息通常作为单播发送给INQ请求的源IPv6所在
IND协议扩展了NDP的功能,支持根据链路层所在反向解析IPv6所在的需求。这在某些场景下很有用,比如网络管理和故障诊断时,管理员已知装备的MAC所在,需要查询其IPv6所在。
通过INQ/INA消息的交互,请求节点可以从目标节点获取IPv6所在信息,建立起反向邻居映射关系。
5.6 邻居不可达检测

IPv6邻居不可达检测(Neighbor Unreachability Detection,NUD)通过定义一系列的邻居缓存项状态,来跟踪记载邻居的可达性信息。RFC 4861中定义了5种邻居缓存项状态:INCOMPLETE、REACHABLE、STALE、DELAY和PROBE

这些状态之间可以相互转换,构成了完备的NUD状态机:

总结NUD状态机的关键转换

6. ICMPv4和ICMPv6转换

在IPv4到IPv6的过渡过程中,需要在协议栈之间进行转换和映射,以确保跨协议的互通性。
RFC 7915和RFC 7757定义了ICMPv4和ICMPv6消息类型和代码的映射关系,以指导实现协议转换功能。
转换ICMP时,IP和ICMP头部都需要转换,如果是ICMP差错报文,还需要转换内部的错误IP数据报
6.1 从ICMPv4转到ICMPv6

ICMPv4到ICMPv6的转换原则:

ICMPv4到ICMPv6的类型和代码映射表:
ICMPv4类型/代码ICMPv4描述ICMPv6类型ICMPv6描述0/0Echo Reply129/0Echo Reply8/0Echo Request128/0Echo Request3/0Dest. Network Unreachable1/0Dest. Unreachable (No route)3/1Dest. Host Unreachable1/0Dest. Unreachable (No route)3/2Protocol Unreachable4/1参数问题-无法辨认的下一个头部3/3Port Unreachable1/4Dest. Unreachable (Port)3/4Fragmentation Needed & DF2/0Packet Too Big3/5Source Route Failed1/0Dest. Unreachable (No route)3/6Dest. Network Unknown1/0Dest. Unreachable (No route)3/7Dest. Host Unknown1/0Dest. Unreachable (No route)3/8Source Host Isolated1/0Dest. Unreachable (No route)3/9Network Prohibited1/1Dest. Unreachable (Admin)3/10Host Prohibited1/1Dest. Unreachable (Admin)3/11Network Unreachable for TOS1/0Dest. Unreachable (No route)3/12Host Unreachable for TOS1/0Dest. Unreachable (No route)3/13Communication Prohibited1/1Dest. Unreachable (Admin)3/14目标不可达-违反主机优先级-(丢弃)3/15目标不可达-优先级终止生效1/1Dest. Unreachable (Admin)11/0Time Exceeded3Time Exceeded (Hop limit)12/0-2Parameter Problem4/0Parameter Problem 以上映射表总结了常见的ICMPv4类型和代码到ICMPv6的转换关系。

6.2 从ICMPv6转到ICMPv4

ICMPv6到ICMPv4的转换原则:

ICMPv6到ICMPv4的类型和代码映射表:
ICMPv6类型ICMPv6描述ICMPv4类型ICMPv4描述1/0Dest. Unreachable (No route)3/1目标不可达-主机1/1Dest. Unreachable (Admin)3/10目标不可达-管理上禁止目标主机1/2Dest. Unreachable (Beyond scope)3/1目标不可达-主机1/3Dest. Unreachable (Address)3/1目标不可达-主机1/4Dest. Unreachable (Port)3/3目标不可达-端口2/0Packet Too Big3/4Fragmentation Needed & DF3/0Time Exceeded (Hop limit)11/0Time Exceeded3/1Time Exceeded (Fragment)11/1Time Exceeded4/0Parameter Problem (Header)12/0Parameter Problem4/1Parameter Problem (Option)3/2目标不可达-协议4/2Parameter Problem (Other)-(丢弃)128/0Echo Request8/0Echo Request129/0Echo Reply0/0Echo Reply 以上映射表总结了常见的ICMPv6类型和代码到ICMPv4的转换关系。需要注意的是:

7. 总结

ICMPv6协议涉及的内容相比于ICMPv4复杂很多,ICMPv4最主要用途是链路探测和差错报文。ICMPv6则增加了路由器发现、邻居发现、移动IP、组播管理等多个子模块,协议内容大幅增加。
ICMPv6路由器和邻居发现肯定程度上拜托了对DHCP的依赖,并且不再需要ARP这样的中间协议,但这样也导致ICMPv6看起来非常痴肥。可以从ICMPv6底子消息逐步扩展,组播和移动代理相干知识可以先忽略,邻居发现类知识单独总结学习,这样就简单很多了。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4