linux路由表详解-追踪路由

linux 路由表详解

通过 route 命令查看 Linux 内核的路由表:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 p5p1
default _gateway 0.0.0.0 UG 100 0 0 em1
10.150.0.0 10.150.54.126 255.255.0.0 UG 0 0 0 em2
10.150.54.0 0.0.0.0 255.255.255.128 U 0 0 0 em2
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 p5p1
link-local 0.0.0.0 255.255.0.0 U 1004 0 0 em1
link-local 0.0.0.0 255.255.0.0 U 1005 0 0 em2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-de7a849d77f1
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9bc222159381
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-2d803453c335
172.33.1.0 _gateway 255.255.255.0 UG 0 0 0 em1
172.33.9.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
172.33.137.0 0.0.0.0 255.255.255.0 U 0 0 0 p5p1


$route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.11.120.254 0.0.0.0 UG 0 0 0 p5p1
0.0.0.0 172.32.8.254 0.0.0.0 UG 100 0 0 em1
10.150.0.0 10.150.54.126 255.255.0.0 UG 0 0 0 em2
10.150.54.0 0.0.0.0 255.255.255.128 U 0 0 0 em2
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 p5p1
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1005 0 0 em2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-de7a849d77f1
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9bc222159381
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-2d803453c335
172.33.1.0 172.32.8.254 255.255.255.0 UG 0 0 0 em1
172.33.9.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
172.33.137.0 0.0.0.0 255.255.255.0 U 0 0 0 p5p1

各列字段说明:

含义
Destination 目标网络网关或目标主机。Destination 为 default(0.0.0.0)时,表示这个是默认网关,所有数据都发到这个网关(这里是172.11.120.254172.32.8.254
Gateway 本机的网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关;如不在同一个网段,可借助相关路由跳过去,如这里借助10.150.54.126网关跳到10.150.0.0 段的网络
Genmask 目标网络(Destination) 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0
Flags 标记,含义参考表格后面的解释
Metric 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。)
Ref 路由项引用次数 (不在Linux内核中使用。)
Use 此路由项被路由软件查找的次数
Iface 网卡名字,例如 em1

Flags 含义:

U 路由是活动的
H 目标是个主机
G 需要经过网关
R 恢复动态路由产生的表项
D 由路由的后台程序动态地安装
M 由路由的后台程序修改
! 拒绝路由

如何看这个路由表:

从右往左看:比如第三行: 10.150.0.0 | 10.150.54.126 | 255.255.0.0 | UG | 0 | 0 | 0 | em2
流量数据从本机的网卡em2出去到(交换机)网关10.150.54.126,借助这个网关将数据送往目标网络地址(网关)10.150.0.0
其中要明确地址10.150.54.12610.150.0.0 是能通讯的、否则流量是过不去的

ip route show查看

“ip route show” 是 Linux 中的命令,用于显示计算机上的路由表。路由表记录了计算机如何将数据包发送到网络中的其他计算机

1
2
3
4
5
6
7
8
9
$ip route show
default via 172.33.137.254 dev p5p1
default via 172.33.9.254 dev em1 proto static metric 100
10.150.0.0/16 via 10.150.54.126 dev em2
10.15.54.0/25 dev em2 proto kernel scope link src 10.15.54.10
169.254.0.0/16 dev p5p1 scope link metric 1002
172.3.1.0/24 via 172.13.9.254 dev em1
172.3.1.0/24 dev em1 proto kernel scope link src 172.3.1.12 metric 100
172.2.136.0/24 dev p5p1 proto kernel scope link src 172.2.136.12

上面路由记录的格式通常都是这样的:
<目的地> via <网关> dev <接口网卡> proto <协议> src <源地址或本机地址> <附加信息>

解析
<目的地> 目的地网络网关或主机,可以是具体的 IP 地址(如 10.15.54.50)、网络地址 (如10.15.54.0/25)或 default 等。default 会在没有其他符合的路由条目时使用;
via <网关> 可选字段,指的是到达目的地址需要使用的网关的 IP 地址发往这个路由条目对应的目的地的数据包,都会把这个网关设置为下一跳,经由此<via>发往最终目的地;比如:em1网卡 通过 网关via 172.13.9.254跳到 172.3.1.0/24网段 ,这样就实现了不同网段之间的通信
dev <接口网卡> 要发往本条目对应目的地时所需要使用的网络接口(设备网卡);
proto <协议> 添加本条条目的协议。常见的值有:kernel(本条目由内核添加)、static(手动添加)、dhcp(通过 DHCP 添加)、boot (在启动时添加)、redirect (由 ICMP 重定向添加)。此外,该值还可以是 bgpospf 这类动态路由协议。该值可能是整数值或者一个字符串值,字符串值都可以在 /etc/iproute2/rt_protos 中找到;
src <源地址> 在使用本条路由,向目的地发送数据包时所需采用的 IP 地址;
<附加信息> 代表多个可选项,常见的有:见下面

<附加信息>:

  • scope :定义这条路由的范围:
    • global 表示有网关的单播(unicast)路由
    • link 表示直连的单播或广播(broadcast)路由
    • host 表示本地(local)路由。该值可能是一个整数值或者是字符串值,字符串值应该能在 /etc/iproute2/rt_scopes 中找到
  • metric <整数>:表示路由的优先级,数字越小优先级越高。最小值为 0最大值为 65535
  • table <表名/数字>:如果一条路由不属于 main 表,则会在这里指出该路由所属的路由表


