快捷搜索: 王者荣耀 脱发

RFC 4861 IPv6邻居发现 阅读笔记(一)

注:本文大量借鉴了 weicq2000 翻译的RFC 4861 的中文版,在此表示感谢!!

RFC 4861定义了IPv6邻居发现协议,同一链路上的IPv6节点使用邻居发现协议去发现彼此的存在,去确定彼此的链路层地址,去寻找路由器,去维护到活动邻居的路径的可达性信息。

on-link:如果一个地址满足一下的条件,那么该节点认为该地址是on-link地址:

--被这个链路(节点所在的链路)的其中一个前缀(例如,由Prefix Information选项中on-link标记标识)覆盖,或者,

--临近的路由器规定该地址为Redirect消息的目标,或,

--收到针对该(目标)地址的Neighbor Advertisement消息,或 // 在 RFC 5942 被废除

--从该地址收到任何Neighbor Discovery消息。 // 在 RFC 5942 被废除

特别注意:在 RFC 5942 IPv6子网模型:链路和子网前缀间的关系 中,以上条件中的后两个已经被废除,必须不能再将后两个条件作为on-link的判定标准。

地址类型:

所有节点多播地址(all-nodes multicast address),到所有节点的链路本地范围地址,FF02::1。

所有路由器多播地址(all-routers multicast address),到所有路由器的链路本地范围地址,FF02::2。

请求-节点多播地址(solicited-node multicast address),链路本地范围地址,它是将请求的目标的地址经过特定函数计算得到。借助于此函数,仅在最高有效位不同(例如,由于与不同提供者关联的多个前缀)的IP地址,被映射到相同的请求-节点地址,于是减少了节点在链路层必须加入的多播地址数目。关于请求-节点多播地址,我还会专门写博客讲我自己的理解。

未指定的地址(unspecified address),一个保留的地址值,用来表示没有地址。不能被用作目标地址,但当不知道自己的地址或没有地址时可以用作源地址。

邻居发现协议定义了五种不同的ICMP包类型:路由请求(Router Solicitation)和路由告知( Router Advertisement)消息,邻居请求(Neighbor Solicitation)和邻居告知(Neighbor Advertisements)消息,以及重定向(Redirect message)消息。

路由请求(Router Solicitation)消息:当一个接口变为可用时,主机可以发出路由请求消息来要求路由器马上生成路由告知( Router Advertisement)消息,而不是等它的下一个固定生成时间。

路由告知( Router Advertisement)消息:路由器周期地用此消息通告它们的存在及各种链路参数和互联网参数,或响应Router Solicitation消息。Router Advertisements包括前缀,这些前缀用于确定是否另一个地址共享相同链路(on-link确认)和/或地址配置,建议的跳数限制值,等等。

邻居请求(Neighbor Solicitation)消息:节点发送该消息以确定某个邻居的链路层地址,或者用来验证通过缓存里的链路层地址是否依然能够到达该邻居。也经常用来做地址重复检测。

邻居告知(Neighbor Advertisements)消息:邻居请求消息的回应。节点也可以发送非请求的Neighbor Advertisements,通知链路层地址改变。

重定向(Redirect message)消息:由路由器使用,用于通知主机有到目的地的较好的第一跳。

注意,目的地址可能是on-link的,即使它没有被任何通告的on-link前缀覆盖。在这种情况下,路由器可以发送一个重定向消息来通知节点目的地是邻居。

节点通过多播Neighbor Solicitation(它要求目标节点返回自己的链路层地址)完成地址解析。Neighbor Solicitation消息被多播到目标地址的请求-节点多播地址。此目标用单播Neighbor Advertisement消息返回它自己的链路层地址。一对请求-响应分组,对于解析相互链路层地址的初始者和目标来说是足够的;初始者在Neighbor Solicitation中包括它的链路层地址。


经验分享 程序员 微信小程序 职场和发展