> Linux教程 > linux基础 >

IPv6基础_邻居发现协议简介(二)

IPv6基础_邻居发现协议简介(二)

 

一、NDPNeighborDiscoveryProtocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARPICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。(RFC2461

225223934.png

  • 替代ARP:IPv6提供了一种新的确定本地链路上节点链路层地址的方法,这个新的机制混合使用了ICMPv6消息和多播地址。

  • 无状态自动配置:混合使用ICMPv6消息和多播地址配置IPv6地址。

  • 路由器重定向:路由器向一个IPv6节点发送ICMPv6消息,通知它在本地链路上存在一个更好的到达目的网络的路由器地址。

为NDP定义的ICMPv6消息

ICMPv6类型

消息名称

类型133

路由器请求(RS

类型134

路由器公告(RA

类型135

邻居请求(NS

类型136

邻居公告(NA

类型137

重定向消息

  • 前缀公告和前缀重新编制使用路由器请求(ICMPv6类型133)和路由器公告(ICMPv6类型134)。

  • DAD使用邻居请求。

  • 用邻居请求和邻居公告消息替代ARP

 

二、邻居请求和邻居公告是如何工作的?

IPv6中对节点的链路层地址的确定使用邻居请求(ICMPv6类型135)、邻居公告消息(ICMPv6类型136)和被请求节点的多播地址(FF02::1:FFxx:xxx)的组合。

测试环境:节点A与节点B网线直连,节点A主动ping节点B(ping2013:1:1:1::14)

多播地址

ICMPv6消息

被请求节点多播地址(FF02::1:FF:xx:xxxx)

ICMPv6类型135(邻居请求)

ICMPv6类型136(邻居公告)

225226771.png

ping2013:1:1:1::14

 

1、节点A要获知节点B的链路层MAC地址,首先发送一个类型为135的ICMPv6消息(邻居请求)到本地链路。

225637842.png

这个帧的目的mac33:33:FF:00:00:14IPv6目的地址FF02::1:FF00:14的多播映射。

映射方法为:

ping2013:1:1:1:a:b:c:d则对应请求节点多播mac地址为33:33:ff:0c:00:0d(红色00不变)

IPv6地址为ff02::1:ff0c:d

2、侦听本地链路上多播地址的节点B获取到这个邻居请求消息,因为目的IPv6地址FF02::1:FF00:14代表它的IPv6地址2013:1:1:1::14相对应的被请求节点多播地址。

3、节点B发送一个邻居公告来应答。可以看到目的mac目的IP已经变为节点A

 

231822536.png

 

此数据包中ICMPv6option字段包含了自己节点Bmac地址。

4、至此,节点A和节点B都知道了对方的mac地址。因此,节点可以在本地链路上通信。

一个节点改变它的链路层地址可以用所有节点多播地址FF02::1发送邻居公告消息,通知其他在本地链路上的节点。本地链路上节点的邻居发现表被新的链路层地址更新。

 

 

三、无状态自动配置简单分析:

RFC2462定义了IPv6无状态地址自动配置,主要包含三个机制:

1、前缀公告

前缀公告使用路由器公告(IMCPv6类型134)和所有节点多播地址FF02::1。路由器公告消息在本地链路上周期性地发送所有节点多播地址。

机制

多播地址

ICMPv6消息

前缀公告

所有节点多播地址FF02::1

所有路由器的多播FF02::2

ICMPv6类型134路由器公告

ICMPv6类型133路由器请求

路由器公告包含以下参数

  • IPv6前缀

  • 生存期

  • 有效生存期:节点地址保持有效状态的时间长度。当这个值过期时,节点的地址变为无效。

  • 首选生存期:节点用无状态自动配置得到的地址保持首选状态的时间。首选生存期小于或等于有效生存期。当这个值过期时,地址废止。节点不能用已经废止的地址建立新的连接,但是节点任可以在有效生存期没有过期期间接受连接。这个参数用于重新编址。

  • 默认路由信息

在IPv6中,节点使用的默认路由器地址是路由器本地链路地址(FF80::/10)。因此,即使前缀重新编址,路由器也是可达的。

  • 标志/选项

可以使用标志来指示节点使用有状态自动配置而不是无状态自动配置。

2、DAD

DAD(DuplicateAddressDectection)重复地址检测,是无状态自动配置和节点启动时的一个NDP

节点启动时,抓包截图(配置节点Aip地址为2013:1:1:1::99直连节点B已配置该IP

节点A发送了一个

230848292.png

用未指定的地址(::)作为源IPv6地址,用单播地址的请求节点多播地址做为目的IPv6地址。如果在此过程中发现了一个重复地址,这个临时地址就不能分配给接口。如下,如果有一个节点对这个请求应答(可以看到节点B发送了一个目的地址为所有节点的多播地址的ICMPv6类型136邻居公告报文),就说明这个单播地址已被另一个节点使用。

 

232429581.png

在没有应答的情况下,节点就认为该地址是唯一的。

3、前缀重新编址

前缀重新编址由在本地公告前缀的路由器执行,使用包含在路由器公告消息中的时间参数执行这个任务。

首先,站点中的路由器继续公告当前的前缀,但是有效和首选生存期被减小到接近于0的值。然后,路由器开始在本地链路公告新的前缀。因此,在每个本地链路至少有两个前缀共存。这意味着路由器公告消息包含一个旧的和一个新的前缀。

在转换期间,节点使用两个单播地址:

  • 旧单播地址:旧单播地址基于旧的前缀。使用旧地址的当前连接任被处理。

  • 新单播地址:新连接用新的地址来建立。

 

四、路由器重定向

机制

ICMPv6

路由器重定向

类型137(路由器重定向)

本文出自 “小佘学IT” 博客,请务必保留此出处http://xiaoshe.blog.51cto.com/7977863/1303641

(责任编辑:IT)