链路本地地址(Link-local address),又称连结本地位址是
计算机网络中一类特殊的地址, 它仅供于在
网段,或
广播域中的主机相互通信使用。这类主机通常不需要外部互联网服务,仅有主机间相互通讯的需求。
地址分配
对于使用
互联网协议 (IP)的网络,经常使用无状态地址自动配置。 在
IPv4中通常只用于分配在网络接口没有外部的、有状态的IP地址情况下,如
动态主机配置协议(DHCP),或当其他的配置方法无效时。 在
IPv6 中链路本地地址是强制性的。
网络中的应用层程序进程相互通讯时一般假设其地址是稳定的、可路由的、唯一的地址,但在由于链路本地地址的随机分配性质,可能会对应用层的进程带来麻烦。尽管一些应用层程序可以同时兼容链路本地地址和一般可路由地址,但是不建议在接口上同时配置这两种地址。由于链路本地地址一般随机自动分配,所以在整个通讯期间必须持续监测和处理冲突。
使用该类地址重要的守则之一是,禁止手动分配或者由
DHCP服务器进行分配,尽管在一个小型网络中可以人为保证地址的不重复性,但是手动分配的地址无法遵守自动配置检测和处理的相关规则,在DHCP环境下对地址要求使用
ARP或者
ICMP Echo请求来确定地址的可用性,但这并不是强制性的。所以在需要配置链路本地地址的环境中应该让主机自动配置该类地址。如果希望手动分配或者使用DHCP服务则应该使用在RFC1918中定义的
私有地址。
IPv4
地址选择
在
RFC3927中,
互联网工程任务组保留了地址块169.254.0.0/16。 从169.254.1.0到169.254.254.255的地址可以用于链路本地地址的分配。 第一块256个地址(169.254.0.0/16)和最后一块256地址(169.254.255.0/16)保留待将来使用,不会被分配给主机。网络主机在可用的地址范围内(169.254.1.0 - 169.254.254.255)随机选择一个地址,并使用
地址解析协议(ARP)确定该地址未被使用。 如果收到ARP回复,表示IP地址已经被使用, 将重新随机选择IP地址并重复该过程直到选定的IP可用。
随机选择实际上是使用伪随机发生器来生成不同的结果,所以必须选择不同的种子来生成,如MAC地址这种唯一值。而且由于MAC地址存储在网卡中且是固定的,所以用随机数产生的本地链路地址也基本是固定的,这种特性使得地址出现冲突的可能性降低,并且带来方便性。
在具有永久存储设备的主机中,每个接口链路本地地址可能被存储,在下次启动时这些地址应该被优先考虑。
当主机用ARP确认地址可使用后,还要向网络广播ARP通告向其他主机说明自己的地址,目的是为了确保链路上的其他主机不会有其他以前可能使用过相同地址的主机遗留的ARP缓存条目。
地址冲突检测
地址使用和转发规则
在主机的同一个接口中允许拥有多个IP地址,在已经配置过本地链路地址的接口上同样允许存在可路由地址,并且这两个地址都可用于通讯。可路由地址优先于本地链路地址。
在主机使用本地链路地址时,必须用ARP确定目的主机的链路段,这有时被称为“ARP一切”。
路由器等设备是禁止转发此类地址(目的地址)的数据包的。使用链路本地址的数据包的TTL值一般被设置为1,但在某些情况下可能是其他值。
由于链路本地地址被禁止转发到其他网段,以此类地址为目的地址的数据包将只会在本地网段或广播域传播,所以在这类的地址中是禁止划分子网的。但当主机同时拥有链路本地地址和可路由地址时,可以使用可路由地址来与外界主机通讯。
IPv6
Internet规模的快速扩大,特别是近十年来 ,Internet爆炸式增长使其走进了千家万户 ,人们的日常生活已经离不开它。同时 I n ternet上的节点不再单纯是计算机,还将包括 PD A 、移动电话、各种各样的终端甚至包括冰箱、电视等家用电器 ,这些设备都需要分配 IP地址 。 IPv4 则 只剩 下不 到 6%的 IP 地址 没有被分配,IPv6 作为新的力量走上了前台,从 20 世纪90 年代起,从理论界到用户 ,从设备厂商到 II)服务提供商,都逐渐清晰地听到 IPv6 作为新的力量走上历史舞台的脚步声。
IPv6 以其巨大的地址空间,世界上每个人可以拥有约 5.7x10 个 IPv6 地址来满足未来物流网与因特网的需要 ,其中 IPv6 链路本地地址作为 IPv6 单播地址的一种,在IPv6 邻居节点之间的通信协议中广泛使用,尤其在ND 协议与动态路由协议中作用十分重要,因此, IPv6 链路本地地址在网络安全中地位也十分特殊。
IPv6 链路本地地址结构分析
IPv6( Internet Protocol version 6,互联网版本协议6) ,是IETF( Internet Engineering Task Force,互联网工
程任务组) 设计的一套规范,是IPv4 的升级版本,其IP地址长度为128 位, IPv6 链路本地地址作为IPv6 地址的一种单播地址,其长度同样也是128 位。IPv4 地址有单播、组播、广播几种类型,与IPv4 地址分类方法相似的是, IPv6 地址也有不同的类型,包括单播( Unicast)、组播( Multicast) 、任播( Anycast) 地址, IPv6 的单播地址根据其作用范围的不同可以分为特殊地址( : : /128,: : 1 /128) 、全球单播( 2000: : /3) 、全球唯一本地( FC00: : /7) 、兼容地址( 0: 0: 0: 0: 0: 0: : /96,0: 0:0: 0: 0: FFFF: : /96) ,此外,属于单播地址的还有IPv4内嵌地址、NSAP 等,链路本地地址就是IPv6 单播地址的一种。
IPv6 的单播地址只能分配给一个节点上的接口,即寻址到该单播地址的数据报文最终会被发送到一个唯一的接口。一个主机接口上的128 位IPv6 单播地址一般可以看做成一个整体来代表这台主机。而当要表示这个主机上的接口所连接的网络时,将这个128位IPv6 单播地址分成两部分来表示,如图1 所示。
其中各字段含义如下。
(1) Subnet Prefix: n 位子网前缀,表示接口所属的网络。
(2) Interface ID: 接口标识,用以区分连接在一条链路上的不同接口。IPv6 链路本地地址是一种特殊的单播地址,这种地址的应用范围受限,只能在连接的同一本地链路的节点之间使用,它有固定的格式,图2 显示了链路本地地址的结构。
从图2 中可以看出,链路本地地址由一个特定的前缀和接口ID 两部分组成。它使用了特定的链路本地前缀FE80: : /64( 最高10 位值为“1111111010”) ,同时将接口ID 添加在后面作为地址的低64 位。这就是在IPv6 链路本地地址的基本结构。下面重点分析一下在IPv6 链路本地地址邻居发现协议和
动态路由协议数据报文中的实际应用。
IPv6 链路本地地址应用分析
链路本地地址在IPv6 邻居节点之间的通信协议———邻居发现协议( Neighbor Discovery Protocol,简称“ND”协议) 中广泛使用,特别是对连接在同一链路上的IPv6 节点间,链路本地地址架起了它们之间通信的桥梁,因为节点的每个接口都配置有链路本地地址,ND 协议正是通过携带有链路本地地址的IPv6 报文,才实现了数据包的准确传输。