《部署IPv6网络(修订版)》一2.3 IPv6 Internet控制消息协议(ICMPv6)

简介:

本节书摘来自异步社区《部署IPv6网络(修订版)》一书中的第2章,第2.3节,作者【美】Ciprian Popoviciu , Eric Levy-Abegnoli , Patrick Grossetete,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.3 IPv6 Internet控制消息协议(ICMPv6)

部署IPv6网络(修订版)
ICMPv6是IPv6体系结构不可分割的一个部分,必须被所有IPv6实现完全支持。它合并了IPv4中不同协议下支持的功能:ICMP(Internet控制消息协议版本4)、IGMP(Internet组成员协议)和ARP(地址解析协议)。ICMPv6以单播和多播方式运行在IPv6之上,因此,它是不可靠的,不能用于需要可靠性的特性。ICMPv6在RFC 2463中描述。表2-9列出了定义ICMPv6功能的RFC和用于这些功能的标识ICMPv6类型的代码。

类似于ICMPv4,ICMPv6使IPv6节点能够报告错误和执行各种控制平面功能。许多现有的ICMPv4功能已经迁移到ICMPv6,虽然有些做了简化,但许多已被添加。ICMP的这种再工程是独立于协议版本而发生的。但是,IPv4使这种方法不能现实已经有所部署,因此一种新的协议类型(下一个头部)特别为ICMPv6定义(ICMPv6的协议类型是58,而ICMPv4的是1)。在此上下文中,ICMPv6最终成为与ICMPv4不同的一种协议。有些功能与IPv4相应的功能类似(某些错误消息,如目的地不可达)。有些功能没有迁移,主要由于变得不再常用(如定义于RFC 1393的traceroute)。引入了一些新的功能(如链路层地址解析,或分组太大),导致了某些与IPv4不同的基本设计差异。

表2-9给出ICMPv6与ICMPv4之间的比较。在ICMPv6栏中,在IPv6中不作考虑的ICMPv4消息标为NC。在ICMPv4栏中,不采用的ICMPv6消息标为NA。

image
image

ICMPv6类型1到127为错误保留,从128开始的值用于控制和信息报告。

不管消息类型为何,所有的ICMPv6消息共用如图2-18所示的相同消息头部格式。

image

如果净荷数据中的高层协议是ICMPv6,那么IPv6头部中的下一个头部字段的值是58。

如果消息是对一个ICMPv6消息的回应,且是发送到节点的单播地址之一,那么SA使用相同的地址。否则,使用源地址选择算法(见本章后面的“SAS算法”小节)计算SA。

如图2-18所示,类型字段能够取在表2-9中的枚举值之一,代码值依赖于每条信息。

和ICMPv4不同,校验和涵盖了伪头部(来自于IPv6头部的一组重要字段),加上ICMPv6整个消息。包含伪头部使ICMPv6在没有第3层头部校验和的情况下,能够检查IPv6头部中重要元素(组成)的完整性(见本章前面的“IPv6分组格式”部分)。

2.3.1 ICMPv6错误消息

ICMP的功能之一是分发错误消息,这对运行一个网络会有所帮助。目前,ICMPv6使用4个错误消息:

目的地不可达;
分组太大;
超时;
参数问题。
在后续小节中将讨论这些消息的范围、用途和格式。

一、目的地不可达
有时分组在到达其目的地的路径上会被丢弃,从这种意义上来说,IPv6和IPv4一样不可靠。在多数情况下,这是由于网络拥塞造成的暂时问题或暂时的连接丢失,能够由如TCP这样的高层协议加以恢复。但在有些情况下需要一种反馈机制。例如,在分组中给出的目的地可能是错误的,或路由选择协议不能分布到目的地的路由选择信息。以IPv4中的相同方式,ICMP目的地不可达提供了这样的反馈机制。ICMP不可达消息给出一个原因代码,以协助源排除问题并采取合适的动作。表2-10列出ICMP代码值。

image

注意ICMPv6的代码比ICMPv4少,主要由于有些IPv4消息不适合IPv6。例如,因为在中间路由器上不发生分段,所以“需要分段且DF位设置”不能应用到IPv6。除了原因代码外,消息也包含能够容纳到1 280字节分组的原始数据报(datagram)部分。

二、超时
和IPv4中相同,一个IPv6分组可能在网络中循环(因为不正确的路由选择配置,或在大型网络中的暂时路由选择状态)。ICMPv6超时是从ICMPv4中传承而来的,设计用来阻止分组在网络中无休止地循环。在IPv6头部中一个跳计数字段在最后到达0之前,每一跳都减1,到达0时分组丢弃并向源发送ICMPv6超时。

注释:

和IPv4中相同,超时消息偏离了其原始目标,提供了在网络中跟踪路径的非常低效却有用的方法(即traceroute)。一条UDP分组多次发送到目的地,从1开始到“到达目的地需要的跳数”,每次将跳数字段加1。路径上的每个节点将顺次发回一条ICMPv6超时消息,使源能够判别在路径上的每台路由器。
三、分组太大
这是由IPv6引入的与分组分段过程相关的多个修改之一。不像IPv4,如果分组不适合外发链路的MTU,其中到目的地路径上的任何路由器都能将一个分组分段,IPv6不支持这项功能。虽然对于主机而言,在需要的地方依赖于由路由器实施的分段会非常方便,但这也对路由器产生了很大的处理负担。路由器必须为分段过程保持状态并使用额外内存。这就说明,在网络中间不支持分段功能的理由并不充分。客观上要求提供一些反馈机制,从而使在到达目的地路径上的路由器能够发送信号给发送分组的源主机,指明分组需要分段。分组太大ICMPv6消息用于这个目的。它包括不能发送分组的链路的MTU和适合1 280字节分组的原始分组部分。

