ICMPv6-NDP

似梦清欢
• 阅读 88

ICMPv6和NDP协议

IP v4通过ARP广播实现MAC地址解析,IP v6中没有广播概念,需要通过组播实现MAC地址解析。 NDP(邻居发现协议)基于ICMPv6的NS、NA、RS、RA报文实现。(NDP是IPMPv6的子协议) ::: tip NDP协议功能: 地址解析、重复地址检测、路由器发现、路由重定向、邻居状态跟踪。 :::

ICMPv6

ICMPv6:是IP v6的基础协议之一,用于源节点设备传递报文转发的差错消息和信息消息。 协议号58,除提供ICMPv4对应的能力外还提供了NDP协议。 报文格式:type(类型)、code(分类)、checksum(校验)、data。 ICMPv6报文格式为IP v6基本报头+ICMPv6报头。

ICMPv6报文分为两类:差错报文和信息报文。 差错报文也称为差错消息,Type字段最高bit为0,即ICMPv6 Type=[0,127]。 差错消息用于报告在转发IPv6数据包过程中出现的错误,如常见的目的不可达、超时等等。

信息报文也称为信息消息,Type字段最高bit为1,即ICMPv6 Type=[128,255]。 信息报文可以用来实现同一链路上节点间的通信和子网内的组播成员管理等。 ICMPv6-NDP IP v4的信息消息类型中,80表示request,00代表reply,50表示重定向。

ICMPv6其他常用报文: ICMPv6-NDP ::: warning 组播侦听发现协议(MLD)有v1和v2两个版本,MLDv1相当于ICMPv1、v2,MLDv2相当于ICMPv3。 (原理一样,只改名)模拟器不支持该协议。 ::: ::: tip IP v6的ICMPv6报头中(信息报文): Type 135,Code 0表示NS报文(邻居请求),用于地址解析、重复地址检测、邻居状态跟踪。 Type 136,Code 0表示NS报文(邻居通告),用于地址解析、重复地址检测、邻居状态跟踪。 Type 137,Code 0表示重定向报文。

IP v6的DHCPv6报头中: Type 133,Code 0表示RS报文(路由器请求报文),用于路由器发现和无状态地址自动配置。 Type 134,Code 0表示RA报文(路由器通告报文),用于路由器发现和无状态地址自动配置。

:::

设备通过IP v6通信,抓包时最先发送的是NS和NA报文,类似于ARP进行MAC地址解析,完成ICMPv6封装后交互request和reply报文ICMPv6-NDP

NS报文的目的地址FF开头,为组播地址,FF02::1:FF共104位为固定部分,即目的地址2001::2的被请求节点组播地址,组播IP地址到MAC地址的映射。 (NS报文作用是请求对方2001::2的MAC地址): ICMPv6-NDP ::: tip IPV6组播地址对应组播MAC地址,前16位为固定值33:33,组播IPV6地址的后32位为组播MAC地址的后32位,如上红框处。 :::


NDP协议

IP v6邻居发现协议NDP的主要功能: ICMPv6-NDP

路由器发现(信息报文Type 133,Code 0)

路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程。 主机启动时,主机向本地链路范围内所有的路由器发送RS报文,触发路由器响应RA报文。主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其它的配置参数。 路由器发现使用了RS路由器请求和RA路由器通告报文。 ICMPv6-NDP 如上,RS报文源地址是主机链路本地地址,目的地址是本链路范围内所有路由器(FF02::2)(组播)。

[AR1-GigabitEthernet0/0/0]ipv6 address auto global   接口下配置,表示自动发送一个RS报文进行地址参数的获取

路由器默认没有开放RA使能功能。

[AR1-GigabitEthernet0/0/0]undo ipv6 nd ra halt      接口下使能路由器周期性发现RA报文的功能

ICMPv6-NDP 如上,RA报文通告路由前缀。 路由器发现主要用于无状态地址自动配置,即RA + EUI-64,路由器通过RA报文下发路由前缀,再通过EUI-64生成接口标识,使得主机获得完整IP v6地址。
::: tip 路由器周期性发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600秒,最小时间间隔是200秒。 每一个RA报文内的周期时间都是随机的。 定期发送的RA报文要求源地址必须是发送接口的链路本地地址。目的地址是FF02::1。
:::
RA报文中M位和O位不置位(=0)时表示无状态地址自动配置ICMPv6-NDP RA报文中M位和O位置位(=1)表示DHCPv6地址自动配置。 即终端不使用路由器下发的路由前缀。 如下SLAAC为无状态地址自动配置: ICMPv6-NDP

