首页 理论教育 NDP协议详解及应用场景

NDP协议详解及应用场景

时间:2023-06-30 理论教育 版权反馈
【摘要】:图2-4-10ICMPv6 超时报文实例图2-4-11Tracert IPv6 网站的运行结果结点用它来确定是否仍然可以联机到相邻结点。NDP 是一个伞型结构,定义了下面一些机制:图2-4-12NDP 的伞型结构的机制替代ARP 协议的机制——IPv6 提供的一种新的确定本地链路上的结点MAC 地址的方法,这个新机制混合使用ICMPv6 消息和多播地址。

NDP协议详解及应用场景

1.什么是NDP

NDP (Neighbor Discovery Protocol,邻居发现协议)是确定相邻结点之间关系的一组讯息和程序,取代了IPv4 中使用的ARP、ICMP Router Discovery 以及ICMP Redirect,并提供其他功能。

NDP 用途有以下几点:

(1)主机用它来发现相邻路由器。

(2)主机用它来发现地址、地址前缀以及其他组态参数。

(3)结点用它来解析IPv6 封包转寄到的相邻结点的链接层地址,并确定相邻结点的链接层地址从何时起发生改变。

图2-4-10 ICMPv6 超时报文实例

图2-4-11 Tracert IPv6 网站的运行结果

(4)结点用它来确定是否仍然可以联机到相邻结点。

(5)路由器用它来通告自己的存在、主机组态参数以及前缀。

(6)路由器用它来通知主机有更好的下一跃点地址,以供转寄针对特定目的的封包。

NDP 是一个伞型结构(图2-4-12),定义了下面一些机制:

图2-4-12 NDP 的伞型结构的机制

(1)替代ARP 协议的机制——IPv6 提供的一种新的确定本地链路上的结点MAC 地址的方法,这个新机制混合使用ICMPv6 消息和多播地址。

(2)无状态自动配置机制——允许本地链中的结点自己配置IPv6 地址。

(3)路由器重定向机制——路由器向一个IPv6 结点发送ICMPv6 消息,通知它在相同的本地链路上存在一个更好的到达目的网络的路由器地址。

2.邻居请求和邻居公告消息替代ARP 的工作原理

每台主机都有一个邻居发现表缓存,内有所在局域网上主机和路由器的IPv6 地址和物理地址的映射项。当发送数据报时,先到该缓存查出目标IPv6 的MAC 地址,若没有所需项,则按以下步骤找:

(1)源主机在局域网内发送一个邻居请求数据包。

(2)监听多播地址的目标主机收到后,发回一个邻居公告数据包作为响应,此包中写有目标主机的IPv6 地址和MAC 地址。

(3)将找到的IPv6 地址和MAC 地址映射对写入邻居发现表缓存。

3.邻居请求和邻居公告报文的封装

邻居请求和邻居公告报文是ICMPv6 报文的不同类型,都是先封装在IP 层数据报中,再封装到以太网数据帧中,就可以在以太网中传送。完整的一帧以太网数据帧(封装了邻居请求和邻居公告数据报)的格式如图2-4-13 所示。

图2-4-13 邻居请求和邻居公告报文的封装格式

源主机发送ICMPv6 的邻居请求报文时,因为不知道目的主机的MAC 地址,所以链路层的“目的地址”字段要填写目的主机的IPv6 地址的多播映射地址;源地址填写源主机的MAC 地址;IPv6 首部中的“目的主机IPv6 地址”填写目的主机的多播地址。

被请求的目的主机发送ICMPv6 的邻居公告报文时,链路层的两个地址和IP 层的两个地址都已知,可直接输入,不用输入多播地址或多播映射。

计算被请求主机的多播地址方法如图2-4-14 所示,即主机的IPv6 地址的低24 位附加在前缀FF02::1:FF 的后面。

图2-4-14 被请求主机的多播地址方法

以太网上的多播映射是指多播地址到以太网链路层地址(MAC 地址)的特殊映射。映射是这样构造的: 多播地址的低32 位附加在前缀33:33 的后面,该前缀定义为IPv6 多播以太网前缀。其映射过程如图2-4-15 所示。

(www.xing528.com)

图2-4-15 被请求主机多播地址的以太网多播映射

4.ICMPv6 邻居请求报文的格式及实例

