06 - ip route和route -n的区别

时间:2024-03-05 22:07:28

1 ip route和route -n的区别


ip route 和 route -n 都是用于查看和管理Linux系统路由表的命令。但下面是它们的区别:

  • ip route:是Linux系统中的现代工具,它属于iproute2套件;它提供了更多的选项,可以更精确地控制路由表的管理。
  • route -n:是传统的路由管理工具,它属于net-tools套件,它通常用于旧版的Linux系统;它的功能相对较少,选项也较为有限。

1.1 ip route的用法

[root@master-01 home]# ip route
default via 192.168.217.2 dev ens33 
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 

【常用参数】解释:

  • default:代表该条路由为默认路由;
  • via ADDRESS:下一跳地址;
  • 默认路由是指当系统无法匹配其他路由时,将数据包发送到指定的下一跳地址。

  • dev NAME:输出的设备名称。
  • src ADDRESS:指定数据包的源 IP 地址。
  • metric:跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由。


【不常用参数】解释:

  • proto:路由协议标识符,指示此路由的路由协议类型;
  • kernel:表示该路由是由内核在自动配置期间安装的;
  • proto kernel 的意思是指这个路由项是在自动配置阶段由kernel创建的。

  • scope:指示路由表条目所覆盖的目的地范围;
  • link:表示在设备的网络段内,可以通过此链接进行通信;
  • scope link 的意思是 172.17.0.0/16 这个子网内的目标ip仅仅在 docker0 这个接口上有效。

  • onlink是Linux路由表中的一个参数,表示路由应该“假装下一跳直接连接到这个链路,即使它不匹配任何接口前缀”。这意味着路由器会假设下一跳地址是直接连接的,即使它实际上并不是。这通常用于特殊的网络配置,例如在某些隧道设置中。onlink参数通常用于在路由表中创建虚拟路由。

第一行:
default via 192.168.217.2 dev ens33
此条路由为默认路由,也就是任何无路由报文都通过ens33 经由默认网关192.168.217.2 来转发。


第二行:
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink
首先,从该条路由可以表明:Flannel正在使用VXLAN或类似的技术来实现覆盖网络,这条路由的意思是:目的地址10.3.1.0/24通过flannel.1设备上的10.3.1.0进行路由。"onlink"选项表示该路由表项指定的目的地址是直接连接的,不需要经过网关。


第三行:
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1

  • 172.17.0.0/16:这是目的地,表示所有目的IP地址在192.168.1.0到192.168.1.255之间的数据包。
  • dev eth0:这表示数据包将通过名为eth0的网络接口发送和接收。
  • proto kernel:这表示这个路由是由内核自动添加的。
  • scope link:这表示该路由仅对本地链路或直接连接的网络有效,而不可在公共互联网上路由。
  • src 172.17.0.1:这指定了发送数据包时要使用的源IP地址。

因此,这个路由表条目告诉系统将目的IP地址在172.17.0.0/16范围内的数据包发送到名为docker0的网络接口,并使用源IP地址172.17.0.1。


1.2 route -n的用法

[root@master-01 home]# ip route 
default via 192.168.217.2 dev ens33 
10.3.0.0/24 dev cni0 proto kernel scope link src 10.3.0.1 
10.3.1.0/24 via 10.3.1.0 dev flannel.1 onlink 
169.254.0.0/16 dev ens33 scope link metric 1002 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.217.0/24 dev ens33 proto kernel scope link src 192.168.217.129 
[root@master-01 home]# 
[root@master-01 home]# 
[root@master-01 home]# 
[root@master-01 home]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.217.2   0.0.0.0         UG    0      0        0 ens33
10.3.0.0        0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.3.1.0        10.3.1.0        255.255.255.0   UG    0      0        0 flannel.1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.217.0   0.0.0.0         255.255.255.0   U     0      0        0 ens33

参数解释:

  • Destination:目的网段;0.0.0.0 表示匹配任意网段。
  • Genmask:子网掩码
  • Gateway:默认网关;0.0.0.0 表示无网关,即与本地IP同一网段。
  • Flags:标志位,U - Up表示有效 G - Gateway表示链接路由,若无这个字段,表示直连目的地址(本机)
  • Metrics:跳数
  • Iface:出口网卡,如果不属于本网段,那么通过Iface端口发送到Gateway地址

第一行的意思:就是去往所有目标地址数据包由网关 192.168.217.2 通过网卡ens33来转发,Flags那一列中有G时才会使用Gateway。


2 iproute2 对决 net-tools


如今很多系统管理员依然通过组合使用诸如ifconfig、route、arp和netstat等命令行工具(统称为net-tools)来配置网络功能,解决网络故障。net-tools起源于BSD的TCP/IP工具箱,后来成为老版本Linux内核中配置网络功能的工具。但自2001年起,Linux社区已经对其停止维护。同时,一些Linux发行版比如Arch Linux和CentOS/RHEL 7则已经完全抛弃了net-tools,只支持iproute2。


如果你仍在使用net-tools,而且尤其需要跟上新版Linux内核中的最新最重要的网络特性的话,那么是时候转到iproute2的阵营了。原因就在于使用iproute2可以做很多net-tools无法做到的事情。


对于那些想要转到使用iproute2的用户,有必要了解下面有关net-tools和iproute2的众多对比。

在这里插入图片描述