在Linux中,该命令
ip address add [...]
有一个scope论点。 手册页说范围是“这个地址有效的区域的范围”。 遵循法律范围列表:
这个“有效性”的“区域”是指什么?
来自http://linux-ip.net/html/tools-ip-address.html :
范围| 描述
全球| 无处不在
网站| 仅在本站点内有效(IPv6)
链接| 仅在此设备上有效
主机| 只有在这台主机(机器)
范围通常由ip实用程序确定,而不在命令行上明确使用。 (……)
以下引用来自Christian Benvenuti,O'Reilly着的“Understanding Linux network internals”一书:
“Linux中路由的范围是到目的地networking距离的一个指标,IP地址的范围表明了本地主机地址是多less,这在一定程度上也告诉你有多远该地址的所有者来自本地主机(…)。
主机:一个地址只有在主机本身进行通信时才具有主机范围。 在主机之外,这个地址是未知的,不能使用。 一个例子是环回地址127.0.0.1
链接:地址具有链接范围时,它是有意义的,只能在局域网内使用。 一个例子是子网的广播地址。
全球:地址可以在任何地方使用,具有全球范围。 这是大多数地址的默认范围。 (……)”
使用范围的主要原因似乎是具有多个接口和地址的主机必须决定何时使用哪个地址。 为了与自己通信,可以使用回送地址(范围主机)。 与其他地方的沟通,必须select不同的地址。
要开始理解范围的定义,首先应该知道链路本地和本地站点地址是什么。 一旦这些被清除,其他人将落实到位。 引用IPv6文档中的一些片段。
链接
链路本地地址应该用于寻址单个链路上的节点。 源自或注定为链路本地地址的分组不会被路由器转发。
一个例子是范围169.254 / 16。 当设备无法从DHCP获取有效的地址时,您可能已经看到过。
现场
站点本地地址应该在站点内使用。 路由器不会转发任何包含站点本地源或目标地址的数据包。
这仅适用于IPv6。 IPv4中没有站点本地地址的概念。
主办
主机地址是只存在于主机本身内的东西。 例如,127.0.0.1是一个通常分配给回送接口的主机地址。 回环接口没有外部连接,所以它的范围被限制在主机的范围之内。
全球
全球地址是您目前可能认为是“正常”地址的地址。 也就是说,一个单播地址,在外部networking上可见并且可以路由。
在fib_semantics.c中查找这些注释
704 * Every prefix is assigned a "scope" value: "host" is local address, 705 * "link" is direct route, 706 * [ ... "site" ... "interior" ... ] 707 * and "universe" is true gateway route with global meaning. 708 * 709 * Every prefix refers to a set of "nexthop"s (gw, oif), 710 * where gw must have narrower scope. This recursion stops 711 * when gw has LOCAL scope or if "nexthop" is declared ONLINK, 712 * which means that gw is forced to be on link. .... 719 * Normally it looks as following. 720 * 721 * {universe prefix} -> (gw, oif) [scope link] 722 * | 723 * |-> {link prefix} -> (gw, oif) [scope local] 724 * | 725 * |-> {local prefix} (terminal node) 726 */