NDP 协议介绍

NDP 协议介绍邻居发现协议 NDP Neighbor Discovery Protocol 是 IPv6 协议体系中一个重要的基础协议 邻居发现协议替代了 IPv4 的 ARP Address Resolution Protocol 和 ICMP 路由器 发现 RouterDiscov

大家好,我是讯享网,很高兴认识大家。


讯享网

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议。
邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器
发现(RouterDiscovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻 居状态,重复地址检测,路由器发现以及重定向等功能。
 

1、地址解析
在 IPv4中,当主机需要和目标主机通信时,必须先通过 ARP 协议获得目的主机的链 路层地址。在 IPv6中,同样需要从 IP 地址解析到链路层地址的功能。邻居发现协议实 现了这个功能。
ARP 报文是直接封装在以太网报文中,以太网协议类型为0x0806,普遍观点认为 ARP 定位为第 2.5 层的协议。ND 本身基于 ICMPv6 实现,以太网协议类型为 0x86DD,即 IPv6 报文,IPv6下一个报头字段值为58,表示ICMPv6报文,由于 ND 协议使用的所有报文均封装在 ICMPv6报文中,一般来说,ND 被看作第3层的协议。在三层完成地址解析,主 要带来以下几个好处:
(1) 地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议。
(2) 可以使用三层的安全机制避免地址解析攻击。
(3) 使用组播方式发送请求报文,减少了二层网络的性能压力。

当 Host B 接收到了 NS 报文之后,就会回应 NA 报文,其中源地址为 HostB 的 IPv6地址,目的地址为 Host A 的 IPv6 地址(使用 NS 报文中的 HostA 的链路层地址进行单 播),Host B 的链路层地址被放在 Options 字段中。这样就完成了一个地址解析的过程。

组播 MAC:3333+IPv6 后 32 位地址生成

2、重复地址检测
重复地址检测 DAD(Duplicate Address Detect)是在接口使用某个 IPv6 单播地址之前进行的,主要是为了探测是否有其它的节点使用了该地址。尤其是在地址自动配置的时候,进行 DAD 检测是很必要的。一个 IPv6单播地址在分配给一个接口之后且通过重复地址 检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES 组播组和试验地址所对应的 Solicited-Node 组播组。
IPv6重复地址检测技术和 IPv4中的免费 ARP 类似:节点向试验地址所对应的 Solicited-Node 组播组发送 NS 报文。NS 报文中目标地址即为该试验地址。如果收到某个 其他站点回应的 NA 报文,就证明该地址已被网络上使用,节点将不能使用该试验地址通讯。

Host A 的 IPv6 地址 200::1 为新配置地址,即 200::1 为 Host A 的试验地址。Host A向 200::1 的被请求节点组播组发送一个以 200::1 为请求的目标地址的 NS 报文进行重复地址检测,由于 200::1 并未正式指定,所以NS 报文的源地址为未指定地址。当 Host B 收到该 NS 报文后,有两种处理方法:
(1) 如果 Host B 发现 200::1 是自身的一个试验地址,则 Host B 放弃使用这个地址作为接口地址,且不会发送 NA 报文。
(2) 如果 Host B 发现 200::1 是一个已经正常使用的地址,Host B 会向 FF02::1 发送一个 NA 报文,该消息中会包含 200::1。这样,Host A 收到这个消息后就会发现自身 的试验地址是重复的。Host A 上该试验地址不生效,被标识为 duplicated 状态。


3、路由器发现
路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
在 IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀 信息,然后主机自己生成地址的接口标识部分。路由器发现功能是 IPv6地址自动配置功 能的基础,主要通过以下两种报文实现:

(1) 路由器通告 RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,定时都会组播发送 RA 报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA 报文的 Type字段值为134。 

(2) 路由器请求 RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽 快获取网络前缀进行通信,此时主机可以立刻发送 RS 报文,网络上的设备将回应 RA 报文。RS 报文的 Tpye 字段值为 133。

RFC2461 中定义了 5 种邻居状态,分别是:未完成(Incomplete)、可达(Reachable)、 陈旧(Stale)、延迟(Delay)、探查(Probe)。
下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。
1)A 先发送 NS 报文,并生成缓存条目,此时,邻居状态为 Incomplete。 

4)如果在 Reachable 状态,A 收到 B 的非请求 NA 报文,且报文中携带的 B的链路层 地址和表项中不同,则邻居状态马上变为Stale。 

5)在 Stale 状态若 A 要向 B 发送数据,则邻居状态由 Stale 变为 Delay,并发送 NS 请求。
6)在经过一段固定时间后,邻居状态由 Delay变为Probe,其间若有NA应答,则邻居状态由 Delay 变为 Reachable。
7)在Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻 居状态变为 Reachable,否则邻居状态变为 Empty,即删除表项。

PC1 需要和 PC2 通信,PC1 的默认网关路由器是 R1,那么当 PC1 发送报文给 PC2时报文会被送到 R1。R1 接收到 PC1 发送的报文以后会发现实际上 PC1 直接发送给 R2更好,它将发送一个重定向报文给 PC1,其中报文中更好的路径下一跳地址为 R2,Destination Address 为 PC2(该部分为 ICMPv6 重定向报文携带的目的地址)。PC1 接收到
了重定向报文之后,会在默认路由表中添加一个主机路由,以后发往 PC2的报文就直接发送给 R2。当路由器收到一个报文后,只有在如下情况下,路由器会向报文发送者发送重定向报文:
(1) 报文的目的地址不是一个组播地址。
(2) 报文并非通过路由转发给路由器。
(3) 经过路由计算后,路由的下一跳出接口是接收报文的接口。
(4) 路由器发现报文的**下一跳 IP 地址和报文的源 IP 地址处于同一网段。
(5)路由器检查报文的源地址,发现自身的邻居表项中有用该地址作为全球单播地
址或链路本地地址的邻居存在。

小讯
上一篇 2025-01-11 13:23
下一篇 2025-01-18 11:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60124.html