ICMPv6消息主要是一条错误消息。但是,它有点偏离其初衷,即能使主机发现到特定主机路径上的最小MTU。这是在RFC 1981中描述的PMTU发现功能。简而言之,其思想是一台主机假定路径MTU(PMTU)就是路径第一跳的MTU。收到分组太大ICMPv6消息后,它减小PMTU并随之分段分组。主机继续发送直到接收到分组太大消息而停止。

通过IPv6 ICMP排错输出,例2-9给出了在一台Cisco路由器上的PMTU过程。

例2-9 一台Cisco路由器实施的PMTU发现

image

四、参数问题
与IPv4中相同,参数问题消息为路由器提供了报告一般问题的方法,前面描述的前3条信息覆盖不了这些问题。ICMPv6消息能够指出(通过指示字段偏移)在IPv6头部中的任何异常字段,该字段阻止了分组的进一步处理。下面的代码值使反映问题的节点能够提供附加的指示信息。

image

2.3.2 ICMPv6信息类消息

在ICMPv4中产生的Echo请求和Echo应答被承载到ICMPv6。与ICMPv4中相同,通过ping命令,这两条消息被广泛用于执行简单的连接性诊断。消息格式基本上没变。除了一个类型(1)和一个代码(1),消息包括一个标识符和一个序列号,加上从请求中拷贝到响应的一些选项数据。

为了有利于大量的协议类型,在各种RFC中规范了很多信息类的消息,如邻居发现、MIPv6和多播。在相应章节中详细讲述了这些消息。

2.3.3 源地址选择算法

IPv6的独特特性之一是,当选择分组的源或目的地时,一个节点一般具有多个地址可供选择。相同接口能够配置多个单播地址,它们可能有不同可达性范围(链路本地或全局)。双栈节点甚至可能需要在IPv4和IPv6地址间选择,特别是DNS服务器为一个给定名称提供两个地址的情况下。多点接入极可能使每个节点具有多个地址,MIPv6在同一个节点引入家乡地址和关注地址。

在RFC 3484中已经规范了两种算法,一种算法用于源地址选择(SAS),另一种算法用于目的地址选择(DAS)。本节详细描述前一种算法(SAS),因为它普遍由ICMPv6在产生一条错误或信息类消息之前,用来选择SA。IPv6运行的多个其他功能,除了ICMP,需要处理SAS或具有SAS多项选择的情况;并且在一些情况下,SAS会遇到问题。MIPv6和VPNv6代表了两个示例,因此在相关章节中将再次提到SAS主题。

这里列出的算法描述了SAS的当前状态。SAS算法不剥夺应用或高层的选择权力。例如,在ICMP情况中,对一条请求的响应仅使用的SA是相应请求的DA。当使用时,为算法给出了一个候选地址列表,算法将一组规则应用到这个列表以选择匹配这些规则最多的候选者。如果一条规则没有匹配的候选者,那么在此规则应用之前的来自于该列表的一个候选地址被选中。

图2-19给出了SAS算法的一个逻辑图。

如2.1节中所述,站点本地范围的地址已经不再使用,而被全局范围的唯一本地地址代替。在SAS中还没有明确地找到这些地址所使用的方式,但它们应该在范围规则的上下文中考虑。

image

2.3.4 关于ICMPv6的结论

ICMPv6本质上没有偏离ICMPv4。它仍然是一个消息协议、无状态的并用于多种不同用途(从错误报告到诊断和网络运行)。消息使用ICMPv4中相同方式的结构,有类型、代码和消息体;有些消息类型是从ICMPv4承载而来的,有些消息类型是新定义的。

但是,ICMPv6的用途,特别在邻居发现协议(NDP)中的应用,比ICMPv4中的用途大得多。这是否是正确的方法和正确的协议有待于看部署的结果,因为该协议执行多种功能,如地址解析、错误报告、自动配置、MIPv6等功能。

相关文章
|
1月前
|
数据采集 监控 安全
快速部署:基于Kotlin的公司网络流量控制方案
本文介绍了使用Kotlin构建网络流量控制系统的方案,该系统包括数据采集、分析和自动提交到网站的功能。`TrafficMonitor`类负责监控网络流量,收集流量数据并进行分析,然后通过HTTP POST请求将数据安全提交到指定网站,以实现对公司网络流量的有效管理和安全优化。此方案有助于提升网络安全性和性能,支持数字化业务发展。
77 5
|
1天前
|
缓存 网络协议 网络架构
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
【计算机网络】第三章 数据链路层(MAC地址 IP地址 ARP协议)
|
10天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
10天前
|
存储 网络协议 安全
15.网络协议-Radius协议
15.网络协议-Radius协议
|
10天前
|
存储 网络协议 网络安全
14.网络协议-邮件协议
14.网络协议-邮件协议
|
14天前
|
存储 JSON 前端开发
网络原理(4)HTTP协议(下)
网络原理(4)HTTP协议
26 0
|
16天前
|
JavaScript Java 测试技术
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
30 0
基于Java的网络类课程思政学习系统的设计与实现(源码+lw+部署文档+讲解等)
|
18天前
|
存储 网络协议 Linux
|
18天前
|
安全 SDN 数据中心
|
18天前
|
网络协议 安全 网络性能优化