如何理解 Mac 上的 ip route 的输出

如何理解 Mac 上的 ip route 的输出

我在 networkengineering.stackexchange.com 上询问了这个问题,并被标记为 offtoppic,但被告知在这里询问...因此如下:

我在 Mac 上运行时ip route show得到以下输出:

ip route show
default via 192.168.178.1 dev en0 -- line 1
127.0.0.0/8 via 127.0.0.1 dev lo0  -- line 2
127.0.0.1/32 via 127.0.0.1 dev lo0  -- line 3
127.94.0.1/32 via 127.94.0.1 dev lo0  -- line 4
169.254.0.0/16 dev en0  scope link  -- line 5
192.168.178.0/24 dev en0  scope link  -- line 6
192.168.178.1/32 dev en0  scope link  -- line 7
192.168.178.150/32 dev en0  scope link  -- line 8
224.0.0.0/4 dev en0  scope link  -- line 9
255.255.255.255/32 dev en0  scope link -- line 10

我正在尝试理解它的含义。我有一些想法,但我并不完全确定我是否正确,所以我将概述我对一些令人困惑的线条的解释,并希望更有知识的人能够确认我是否正确。如果错误,正确的解释是什么。

默认通过 192.168.178.1 dev en0 -- 第 1 行

这意味着如果我想转到目标 IP 地址(比如说216.58.214.4),我的路由表中没有此条目,因此我的设备将192.168.178.1使用接口 en0 通过(这是我的家庭调制解调器的 IP 地址)发送数据包。

上述内容中我不清楚的是这一点。这是否意味着数据包上的目标地址现在将从更改为216.58.214.4192.168.178.1或者,在这种情况下,如何更新目标和源地址,即216.58.214.4通过接口发送数据包eno,目的是通过192.168.178.1

127.94.0.1/32 通过 127.94.0.1 dev lo0 — 第 4 行

我的理解是,任何发往该 IP 地址的数据包都将通过该环回接口127.94.0.1/32发送出去。lo0127.94.0.1

现在我不确定为什么我的路由表中有一个条目127.94.0.1。我在谷歌上搜索了该 IP,它看起来与我曾经安装过但从未使用的 OpenVPN 有关(我改用 Tunnleblick)。还有为什么127.94.0.1?因为line 1我可以理解这192.168.178.1是我的调制解调器的 IP 地址,但不确定它127.94.0.1来自哪里

169.254.0.0/16 dev en0 范围链接--第 5 行

我的理解是,任何具有该范围内目标 IP 地址的数据包都169.254.0.0/16必须通过接口发送出去en0

这是第一行,包含scope link什么,到底是什么意思?

如果我猜测这scope link意味着在同一个子网上,那么我无法将其与范围相协调,169.254.0.0/16因为据我所知,我的本地子网是 192.168.178.0/24。我还在谷歌上搜索了与 DHCP 相关的 IP 地址169.254.0.0。我不确定如何理解这些信息。

192.168.178.150/32 dev en0 范围链接--第 8 行 我正在使用的 Mac 的 IP 地址是192.168.178.150我不确定为什么它也出现在路由输出中。

255.255.255.255/32 dev en0 范围链接--第 10 行

我不确定该怎么理解。我知道这255.255.255.255是广播地址。我以为我的设置的广播地址是192.168.178.255/32

那么为什么255.255.255.255不使用192.168.178.255。我还注意到,所有带有 的条目scope link都没有via <ip.address>部分。问题是,via <ip.address>就路由而言, 部分 到底是什么意思。

答案1

默认通过 192.168.178.1 dev en0 -- 第 1 行

这意味着如果我想转到目标 IP 地址(例如 216.58.214.4),我的路由表中没有该地址的条目,因此我的设备将使用接口 en0 通过 192.168.178.1(这是我的家庭调制解调器的 IP 地址)发送数据包。

是的,但请记住,“默认”不是特别的条目 – 它只是一条以 0.0.0.0/0 为目的地的普通路由。在整个表中拥有最短前缀长度 (/0) 才是使它成为最后手段路由的原因。

这是否意味着数据包上的目标地址现在将从 216.58.214.4 更改为 192.168.178.1?或者,在这种情况下,如何更新目标地址和源地址,即通过接口 eno 发送一个数据包,该数据包原本要发送到 216.58.214.4,目的是通过 192.168.178.1 发送

