为什么路由器中的路由表将网关设置为其自身接口的 IP 地址

为什么路由器中的路由表将网关设置为其自身接口的 IP 地址

在下面的文章,路由器的网关设置为其自身接口之一的 IP 地址。下图显示了网络拓扑,其中可以看到路由器 2 的路由表,该路由表的一个网关设置为 172.161.1.1,即 eth1 的 IP 地址 -网络拓扑图

Q.1 为什么要这样做?网关不是应该是下一跳的 IP 地址吗?

问题 2 这与在网关字段输入 0.0.0.0 相同吗?

答案1

这是一个符号问题。

通常,此类条目代表“在线”路由,又称“连接”路由,即可通过该接口直接访问的网络没有任何网关。换句话说,就是本地子网。

然而,不同的操作系统,甚至不同的用户界面,有不同的方式来记录这样的路线。

  • Solaris 和 OpenBSD “netstat -rn” 使用接口的本地地址(没有“G”标志,表示这是非网关路由)。而且它也不显示网络掩码。

    $ netstat -rn
      Destination           Gateway           Flags  Ref     Use     Interface
    -------------------- -------------------- ----- ----- ---------- ---------
    default              192.168.1.1          UG        5  280064959 aggr1
    192.168.1.0          192.168.1.7          U         3   11962636 aggr1
    
  • 然而,Linux 上的相同“netstat -rn”使用 0.0.0.0,因为实际接口存储在单独的字段中。

    $ netstat -rn
    Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
    0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eno1
    192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eno1
    
  • FreeBSD 和 NetBSD 将显示网关是一个“链接”:

    $ netstat -rn
    Destination        Gateway            Flags    Refs      Use    Mtu Interface
    default            192.168.1.1        UGS         -        -      -  wm1
    192.168.1/24       link#2             UC          -        -      -  wm1
    192.168.1.8        link#2             UHl         -        -      -  lo0
    
  • 如今,Linux 使用一套完全不同的 CLI 工具;“ip route show”使用灵活的输出格式,在显示此类路由时简单地省略了“via <gateway_addr>”部分。

    $ ip -4 route show
    default via 192.168.1.1 dev eno1
    192.168.1.0/24 dev eno1
    
  • Cisco IOS 省略了网关并说“直接连接”(加上“C”标志):

    Cisco1760# show ip route
    Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
           D - EIGRP, EX - EIGRP external, O - OSPF, [...]
    
         10.0.0.0/8 is variably subnetted, 73 subnets, 4 masks
    O       10.147.241.56/30 [110/3] via 10.147.18.1, 09:35:51, FastEthernet0/0
    C       10.147.241.60/30 is directly connected, Serial1/1
    C       10.147.18.0/24 is directly connected, FastEthernet0/0
    
  • Windows 显示“正在链接”:

    C:\> route print
    Network Destination        Netmask          Gateway       Interface  Metric
              0.0.0.0          0.0.0.0    192.168.1.254    192.168.1.100     35
          192.168.1.0    255.255.255.0         On-link     192.168.1.100    291
    
  • Mikrotik RouterOS 将接口名称网关字段(加上显示“C”标志,表示“已连接”):

    > /ip route print detail
     1 A S  dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1
            scope=30 target-scope=10
     2 ADC  dst-address=192.168.1.0/24 pref-src=192.168.1.9 gateway=ether1
            distance=0 scope=10
    

答案2

路由器接口就是下一跳。企业级路由器通常拥有多个网络的多个接口,并在它们之间路由流量。

因此,如果一台 PC 想要连接到存储网络上的文件共享,则该 PC 的网关是 PC 网络上的路由器接口,下一跳是同一路由器的存储网络接口。您可以将此上下文中的“网关”视为用于到达特定网络的“出口接口”。

此场景与下一跳为上游的场景的唯一区别在于,所讨论的路由器在两个网络上都有接口。您可以轻松想象它们由两个不同的路由器托管,网关是该路由器上的接口。这两种情况在功能上是相同的。

相关内容