RFC4862 IPV6无状态地址自动配置 阅读记录
最近接触IPV6。首次接触RFC文档。之前总是以为,rfc标准都是已经实现好的,不需要自己实现,直接用就好了。现在才知道,rfc只是说明了实现的流程。具体实现还是要自己实现的。颠覆了自己的认知。
下面就学习RFC 4862 关于ipv6无状态地址自动配置的学习记录如下。
- 第一章 引言
在IPV6中,主机在决定如何自动配置它的接口时采取步骤如下。
自动配置处理包括利用无状态自动配置生成链路本地地址(linklocal地址),生成全球地址,以及启动验证链路上地址唯一性的重复地址检测(Duplicate Address Detection)DAD程序。
IPV6无状态自动配置机制要求主机无需手工配置,路由器(如果有)仅最少配置,以及无需附加服务器。无状态机制允许主机,使用本地可获得信息和路由器通告信息的组合,生成它自己的地址。路由器通告前缀,前缀标识与链路关联的子网,而主机生成“接口标识符”,接口标识符唯一标识子网上的接口。组合二者形成地址。在没有路由器情况,主机仅能生成 linklocal 地址。然而,附着在相同链路上的节点间实现通信,链路本地地址足矣。
一般,如果不特别关注主机们使用的精确地址时,使用无状态方法,只要这些地址时唯一的并且使可适当路由的即可。另外,如果站点需要更加严密控制精确地址分配时,使用DHCPV6。无状态地址自动配置和DHCPV6可以同时使用。
为确保给定链路上所有配置的地址基本上是唯一的,在地址被分配到接口前,节点在地址上运行“重复地址检测DAD”算法。DAD算法在所有地址上执行,独立于这些地址是经无状态自动配置获得,还是经DHCPV6获得。
RFC 4862 规定的自动配置处理方法仅适用于主机,不适用于路由器。 - 第二章 术语
tentative address
临时地址。一个地址,在被分配到接口前,它在链路上的唯一性正在被验证。一般意义上,不认为临时地址分配给接口。接口抛弃收到的寻址到临时地址的分组,但是接受与临时地址的DAD相关的ND分组。
preferred address
优先地址。分配到接口的可由上层协议不受限制使用的地址。优先地址可用作发送到(或来自)该接口的分组的源地址(或目的地址)。
deprecated address
过时地址。分配到接口的地址,它的使用不受鼓励,但是不被禁止。在新的通信中应当不再用过时地址作为源地址,但是发送到或者来自过时地址的分组被正常交付。在这样的情况过时地址可以继续作为源地址在通信中使用,那里转变到优先地址会给特定上层活动(例如,现存TCP连接)带来困难。
valid address
合法地址。优先地址或过时地址。合法地址可作为分组的源地址或目的地址,并且可以期待互联网路由系统会将发送到合法地址的分组交付到它们的预期接收者。
invalid address
不合法地址。没有分配给任何接口的地址。合法地址在它的合法生存期到期后将变成不合法地址。不合法地址不应当作为分组的目的地址或源地址。对于前者,互联网路由系统将不能传递该分组;对于后者,分组的接收者将不能响应该分组。
preferred lifetime
优先生存期。合法地址处于优先状态的时间长度(即,到过期前的时间)。当优先生存期到期,地址变成过时地址。
valid lifetime
合法生存期。地址保持合法状态的时间长度(即,到不合法前的时间)。合法生存期必须大于等于优先生存期。合法生存期到期,地址将变成不合法。 - 第三章 设计目标
无状态自动配置设计,考虑到遵循下述目标:
在连接个别结算及到网络前应当不需要对它们进行手工配置。因此,需要一种机制,以便允许主机为它的每一个接口获得或生成唯一地址。地址自动配置假设每个接口能够提供那个接口的唯一标识符。在最简单的情况,接口标识符由接口的链路层地址构成。接口标识符可与前缀组合形成地址。 - 第四章 协议综述
综述当接口自动配置自身时发生的典型步骤。仅在有多播能力的链路上执行自动配置,仅当有多播能力接口被开启时,例如系统启动期间,才开始自动配置。通过生成接口的linklocal地址,节点(主机和路由器)开始自动配置处理。将接口标识符挂到熟知链路本地前缀上(FE80......),形成linklocal地址。
然而,能够分配linklocal地址到接口并开始使用前,节点必须尝试验证链路上没有另一个节点已经在使用这个“临时”地址。具体来说,节点发送用该临时地址为目标地址的NS消息。如果另一个节点已经在使用那个地址,另一个节点将返回NA说明此情况。如果另一个节点也在尝试使用相同地址,该节点也将发送用该临时地址为目标地址的NS消息。(重复)发送NS的精确次数,和连续请求间的延迟时间不同链路各不相同,可以由系统管理设置。
如果节点判定它的的临时linklocal地址不是唯一的,自动配置停止,接口需要手工配置。为了简化这种情况下的恢复,管理者应当能够提供替代接口标识符,该替代接口标识符以这样的方法取代默认标识符,该方法是:自动配置机制接着能够被启动,使用新的(假设是唯一的)接口标识符。作为替代,需要手工配置linklocal地址和其他地址。
一旦节点判定它的临时linklocal地址是唯一的,它分配该地址给接口。此时,节点与邻居节点有IP层(IP-level)连接。其余自动配置步骤仅由主机执行;自动配置下一阶段设计获得RA或者判定有没有路由器的存在。如果存在路由器,路由器们将发送规定主机能够进行何种自动配置的RA。注意,即使不存在路由器,仍然可以获得涉及地址配置的DHCPV6服务。
路由器定期发送RA,但是连续通告间的延迟时间通常比执行自动配置的主机希望等待的事件要长。为了快速获得通告,主机发送一个或多个RS给all-routers多播组。
RA也包括零个或多个prefix information选项,这些选项包括生成全球地址的无状态自动配置使用的信息。应当注意,主机可以同时使用无状态地址自动配置和DHCPV6.一个prefix information选项字段,“autonomous address-configuration flag”,指出无论如何该选项都适用于无状态自动配置。如果这是真的,附加的选项字段包括子网前缀,以及生存期值,根据该前缀剩余的优先生存期和剩余的合法生存期,指出地址生成已经有多长时间。
因为路由器定期生成RA,主机连续收到新的通告。主机按上面所述处理诶个通告中包含的信息,对前面通告收到的信息添加新内容,和更新前面通告信息。默认情况,出于安全考虑,所有地址在被分配接口前,应当接受唯一性检验。对所有手工获得的,经无状态地址自动配置获得的,或经DHCPV6获得的地址,检验应当分别执行。为了适应有些站点认为执行DAD的开销超过获益,通过在管理上设置每个接口配置标记,可以关闭DAD应用。
为了加速自动配置处理,主机可以将生成它的linklocal地址(并检验唯一性),与等待RA同时进行。因为路由可能延迟几秒响应RS,如果两个步骤前后执行,完成自动配置需要的总时间会有一定延长。 - 第五章 协议标准
节点必须允许系统管理为每个有多播能力的接口配置下面这个与自动配置有关的变量:
节点配置变量--> DupAddrDetectTransmits
当在临时地址上执行 Duplicate Address Detection 时, 发送的连续 Neighbor Solicitation消息数目。 值为 0 表示没有在临时地址上执行 Duplicate Address Detection。值为 1 表示仅发送一次,没有后续重复发送。
默认值: 1,但是可由介绍在特定链路类型上 IP 发送相关问题的文件([RFC-2464])中规定的链路类型特定值取代。
自动配置也假设存在如[RFC-4861]定义的变量RetransTimer。出于自动配置考虑,RetransTimer规定在Duplicate Address Detection期间执行的连续Neighbor Solicitation发送间的延迟(如果DupAddrDetectTransmits大于1),以及发送最后一个NeighborSolicitation之后,结束Duplicate Address Detection处理之前,节点等待时间。
与自动配置有关的结构
主机将地址列表和这些地址对应的生存期放在一起维护。地址列表既包括自动配置的地址,也包括手工配置的地址。
链路本地地址生成
一旦开启接口,节点就形成链路本地地址。接口在下述任何事件之后可以变为开启状态:
-- 系统启动时接口被初始化。
-- 接口暂时出故障后或接口被系统管理临时关闭后接口被重新初始化。
-- 接口第一次附着到链路。包括由于无线网络访问点的改变导致动态改变节点所附着的链路。
-- 在被管理上关闭之后系统管理又开启接口。
链路本地地址由 (适当长度的) 熟知链路本地前缀 (well-known link-local prefix)FE80::0[RFC-4291]和下述接口标识符的组合形成:
--地址最左边那些“前缀长度”比特是链路本地前缀比特。
--地址中到链路本地前缀右边的比特被设置为全 0。
--如果接口标识符长度为 N 比特,地址最右边 N 比特被接口标识符取代。
注意,链路本地地址有无限的优先生存期和合法生存期;它绝不会超时。
重复地址检测
重复地址检测(Duplicate Address Detection)必须在所有单播地址上执行, 是在这些地址被分配到接口前执行,无论这些地址是通过无状态自动配置, DHCPv6,或手工配置获得的,但有下述例外:
-- 如果接口的 DupAddrDetectTransmits 变量被设置为 0,不执行 Duplicate Address Detection。
-- 必须不在任播地址上执行 Duplicate Address Detection (注意, 在语义上任播地址与单播地
址区分不开)。
检测重复地址的程序使用 Neighbor Solicitation 和 Neighbor Advertisement 消息,如下面所述。 如果在程序执行过程中发现重复地址,不能分配该地址给接口。如果地址是从接口标识符推演出的,需要分配新的标识符给那个地址,或者那个接口的所有 IP 地址需要手工配置。注意,检测重复的方法不完全可靠, 可能仍然存在重复地址(例如,如果在执行 Duplicate Address Detection 时链路被分割)。
原文地址:http://blog.51cto.com/qiaopeng688/2096843
时间: 2024-11-10 16:03:54