路由追踪:traceroute <ip地址>

该命令用于显示数据包到主机间的路径。

使用详解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$traceroute xiaoxin123.top

traceroute to xiaoxin123.top (198.181.38.205), 30 hops max, 60 byte packets
1 10.124.224.22 (10.124.224.22) 1.228 ms 11.63.120.22 (11.63.120.22) 0.990 ms 11.63.116.22 (11.63.116.22) 0.871 ms
2 11.63.116.121 (11.63.116.121) 1.287 ms 11.63.116.77 (11.63.116.77) 1.233 ms 11.63.116.117 (11.63.116.117) 1.267 ms
3 11.48.239.69 (11.48.239.69) 0.929 ms 11.88.168.21 (11.88.168.21) 5.739 ms 11.48.239.117 (11.48.239.117) 0.909 ms
4 45.112.220.37 (45.112.220.37) 1.256 ms 45.112.220.25 (45.112.220.25) 1.291 ms 45.112.220.77 (45.112.220.77) 1.971 ms
5 157.119.193.86 (157.119.193.86) 10.308 ms 117.49.54.74 (117.49.54.74) 35.224 ms 117.49.54.102 (117.49.54.102) 8.936 ms
6 11.94.143.102 (11.94.143.102) 9.224 ms 7.991 ms 117.49.37.246 (117.49.37.246) 7.707 ms
7 * * *
8 183.2.182.113 (183.2.182.113) 10.336 ms 9.631 ms 58.61.162.161 (58.61.162.161) 7.523 ms



# 数字(第几条) ip(当前跳的所在地址) 三个时间(RTT,也就是往返时延)
# 显示* * * 的情况 :
> 可能是路由器禁止了ICMP数据包
>如果从某跳开始所有的时间都成了星号,即超时,则网络故障很有可能就出现在了这一跳

相关命令参数:

traceroute [-dFlnrvx][-f<存活数值>][-g<网关>…][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
-d 使用Socket层级的排错功能。
-f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
-F 设置勿离断位。
-g<网关> 设置来源路由网关,最多可设置8个。
-i<网络界面> 使用指定的网络界面送出数据包。
-I 使用ICMP回应取代UDP资料信息。
-m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
-n 直接使用IP地址而非主机名称。
-p<通信端口> 设置UDP传输协议的通信端口。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-s<来源地址> 设置本地主机送出数据包的IP地址。
-t<服务类型> 设置检测数据包的TOS数值。
-v 详细显示指令的执行过程。
-w<超时秒数> 设置等待远端主机回报的时间。
-x 开启或关闭数据包的正确性检验。


简化的路由追踪命令: tracepath

1
2
3
4
5
6
7
8
9
10
11
12
$tracepath xiaoxin123.top
1?: [LOCALHOST] pmtu 1500
1: 10.124.224.22 0.844ms
1: 10.124.224.22 0.767ms
2: 11.63.116.117 1.122ms
3: 11.48.239.125 1.124ms
4: 45.112.220.37 1.194ms
5: 117.49.54.50 6.602ms
6: 117.49.37.250 7.319ms
7: no reply
8: 183.2.182.125 14.588ms asymm 7
Resume: pmtu 1500 hops 16 back 16

相关命令参数:

用法及参数
-n 显示IP,不显示主机
-l 初始化包的长度,默认65535
-b 打印主机名以及IP信息
-p 指定端口
-m 设置最大的跳跃节点数,默认是30

扩展

arp

  1. ARP 代表“地址解析协议”,是一种用于将 IP 地址映射到局域网上的物理 MAC 地址的协议
    ARP(地址解析协议)是一种网络协议,用于从 IP 地址中找出设备的硬件 (MAC) 地址
  2. 当设备想要与本地网络上的其他设备通信时使用它,发送设备使用 ARP 将 IP 地址转换为 MAC 地址。
  3. 设备发送一个 ARP 请求消息,其中包含接收设备的 IP 地址。 本地网段上的所有设备都会看到该消息,但只有具有该 IP 地址的设备会使用包含其 MAC 地址的 ARP 回复消息进行响应。 发送设备现在有足够的信息将数据包发送到接收设备。

ARP过程的解释:

假设主机 A 想与主机 B 通信。主机 A 知道主机 B 的 IP 地址,但不知道主机 B 的 MAC 地址。为了找出主机B的MAC地址,主机A发送一个ARP请求,列出主机B的IP地址作为目的IP地址,MAC地址为FF:FF:FF:FF:FF:FF(以太网广播) .交换机会将帧转发到所有接口。
网段上的每个设备都会收到该数据包,但由于目标 IP 地址是主机 B 的 IP 地址,因此只有主机 B 会回复 ARP 回复数据包,并列出其 MAC 地址。

Linux中的arp命令是什么

ARP 代表“地址解析协议”,是一种用于将 IP 地址映射到局域网上的物理 MAC 地址的协议。

arp常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1.查看 Linux 上的 ARP 表
arp -a
#输出:第一列是IP地址,第二列对应MAC地址。
gateway (172.16.31.253) at ee:ff:ff:ff:ff:se [ether] on eth0


#2. 指定 IP 地址来查找特定 IP 地址的 ARP 缓存条目
arp -a <IP地址>

#3. 删除arp表中指定的 IP 地址
arp -d 192.168.67.23

#4. 删除所有
arp -d *

#5. 添加静态条目将IP地址解析为物理地址
arp -s 192.168.67.15 00-a5-00-34-c3-09