DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1013|回复: 0
打印 上一主题 下一主题

[待整理] IPv6的邻居发现技术

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-13 16:18:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、引言
  随着IP网络规模和业务的迅速发展,IP网络的用户数急剧增加,正因为如此,IP网络也暴露出越来越多的问题,如地址空间不足、QoS、安全问题等。为了解决Internet的这些问题,尤其是解决地址空间不足的问题,IETF于1992年在IPv4的基础上定义了下一代的Internet协议,被称之为“Ipng”或“IPv6”。
  IPv6解决的最大问题是扩大了地址空间,另外,它与IPv4相比在其它许多方面都具有优势,例如安全性、服务质量、移动性等。IPv6的一个显著特点就是它具有“即插即用”功能。即插即用使节点直接连接到网络后,不需要经过任何人工配置就能够使用,即插即用使网络的管理和控制变得更加简单;其次,节点只需要知道自己的链路层地址及本地网络的子网前缀,就能够通过IPv6的无状态或者全状态自动配置得到惟一的IPv6地址,从而成为网络的一部分;另外,IPv6还实现了更好的对节点移动性的支持。这些功能都是通过邻居发现协议来实现的,同一个子网内的所有主机和路由器之间的交互也都是通过邻居发现协议来实现的。
2、工作原理
  邻居发现协议是IPv6协议的一个基本的组成部分,它实现了在IPv4中的地址解析协议(ARP)、控制报文协议(ICMP)中的路由器发现部分、重定向协议的所有功能,并具有邻居不可达检测机制。
  邻居发现协议实现了路由器和前缀发现、地址解析、下一跳地址确定、重定向、邻居不可达检测、重复地址检测等功能,可选实现链路层地址变化、输入负载均衡、泛播地址和代理通告等功能。
  邻居发现协议采用5种类型的IPv6控制信息报文(ICMPv6)来实现邻居发现协议的各种功能。这5种类型消息如下。
  (1)路由器请求(Router Solicitation):当接口工作时,主机发送路由器请求消息,要求路由器立即产生路由器通告消息,而不必等待下一个预定时间。
  (2)路由器通告(Router Advertisement):路由器周期性地通告它的存在以及配置的链路和网络参数,或者对路由器请求消息作出响应。路由器通告消息包含在连接(on-link)确定、地址配置的前缀和跳数限制值等。
  (3)邻居请求(Neighbor Solicitation):节点发送邻居请求消息来请求邻居的链路层地址,以验证它先前所获得并保存在缓存中的邻居链路层地址的可达性,或者验证它自己的地址在本地链路上是否是惟一的。
  (4)邻居通告(Neighbor Advertisement):邻居请求消息的响应。节点也可以发送非请求邻居通告来指示链路层地址的变化。
  (5)重定向(Redirect):路由器通过重定向消息通知主机。对于特定的目的地址,如果不是最佳的路由,则通知主机到达目的地的最佳下一跳。
3、主机的数据结构
  IPv6的一个设计要求是:即使在一个有限的网络内,主机也必须正确工作,而不像路由器不能储存路由表,不能有永久的配置,因此主机必须能自动配置,必须能学到交换数据的有关目的地的最小信息。这些信息储存的存储器叫做缓存,这些数据结构是一系列记录的排列,称作表项。每个表项储存的信息有一定的有效期,需要周期性地清除缓存中的表项,以保证缓存的空间大小。
  主机需要为每一接口维护以下信息。
  *邻居缓存:一组有关单个邻居的表项,这些邻居接收到了最新的数据流。表项是连接单播地址的关键,它包括的信息有:其链路层地址、指示邻居是路由器还是主机的标志、指向任何排队等待完成地址解析数据包的指针等。邻居缓存表项还包括由邻居不达检测算法所使用的信息,如可达状态、探测无应答的次数以及下一次邻居不达检测发生的时间。
  *目的地缓存:一组有关最近收到数据流的目的地节点表项。目的地缓存包括“在连接(on-link)”和“非连接(off-link)”目的地,并在其中提供一定程度的间接寻址。目的地缓存能把目的地IP地址映射成下一跳邻居的IP地址,该缓存通过重定向消息进行信息更新。如果在目的地缓存表项中存储与邻居发现没有直接关系的附加信息,例如路径MTU(PMTU)以及由传输协议设定的往返时间,则执行时会更加方便。
  *前缀列表:规定一组“在连接(on-link)”地址的前缀组成的列表。前缀列表表项产生于路由器通告接收到的信息。每一个表项都有一个相关的失效计时器值(由通告信息确定),它用于在前缀失效时废弃这些前缀。除非在后续通告中收到了一个新的(有限)值,否则特殊的“无限”计时器值规定前缀永久有效。本地链路(1ink-local)前缀位于带有无限失效计时器的前缀列表,而不管路由器是否正在向其通告前缀。接收的路由器通告不应该修改本地链路前缀的失效计时器。
  *缺省路由器列表:接收数据包的路由器列表。路由器列表的表项指向邻居缓存中的相应的表项。缺省路由器的选择算法是:选择那些已知可达的路由器,而不选择可达性还不确定的路由器。每一个表项还有一个相关的失效计时器值(从路由器通告信息中得到),它的作用是删除不再通告的表项。
  上述数据结构可以用不同的方法实现。其中一种实现方法是对所有数据结构使用单个最长匹配路由表。不管采用哪种特定的实现方法,为了防止重复性的邻居不可达检测,路由器的邻居缓存表项可以由使用该路由器的所有目的地缓存表项共享。
  邻居缓存包含有邻居不可达检测算法维护的信息。邻居可达性状态是最关键的信息,它的取值是下列的5个值之一。
  *不完整性(INCOMPLETE):正在进行地址解析,邻居的链路层地址还没确定。
  *可达性(REACHABLE):邻居在最近处于可达状态(在小于10s以前)。
  *失效性(STALE):在数据流发送给该邻居以前邻居是不可达的,并无法验证其可达性。
  *延迟(DELAY):邻居不再是可达的,同时数据流在最近已经发送给邻居,但不立即对该邻居进行探测,而在一个短时延后发送探测信息,这样就可以为上层协议提供可达性确认。
  *探测(PROBE):邻居不再是可达的,同时发送单播邻居请求探测以验证可达性。
4、数据包的发送算法
  节点向目的地发送数据包时,使用目的地缓存、前缀列表、默认路由器列表确定合适的下一跳的IP地址,然后路由器查询邻居缓存确定邻居的链路层地址。
  IPv6单播地址的下一跳确定操作如下:发送者使用前缀列表中的前缀进行最长前缀匹配,确定包的目的地是在连接的还是非连接的。如果下一跳是在连接的,下一跳地址就和目的地地址相同,否则发送者从默认路由器列表中选择下一跳。如果默认路由器列表为空,则发送者认为目的地是在连接的。
  下一跳确定的信息存储在目的地缓存中,下一个包可以使用这些信息。当路由器发送包时,首先检查目的地缓存,如果目的地缓存没有相关信息存在,就激活下一跳确定过程。
  在学习到下一跳路由器的IPv6地址后,发送者检查邻居缓存以决定链路层地址。如果没有下一跳IPv6地址的表项存在,路由器的工作如下:
  *创建一个新表项,并设置其状态为不完全。
  *开始进行地址解析。
  *对传送的包进行排队。
  当地址解析结束时,获得链路层地址,存储在邻居缓存中。此时表项到达新的可达状态,排队的包能够传送。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-6-16 13:44 , 耗时 0.087502 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表