IP 报头将完全不发生改变。相反,鏈接層(以太网)报头将被更新,以将帧传送到网关的 MAC 地址。(这就是为什么网关本身必须是本地的 - 您不能指定位于另一个网关后面的网关。)

现在我不确定为什么我的路由表中会有 127.94.0.1 的条目。我在 Google 上搜索了该 IP,看起来它与我曾经安装过但从未使用过的 OpenVPN 有关(我改用 Tunnleblick)。另外,为什么是 127.94.0.1?对于第 1 行,我可以理解 192.168.178.1 是我调制解调器的 IP 地址,但不确定 127.94.0.1 来自哪里

嗯,TunnelblickOpenVPN 客户端...但是 IP 地址是由单个 VPN 服务器决定的,而不是由软件本身决定的。

但是,如果路由是 /32 并且指向lo(环回接口),那么我强烈猜测它是在您自己的机器上配置的 IP 地址。检查ifconfig

如果我猜测范围链接意味着在同一子网上,那么我无法将其与范围 169.254.0.0/16 相协调,因为据我所知,我的本地子网是 192.168.178.0/24。此外,我还在 Google 上搜索了 IP 地址 169.254.0.0,它与 DHCP 有关。我不确定如何理解这些信息。

169.254.0.0/16 范围由“zeroconf”系统使用,允许某人将一组计算机连接在一起没有可见的 DHCP 服务器 – 它们从该范围内自行分配地址并可以进行通信。

(Apple 深度参与了 Zeroconf(自动 IP 地址、Bonjour/mDNS 设备发现等)因为他们希望基于 IP 的 LAN 能够保留 AppleTalk LAN 早已拥有的相同便捷功能。)

因此,操作系统通常首先尝试常规 DHCP,如果没有收到任何 DHCP 请求,它不会直接禁用网络 - 它会设置一个 169.254.x 地址作为后备。有些操作系统会同时执行这两项操作,在等待 DHCP 响应时,系统会先设置一个 169.254.x 地址。

除此之外,多个 IP 范围(子网)共享同一个物理以太网是完全正常的,尽管并不常见。通常它们彼此之间不互相了解,并通过网关进行通信,但添加此类“作用域链接”路由会告知主机可以直接进行通信。

我不确定该怎么做。我知道 255.255.255.255 是广播地址。我以为我的设置的广播地址应该是 192.168.178.255/32。

不是——两者都是广播地址,一个是链路本地广播,另一个是子网定向广播。

前者始终向您所连接的同一链路发送广播以太网帧,无论您或接收者的 IP 配置如何。(IPv6 等效项为 ff02::1。)

后者可以是导演即从另一个子网远程发送 - 例如,如果位于 192.168.55.66 的主机向 192.168.178.255 发送数据包,则该数据包首先会作为普通单播数据包通过路由器,并且只有在到达连接到 192.168.178.0/24 的路由器后才会进行广播。(没有直接的 IPv6 等效项。)

我还注意到,所有带有范围链接的条目都没有 via <ip.address> 部分。问题是,via <ip.address> 部分在路由方面到​​底意味着什么。

它们的意思相反。根据定义,“on-link”目的地无需使用网关即可到达,因为它位于同一链路上。如果路由使用网关,通常是因为其目的地不在链路上。

  • “scope link” 意味着可以将目标 IP 地址直接解析为本地 MAC 地址(使用 ARP 或类似协议),并且数据包可以在以太网层传送到最终目的地。

  • “via <gateway.ip.addr>”指定网关的IP地址需要解析为MAC地址,并且数据包必须在以太网层传送到网关。

如果您使用 BSD 原生工具,netstat -rn您经常会看到同一列用于显示远程路由的网关地址或者在线链接路由的接口。

答案2

您编写问题的方式使其很难引用,而且这只是部分答案 - 但如下所示:

  1. 默认通过表示一条万能路由。如果没有找到更具体的路由,则使用此路由 - 在您的情况下将数据包发送到 192.168.178.1 - 您的系统知道如何到达的另一个路由器的地址。 路由表不会改变 IP 地址- 它们只是将流量引导到下一个位置。还有另一个与处理 NAT 的路由表无关的 (NAT) 系统。

  2. 不清楚为什么那里有一个 127.94 地址,但由于它与 lo 相关联,因此它与隧道或 VPN 无关。可能是其他程序在线程间进行一些奇怪的通信?

3.192.168.178.150/32。注意 /32 是单个地址。这表示机器应以不同于 192.168.1 子网中数据包的方式处理发往其 IP 地址的数据包。

相关内容