跳过导航链接 | |
退出打印视图 | |
系统管理指南:IP 服务 Oracle Solaris 10 8/11 Information Library (简体中文) |
1. Oracle Solaris TCP/IP 协议套件(概述)
5. 配置 TCP/IP 网络服务和 IPv4 寻址(任务)
为支持 IPv6 而对 traceroute 命令进行的修改
25. Oracle Solaris 中的 IP 过滤器(概述)
IPv6 引入了相邻节点搜索协议,如 RFC 2461, Neighbor Discovery for IP Version 6 (IPv6) 中所述。有关相邻节点搜索的主要功能的概述,请参阅IPv6 相邻节点搜索协议概述。
本节讨论相邻节点搜索协议的以下功能:
相邻节点搜索功能定义了五种新的 Internet 控制消息协议 (Internet Control Message Protocol, ICMP) 消息。这些消息具有以下用途:
路由器请求-当接口变为启用状态时,主机可以发送路由器请求消息。这种请求要求路由器立即生成路由器通告,而不是在下次预定时间生成。
路由器通告-路由器通告其存在状态、各种链路参数和 Internet 参数。路由器会定期或在响应路由器请求消息时发出通告。路由器通告包含用于确定是否在链路中或用于配置地址的前缀以及建议的跃点限制值等。
相邻节点请求-节点发送相邻节点请求消息,以确定相邻节点的链路层地址,并验证相邻节点是否仍可以通过缓存的链路层地址进行访问。相邻节点请求还可用于检测重复地址。
相邻节点通告-节点发送相邻节点通告消息以响应相邻节点请求消息。节点还可以发送未经请求的相邻节点通告以公布链路层地址更改。
本节概述在自动配置过程中由接口执行的典型步骤。自动配置仅在能够进行多播的链路上执行。
启用能够进行多播的接口,例如,在启动某个节点上的系统时启用该接口。
节点在执行自动配置过程时首先为接口生成链路本地地址。
链路本地地址是根据接口的介质访问控制 (Media Access Control, MAC) 地址构造的。
节点发送相邻节点请求消息,其中包含暂定为目标的链路本地地址。
发送此消息的目的在于验证要使用的地址未由链路上的其他节点占用。在验证之后,可以将链路本地地址指定给接口。
如果建议的地址已被另一个节点使用,则该节点将返回一条相邻节点通告,声明该地址正在使用中。
如果另一个节点也正在尝试使用同一地址,则该节点也会针对该目标发送一条相邻节点请求。
相邻节点请求传输或重新传输的数量以及连续请求之间的延迟与链路有关。如有必要,可以设置这些参数。
如果某个节点发现它要使用的链路本地地址不唯一,则自动配置过程会停止。此时,您必须手动配置该接口的链路本地地址。
要简化恢复操作,可以提供一个备用接口 ID 来覆盖缺省标识符。这样,自动配置机制就可以使用这个可能唯一的新接口 ID 继续工作。
如果某个节点发现它要使用的链路本地地址唯一,该节点会将此地址指定给这个接口。
此时,该节点与相邻节点具有 IP 级别的连通性。其余的自动配置步骤只能由主机执行。
自动配置的下一个阶段涉及到获取路由器通告或者确定是否没有路由器存在。如果存在路由器,路由器会发送路由器通告,以指定主机应当执行哪种类型的自动配置。
路由器定期发送路由器通告。但是,相邻通告之间的延迟通常比执行自动配置的主机可以等待的时间要长。为了快速获取通告,主机可以向所有路由器多播组发送一个或多个路由器请求。
路由器通告还包含前缀变量,其中包含无状态地址自动配置用于生成前缀的信息。路由器通告中 "Stateless Address Autoconfiguration"(无状态地址自动配置)字段是单独处理的。"Address Autoconfiguration"(地址自动配置)标志是一个包含前缀信息的选项字段,它指示该选项是否可以应用于无状态自动配置过程。如果该选项字段确实适用,则其他选项字段中包含具有生命周期值的子网前缀。这些值指示根据前缀创建的地址保持优先和有效的时间长度。
因为路由器会定期生成路由器通告,所以主机会不断收到新通告。启用了 IPv6 的主机可处理包含在每个通告中的信息。主机会添加到这些信息中,还会刷新在以前的通告中收到的信息。
出于安全方面的考虑,在将每个地址指定给接口之前,必须测试它们是否唯一。对于通过无状态自动配置过程创建的地址,情况会有所不同。地址是否唯一主要由地址中基于接口 ID 创建的那一部分来确定。因此,如果经过验证,节点的链路本地地址唯一,则无需再逐一测试其他地址。这些地址必须是根据同一个接口 ID 创建的。与之相反,对于手动获取的所有地址,必须逐一测试它们是否唯一。某些站点的系统管理员认为执行重复地址检测得不偿失。对于这些站点,可通过设置每接口配置标志来禁用重复地址检测功能。
为了加速自动配置过程,主机可以生成其链路本地地址,并在等待路由器通告的同时验证该地址是否唯一。路由器可能会延迟几秒来响应路由器请求。因此,如果连续执行两个步骤,则完成自动配置所必需的总时间可能会非常长。
相邻节点搜索功能使用相邻节点请求消息来确定是否可以向同一个单播地址指定多个节点。相邻节点不可访问性检测功能检测相邻节点或到相邻节点的转发路径中是否有故障。该检测功能要求确认发送到某个相邻节点的包能够实际到达该相邻节点,还确定节点的 IP 层是否能够正确处理这些包。
相邻节点不可访问性检测功能使用来自以下两个来源的确认: 上层协议和相邻节点请求消息。如有可能,上层协议会确认某个连接正在执行转发。例如,当收到新的 TCP 确认时,上层协议会确认以前发送的数据已正确传送。
如果某个节点没有收到来自上层协议的肯定确认,该节点将发送单播相邻节点请求消息。这些消息会请求相邻节点通告,并根据此通告确认下一个跃点的可访问性。为了减少不必要的网络通信流量,探测消息只会发送到该节点将包实际发送到的相邻节点。
为了确保所有已配置的地址在特定链路上的唯一性,节点需要针对这些地址运行重复地址检测算法。在将这些地址指定给接口之前,必须先针对节点运行该算法。重复地址检测算法是针对所有地址执行的。
本节中描述的自动配置过程仅适用于主机,而不适用于路由器。因为主机自动配置过程使用由路由器通告的信息,所以路由器需要通过其他方法进行配置。但是,路由器可使用本章中描述的机制来生成链路本地地址。另外,在将地址指定给接口之前,路由器应当能够通过针对所有地址的重复地址检测算法。
代表目标地址接受包的路由器可以发出不可覆盖的相邻节点通告。路由器可以接受无法响应相邻节点请求的目标地址的包。目前未指定对于代理的使用。但是,代理通告有可能会用来处理诸如已移出链路的移动节点之类的情况。请注意,在处理未实现此协议的节点时,不应将使用代理作为一般机制。
具有复制接口的节点可能需要在同一个链路上的多个网络接口之间,对所收到的传入包进行负载平衡。这样的节点会将多个链路本地地址指定给同一个接口。例如,单个网络驱动程序可以将多个网络接口卡表示为具有多个链路本地地址的单个逻辑接口。
负载平衡的处理方式如下:允许路由器忽略来自路由器通告包的源链路本地地址。因此,相邻节点必须使用相邻节点请求消息来获知路由器的链路本地地址。于是,所返回的相邻节点通告消息可能包含链路本地地址,这些地址会因请求发出者而异。
已知其链路本地地址发生更改的节点可以发出未经请求的多播相邻节点通告包。该节点可以向所有的节点发送多播包,从而更新所缓存的已无效的链路本地地址。发送未经请求的通告仅是为了提高性能。相邻节点不可访问性检测算法可确保所有的节点都能够可靠地搜索新地址,尽管延迟时间可能会稍长些。
IPv6 相邻节点搜索协议的功能与下列 IPv4 协议的组合相对应: 地址解析协议 (Address Resolution Protocol, ARP)、Internet 控制消息协议 (Internet Control Message Protocol, ICMP)、路由器搜索和 ICMP 重定向。IPv4 对于相邻节点不可访问性检测没有公认的协议或机制。但是,主机要求确实为停用网关检测指定了一些可能的算法。停用网关检测所解决的问题是相邻节点不可访问性检测所能解决的问题的一部分。
以下是对相邻节点搜索协议和一组相关 IPv4 协议进行的比较。
路由器搜索是基础 IPv6 协议集的一部分。IPv6 主机无需针对路由协议执行 snoop 即可查找路由器。IPv4 使用 ARP、ICMP 路由器搜索和 ICMP 重定向来搜索路由器。
路由器通告功能允许自动配置地址。在 IPv4 中未实现自动配置过程。
相邻节点搜索允许 IPv6 路由器通告主机要在链路上使用的 MTU。因此,在缺乏完善定义的 MTU 的链路上,所有的节点都使用相同的 MTU 值。同一个网络上的 IPv4 主机可能具有不同的 MTU。
与 IPv4 广播地址不同的是,IPv6 地址解析多播分布到 40 亿 (2^32) 个多播地址上,这会大大减少目标以外的节点上与地址解析有关的中断。而且,非 IPv6 计算机根本就不应当中断。
多个站点前缀可以与同一个 IPv6 网络相关联。缺省情况下,主机可以从路由器通告中获知所有的本地站点前缀。但是,可以将路由器配置为忽略来自路由器通告的部分或全部前缀。在这种情况下,主机会假定目标位于远程网络上。因此,主机会向路由器发送通信。路由器随后可以根据需要发出重定向命令。
与 IPv4 不同的是,IPv6 重定向消息的接收者假定下一个新跃点位于本地网络上。在 IPv4 中,主机根据网络掩码会忽略那些指定下一个跃点不在本地网络上的重定向消息。IPv6 重定向机制与 IPv4 中的 Xredirect 功能相似。重定向机制在非广播链路和共享介质链路上非常有用。在这些网络上,节点不应当检查本地链路目标的所有前缀。
IPv6 相邻节点不可访问性检测改进了在路由器存在故障时的包传送能力。此功能改进了包在部分故障链路或分区链路上的传送能力,还改进了包在可更改其链路本地地址的节点上的传送能力。例如,移动节点可移出本地网络,而不会因存在过时的 ARP 高速缓存而失去任何连通性。IPv4 没有与相邻节点不可访问性检测相对应的方法。
与 ARP 不同的是,相邻节点搜索功能使用相邻节点不可访问性检测机制来检测半链路故障。相邻节点搜索功能可避免在没有双向连通性的情况下向相邻节点发送通信。
IPv6 主机使用链路本地地址来唯一标识路由器,从而可以维护路由器关联。对于路由器通告和重定向消息,这种路由器标识功能是必需的。如果站点使用新的全局前缀,主机需要维护路由器关联。IPv4 没有与路由器标识功能相对应的方法。
因为相邻节点搜索消息在接收时的跃点限制为 255,所以,相邻节点搜索协议不会受到来自链路外节点的欺骗攻击。与之相反,IPv4 链路外节点可以发送 ICMP 重定向消息。IPv4 链路外节点还可以发送路由器通告消息。
将地址解析放在 ICMP 层,使得相邻节点搜索比 ARP 更加独立于介质。因此可以使用标准的 IP 验证和安全机制。