目录


概述

处于同一个网段的设备之间可以直接通信。不同的网段之间不能直接通信,必须通过网关(gateway)进行转发。路由就是 数据包从源端经过若干中间节点(也就是网关或下一跳)被传输到目的端所经过的 传输路径,它是一个网络层的术语。

router-example.png

简易的路由示意图

终端计算机 和 路由器、三层交换机等工作在网络层的设备 内部存在路由表(routing table),它们根据路由表决定将数据包发送到哪个设备,并且在发送完之后,就不再理会数据包的流向了,因为数据包将由下一个设备负责继续传输。整体来说,设备发送数据包的过程如下:

http://images.timd.cn/blog/2019/route.jpg

下面看一个例子:

route_2.jpg

路由的概念

如果PC 01想要将数据包传送到Server Bingo,那么它先根据自己的路由表,将数据包传送到Server A,Server A再继续将数据包传送到Server B,...,如此接力地传送,直到数据包到达Server Bingo。


路由表

通过上节的描述可知,路由至关重要,一旦设置有误,将造成设备无法正常地发送数据包。因此,下面将讲述设备的路由表。在Linux中,可以通过route命令查看路由表:

0> route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.30.50    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.108.152  172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.108.153  172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.55.21.198    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.78.199   172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.55.21.212    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.108.100  172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.118.199  172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.212.0.61     172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.55.21.254    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.55.21.239    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.212.0.62     172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
10.55.21.253    172.16.118.1    255.255.255.255 UGH   0      0        0 eth1
172.16.118.0    172.16.118.1    255.255.255.0   UG    0      0        0 eth1
172.16.118.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
219.142.118.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.48.0.0       219.142.118.1   255.255.0.0     UG    0      0        0 eth0
10.68.0.0       219.142.118.1   255.255.0.0     UG    0      0        0 eth0
10.74.0.0       219.142.118.1   255.255.0.0     UG    0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
192.168.0.0     172.16.118.1    255.255.0.0     UG    0      0        0 eth1
10.78.0.0       219.142.118.1   255.255.0.0     UG    0      0        0 eth0
172.16.0.0      172.16.118.217  255.240.0.0     UG    0      0        0 eth1
10.208.0.0      172.16.118.1    255.240.0.0     UG    0      0        0 eth1
100.64.0.0      172.16.118.1    255.192.0.0     UG    0      0        0 eth1
10.0.0.0        172.16.118.217  255.0.0.0       UG    0      0        0 eth1
0.0.0.0         219.142.118.1   0.0.0.0         UG    0      0        0 eth0

路由表中的每一行是一个路由条目(也叫路由表项)。通常情况下,一条路由信息,由四个要素组成:

Gateway是“0.0.0.0”表示:使用相应的网络接口,直接发送数据包,不需要通过网关进行转发。


延伸阅读

1, 关于ARP协议,请参考:http://timd.cn/network/arp/

2, 网关的IP一定要与设备的IP在同一个网段么?
当源主机访问目标主机时,它首先看两者的IP是否在同一个网段:

  1. 如果在同一个网段,则:
    1. 查看本地ARP缓存表中是否存在目的IP地址和目的MAC地址之间的映射关系
      1. 如果存在,则直接发送数据包
      2. 否则,向网络发送ARP广播,以查找与目的IP地址对应的MAC地址
        1. 如果查到了,则直接发送数据包
        2. 否则,不通信
  2. 如果不在同一个网段,则把目的地址转为网关地址,然后查找本地ARP缓存表,从步骤1.1继续执行

由此可以看出,源主机和网关通信的过程中,并不会检查两者是否在同一个网段,而是直接去查ARP缓存表或发送ARP广播,所以这种情况是可能通信的


参考文档