无状态自动配置

通过RA报文发送终端需要的网络前缀信息,简化了IP v6地址的配置。

接口配置:
 ipv6 enable 
 ipv6 address 2045::4/64 
 undo ipv6 nd ra halt     使能IP v6-RA报文的通告能力
 ipv6 nd ra halt          默认关闭IP v6-RA报文的通告能力

使能IP v6-RA报文的通告能力后,设备发送RA报文: ICMPv6-NDP 上图中可用时间和优选时间是默认值。

手工指定某一地址的可用时间和优选时间:
[AR1-GigabitEthernet0/0/0]ipv6 nd ra prefix ?
  x:x::x:x<X:X::X:X>  IPv6 address
  X:X::X:X/M          IPv6 prefix / IPv6 prefix length <1-128>
[AR-GigabitEthernet0/0/0]ipv6 nd ra prefix (IP v6地址) 64 ?
  INTEGER<0-4294967295>  Valid lifetime (second)
[AR-GigabitEthernet0/0/0]ipv6 nd ra prefix (IP v6地址) 10000 ?
  INTEGER<0-4294967295>  Preferred lifetime (second)
[AR-GigabitEthernet0/0/0]ipv6 nd ra prefix (IP v6地址) 10000 ?
  INTEGER<0-4294967295>  Preferred lifetime (second)
[AR-GigabitEthernet0/0/0]ipv6 nd ra prefix (IP v6地址)10000 5000

开启功能后,路由器在200-600的范围内随机取值,取值作为发送RA报文的周期时间:

[AR-GigabitEthernet0/0/0]ipv6 nd ra Max-interval 20    设置RA报文通告周期时间
[AR-GigabitEthernet0/0/0]ipv6 nd ra Min-interval 10    设置RA报文通告周期时间

路由器下发的前缀是否被使用(M bit):

[AR-GigabitEthernet0/0/0]ipv6 nd autoconfig managed-address-flag     M-bit设置为1

M bit置位为1,终端不会使用该前缀计算地址;M bit置位为0,终端会使用该前缀计算地址

如果路由器接口上有多个IP v6地址前缀,终端设备获取前缀时可以全部获取到并且把每一个路由前缀都通过EUI-64计算出地址。

地址以外的上网参数(网关、DNS)如何获得(O bit):

[AR-GigabitEthernet0/0/0]ipv6 nd autoconfig other-flag      O-bit设置为1

O bit置位为1,终端通过DHCPv6获得;O bit置位为0,终端通过RA报文获得

::: warning M bit为1时,终端可以忽略O bit,即终端将使用DHCPv6来获取地址及其他信息(如DNS等)。 :::

::: tip IP v6-NDP中的路由器发现和无状态地址自动配置相当于IP v4中的DHCP终端向路由器请求地址和路由器向终端下发地址。 :::

地址冲突检测(DAD,类似免费ARP)

接口在使用某个IP v6地址之前,需要先探测是否有其它的节点使用了该地址,确保网络中没有两个相同的单播地址,通过检测之前,该地址为试验地址,不能用来通信。 任何一个接口在启用任何一个单播IP v6地址前都需要先进行DAD,包括Link-Local地址。 地址冲突检测使用NS 135报文。 ICMPv6-NDP DAD的NS报文: ICMPv6-NDP 如上,两台设备在配置了全球单播地址后,会自动生成链路本地地址。DAD会对这两个地址都做地址冲突检测。 将AR5的IP v6地址设置为与AR4相同,可以抓取到DAD的NA报文: ICMPv6-NDP AR5上查看接口IP v6显示地址重复。 ICMPv6-NDP ICMPv6-NDP 如上在PC1配置接口地址2000::1后,由于未检测该地址是否重复冲突,NS报文中使用未指定地址作为源地址,目的地址使用接口配置的2000::1对应的被请求节点组地址。 如果地址冲突,对端会回复NA报文,源地址是PC2配置的接口地址,目的地址是FF02::1,即链路上所有的节点都会收到。PC1收到后,认为地址冲突。 如果地址不重复,就不会回复报文。 ::: tip 通信时先做地址冲突检测,再做地址解析。 :::

地址解析

