下面几个命令都可以用来查看路由表

1
2
3
route -n
netstat -rn
ip route ls

route -n

1
2
3
4
5
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.79.2    0.0.0.0         UG    100    0        0 ens33
192.168.79.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

输出详解

route命令的各输出项:

Destination: 目标网络(network)或者目标主机(host), 为 default(0.0.0.0)时,表示这个是默认网关,当目标主机的 IP 地址或网络不在路由表中时,数据包就被发送到默认路由

Gateway: 网关地址, 表示并未设置网关地址,’0.0.0.0’用于无网关,即与本机同一ip段,不需要经过网关

Genmask: 掩码。其中’255.255.255’用于指示单一目标主机,’0.0.0.0’用于指示默认路由

Flags: 标记,可能的标记如下

U (route is up): 路由是活动的

H (target is a host): 目标是一个主机而非网络

G (use gateway): 需要透过外部的主机(gateway)来转递封包

R (reinstate route for dynamic routing): 使用动态路由时,对动态路由进行复位设置的标志

D (dynamically installed by daemon or redirect): 由后台程序或转发程序动态安装的路由

M (modified from routing daemon or redirect): 由后台程序或转发程序修改的路由

A (installed by addrconf): 由addrconf安装的路由

C (cache entry): 缓存的路由信息

! (reject route): 这个路由将不会被接受(主要用来抵御不安全的网络)

处理流程

如果目标ip为内网ip则会直接访问本地;否则查询路由表来判断

用route -n查看路由,如果路由条目里包含了目标ip的网段,则数据包就会从对应路由条目后面的网卡出去

如果没有对应网段的路由条目,则全部都走默认网关

如果网关也没有,则报错:网络不可达