route命令参数详解,linux添加删除路由命令
linux系统的route命令用于显示和操作IP路由表(show / manipulate the IP routing table)。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在linux系统中,设置路由通常是为了解决以下问题:该linux系统在局域网中,局域网中有一个网关,能够让机器访问Internet,那么就需要将这台机器的ip地址设置为linux机器的默认路由。要注意的是,直接在命令行下执行route命令添加路由,不会永久保存,当网卡重启或机器重启之后,该路由就失效了;可以在/etc/rc.local(开机启动文件)中添加route命令来保证该路由设置永久有效。
1.命令格式:
route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric] [if Interface]]
2.命令功能:
route命令是用于操作基于内核ip路由表,它的主要作用是创建一个静态路由让指定一个主机或者一个网络通过一个网络接口,如eth0。当使用“add”或“del”参数时,路由表被修改,如果没有参数,则显示路由表当前的内容。
3.命令参数:
-n 不解析名字
-v 显示详细的处理信息
-F 显示发送信息
-C 显示路由缓存
-f 清除所有网关入口的路由表
-p 与add命令一起使用时使路由具有永久性
add:添加一条新路由。
del:删除一条路由。
-net:目标地址是一个网络。
-host:目标地址是一个主机。
netmask:当添加一个网络路由时,需要使用网络掩码。
gw:路由数据包通过网关。注意,你指定的网关必须能够达到。
metric:设置路由跳数。
Command 指定您想运行的命令 (Add/Change/Delete/Print)。
Destination 指定该路由的网络目标。
mask Netmask 指定与网络目标相关的网络掩码(也被称作子网掩码)。
Gateway 指定网络目标定义的地址集和子网掩码可以到达的前进或下一跃点 IP 地址。
metric Metric 为路由指定一个整数成本值标(从 1 至 9999),当在路由表(与转发的数据包目标地址最匹配)的多个路由中进行选择时可以使用。
if Interface 为可以访问目标的接口指定接口索引。若要获得一个接口列表和它们相应的接口索引,使用 route print 命令的显示功能。可以使用十进制或十六进制值进行接口索引。
4.使用实例:
实例1:显示当前路由
命令:
route
route -n
输出:
[root@prometheus01 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
[root@prometheus01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.172.2 0.0.0.0 UG 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
说明:
第3行表示主机所在网络的地址为192.168.172.0,若数据传送目标是在本局域网内通信,则可直接通过ens33转发数据包
第1行表示数据传送目的是访问Internet,则由接口ens33,将数据包发送到网关192.168.172.2
其中Flags为路由标志,标记当前网络节点的状态
Flags标志说明:
U Up,表示此路由当前为启动状态
H Host,表示此网关为一主机
G Gateway,表示此网关为一路由器
R Reinstate Route,使用动态路由重新初始化的路由
D Dynamically,此路由是动态性地写入
M Modified,此路由是由路由守护程序或导向器动态修改
! 表示此路由当前为关闭状态
备注:
route -n(-n表示不解析名字,列出速度会比route快)
实例2:添加网关
命令:
route add -net 224.0.0.0 netmask 240.0.0.0 dev ens33
输出:
[root@prometheus01 ~]# route add -net 224.0.0.0 netmask 240.0.0.0 dev ens33
[root@prometheus01 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 ens33
说明:
增加一条到达224.0.0.0的路由
实例3:屏蔽一条路由
命令:
route add -net 224.0.0.0 netmask 240.0.0.0 reject
输出:
[root@prometheus01 ~]# route add -net 224.0.0.0 netmask 240.0.0.0 reject
[root@prometheus01 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
224.0.0.0 - 240.0.0.0 ! 0 - 0 -
224.0.0.0 0.0.0.0 240.0.0.0 U 0 0 0 ens33
说明:
增加一条屏蔽的路由,目标地址为224.x.x.x将被拒绝
实例4:删除路由记录
命令:
route del -net 224.0.0.0 netmask 240.0.0.0
route del -net 224.0.0.0 netmask 240.0.0.0 reject
输出:
[root@prometheus01 ~]# route del -net 224.0.0.0 netmask 240.0.0.0
[root@prometheus01 ~]# route del -net 224.0.0.0 netmask 240.0.0.0 reject
[root@prometheus01 ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 ens33
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
实例5:删除和添加设置默认网关
命令:
route add default gw 192.168.172.100
route del default gw 192.168.172.100
输出:
[root@prometheus01 ~]# route add default gw 192.168.172.100
[root@prometheus01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.172.100 0.0.0.0 UG 0 0 0 ens33
0.0.0.0 192.168.172.2 0.0.0.0 UG 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
[root@prometheus01 ~]# route del default gw 192.168.172.100
[root@prometheus01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.172.2 0.0.0.0 UG 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.172.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
traceroute命令详解
traceroute是ICMP协议的一个重要应用,主要用来侦测源主机到目的主机之间所经过的路由的情况。traceroute使用icmp报文和ip首部中的TTL字段,原理很简单,开始时发送一个TTL字段为1的UDP数据报,而后每次收到ICMP超时报文后,再发送一个TTL字段加1的UDP数据包,以确定路径中的每个路由器,而每个路由器在丢弃UDP数据报时都会返回一个ICMP超时报文,最终到达目的主机后,由于ICMP选择了一个不可能的值作为UDP端口(大于30000)。这样目的主机就会发送一个端口不可达的ICMP差错报文。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机走的是什么路径。每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute,windows里为tracert。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多少时间。一条路径上的每个设备traceroute要测试3次,输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其IP地址。
在大多数情况下,在linux主机系统下,直接执行命令行:
traceroute hostname
而在window系统下是执行tracert的命令:
tracert hostname
1.命令格式:
traceroute [参数][主机]
2.命令功能:
traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40bytes,用户可另行设置。
具体参数格式:
traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
3.命令参数:
-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 开启或关闭数据包的正确性检验。
4.使用实例:
实例1:traceroute 用法简单,最常用的用法
命令:
traceroute www.baidu.com
输出:
[root@prometheus01 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
1 172.16.108.2 (172.16.108.2) 0.388 ms 172.16.108.3 (172.16.108.3) 0.362 ms 0.446 ms
2 172.16.90.10 (172.16.90.10) 0.082 ms 0.108 ms 0.136 ms
3 101.226.183.193 (101.226.183.193) 24.288 ms 24.338 ms 24.414 ms
4 114.80.98.21 (114.80.98.21) 0.746 ms 1.194 ms 114.80.98.17 (114.80.98.17) 0.800 ms
5 101.95.208.121 (101.95.208.121) 1.233 ms 101.95.208.253 (101.95.208.253) 2.304 ms 101.95.208.225 (101.95.208.225) 2.128 ms
6 101.95.218.221 (101.95.218.221) 1.346 ms 101.95.218.45 (101.95.218.45) 2.480 ms 101.95.218.49 (101.95.218.49) 1.824 ms
7 202.97.74.134 (202.97.74.134) 4.057 ms 202.97.71.14 (202.97.71.14) 4.197 ms 202.97.74.122 (202.97.74.122) 4.958 ms
8 58.213.94.146 (58.213.94.146) 7.496 ms 58.213.95.142 (58.213.95.142) 7.947 ms 58.213.94.138 (58.213.94.138) 8.492 ms
9 * * *
10 58.213.96.58 (58.213.96.58) 7.523 ms 58.213.96.122 (58.213.96.122) 7.345 ms 58.213.96.94 (58.213.96.94) 7.378 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
说明:
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 www.baidu.com
,表示向每个网关发送4个数据包。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;可以加-n参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,可以通过traceroute来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
实例2:跳数设置
命令:
traceroute -m 10 www.baidu.com
输出:
[root@prometheus01 ~]# traceroute -m 10 www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 10 hops max, 60 byte packets
1 172.16.108.3 (172.16.108.3) 0.623 ms 172.16.108.2 (172.16.108.2) 0.352 ms 0.432 ms
2 172.16.90.10 (172.16.90.10) 0.073 ms 0.109 ms 0.091 ms
3 101.226.183.193 (101.226.183.193) 1.244 ms 1.280 ms 1.362 ms
4 114.80.98.21 (114.80.98.21) 1.285 ms 114.80.98.17 (114.80.98.17) 7.011 ms 114.80.98.21 (114.80.98.21) 1.795 ms
5 101.95.208.125 (101.95.208.125) 4.859 ms 101.89.240.161 (101.89.240.161) 9.176 ms 101.95.208.125 (101.95.208.125) 4.903 ms
6 101.95.218.49 (101.95.218.49) 1.813 ms 101.95.218.237 (101.95.218.237) 1.959 ms 101.95.224.113 (101.95.224.113) 2.481 ms
7 202.97.71.6 (202.97.71.6) 5.670 ms 202.97.66.62 (202.97.66.62) 8.000 ms 202.97.19.246 (202.97.19.246) 4.367 ms
8 58.213.95.150 (58.213.95.150) 9.824 ms 58.213.95.158 (58.213.95.158) 8.650 ms 58.213.94.2 (58.213.94.2) 7.510 ms
9 * 58.213.95.122 (58.213.95.122) 7.106 ms *
10 58.213.96.58 (58.213.96.58) 7.829 ms 58.213.96.66 (58.213.96.66) 7.503 ms 58.213.96.102 (58.213.96.102) 8.195 ms
实例3:显示IP地址,不查主机名
命令:
traceroute -n www.baidu.com
输出:
[root@prometheus01 ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
1 172.16.108.3 0.643 ms 0.671 ms 172.16.108.2 0.387 ms
2 172.16.90.10 0.073 ms 0.103 ms 0.079 ms
3 101.226.183.193 1.378 ms 1.448 ms 1.527 ms
4 114.80.98.21 0.780 ms 114.80.98.17 0.752 ms 114.80.98.21 1.169 ms
5 101.89.240.145 0.993 ms 101.95.208.125 1.242 ms 101.95.208.237 2.226 ms
6 101.95.218.81 2.049 ms 101.95.218.197 1.792 ms 101.95.224.97 2.200 ms
7 202.97.29.114 6.779 ms 202.97.66.202 8.024 ms 202.97.71.6 9.209 ms
8 58.213.95.146 8.084 ms 58.213.94.106 7.459 ms 58.213.95.82 8.048 ms
9 * * *
10 58.213.96.78 9.442 ms 58.213.96.130 7.112 ms 58.213.96.70 8.025 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
[root@prometheus01 ~]# traceroute www.baidu.com
traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets
1 172.16.108.2 (172.16.108.2) 0.332 ms 172.16.108.3 (172.16.108.3) 0.392 ms 0.446 ms
2 172.16.90.10 (172.16.90.10) 0.085 ms 0.103 ms 0.088 ms
3 101.226.183.193 (101.226.183.193) 1.558 ms 1.640 ms 1.715 ms
4 114.80.98.17 (114.80.98.17) 1.601 ms 2.045 ms 114.80.98.21 (114.80.98.21) 0.723 ms
5 101.89.240.161 (101.89.240.161) 0.923 ms 101.95.208.229 (101.95.208.229) 1.233 ms 101.95.208.125 (101.95.208.125) 1.349 ms
6 101.95.218.225 (101.95.218.225) 2.181 ms 101.95.218.81 (101.95.218.81) 2.096 ms 2.117 ms
7 202.97.29.110 (202.97.29.110) 7.198 ms 202.97.19.254 (202.97.19.254) 4.183 ms 202.97.29.122 (202.97.29.122) 6.694 ms
8 58.213.94.82 (58.213.94.82) 9.700 ms 58.213.94.110 (58.213.94.110) 8.729 ms 58.213.95.138 (58.213.95.138) 7.452 ms
9 * * *
10 58.213.96.118 (58.213.96.118) 7.592 ms 58.213.96.54 (58.213.96.54) 8.163 ms 58.213.96.90 (58.213.96.90) 8.507 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
实例4:探测包使用的基本UDP端口设置6888
命令:
traceroute -p 6888 www.baidu.com
输出:
[root@prometheus01 ~]# raceroute -p 6888 www.baidu.com
traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets
1 172.16.108.2 (172.16.108.2) 0.379 ms 0.468 ms 172.16.108.3 (172.16.108.3) 0.443 ms
2 172.16.90.10 (172.16.90.10) 0.075 ms 0.097 ms 0.078 ms
3 101.226.183.193 (101.226.183.193) 1.168 ms 1.247 ms 1.364 ms
4 114.80.98.21 (114.80.98.21) 0.627 ms 114.80.98.17 (114.80.98.17) 0.569 ms 114.80.98.21 (114.80.98.21) 0.989 ms
5 101.95.208.229 (101.95.208.229) 1.283 ms * *
6 * 101.95.218.225 (101.95.218.225) 2.232 ms 101.95.218.217 (101.95.218.217) 2.096 ms
7 202.97.29.106 (202.97.29.106) 12.640 ms 202.97.101.42 (202.97.101.42) 6.908 ms 202.97.101.34 (202.97.101.34) 3.744 ms
8 * 58.213.95.158 (58.213.95.158) 6.631 ms 58.213.94.142 (58.213.94.142) 8.190 ms
9 * 58.213.94.126 (58.213.94.126) 7.514 ms *
10 58.213.96.110 (58.213.96.110) 7.517 ms 58.213.96.74 (58.213.96.74) 7.949 ms 58.213.96.50 (58.213.96.50) 7.467 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
实例5:把探测包的个数设置为值4
命令:
traceroute -q 4 www.baidu.com
输出:
[root@prometheus01 ~]# traceroute -q 4 www.baidu.com
traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets
1 172.16.108.2 (172.16.108.2) 0.366 ms 172.16.108.3 (172.16.108.3) 0.468 ms 0.547 ms 172.16.108.2 (172.16.108.2) 0.427 ms
2 172.16.90.10 (172.16.90.10) 0.081 ms 0.123 ms 0.117 ms 0.103 ms
3 101.226.183.193 (101.226.183.193) 1.295 ms 1.380 ms 1.500 ms 1.580 ms
4 114.80.98.21 (114.80.98.21) 0.687 ms 114.80.98.17 (114.80.98.17) 0.634 ms 114.80.98.21 (114.80.98.21) 1.046 ms 1.363 ms
5 101.89.240.165 (101.89.240.165) 2.067 ms 101.95.208.217 (101.95.208.217) 2.954 ms 101.89.240.173 (101.89.240.173) 2.065 ms 101.95.208.233 (101.95.208.233) 2.201 ms
6 101.95.218.225 (101.95.218.225) 1.991 ms 101.95.218.61 (101.95.218.61) 1.682 ms 101.95.218.73 (101.95.218.73) 2.530 ms 101.95.218.77 (101.95.218.77) 2.181 ms
7 202.97.29.106 (202.97.29.106) 8.079 ms 202.97.101.34 (202.97.101.34) 4.216 ms 202.97.101.50 (202.97.101.50) 3.779 ms 202.97.81.118 (202.97.81.118) 16.144 ms
8 58.213.95.146 (58.213.95.146) 7.450 ms 58.213.95.106 (58.213.95.106) 7.968 ms 58.213.94.110 (58.213.94.110) 9.789 ms 7.526 ms
9 * * 58.213.95.90 (58.213.95.90) 7.129 ms *
10 58.213.96.94 (58.213.96.94) 7.667 ms 58.213.96.54 (58.213.96.54) 8.129 ms 58.213.96.118 (58.213.96.118) 7.551 ms 58.213.96.102 (58.213.96.102) 8.385 ms
11 * * * *
12 * * * *
13 * * * *
14 * * * *
15 * * * *
16 * * * *
17 * * * *
18 * * * *
19 * * * *
20 * * * *
21 * * * *
22 * * * *
23 * * * *
24 * * * *
25 * * * *
26 * * * *
27 * * * *
28 * * * *
29 * * * *
30 * * * *
实例6:绕过正常的路由表,直接发送到网络相连的主机
命令:
traceroute -r www.baidu.com
输出:
[root@prometheus01 ~]# traceroute -r www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
connect: Network is unreachable
实例7:把对外发探测包的等待响应时间设置为3秒
命令:
traceroute -w 3 www.baidu.com
输出:
[root@prometheus01 ~]# traceroute -w 3 www.baidu.com
traceroute to www.baidu.com (180.101.49.11), 30 hops max, 60 byte packets
1 172.16.108.2 (172.16.108.2) 0.429 ms 172.16.108.3 (172.16.108.3) 0.338 ms 0.403 ms
2 172.16.90.10 (172.16.90.10) 0.071 ms 0.105 ms 0.093 ms
3 101.226.183.193 (101.226.183.193) 1.483 ms 1.561 ms 1.645 ms
4 114.80.98.21 (114.80.98.21) 9.103 ms 114.80.98.17 (114.80.98.17) 2.126 ms 114.80.98.21 (114.80.98.21) 13.809 ms
5 101.95.208.245 (101.95.208.245) 1.923 ms 101.89.240.173 (101.89.240.173) 4.183 ms 101.95.208.253 (101.95.208.253) 1.937 ms
6 101.95.224.97 (101.95.224.97) 2.216 ms 101.95.218.213 (101.95.218.213) 2.240 ms 101.95.218.205 (101.95.218.205) 1.466 ms
7 202.97.81.162 (202.97.81.162) 7.006 ms 202.97.29.126 (202.97.29.126) 7.590 ms 202.97.66.198 (202.97.66.198) 7.971 ms
8 58.213.95.106 (58.213.95.106) 7.314 ms 58.213.95.146 (58.213.95.146) 7.386 ms 58.213.94.82 (58.213.94.82) 8.424 ms
9 * 58.213.94.126 (58.213.94.126) 7.814 ms 58.213.94.134 (58.213.94.134) 8.626 ms
10 58.213.96.58 (58.213.96.58) 8.124 ms 58.213.96.110 (58.213.96.110) 7.296 ms 58.213.96.118 (58.213.96.118) 7.683 ms
11 * * *
12 * * *
13 * * *
14 * * *
15 * * *
16 * * *
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
Traceroute的工作原理:
Traceroute最简单的基本用法是:traceroute hostname
Traceroute程序的设计是利用ICMP及IP header的TTL(Time To Live)栏位(field)。首先,traceroute送出一个TTL是1的IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此datagram丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上,接着traceroute 再送出另一个TTL是2 的datagram,发现第2 个路由器...... traceroute 每次将送出的datagram的TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
Traceroute在送出UDP datagrams到目的地时,它所选择送达的port number 是一个一般应用程序都不会用的号码(30000 以上),所以当此UDP datagram 到达目的地后该主机会送回一个「ICMP port unreachable」的消息,而当traceroute 收到这个消息时,便知道目的地已经到达了。所以traceroute 在Server端也是没有所谓的Daemon 程式。
Traceroute提取发 ICMP TTL到期消息设备的IP地址并作域名解析。每次 ,Traceroute都打印出一系列数据,包括所经过的路由设备的域名及 IP地址,三个包每次来回所花时间。
tracert详解
格式:
tracert [-d] [-h maximum_hops] [-j host-list] [-w timeout] target_name
参数说明:
tracert [-d] [-h maximum_hops] [-j computer-list] [-w timeout] target_name
该诊断实用程序通过向目的地发送具有不同生存时间 (TL) 的 Internet 控制信息协议 (CMP) 回应报文,以确定至目的地的路由。路径上的每个路由器都要在转发该 ICMP 回应报文之前将其 TTL 值至少减 1,因此 TTL 是有效的跳转计数。当报文的 TTL 值减少到 0 时,路由器向源系统发回 ICMP 超时信息。通过发送 TTL 为 1 的第一个回应报文并且在随后的发送中每次将 TTL 值加 1,直到目标响应或达到最大 TTL 值,Tracert 可以确定路由。通过检查中间路由器发发回的 ICMP 超时 (ime Exceeded) 信息,可以确定路由器。注意,有些路由器“安静”地丢弃生存时间 (TLS) 过期的报文并且对 tracert 无效。
参数:
-d 指定不对计算机名解析地址。
-h maximum_hops 指定查找目标的跳转的最大数目。
-jcomputer-list 指定在 computer-list 中松散源路由。
-w timeout 等待由 timeout 对每个应答指定的毫秒数。
target_name 目标计算机的名称。