我是靠谱客的博主 霸气咖啡,最近开发中收集的这篇文章主要介绍IPv6邻居发现缓存–第1部分,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

请加入我的行列,我们即将探究IPv6邻居发现缓存(Neighbor Discovery Cache )的秘密。 我确信我们会发现,我们的目标是更好地管理IPv6,而不需要不完整的知识或陈旧的文字!

最近,我一直在回顾Jeff Doyle的经典《TCP/IP路由》,它们和我记忆中的一样棒。 如果您有幸结识Jeff,那么他的写作风格就很像他在现实生活中的影响力:平易近人且友好。 与此相关的是,在他的文章中,他对主题进行了彻底而精确的回顾,而没有诉诸于冷冰冰的技术散文,后者更适合他正在为读者解释的实际rfc。

第1卷关于IPv6的章节特别好,尽管自最新版出版以来已经过去了十年多,但并不觉得过时。当然,技术内容并没有真正发生重大变化:例如,2005年左右的邻居发现(Neighbor Discovery )本质上是我们在2017年仍然在处理的邻居发现。不过,多伊尔和蔼可亲的写作风格,加上他对至关重要的内容的专业理解,让这一章成为人们经常学习和重温的绝佳选择。

实际上,正是Jeff关于IPv6 Neighbor Unreachability Detection的子章节提醒我,我可能需要对Neighbor Discovery缓存条目的各种可能状态进行更新。 因此,以无与伦比的Doyle先生及其著作为灵感,让我们回顾一下IPv6 Neighbor Discovery缓存及其各种状态。

但是在此之前,我们首先需要快速回顾一下IPv6邻居发现(ND)。 IPv6邻居发现通常被认为是IPv4地址解析协议(ARP)的替代品。最基本的IPv6 令居发现(ND)包含了一套负责将同一网段内或链路上第3层(IPv6)地址映射到第2层(链路层;最通常为以太网MAC)地址的机制。 同样,IPv6节点可以使用ND来发现链路上的路由器,以及了解哪些其他IPv6节点仍然可以访问(以及链路层地址是否已更改)。

所有这些功能都是通过邻居发现(ND)缓存来实现。 ND缓存的内容和格式与IPv4中的ARP缓存几乎相同。

IPv4 ARP cache from a Windows 7 VMIPv6 ND cache from a Ubuntu VM

回顾一下,IPv4 ARP依赖于使用第二层广播机制。 主机已经知道希望与之通信的设备的IP地址(例如,通过DNS),但仍然不知道该设备的链路层地址。 ARP将以目标IP地址为目的地的帧使用第二层广播地址发送到第二层(数据链路层)。 连接到该链接的所有设备都必定会收到和处理此广播帧,但是只有IP地址与目标匹配的设备才会响应请求的主机,响应中包含了目标链路层地址。 这就像上面显示的一样成为ARP条目:IPv4地址和与其对于的物理层地址。现在开始,将来以这个IP地址为目的地的包可以立即(即不再需要额外的ARP处理)用ARP缓存提供的正确的目的链路层地址来封装第2层数据帧.

这种机制的一个明显的缺陷是,每个主机必须处理所有的广播帧,不管这些帧是否实际上包含一个发送给该主机的ARP请求。局域网段上的主机越多,处理不需要的ARP请求所浪费的计算资源就越多。

IPv6 令居发现(Neighbor Discover)的功能与IPv4 ARP类似,但有一些关键的优化。 需要将第3层地址解析为第2层地址的基本方案与IPv4 ARP中的相同:IPv6主机知道目标的IPv6地址,但不知道其链路层地址。 但是,它没有像在IPv4中那样将ARP请求发送到广播目标地址,而是向被请求的节点多播目标地址发送了邻居请求消息。 该请求的节点多播地址是从目标主机上的第3层单播地址派生的(请参见下面的示例)。 只有侦听与其被请求节点多播地址相对应的多播组地址的主机(其本身对应于其第3层单播地址)才会以邻居通告消息进行响应,将其链路层地址提供给发出请求的节点,然后由该节点创建邻居 发现缓存条目。

IPv6 Neighbor Discovery Cache Part 1

IPv6 Neighbor Discovery Cache Part 2

由于网络显然会并且确实会发生变化,曾经可用的设备下线,新设备上线,所以ARP缓存和ND缓存都必须提供使它们的条目更新的机制,以及反映ND缓存条目当前状态的信息。

这就是IPv6邻居发现缓存的五种状态发挥作用的地方。它们是:

  1. Incomplete
  2. Reachable
  3. Stale
  4. Delay
  5. Probe

Incomplete 状态表示地址解析正在进行中,而邻居的链路层地址尚未确定。 严格来说,这意味着已发送了具有目标的被请求节点地址的邻居请求(Neighbor Solicitation)消息,但是尚未收到相应的邻居广告(Neighbor Advertisement)。

reachable 状态表示在一定的时间间隔(定义为 ReachableTime)内收到了关联的ND缓存条目的可达性确认。这个正面的确认可能是在邻居请求之后收到了邻居广告,或者上层协议成功地使用了ND缓存条目。

过期的ND缓存条目(Stale 状态)表示ReachableTime已过,之后才收到可到达性的后续确认。

延迟(Delay)状态表示,尽管ReachableTime已过期,但最近仍有上层协议将数据包发送到缓存项的地址。 在定义的时间间隔后,将发送邻居请求,并且将ND缓存条目更改为探测状态。 延迟状态仅为上层协议提供时间来可能地刷新缓存条目,而无需通过邻居请求。

如前所述,探测状态发生在发送邻居请求(可能是重新发送)直到收到响应时。(理想情况下,上层协议将在延迟阶段验证可达性)

现在,我们知道IPv6邻居发现缓存条目有哪些状态了,如何在流行的操作系统上观察它们? 我们将在第2部分中对此进行详细介绍!

 

最后

以上就是霸气咖啡为你收集整理的IPv6邻居发现缓存–第1部分的全部内容,希望文章能够帮你解决IPv6邻居发现缓存–第1部分所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部