IPv6学习笔记--DNP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请参考RFC2461(已废止)RFC4861
三种主要功能:
1.提供地址解析服务,更新并扩展了PIv4的地址解析协议ARP;
2.允许主机发现存在的邻居路由器,并为主机提供一种得到确定配置信息的机制;
3.定义了邻居不可达检测(NeighborunreaehbailtiyDeteetion,NuD)机制,用来决定何时邻居成为不可达状态如果不可达邻居是路由器,节点启动一个故障恢复过程来寻找一个替代路由器
五种消息及其作用
1.路由器宣告消息(Router advertisement)
路由器使用路由器宣告消息向所有连接它的链路宣告它的存在。
这一过程可以定期发生或响应一个路由器请求消息。
路由器宣告消息包含了一些与链路有关的参数,例如地址、前缀等等这个消息类型使主机可以自动知道给定链路的所有路由器在线情况,并且克服了PIv4的一个缺点:手工配置默认路由器主机使用路由器宣告消息来自动配置默认路由器列表。
2.路由器请求消息(RouterSolieitatino)
当主机的接口激活后,它可以通过发送路由器请求消息来请求本链路上的路由器发送路由器宣告消息,而不用等路由器定期发送路由器宣告消息,从而加快配置阶段的完成
3.路由器重定向消息(Router solicitation)
当一台主机第一次与一个非本地子网的目的地址通信时,必须从它的默认路由器列表中选择一台路由器来发送数据包。
选择的路由器并不一定是最好的,很可能这台路由器被迫把数据包转发到和它在同一链路上的路由器,由这台路由器进行数据包的转发。
在这种情况下,被选择的路由器除了正确发送数据包外,它还会产生一个路由器重定向消息,告诉主机在本链路上可以通过一个更好的路由器到达目的地址。
主机收到路由器重定向消息后,更新它的目的缓存,保存这个更好的路径。
4.邻居请求消息(Neighbor Solicitation)
一个节点通过发送邻居请求消息来发现另一个节点的链路层地址一个节点通过多播发送邻居请求消息要求目标节点返回它的链路层地址,从而激活地址解析过程。
节点向被请求节点的多播地址发送一个带有目标地址的邻居请求消息,目标地址由一个单播的邻居宣告消
息返回它的链路层地址。
这一对消息使得发起者和目标地址均可解析对方的链路层地址。
这个消息也用在地址自动配置阶段,用来检查是否存在重复地址;也可以用在通过缓存中的地址来检查邻居节点是否可达。
5.邻居宣告消息(Neighbor Advertisement)
邻居宣告消息用来响应邻居请求消息,一个节点也可以定期的发送邻居宣告消息。
当一个节点收到邻居宣告消息后,更新它的邻居缓存。
邻居缓存中包含了Ipv6地址和链路层地址的映射关系。
邻居请求和邻居宣告消息代替了Ipv4中的ARP协议。
地址解析的过程
功能:
1、地址解析在三层完成,针对不同的链路层协议可以采用相同的地址解析协议
2、可以使用三层的安全机制(例如IPSec)避免地址解析攻击
3、使用组播方式发送请求报文,减少了二层网络的性能压力
使用NS和NA的交互过程
报文:
地址解析使用两种ICMPv6报文
–邻居请求(Neighbor Solicitation, NS)
• Type=135
• Code=0
邻居请求报文发送者的链路层地址会被放在Options字段中
邻居通告(Neighbor Advertisement, NA)
Type=136
Code=0
R标志(Router flag)表示发送者是否为路由器,如果1则表示是;
S标志(Solicited flag)表示发送邻居通告是否是响应某个邻居请求,如果1则表示是;
O标志(Overide flag)表示邻居通告中的消息是否覆盖已有的条目信息,如果1则表示是;Traget Address表示所携带的链路层地址对应的IPv6地址。
邻居状态种类
邻居状态有5种
– INCOMPLETE 未完成
– REACHABLE 可达
– STALE 陈旧
– DELAY 延迟
– PROBE 探查
邻居发现协议中的数据结构及其关系
Ipv6设计的一个基本原则就是主机必须能够正确的工作,尽管主机在网络中知道的信息极少。
实际上,主机不像路由器,可以存储路由表并具有一些永久的参数。
计算机在引导程序阶段必须自动配置自己,然后学习一些与其他的节点交互信息所需要的最少信息集合,这些信息存储在内存的一组数据结构中,这些数据结构称为缓存(cache),这些数据结构是一些记录记录阵列,每一个记录被称为一个列表条目。
每个条目中的信息都有一个有效的生存期,过时的条目被定期的从cache中清除出来限制cache的大小。
RFC2461中描述了一个基于cache的四种类型的可能实现,实际的实现可以选择不同的cache组织,下面我们将分析四种cache的不同。
1.邻居缓存(Neighbor Cache)
邻居缓存为每个邻居保存一个列表条目,用来存放节点近期访问过的邻居节点。
每个列表条目包含:一个在线单播Ipv6地址和相关的链路层地址、一个用来说明此邻居是否是路由器的标志位、和一个等待传输的数据包的指针。
除此之外,每一个列表条目都包含在邻居不可达检测算法中需要用到的状态信息。
2.目的缓存(Destination Cache)
目的缓存包含节点近期访问过的每一个节点地址,其列表条目包含一个Ipv6地址和一个指向缓存的指针,邻居缓存中包含了节点到达目的地址所跳地址。
目的缓存的信息由路由器发出的重定向消息来更新。
目的缓存与邻居缓存的一个主要区别是目的缓存列表条目中的地址信息可的,也可以是离线的;而邻居缓存中仅包含在线地址信息。
3.前缀列表(Prefix List)
前缀列表中包含每一个在线的前缀,用来决定一个地址是否在线。
前缀列表条目
根据接收到的路由器宣告消息中的信息创建的。
这些消息的时间有效期既有有限的也有无限的,链路本地前缀就具有无限制的有效期。
4.默认路由器列表(Default Router List)
默认路由器列表中包含所有可作为默认路由器的路由器列表条目。
默认路由器列表条目包含一个指向邻居缓存的指针,邻居缓存中包含默认路由器的Ipv6地址、链路层地址,
和状态标志位。
默认路由器列表条目从路由器宣告消息中得到一个失效时间值
5.四种缓存类型之间的关系
当节点发送数据包时,它先检查目的缓存中是否有相应的地址关系;若没有,则检查前缀列表中是否有匹配的前缀;若有,则下一跳地址与目的地址相同,否则发送节点必须在默认路由器列表中选择一个为它转发数据包的路由器作为下一跳地址;决定了下一跳地址后,节点访问邻居缓存来决定下一跳地址的链路层地址。
在邻居发现协议内部的数据结构中,邻居缓存列表条目有一下五个状态:
1.INCOMPLETE:邻居缓存中的列表条目已经建立,但是由于地址解析还没有完成,还不
知道链路层的地址;
2.REACHABLE:在一定的时间内收到了正式的确认,列表条目具有可达性;
3.STALE:近期已经不知道列表条目是否可达,但是不会产生可达性检验,除非有数据包
发送到邻居节点;
4.DELAY:近期已经不知道列表条目是否可达,而且有数据包发送到邻居节点;
5.PROBE:邻居节点的可达性已经不能确认,因此发送一个探测消息(Neighbor Solicitation)
到邻居节点来对其可达性进行验证
一个例子:节点A要访问节点B,A的缓存中无B的条目,下图是邻居状态机的变化
1. A先发送NS,并生成缓存条目,状态为Incomplete
2. 若B回复NA,则Incomplete->Reachable,否则10s后Incomplete->Empty,即删除条目
3. 经过ReachableTime(默认30s),B的条目状态Reachable->Stale
4. 或者在Reachable状态,收到B的非请求NA,且链路层地址不同,则马上->Stale
5. 在Stale状态若A要向B发送数据,发送数据,并从Stale->Delay,等待应用层的提
示信息,表示邻居可达。
6. 在Delay_First_Probe_Time(默认5秒)内,若有NA应答或者应用层的提示信息,则Delay->Reachable;无应用层提示信
息,Delay->Probe;
7. 在Probe状态,每隔RetransTimer(默认1秒)发送单播NS,发送MAX_UNICAST_SOLICIT 个后再等RestransTimer,有应
答则->Reachable,否则进入Empty,即删除表项,
重复地址检测(DAD):使用NS和NA交互的过程
如果1秒钟后没有检测到冲突,就发送non-solicited advertisement
若2个节点配置相同地址,同时作重复地址检测时,该地址处于Tentative状态,当一方收到对方发出的DAD NS,则接收方将不启用该地址
路由器发现
链路上的路由器会定期的发送RA(Router Advertisement)消息
•收到RA的主机将加入默认路由器列表中
路由器回应RA
主机接口初始化时发RS (Router Solicitation)消息,路由器回应RA。