若ICMPv6 报文中的“类型”字段值为135,由表示此为ICMPv6 邻居请求报文,邻居请求报文的格式如图2-4-16 所示。

图2-4-16 ICMPv6 邻居请求报文的格式

“选项”中的“源主机的MAC 地址”是指此报文的发送主机的MAC 地址。

利用Wireshark 抓包的ICMPv6 邻居请求报文实例如图2-4-17 所示。

下面详细分析图2-4-17 所示完整的链路数据帧的各字节的值及含义。

1)链路层帧首部(前14 字节)

第1、2 字节值为“33 33”,是IPv6 以太网前缀;第3 ~6 字节值是被请求结点多播地址的低32 位数据,与前2 字节组成的6 字节即目的主机的多播映射地址;随后的6 字节是源主机的MAC 地址;最后的2 字节是“类型”,值为“86 dd”,表明该帧数据携带的是IPv6 的数据包。

2)IPv6 首部(40 字节)

第7 字节值为“3a”,其十进制值为58,表明携带的是ICMPv6 的数据包;第9 ~24 字节是源主机的IPv6 地址,值为2001:250:2219:c::26c1;第25 ~40 字节是目的主机的多播地址,值为ff02::01:ffb6:09e8。

图2-4-17 ICMPv6 邻居请求报文实例示意

3)ICMPv6 数据(32 字节)

第1 字节“类型”值为“87”,其十进制值为135,表明这是一个邻居请求数据包;第2字节“代码”值为0;第3、4 字节“检验和”值为“9a 99”;第5 ~8 字节值为0,是未使用的字段;第9 ~24 字节是目的主机的IPv6 地址,值为fe80:000:000:2219::09e8;第25 字节“选项类型”值为1,表明选项的内容是源主机的MAC 地址;第26 字节是“选项长度”值为1,表明选项长度为1 (只存放一个地址);第27 ~32 字节是源主机的MAC 地址,值为“dc 4a 3e 6e ca 2e”。

5.ICMPv6 邻居公告报文的格式及实例

ICMPv6 报文中的“类型”字段值为136,则表明此为ICMPv6 邻居公告报文,邻居公告报文的格式如图2-4-18 所示。

图2-4-18 ICMPv6 邻居公告报文的格式

●R (1 位): 路由器标识位,值为1 表示该位有效,即表明此为路由器封装包。

●S (1 位): 响应标识位,值为1 表示该位有效,即表明此为响应数据包。

●O (1 位): 更新标识位,值为1 表示该位有效,即表明更新的MAC 地址有效。

“选项”字段中的“目的主机MAC 地址”是指邻居请求报文中请求的主机的MAC地址。

利用Wireshark 抓包的邻居公告报文实例如图2-4-19 所示。

图2-4-19 ICMPv6 邻居公告报文实例示意

下面详细分析图2-4-19 所示完整的链路数据帧的各字节的值及含义。

1)链路层帧首部(前14 字节)

前6 字节是源主机(被请求主机)的MAC 地址;随后的6 字节是目的主机(请求主机)的MAC 地址;最后的2 字节是“类型”,值为“86 dd”,表明该帧数据携带的是IPv6的数据包。

2)IPv6 首部(40 字节)

第7 字节值为“3a”,其十进制值为58,表明携带的是ICMPv6 的数据包;第9 字节到第24 字节是源主机的IPv6 地址,值为2001:da8:207:2::fbf0;第25 字节到第40 字节是目的主机的多播地址,值为fe80::20f:e2ff:fece:d5c1。

3)ICMPv6 数据(32 字节)

第1 字节“类型”值为“88”,其十进制值为136,表明这是一个邻居公告数据报;第2 字节“代码”值为0;第3、4 字节“检验和”值为“7c b4”;第5 字节的高3 位为“011”,表明被请求的结点不是路由器,表明这是对邻居请求数据包的响应数据包,同时表明本数据包携带的MAC 地址更新有效,第5 字节的低5 位和第6 ~8 字节值为0,是未使用的字段;第9 ~24 字节是目的主机的IPv6 地址,值为2001:da8:207:2::f bf0;第25 字节是“选项类型”,值为2,表明选项的内容是目的主机的MAC 地址;第26 字节是“选项长度”,值为1,表明选项长度为1 (只存放一个地址);第27 ~32 字节是目的主机的MAC 地址,值为“00 e0 4c 36 04 0c”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