简单理解Linux路由表

很多网络问题都跟路由有关,那么首先必须学会看懂路由表,本文将讲述如何读懂路由及如何决策.

在命令行下输入route -n 或 netstat -rn,就可以打印本机的路由表,我的如下:

Destination Gateway Netmask Flags Metric Ref Use Iface
192.168.161.0 192.168.161.1 255.255.255.0 UG 0 0 0 em1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
192.168.61.0 0.0.0.0 255.255.255.0 U 0 0 0 em2
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 em2
192.168.0.0 192.168.61.1 255.255.0.0 UG 0 0 0 em2
0.0.0.0 192.168.61.1 0.0.0.0 UG 0 0 0 em2
0.0.0.0 192.168.161.1 0.0.0.0 UG 0 0 0 em1

PS:我的电脑是双网卡,分别在192.168.61.0和192.168.161.0两个网段

————————————————–

1 字段解释

Destination 目的网段,最长匹配192.168.161.0 > 192.168.0.0 > 0.0.0.0,0可匹配任意数值
Gateway 所走网关,0.0.0.0表示无网关,即与本机IP同一网段,不需要经过网关(同一个局域网内2台主机通信不需要经过网关)
Genmask 掩码
Flags 标志,U – Up表示有效
G – Gateway表示连接路由,若无这个字段表示直连目的地址
H – Host表示目标是具体主机,而不是网段

2 路由匹配

路由表的作用就是指定下一级网关,那么根据路由表怎么确定下一级网关,这里就有一个匹配过程,匹配规则

*(1)优先级匹配(暂不讨论)

*(2)最长匹配

3 实例讲解

还是针对上面的路由表,为了方便表述,加上条目号字段

条目号 Destination Gateway Genmask Flags Metric Ref Use Iface
1 192.168.161.0 192.168.161.1 255.255.255.0 UG 0 0 0 em1
2 192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 em1
3 192.168.61.0 0.0.0.0 255.255.255.0 U 0 0 0 em2
4 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 em1
5 169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 em2
6 192.168.0.0 192.168.61.1 255.255.0.0 UG 0 0 0 em2
7 0.0.0.0 192.168.61.1 0.0.0.0 UG 0 0 0 em2
8 0.0.0.0 192.168.161.1 0.0.0.0 UG 0 0 0 em1

 

192.168.61.35 – 匹配条目3,即不需要经过网关
192.168.60.150 – 匹配条目6,需要经过网关192.168.60.1
www.baidu.com – 匹配条目7,这里需要说明下为何不匹配8?这是我实践的结果,后加的默认网关会在列表前面,即优先匹配。这个规则应该用于所有Destination一致的情况
192.168.161.113 – 匹配条目1,不是匹配条目2

Cisco中的PVID 和 Native Vlan

VLAN 1 是一个预设的 VLAN,所有 Cisco Switch 皆有 VLAN 1,而所有 port 亦预设放於 VLAN 1 之中。VLAN 1 之神圣在於它除了和其他 VLAN 一样可以传送 data 之外,还负责传送所谓 Control Plane Traffic,例如: VTP, CDP, PAgP 等。因此,基於保安考虑,VLAN 1 应避免给一般 HOST 使用,因为 HOST 利用 Packet Capture 软件可以轻易 Capture 到 Control Plane 的数据包.

值得一提的是,VLAN 1 预设也是 Trunk Link 上的一个 Native VLAN,Natvie VLAN 的意思是 Switch 把这个 VLAN 的 Packet 送上 Trunk Link 时,是不会放入 VLAN Tag 的,这就有点玩野了,刚刚不是说我们要把在 Packet 放一个 VLAN ID 好让其他 Switch 可以分辨吗? 怎麽现在又有个 Native VLAN 不用 VLAN ID? 细心想想,道理很简单,如果所有 2-4096 的 VLAN 都有 VLAN ID,只要 Trunk Link 两边的 Switch 都协议没有 VLAN ID 的 Packet 就是 VLAN 1,那麽 VLAN 1 就算没有 VLAN ID 也可以被区别出来。道理就像大家在不同颜色的数字球上写上数字,红色写 2,黄色写 3,蓝色写 4,那麽没有颜色的透明就写 1 吧

所以当 VLAN 1 的 Packet 通过 Trunk Link,用 Packet Capture 软件 Capture 也不会看到 VLAN ID 1,只会看见一个没有 VLAN ID 的封包 (即没有 Tag)。Native VLAN 的 ID 是可以设定的。

另外需要注意的是Trunk Link 两边的interface的native vlan 必须相同,否则会造成native vlan mismatch的问题

vlan 于 trunk 打标签的过程

交换机内部的对vlan tag的处理有以下几种情况:(按照数据包的转发方向)

1、从Access端口进入,然后从Access端口发出;则进入是带上vlan tag,发出时去掉vlan tag;

2、从Access端口进入,然后从Trunk端口发出;则进入时带上vlan tag,发出时保留vlan tag;

3、从Trunk端口进入,然后从Trunk端口发出;则vlan tag无变化,进来什么样出去还是什么样;

4、从Trunk端口进入,然后从Access端口发出;则进入时无变化,出去时去掉vlan tag;

其实很简单,从access口出来的都是不带tag的,从trunk口出来,都是带tag的

trunk的作用是可以让多个vlan通过,原理是对不同的vlan打上不同的标签以区分不同的vlan的数据帧