什么是链路本地寻址?

网络工程 ip ipv4 ipv6 IP地址 ip-link-local
2021-07-05 14:56:11

我注意到 IPv4 保留169.254.0.0/16,IPv6 保留fe80::/10用于链路本地寻址。虽然我在 Wireshark 中看到 IPv6 使用fe80::/10地址和我的私有 IPv6 地址fd00::12与其他设备通信,但我从未见过169.254/16在 IPv4 中工作。

那么,链路本地寻址的目的是什么?

3个回答

我从未见过 169.254/16 在 IPv4 中工作。

如果 PC 没有从 DHCP 服务器收到 IP 地址,它会自动获取 169.254.xx/16 地址。如果您禁用家庭或实验室网络上的 DHCP 服务器并发出“ipconfig/release”和“ipconfig/renew”命令,您的 PC 将收到一个 169.254.xx 地址。

根据这篇文章

这些自分配的本地链路地址的目的是促进与子网内其他主机的通信,即使在没有外部地址配置(通过手动输入或 DHCP)的情况下。与 IPv6 不同,仅在没有正常可路由地址的情况下才建议实施 IPv4 链路本地地址。主机伪随机生成地址的最后两个八位字节以缓解地址冲突。由于某些本地网络协议(例如,Microsoft 的 NetBIOS)的广播特性,即使没有任何预先存在的地址方案知识,主机也可以相互检测。

当未指定其他 IP 地址时,链路本地地址用于两台主机(位于同一链路上)之间的通信。

简而言之,在启动时,操作系统会尝试通过各种方法在其接口上配置地址,例如 -

  • 手动配置
  • DHCP(DHCPv4 或 DHCPv6)
  • SLAAC(无状态自动配置)——IPv6 独有

如果操作系统无法通过任何自动方法在接口上配置地址,则它会从链路本地池中配置接口上的地址。

  • 169.254.0.0/16 -- IPv4地址空间中的链接本地地址池
  • fe80::/10 -- 在IPv6地址空间链接本地地址池

在 IPv4 中,每个接口过去都只有一个地址,而在 IPv6 中,我们可以在一个接口上拥有多个地址(如接口上的链路本地、全局地址)。

由于在 IPv4 中模仿在接口上有一个地址,您可能没有在接口上看到范围为 169.254.0.0/16 的地址。

操作 IPv6 需要链路本地地址,但 IPv4 不需要。Microsoft 等开发了使用 IPv4 链路本地寻址的 APIPA(自动私有 IP 寻址)标准,但并非所有操作系统都强制或支持该标准。我还看到人们通过手动分配和划分子网来滥用 IPv4 链接本地地址,这违反了RFC 3927,IPv4 链接本地地址的动态配置,这一个标准。

请阅读RFC 3927,IPv4 链路本地地址的动态配置

  1. 介绍

随着 Internet 协议的不断普及,能够使用熟悉的 IP 工具(例如 FTP)不仅用于全球通信,而且用于本地通信变得越来越有价值。例如,两个拥有支持 IEEE 802.11 无线局域网 [ 802.11 ] 的膝上型计算机的人可能会面并希望交换文件。这些人希望能够使用 IP 应用软件,而不必手动配置静态 IP 地址或设置 DHCP 服务器 [ RFC2131 ]带来的不便

本文档描述了一种方法,通过该方法,主机可以自动为接口配置 169.254/16 前缀中的 IPv4 地址,该地址对该接口上的链路本地通信有效。这在没有其他配置机制可用的环境中尤其有价值。为此,在 IANA 注册了 IPv4 前缀 169.254/16。IPv6 链路本地地址的分配在“IPv6 无状态地址自动配置”[ RFC2462 ] 中进行了描述。

使用 IPv4 链路本地地址的链路本地通信仅适用于与连接到同一物理(或逻辑)链路的其他设备进行通信。使用 IPv4 链路本地地址的链路本地通信不适用于与未直接连接到同一物理(或逻辑)链路的设备进行通信。

Microsoft Windows 98(及更高版本)和 Mac OS 8.5(及更高版本)已支持此功能。本文档标准化了用法,规定了主机和路由器如何处理 IPv4 链路本地地址的规则。特别是,它描述了路由器在接收源地址或目标地址中包含 IPv4 链路本地地址的数据包时的行为方式。关于主机,它讨论了声明和保护地址、在同一接口上维护本地链路和可路由 IPv4 地址以及多宿主问题。

在开发 IPv6 时,其中内置了许多 IPv4 可选的附加功能。链路本地寻址就是其中之一。每个 IPv6 接口都将获得一个本地链路地址,以便设备至少可以在本地链路上进行通信,并且作为内置功能,许多东西(例如路由协议)使用它在本地链路上进行通信。