邻居发现协议(NDP–Neighbor Discovery Protocol) 是指用icmpv6协议实现的一种路由协议; IPv6 环境中的常规主机和路由器都依赖于NDP 来帮助实现重要的信息交换。

NDP报文种类:

  • 路由器请求(RS)
  • 路由器宣告(RA)
  • 邻居请求(NS)
  • 邻居宣告(NA)
  • 重定向(RD)

1.邻居请求&公告消息代替ARP


在IPv4中ARP由本地链路地址上的节点用来确定其他节点的链路层MAC地址。每个节点维护一个ARP缓存,缓存中包含ARP获悉的节点的链路层地址。

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

在IPv6中使用的NDP比IPv4中的ARP效率高很多:

  • 在IPv6中,只有关系这个机制的邻居节点才会在它们的协议栈中处理邻居请求和邻居公告消息。在IPv4中,ARP广播消息用来发现一个节点的链路层地址,但是ARP广播迫使本地链路上的所有节点都把ARP广播消息发给IPv4协议栈。
  • 在IPv6中,节点在相同的请求中互相交换链路层地址。在IPv4中,需要两个ARP广播消息才能够得到相同的结果。
  • 验证邻居缓存中的IPv6地址和链路层地址的可达性,在IPv4的ARP中,表项过期后被删除。

openwrt上面查看邻居表

root@zihome:/# ip -6 neighbor show
fe80::8a:169d:ba8e:7802 dev br-lan lladdr bc:a9:20:8d:18:d1 STALE
fe80::c8e8:4a5:7ff9:b706 dev br-lan lladdr a0:a4:c5:1e:61:c1 STALE
fe80::2a35:45ff:feea:743e dev br-lan lladdr 28:35:45:ea:74:3e STALE
fe80::94df:e550:f5aa:973c dev br-lan lladdr ec:41:18:7c:15:0b STALE
fe80::811:ddc0:eb48:6fa2 dev br-lan lladdr 20:ab:37:8d:c2:f6 REACHABLE
fe80::ba3d:4eff:feaa:449b dev br-lan lladdr b8:3d:4e:aa:44:9b STALEroot@zihome:/# ip -4 neighbor show
192.168.18.174 dev br-lan  FAILED
192.168.18.127 dev br-lan lladdr a0:a4:c5:1e:61:c1 REACHABLE
192.168.18.155 dev br-lan lladdr ec:41:18:7c:15:0b STALE
192.168.18.161 dev br-lan  FAILED
192.168.18.176 dev br-lan  FAILED
192.168.18.145 dev br-lan lladdr 20:ab:37:8d:c2:f6 REACHABLE
192.168.18.146 dev br-lan  FAILED

2.路由器请求&公告(RS&RA)/无状态自动分配地址

无状态自动配置地址是IPv6最具吸引力和最有用的新特性之一。

在IPv6中可以使用路由器公告消息RA (ICMPv6类型134) ,通过节点的多播地址(FF02::1)定时发送前缀地址给节点,节点收到RA消息的前缀地址后再根据EUI64规则生成一个IPv6单播地址。

由于路由器的定时发布有一定的时间间隔,所以节点也可以主动发送路由器请求消息RS(ICMPv6类型133)获取前缀地址。节点发送RS消息到路由器的多播地址(FF02::2),路由器收到后就会直接返回附带前缀地址的RA消息给对应的节点。

路由器定时发送RA过程如下:

节点主动发送RS请求过程如下:

3.重复地址检测DAD

DAD是无状态自动配置和节点启动时的一个NDP机制,在节点使用无状态自动配置的IPv6单播地址之前,必须在本地链路上验证要使用的临时地址值是唯一的并且未被其他节点使用。

DAD使用邻居请求消息(ICMPv6类型135)和被请求节点的多播地址完成这个任务,节点A发送邻居请求消息,使用被请求节点的多播地址为目的地址。

只要有节点对这个请求应答,就说明这个单播IPv6地址已经被另外一个节点使用,没有则说明在本地链路上是唯一的,可以使用这个地址。

重复地址检测DAD过程如下:

4.前缀重新编址

因为IPv6协议的严格路由聚合,当一个组织机构决定改变IPv6提供商时,它必须进行前缀重新编址,前缀重新编址允许节点从以前的网络前缀平稳地过度到新的前缀。

前缀重新编址由在本地公告前置的路由器执行,这个机制使用与前缀公告机制相同,使用路由器公告消息RA (ICMPv6类型134)和多播地址(FF02::1)实现。

前缀重新编址过程

  • 站点中的所有路由器继续公告当前的前缀,但是有效期和首选生存期被减少到接近于0的一值,然后路由器开始在本地链路公告新的前缀。
  • 节点收到路由器的公告消息后,节点会有两个单播地址,一个基于旧的前缀,一个基于新的前缀,但是旧的前缀有效期只有很短,所以经过一段短暂的过渡期,节点就平稳的切换到新的前缀地址。

5.路由器重定向

IPv6中的路由器重定向机制使用重定向消息(ICMPv6类型137)。

路由器使用ICMPv6重定向消息通知链路上的节点,链路上存在一个更好的转发数据包的路由器,接收到这个ICMPv6重定向消息包的节点可以根据新的路由器地址修改它的本地路由选择表,后期访问改地址的时候就用新的路由地址发送请求数据。

