欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux路由表

程序员文章站 2024-02-17 10:02:46
...

Linux系统中可以定义从1-252个路由表,系统本身维护了4个路由表:

table number Description
0 系统保留表
253 default表,没有指定的默认路由都放在这个表里面
254 main表,没有指明路由表的所有路由都会放到这个表里面
255 local表,保存本地接口地址,广播地址,NAT地址,系统自己维护,不可以修改

查看一下文件/etc/iproute2/rt_tables,这里面保存了路由表序号和名字的关系

255     local
254     main
253     default
0       unspec

当然你可以通过命令添加自己定义的路由表。

1. 路由类型

依据子网掩码的类型可以分为三类,

路由类型 子网掩码 Flag字段 描述
主机路由 255.255.255.255 UH 指向单个IP地址或主机名的路由记录
网络路由 255.255.255.0 UN 代表主机可以到达的网络,比如说目的地址是192.19.12
默认路由 0.0.0.0 UG 当主机不能在路由表中查找到目标主机的IP时,数据包就发到默认路由上
  • U代表Route is Up
  • G代表使用网关
  • H代表目标是个主机(子网掩码是255.255.255.255)

2. 查看路由表

有两个命令,一个是route -n,另一个是ip route show,两个的输出是截然不同的,第二个命令默认显示main路由表的内容,

2.1. 查看main路由表

$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.99.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
0.0.0.0         192.168.99.254  0.0.0.0         UG    0      0        0 eth0

$ip route show
192.168.99.0/24 dev eth0  scope link 
127.0.0.0/8 dev lo  scope link 
default via 192.168.99.254 dev eth0

上面两种显示方式虽然不太一样,但是他们表达的意思还是一样的。

  1. 回环网络的路由
    127.0.0.0/8是回环网络的路由信息;
  2. 依据网络接口的IP而产生的路由信息
  • 192.168.99.0/24这一条中,定义了scope是link,代表这个网络是合法的并且是可以通过eth0这个口联通的;
  • 也就是说只要这个eth0的网卡是正常工作的,我们就可以经过这个口把数据发到192.168.88.0/24这个网段的任何IP地址;
  • 这条路由信息同时也对应主机上面一个实际的网络接口;
  1. 默认路由
  • 最后一条default是默认路由,如果找不到目标主机的IP,就通过eth0口发送到192.168.99.254地址;
  • 这里Flags中带的G是gateway的缩写,代表必须使用外部设备作为网关;
  • 这个gateway:192.168.99.254必须要在我们已经存在的路由环境中;

关于IP地址的scopt的描述,举个例子来说,比如说127.0.0.1这个地址属于local地址,它的scope就是host;比如说一个物理网卡分配了IP是192.168.56.101,这个地址就属于global的。

Scope 描述
global 全局合法
site 只在这个站点合法 (IPv6)
link 只在这个设备合法
host 只在这个host(机器)合法

2.2. 查看local路由表

$ ip route show table local
local 192.168.99.35 dev eth0  proto kernel  scope host  src 192.168.99.35 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.99.255 dev eth0  proto kernel  scope link  src 192.168.99.35 
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1

输出的信息有助于我们了解这个机器直接连接的IP网络的信息,以及了解这个路由表是怎么去处理一些特殊地址,比如说广播地址

  • 输出信息中的第一个字段告诉我们,这条消息是用于广播地址的,还是这个主机自己本地的地址(local);
  • 后面的字段告诉我们通过哪个设备来和目的地址通信: dev eth0;
  • 对于广播地址来说,它的目标是整一个IP网络,所以目标地址的scope定义为了link
  • 最后一个字段的关键字是src,这个是告诉内核当使用这个设备往外路由信息时,选择的源地址是哪个

3. 显示路由缓存

内核通常会参考路由缓存表来进行路由,可以通过一下命令来查看

$ ip route show cache 192.168.100.17
192.168.100.17 from 192.168.99.35 via 192.168.99.254 dev eth0 
    cache  mtu 1500 rtt 18ms rttvar 15ms cwnd 15 advmss 1460
192.168.100.17 via 192.168.99.254 dev eth0  src 192.168.99.35 
    cache  mtu 1500 advmss 1460