理解路由表条目

45

我想问一个关于 Linux 中 route 命令的问题。我已经在 Linux 终端输入了以下命令:

> route

并得到输出:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
link-local      *               255.255.0.0     U     1000   0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

我不理解。这是否意味着带有IP地址192.168.1.0的任何数据包都将从*网关发出? 为什么那里写的是DESTINATION,而不是源IP?因为从我的主机发送的数据包具有源IP 192.168.1.0吗?

有人能解释一下这个条目关于数据包进出我的主机的含义吗?


你的电脑IP地址是什么?我相信192.168.1.0通常是路由器。要查找您的IP,请在终端中键入“ip addr show”。 - Drew Galbraith
3个回答

70

我们逐行解释一下:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     1      0        0 eth0

这里说的是任何目标地址在192.168.1.0到192.168.1.255之间的数据包将通过eth0发送出去,不使用网关(除非更具体的路由覆盖了此路由)。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0

这个说明任何目的地是从192.168.122.0到192.168.122.255的数据包将会通过virbr0发送而不使用网关。(除非存在一个更具体的路由规则覆盖了此规则。)

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
link-local      *               255.255.0.0     U     1000   0        0 eth0

这意味着任何带有链路本地地址的数据包将通过接口eth0发送,而不需要网关。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0

这个意思是说如果一个数据包没有其他路由,它会通过eth0发送,并使用192.168.1.1作为网关。


6
为什么那很重要呢?如果你在波士顿想要去芝加哥,你选择的路线会因为你是从休斯顿出发还是孟菲斯出发而改变吗?数据包现在经过这台机器,否则这个机器不会将其路由。唯一重要的是它需要去哪里,谁关心它来自哪里? - David Schwartz
路由表确定本地目的地。(如果我们已经知道本地目的地,我们就不需要路由数据包了。我们已经有了答案。)路由表中所指的“目的地”是最终目的地。这个想法是你有一个数据包,它有一些最终目的地。你查阅路由表,根据数据包的最终目的地找到下一跳,然后确定使用哪个接口将数据包传递到下一跳。 - David Schwartz
默认路由的最后一行指出,任何目的地不匹配其他路由的数据包都会发送到 192.168.1.1,我猜这是你的路由器。一个发往 192.168.1.3 的数据包不会经过路由器,因为第一条路由规则指示不使用网关。 - David Schwartz
genmask和子网掩码是一样的吗? - Mitro
1
@AlessioMTX 是的。我不知道在“子网掩码”之外使用什么术语——我听说过一些理论,但似乎没有任何证据支持它们。这个术语被认为起源于描述路由的“普遍性”的事实。 - David Schwartz
显示剩余3条评论

13
  • 目的地 = 数据包要前往的网络地址

"默认"意味着如果在其他规则中找不到目的地,则使用此规则。

  • Genmask = 子网掩码

如果路由表中有多个适用于传出数据包的地址,则将使用子网掩码更高的规则。如果它们相等,则度量标准就会起作用,但这将根据所使用的协议而异。

  • 接口 = 主板连接

例如,我当前使用的笔记本电脑有三个接口:

  1. 以太网卡
  2. 无线卡
  3. 蓝牙

路由器通常对每一侧至少有2个接口,每个网络都有一个接口。对于大多数家庭路由器,1个接口属于您的家庭网络,另一个接口属于朝向ISP的外部网络。

  • 网关 = 下一跳

如果目标不在与发送方相同的网络上,则将将数据包发送到此处。

如果值为“*”或“On-link”或当前设备的地址...这些都意味着同一件事。这意味着数据包寻址给直接可达的设备。换句话说,它们在同一个网络中,因此网关实际上不会被使用,因为主机将知道目标的数据链路层(MAC)地址并能够直接发送到那里。这些值在本例中仅用于人类可读性。

至于发送数据包的过程:

  • 使用目的地和Genmask来确定传出数据包的目的地地址匹配哪些规则。
  • 使用接口来决定在该机器上要通过何种通信设备进行发送。
  • 网关是在同一网络上将要发送数据包的设备的地址(透过哪个设备)。

0

192.168.1.0(-255) 是本地目的地,一旦到达本地目的地(很可能是 192.168.1.1,您的路由器),它将被重新路由到外部 IP 目的地。这显示了您的计算机选择发送其数据包的方式,这相对简单,因为大多数情况下,离开计算机的数据包在发送到目的地之前都会经过路由器。

更有趣的路由表是您的路由器处理的内部和外部目的地的路由表。如果您调查此内容,您将能够学到更多关于路由的知识。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接