IPv6和NDP
1.ICMPv4回顾:在IPv4中,ICMP允许主机或设备报告差错情况。ICMP报文作为IP报文的数据部分,再封装上IP报文首部,组成完整的IP报文发送出去。常用的Ping、Tracert等命令都是基于ICMP实现的
ICMP差错检测:ICMP Echo消息常用于诊断源和目的地之间的网络连通性,同时还可以提供其他信息,如报文往返时间等
ICMP错误报告:定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因
2.ICMPv6概述:
ICMPv6报文用于通告相关信息或错误
在IPv6报文头部中,Next Header字段值为58则对应为ICMPv6报文
ICMPv6控制着IPv6中的地址自动配置、地址解析、地址冲突检测、路由选择、以及差错控制等关键环节
3.ICMPv6报文类型
ICMPv6报文分为两类:差错报文和信息报文
差错报文:差错报文用于报告在转发IPv6数据包过程中出现的错误,如常见的目的不可达、超时等等
信息报文:信息报文可以用来实现同一链路上节点间的通信和子网内的组播成员管理等
4.ICMPv6报文格式

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

5.2 Ping
Echo Request:用于发送到目标节点,以使目标节点立即发回一个Echo Reply应答报文。Echo Request报文的Type字段值为128,Code字段的值为0。
Echo Reply:当收到一个Echo Request报文时,ICMPv6会用Echo Reply报文响应。Echo Reply报文的Type字段的值为129,Code字段的值为0。
5.3 其它应用:
邻居发现(RFC2461和RFC4861)
Type=133 路由器请求(Router Solicitation)
Type=134 路由器公告(Router Advertisement)
Type=135 邻居请求(Neighbor Solicitation)
Type=136 邻居公告(Neighbor Advertisement)
Type=137 重定向 (Redirect)
组播侦听者发现协议(RFC2710和RFC3810)
Type=130 查询消息
Type=131 报告消息
Type=132 离开消息
Type=143 MLDv2报告消息
6.NDP概述:
IPv6邻居发现协议NDP。NDP是IPv6中非常核心的组件

NDP使用以下几种ICMPv6报文:
RS(Router Solicitation):路由器请求报文
RA(Router Advertisement):路由器通告报文
NS(Neighbor Solicitation):邻居请求报文
NA(Neighbor Advertisement):邻居通告报文
6.1 路由器发现:路由器发现是指主机发现本地链路上路由器和确定其配置信息的过程
路由器发现可以同时实现以下三个功能:
路由器发现 (Router Discovery):主机定位邻居路由器以及选择哪一个路由器作为缺省网关的过程。
前缀发现 (Prefix Discovery):主机发现本地链路上的一组IPv6前缀的过程,用于主机的地址自动配置。
参数发现 (Parameter Discovery):主机发现相关操作参数的过程,如输出报文的缺省跳数限制、地址配置方式等信息。
使用报文:
RS 路由器请求
RA 路由器通告
协议交互主要有两种情况:
主机发送RS触发路由器回应RA
路由器周期发送RA
当主机启动时,主机会向本地链路范围内所有的路由器发送RS报文,触发路由器响应RA报文。主机发现本地链路上的路由器后,自动配置缺省路由器,建立缺省路由表、前缀列表和设置其它的配置参数
路由器周期性的发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600秒,最小时间间隔是200秒
6.2 地址解析
IPv6地址解析通过ICMPv6(NS和NA报文)来实现。
在三层完成地址解析,主要带来以下几个好处:
地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
可以使用三层的安全机制避免地址解析攻击。
使用组播方式发送请求报文,减少了二层网络的性能压力
6.3 IPv6邻居状态表
IPv6邻居状态表中缓存了IPv6地址与MAC地址的映射,可以通过display ipv6 neighbors命令来查看IPv6邻居状态表
IPv6节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。5种邻居状态分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)

6.4 重复地址检测
重复地址检测(Duplicate Address Detect,DAD)是指接口在使用某个IPv6地址之前,需要先探测是否有其它的节点使用了该地址,从而确保网络中没有两个相同的单播地址。
接口在启用任何一个单播IPv6地址前都需要先进行DAD,包括Link-Local地址
6.5 重定向
重定向是指网关设备发现报文从其它网关设备转发更优,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关设备
PC1希望发送报文到服务器,于是根据配置的默认网关地址向网关R2发送报文。
网关R2收到报文后,检查报文信息,发现报文应该转发到与PC1在同一网段的另一个网关设备R1,此转发路径是更优的路径,于是R2会向PC1发送一个重定向消息,通知PC1去往服务器的报文应直接发给R1。
PC1收到重定向消息后,会向R1发送报文,R1再将该报文转发至服务器。
