本地和主路由表规则

本地和主路由表规则

我的路由表中有一些规则,当我在主机上配置接口时,内核会自动添加这些规则。

$ ip route show table local
broadcast 10.0.0.0 dev eth1 proto kernel scope link src 10.0.0.3
local 10.0.0.3 dev eth1 proto kernel scope host src 10.0.0.3
broadcast 10.0.0.255 dev eth1 proto kernel scope link src 10.0.0.3


$ ip route show table main
default via 10.0.0.3 dev eth1
10.0.0.0/24 dev eth1 proto kernel scope link src 10.0.0.3

我试图了解 Linux 路由是如何工作的,但我无法弄清楚本地路由表中两个广播条目的用途。例如,根据我的理解,定向到的数据包10.0.0.5根据主路由表中的第二条规则进行路由,而不是根据本地表中的规则进行路由。

那么,哪些数据包实际上是根据这些广播规则进行路由的呢?这两条规则什么时候用?

而且,这两个“广播规则“在本地表中/32

答案1

您对定向到的数据包10.0.0.5由主路由表中的第二条规则进行路由的理解是正确的。

除了将数据包发送到单个目的地(单播)之外,互联网协议 (IP) 还允许将数据包发送到物理网络(广播)的特定部分(网段)上的所有接收者。例如,DHCP 客户端就使用此功能:它们基本上向网络接口后面的所有本地连接的计算机广播一条消息“你好,我在这里,我需要一个 IP 地址”,并且具有 DHCP 服务器的计算机将做出响应。例如,对于以太网,在第 2 层有广播(即,仅以太网帧)。

子网中的最高地址被保留为广播地址。所以在子网中10.0.0.0/24,这个地址将是10.0.0.255。它可以被视为 /32 地址,但我更喜欢将其视为子网中的特殊地址。

当地的表包含这些广播地址,每个网络接口一个(注意scope link,即它仅到达此链路后面的网段上的接收者)。

它们还包含网络地址(子网中的最低地址)作为广播地址。我不确定具体原因,并且其他文件似乎也不确定:

网络地址和广播地址都作为广播类型地址输入到它们所绑定的接口上。从概念上讲,网络地址和广播地址之间的区别很重要,但实际上,其他网络设备以及 Linux 内核对它们的处理方式类似。

我将其解读为“某些程序将尝试使用网络地址而不是正确的广播地址,我们很宽容并允许他们这样做”。但这是我个人的解释。

相关内容