地址解析利用NS、NA报文实现,类似于ARP协议的请求和回复报文。 封装过程:ICMPv6——IP v6——Eth II。 ::: tip 要请求哪台设备的MAC地址,就将目标IP设为那台设备的被请求节点组地址。 ::: ICMPv6-NDP

如上,PC1发送一个NS报文到网络上,目的地址为PC2对应的被请求节点组播地址 (FFO2::1:FF84:EFDC),option字段中带上PC1的mac地址000D-88F8-03B0。
PC2侦听到该NS报文后,由于自己在报文的目的地址FF02:1:F84:EFDC的组播组中,PC2处理该报文,同时根据NS报文的源地址和源mac地址选项更新自己的邻居缓存表项。
PC2发送一个NA报文,同时在消息的目标MAC地址中带上自己的MAC地址0013-7284-EFDC。
PC1接收到NA报文后,获悉了PC2的MAC地址,根据NA报文的源地址和源MAC地址选项更新自己的邻居缓存表项。
PC1和PC2知道了对方的MAC地址,建立对方的邻居缓存表项(类似于IPv4的ARP表),然后可以相互通信。

ICMPv6-NDP AR4 ping AR5时,会先发送NS、NA报文(和DAD的NS源地址区别是SIP变为正在使用的单播地址): ICMPv6-NDP

在访问目的地址时,需要目标地址对应的MAC来完成数据的封装。 AR4发送NS报文进行地址解析: ICMPv6-NDP 组播组地址范围内的设备都会接收该NS报文进行查看:

  • 如果判断对方解析的目标地址不是本身的地址,则不会信息。
  • 如果判断对方解析的目标地址是本身的地址,则回复NA报文。 NA报文: ICMPv6-NDP ::: warning
  • NA报文是单播报文。* 原因是每台设备存储IP v6信息有时间限制,时间限制取决于是否进行数据通信,没有数据通信时,超出时间限制地址会被删除。组播发给全组设备提前存储对端的IP v6地址没有意义,只要单播回复给需要的设备即可。 :::
邻居状态跟踪

IP v6节点都存在邻居表(类似于ARP缓存表): ICMPv6-NDP 每个邻居都有相应的状态,状态之间可以迁移。 5种邻居状态分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。 ICMPv6-NDP

ICMPv6-NDP

起始状态R1、R2未发送过报文时,R1为Empty状态。
1. R1先发送NS报文,并生成缓存条目,此时,邻居状态为Incomplete。
2. 若R2回复NA报文,则邻居状态由Incomplete变为Reachable,否则固定时间后邻居状态由Incomplete变为Empty,即删除表项。
3. 经过邻居可达时间(默认30s),邻居状态由Reachable变为Stale,即未知是否可达。
4. 如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址和表项中不同,则邻居状态马上变为Stale。
5. 在Stale状态若R1要向R2发送数据,则邻居状态由Stale变为Delay,并发送NS请求。
6. 在经过5s后,邻居状态由Delay变为Probe,其间若有NA应答,则邻居状态由Delay变为Reachable。
7. 在Probe状态,R1每隔一定时间间隔发送单播NS,发送3次后,有应答则邻居状态变为Reachable,否则邻居状态变为Empty,即删除表项(类似ARP缓存表老化)。
前缀重编址

前缀重编址使用RA来完成,报文内携带前缀信息的同时也携带时间参数。 时间参数即前缀有效时间,类似于DCHP的地址租期。

时间参数的三个时间段:
1.实验时间:进行地址冲突检测的时间
2.可用时间:地址正常使用的时间
     1.优选时间:在该时间内,该地址可以主动发起连接
     2.弃用时间:在该时间内,该地址不能主动发起连接,只能被动等待连接
3.不可用时间:地址不能使用的时间

正常进行数据通信会不断有RA报文产生,不断刷新优选时间,地址前缀不会被弃用。 ICMPv6-NDP

[AR-GigabitEthernet0/0/0]ipv6 nd ra prefix 2077::/64 10000 5000      设置通告的前缀、可用时间、优选时间
路由重定向

redirect报文中保存的是去往目的地址最优的下一跳。 ICMPv6-NDP 重定向报文中携带R1的链路本地地址,PC会将下一跳设为该地址。 ICMPv6-NDP 上图中Target Address为AR1的接口链路本地地址。

点赞
收藏
评论区
推荐文章

暂无数据

似梦清欢
似梦清欢
Lv1
学海无涯
文章
17
粉丝
17
获赞
1