ICMPv6 和 NDP

ICMP

Internet控制消息协议ICMP(Internet Control Message Protocol)时IP协议的辅助协议。

ICMP协议用来在网络设备间传递各种差错和控制信息,对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用

ICMP消息封装在IP报文中,IP报文头部Protocol值为1时表示ICMP协议

ICMP差错检测

ICMP Echo消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其他信息,如报文往返时间等

ICMP错误报告

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因

   

ICMPv6

ICMPv6报文格式

ICMPv6报文类型

ICMPv6报文分为两类

  • 差错报文
    • 差错报文(Error Message),也称为差错消息,Type字段最高bit为0,也就是ICMPv6 Type=[0, 127]
    • 差错消息用于报告在转发IPv6数据包过程中出现的错误,如常见的目的不可达,超时等等
  • 信息报文
    • 信息报文(Information Message),也称为信息消息,Type字段最高bit为1,也就是ICMPv6 Type=[128, 255]
    • 信息报文可以用来实现同一链路上节点间的通信和子网内的组播成员管理等

ICMPv6差错报文应用

Path MTU发现

  • 在IPv6中,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行
  • PMTU(Path MTU)就是路径上的最小接口MTU
  • PMTUD(Path MTU发现机制)的主要目的是发现路径上的MTU,当数据包从源转发到目的地的过程中避免分段
  • 依赖PMTUD,数据的发送方可以使用所发现到的最有PMTU与目的地节点进行通讯,这样可以避免数据包在源传输到目的地过程之中,被中途的路由器分片而导致性能的下降

Path MTU发现的过程:

  1. PC1用1500字节作为MTU向PC2 发送IPv6数据包
  2. R1意识到数据包过大,出站接口MTU为1400字节,于是回复一个ICMPv6(Type-2)报文给PC1,指定MTU值为1400字节
  3. PC1开始用1400字节作为MTU发送IPv6数据
  4. 数据包到达R2后,R2意识到出站接口MTU为1300字节,于是发送一个ICMPv6(Type=2)报文给PC1,.指定MTU值为1300字节
  5. PC1开始使用1300字节作为MTU发送IPv6数据

ICMPv6信息报文应用

Ping

Ping基于ICMPv6信息报文实现

  • Echo Request:用于发送到目标节点,以使目标节点立即返回一个Echo Reply应答报文。Echo Request报文的Type字段值为128,Code字段值为0
  • Echo Reply:当收到一个Echo Request报文时,ICMPv6会用Echo Reply报文响应。Echo Reply报文的Type字段值为129,Code字段值为0

ICMPv6其他常用报文

  • 邻居发现
    • Type=133:路由器请求(Router Solicitation)
    • Type=134:路由器公告(Router Advertisement)
    • Type=135:邻居请求(Neighbor Solicitation)
    • Type=136:邻居公告(Neighbor Advertisement)
    • Type=137:重定向(Redirect)
  • 组播侦听者发现协议
    • Type=130:查询消息
    • Type=131:报告消息
    • Type=132:离开消息
    • Type=143:MLDv2报告消息

   

NDP

NDP(Neighbor Discover Protocol,邻居发现协议)。NDP是IPv6中非常核心的组件

主要功能:

  • 路由器发现:发现链路上的路由器,获得路由器通告的信息
  • 无状态自动配置:通过路由器通告的地址前缀,终端自动生成IPv6地址
  • 重复地址检测:获得地址后,进行地址重复检测,确保地址不存在冲突
  • 地址解析:请求目的网络地址对应的数据链路层地址,类似IPv4的ARP
  • 邻居状态跟踪:通过NDP发现链路上的邻居并跟踪邻居状态
  • 前缀重编址:路由器对所通告的地址前缀进行灵活设置,实现网络重编址
  • 重定向:告知其他设备,到达目标网络的更优下一跳

路由器发现

路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程。

路由器发现可以同时实现以下三个功能:

  • 路由器发现(Router Discovery):主机定位邻居路由器以及选择哪一个路由器作为缺省网关的过程
  • 前缀发现(Prefix Discovery):主机发现本地链路上的一组IPv6前缀的过程,用于主机的地址自动配置
  • 参数发现(Parameter Discovery):主机发现相关操作参数的过程,如输出报文的缺省跳数限制、地址配置方式等信息