6.NDP消息总结

机制 ICMPv6消息 多播地址
代替ARP 类型135(邻居请求),类型136(邻居公告) 所有节点的多播(FF02::1),被请求节点的多播(FF02::1FFxx:xxxx)
前缀公告 类型133(路由器请求),类型134(路由器公告) 所有节点的多播(FF02::1),所有路由器的多播(FF02::2)
DAD 类型135(邻居请求) 被请求节点的多播(FF02::1FFxx:xxxx)
前缀重新编址 类型133(路由器请求),类型134(路由器公告) 所有节点的多播(FF02::1),所有路由器的多播(FF02::2)
路由器重定向 类型137(路由器重定向) -

参考文档《深入解析IPv6》《Cisco ipv6网络实现技术》

4-ipv6基础知识之-邻居发现协议NDP相关推荐

  1. IPv6邻居发现协议--NDP详解

    一.ICMPv6 -Internet控制报文协议 ICMPv6是IPV6的基础协议之一,用于向源节点传递报文转发的信息或错误 协议类型号(即:IPv6Next Header)为58 icmpv6可以提 ...

  2. IPv6邻居发现协议NDP

    邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议.邻居发现协议替代了IPv4的ARP(Address Resolu ...

  3. IPV6邻居发现协议(NDP)

    概述 NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP.ICMP路由器发现和ICMP重定向等协议,并对它们作了改进.作 ...

  4. IPV6 邻居发现协议(NDP)

    IPV6除了显著增加了地址空间外,另一个最显著的特征就是它的即插即用性. 邻居发现协议(Neighbor Discovery Protocol,NDP)就是使用以下的功能实现即插即用特性的协议: 路由 ...

  5. 抓包解析邻居发现协议NDP

    实现环境:华为模拟器eNSP 需要安装eNSP的看这里:资源或者私信我 话不多说,直接上知识点 地址解析 1.邻居请求报文NS 被请求节点的多播地址作为目的IP地址 2.邻居公告消息NA 邻居可达性检 ...

  6. ipv6单播地址包括哪两种类型_IPV6中为啥没有ARP了呢?一文带你搞懂NDP邻居发现协议...

    前言 前面我们介绍了ICMPv6协议 除了提供ICMPv4常用的基本功能之外,还有邻居发现(ND)的功能.一文带你看懂ICMPv6和ICMPv4的区别 那么究竟什么是邻居发现协议(ND)呢? 邻居发现 ...

  7. 让IPv6强大的关键——NDP邻居发现协议

    邻居发现协议NDP 一.简述 二.NDP消息 三.地址解析(类PIv4的ARP) IPv6地址解析过程分析 简述 详细抓包过程 邻居通告报文中Flags字段解释: 四.邻居不可达检测(NUD) 五.重 ...

  8. IPv6邻居发现协议

    邻居发现协议NDP 邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议.邻居发现协议替代了IPv4的ARP(Address Resolu ...

  9. IPv6基础_邻居发现协议简介

    IPv6基础_邻居发现协议简介 一.NDP(NeighborDiscoveryProtocol,邻居发现协议)是IPv6的一个关键协议,它组合了IPv4中的ARP.ICMP路由器发现和ICMP重定向等 ...

最新文章

  1. 判断表格中的一列是否有重复项
  2. 原子操作类AtomicInteger详解
  3. $.ligerdialog.open中确定按钮加事件_彻底搞懂JavaScript中的this指向问题
  4. 数据库:MYSQL相关设计规范梳理,值得收藏!
  5. jquery实现增删改(伪)-老男孩作业day13
  6. 微信小程序 禁止弹框下面的内容滑动 弹窗禁止底部内容滚动
  7. mqtt协议详解_IoT物联网设备上云技术方案详解
  8. html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
  9. Android自动打包、签名、优化、上传ANT脚本
  10. 佳能g3800故障灯说明书_虎林2020定制FW6117移动工作灯
  11. 怎么下载并使用向日葵远程工具
  12. 抖音小店保证金被扣除怎么办?抖音小店货款什么时候结算?
  13. 计算机合并单元格怎么操作,excel怎么合并单元格方法
  14. Unity3d C# 代码动态设置(SetTexture)材质球(Material)贴图纹理(Texture)
  15. 22南工计算机学院新生培训最终章---ACM竞赛机制
  16. 流媒体协议之WebRTC实现p2p视频通话(二)
  17. Scrapy爬取1908电影网电影数据
  18. Chicken first or egg?
  19. 【Python虚拟环境】Windows环境下Python虚拟环境的创建与激活
  20. 【Pytorch】内存够用但还是 RuntimeError: CUDA out of memory 问题解决

热门文章

  1. 基于k-means聚类算法对NBA球员数据的一次聚类分析
  2. 镜播无人直播带货教程,手把手教你如何搭建直播间
  3. 茶馆预定APP开发功能需求
  4. 双十一!如何下载各种热卖商品视频?
  5. “云界十年”——第十届中国云计算大会举行
  6. js实现个任意位正小数,向上进位
  7. 我转行程序员的那一年(一)
  8. 《软件工程导论》期末复习知识总结
  9. 苹果手机和安卓手机分享的区别
  10. python 读取pdf cid_python使用pdfminer解析pdf文件的方法示例