linux 路由表详解-追踪路由
linux 路由表详解
通过 route 命令查看 Linux 内核的路由表:
$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.254 和172.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.126
与10.150.0.0
是能通讯的、否则流量是过不去的
ip route show查看
"ip route show" 是 Linux 中的命令,用于显示计算机上的路由表。路由表记录了计算机如何将数据包发送到网络中的其他计算机
$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 重定向添加)。此外,该值还可以是 bgp 、ospf 这类动态路由协议。该值可能是整数值或者一个字符串值,字符串值都可以在 /etc/iproute2/rt_protos 中找到; |
src <源地址> | 在使用本条路由,向目的地发送数据包时所需采用的 IP 地址; |
<附加信息> | 代表多个可选项,常见的有:见下面 |
<附加信息>:
-
scope
:定义这条路由的范围:
global
表示有网关的单播(unicast)路由
link
表示直连的单播或广播(broadcast)路由
host
表示本地(local)路由。该值可能是一个整数值或者是字符串值,字符串值应该能在/etc/iproute2/rt_scopes
中找到 -
metric <整数>:表示路由的优先级,数字越小优先级越高。
最小值为 0
,最大值为 65535
-
table <表名/数字>:如果一条路由不属于 main 表,则会在这里指出该路由所属的路由表
路由追踪:traceroute <ip地址>
该命令用于显示数据包到主机间的路径。
使用详解:
$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
$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
- ARP 代表“地址解析协议”,是一种用于将 IP 地址映射到局域网上的物理 MAC 地址的协议
ARP(地址解析协议)是一种网络协议,用于从IP
地址中找出设备的硬件 (MAC) 地址
。- 当设备想要与本地网络上的其他设备通信时使用它,发送设备使用
ARP
将 IP 地址转换为 MAC 地址。- 设备发送一个 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.查看 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