使用报文:

  • RS路由器请求
  • RA路由器通告

协议交互主要有两种情况:

  • 主机发送RS触发路由器回应RA
  • 路由器周期发送RA

路由器发现流程

主机请求触发

当主机启动时,主机会向本地链路范围内所有的路由器发送RS报文,触发路由器响应RA报文。主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其他的配置参数

路由器周期性发送

路由器周期性的发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600秒,最小间隔是200秒

定于定期发送的RA报文,其地址有如下要求:

  • Source Address:必须是发送接口的链路本地地址
  • Destination Address:FF02::1

地址解析

IPv6地址解析通过ICMPv6(NS和NA报文)来实现

在三层完成地址解析,主要带来一下几个好处:

  • 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议
  • 可以使用三层的安全机制避免地址解析攻击
  • 使用组播方式发送请求报文,减少了二层网络的性能压力

当PC1要传送数据包到PC2时,如果不知道PC2的链路层地址,则需要完成以下协议交互过程:

  1. PC1发送一个NS报文到网络上(目的地址:PC2对应的被请求节点组播地址:FF02::1:FF84:EFDC),选项字段中带上PC1的链路层地址:000D-88F8-03B0
  2. PC2侦听到该NS报文后,由于报文的目的地址:FF02::1:FF84:EFDC,自己在该组播组,处理该报文;同时,根据NS报文的源地址和源链路层地址选项更新自己的邻居缓存表项
  3. PC2发送一个NA报文应答NS,同时在消息的目标链路层地址选项中带上自己的链路层地址:0013-7284-EFDC
  4. PC1接收到NA报文后,获悉了PC2的链路层地址,创建一个目标节点的邻居缓存表项

邻居状态跟踪

邻居状态表

IPv6邻居状态表中缓存了IPv6地址与MAC地址的映射

IPv6邻居状态

IPv6节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移

状态

描述

Incomplete

邻居不可达。正在进行地址解析,邻居的链路层地址未探测到,如果解析成功,则进入Reachable状态

Reachable

邻居可达。表示在规定时间(邻居可达时间,缺省情况下的30)内邻居可达。如果超过规定时间,该表项没有被使用,则表项进入Stale状态

Stale

另据是否可达未知。表明该表项在规定时间(邻居可达时间,缺省情况下30)内没有被使用。此时除非有发送到邻居的报文,否则部队邻居是否可达进行探测

Delay

邻居是否可达未知,已向邻居发送报文,如果在指定时间内没有收到响应,则进入Probe状态

Probe

邻居是否可达未知,已向邻居发送NS报文,探测邻居是否可达。在规定时间内收到NA报文回复,则进入Reachable状态;否则进入Empty状态

邻居状态迁移

  • R1先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete
  • 若收到R2回复的NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty
  • 经过邻居可达时间(默认30秒),邻居状态由Reachable变为Stale,即未知是否可达
    • 如果在Reachable状态,R1收到R2的非请求NA报文,且其中携带的R2的链路层地址和表项中不同,则邻居状态马上变成Stale
  • 在Stale状态若R1要向R2发送数据,则邻居状态由Stale变为Delay,并发送NS请求
  • 在经过一段固定时间后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable
  • 在Probe状态,R1每隔一定时间间隔(默认1秒)发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty

重复地址检测

重复地址检测(Duplicate Address Detect,DAD)时指接口在使用某个IPv6地址之前,需要先探测是否有其他的节点使用了该地址,从而确保网络中没有两个相同的单播地址。

接口在启用任何一个单播IPv6地址前都需要先进行DAD,包括Link-Local地址

一个地址在通过重复地址检测之间称为"tentative地址",即"试验地址"。此时该接口不能使用这个试验地址进行单播通信

   

2个节点配置相同地址,同时作重复地址检测时,当一方收到对方发出的DAD NS报文,则接收方将不启用该地址。

重定向

重定向是指网关设备发现报文从其他网关设备转发更优,它就会发送重定向报文告知报文发送者,让报文发送者选择另一个网关设备

posted @ 2022-07-13 15:25  hongliang888  阅读(1063)  评论(0编辑  收藏  举报