Linux之traceroute命令
显示数据包到主机间的路径,traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。
通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。
traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称(如有的话)及其ip地址。
Traceroute 的实现一共有三种方法,分别是:
- TCP traceroute(使用 tracetcp 程序可以实现)
- UDP traceroute(Cisco 和 Linux 默认情况下使用)
- ICMP traceroute ( MS Windows 默认情况下使用)
命令格式
traceroute(选项)(参数)
命令选项
- -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:开启或关闭数据包的正确性检验。
命令参数
主机:指定目的主机IP地址或主机名。
简单用法
> traceroute rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets1 192.168.0.1 (192.168.0.1) 1.242 ms 0.949 ms 2.494 ms2 192.168.1.1 (192.168.1.1) 1.337 ms 1.101 ms 0.953 ms3 100.64.0.1 (100.64.0.1) 4.663 ms 28.187 ms 3.346 ms4 111.175.227.145 (111.175.227.145) 7.321 ms 12.203 ms 10.503 ms5 111.175.210.221 (111.175.210.221) 4.810 ms 7.400 ms 3.673 ms6 202.97.17.5 (202.97.17.5) 20.276 ms202.97.98.25 (202.97.98.25) 38.174 ms202.97.17.1 (202.97.17.1) 28.942 ms7 * 113.96.5.158 (113.96.5.158) 26.277 ms *8 * * *9 14.18.199.106 (14.18.199.106) 22.518 ms 20.543 ms 22.583 ms
10 * * 14.18.199.74 (14.18.199.74) 22.378 ms
11 * * *
12 * * *
13 * * *
14 203.195.152.245 (203.195.152.245) 25.766 ms 21.599 ms *
记录按序列号从1开始,每个记录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是ms,其实就是-q的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果用traceroute -q 4 rumenz.com,表示向每个网关发送4个数据包。
有时我们traceroute一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n参数来避免DNS解析,以IP格式输出数据。
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
设置跳数
> traceroute -m 10 rumenz.com
traceroute to rumenz.com (203.195.152.245), 10 hops max, 52 byte packets1 192.168.0.1 (192.168.0.1) 1.829 ms 0.746 ms 1.684 ms2 192.168.1.1 (192.168.1.1) 2.326 ms 3.365 ms 1.203 ms3 100.64.0.1 (100.64.0.1) 4.659 ms 5.613 ms 4.055 ms4 111.175.227.145 (111.175.227.145) 12.399 ms 7.991 ms 8.013 ms5 111.175.210.221 (111.175.210.221) 6.997 ms 10.958 ms 4.180 ms6 202.97.98.29 (202.97.98.29) 21.216 ms202.97.98.25 (202.97.98.25) 21.428 ms *7 * * *8 * * *9 * 14.18.199.106 (14.18.199.106) 22.443 ms 20.399 ms
10 * * *
显示IP地址,不查主机名
> traceroute -n rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets1 192.168.0.1 2.484 ms 1.271 ms 0.813 ms2 192.168.1.1 1.320 ms 1.103 ms 1.075 ms3 100.64.0.1 2.914 ms 4.107 ms 4.372 ms4 111.175.227.145 7.279 ms 7.915 ms 9.007 ms5 111.175.210.221 3.729 ms 4.100 ms 4.160 ms6 202.97.29.49 25.172 ms202.97.34.66 23.798 ms202.97.29.53 18.034 ms7 * * *8 * * *9 * * *
10 * * *
11 * * *
12 * * *
13 * * *
14 * 203.195.152.245 21.635 ms 22.201 ms
把探测包的个数设置为值4
> traceroute -q 4 rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets1 192.168.0.1 (192.168.0.1) 2.265 ms 2.010 ms 0.669 ms 1.103 ms2 192.168.1.1 (192.168.1.1) 1.159 ms 1.207 ms 1.082 ms 1.181 ms3 100.64.0.1 (100.64.0.1) 6.105 ms 4.068 ms 2.737 ms 3.858 ms4 111.175.227.145 (111.175.227.145) 12.785 ms 11.772 ms 11.710 ms 7.463 ms5 111.175.210.221 (111.175.210.221) 11.646 ms 5.033 ms 4.373 ms 5.631 ms6 * 202.97.29.57 (202.97.29.57) 21.332 ms *202.97.17.5 (202.97.17.5) 26.080 ms7 * * * *8 * * * *9 14.18.199.106 (14.18.199.106) 26.460 ms 20.790 ms 25.815 ms *
10 * * 14.18.199.74 (14.18.199.74) 22.642 ms *
11 * * * *
12 * * * *
13 * * * *
14 203.195.152.245 (203.195.152.245) 22.046 ms 22.201 ms 20.328 ms 24.846 ms
绕过正常的路由表,直接发送到网络相连的主机
> traceroute -r rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets
traceroute: sendto: Network is unreachable1 traceroute: wrote rumenz.com 52 chars, ret=-1*traceroute: sendto: Network is unreachable
traceroute: wrote rumenz.com 52 chars, ret=-1*traceroute: sendto: Network is unreachable
traceroute: wrote rumenz.com 52 chars, ret=-1
探测包的等待响应时间设置为3秒
> traceroute -w 3 rumenz.com
traceroute to rumenz.com (203.195.152.245), 64 hops max, 52 byte packets1 192.168.0.1 (192.168.0.1) 2.835 ms 0.894 ms 0.967 ms2 192.168.1.1 (192.168.1.1) 1.289 ms 1.174 ms 1.091 ms3 100.64.0.1 (100.64.0.1) 3.327 ms 2.985 ms 4.280 ms4 111.175.227.145 (111.175.227.145) 13.337 ms 12.301 ms 9.081 ms5 111.175.210.221 (111.175.210.221) 3.484 ms 5.052 ms 4.033 ms6 202.97.98.25 (202.97.98.25) 19.580 ms202.97.17.1 (202.97.17.1) 21.139 ms202.97.34.66 (202.97.34.66) 21.232 ms7 * * 113.96.5.82 (113.96.5.82) 26.111 ms8 * * *9 * 14.18.199.106 (14.18.199.106) 22.279 ms *
10 * * *
11 * * *
12 * * *
13 * * *
14 * 203.195.152.245 (203.195.152.245) 22.335 ms 21.387 ms
Traceroute的工作原理
UDP 和 ICMP Traceroute
Traceroute 的基本原理是向外发送带有逐次递增 TTL 的数据包从而获取的路径中每一跳的信息。
Host A 向 Host B 做 traceroute,Host A 第一次会发出一个 TTL=1 的数据包,当该数据包到达 R1 时,TTL 会变为 0 (网络上每经过一跳 TTL 会减去 1),R1 会将 TTL=0 的数据包丢弃并返回一个 ICMP Time Exceeded 给 Host A。Host A 发出第二个数据包并将 TTL 增加1 (TTL=2),该数据包到达 R2 后 TTL=0,R2 向 Host A 返回 ICMP Time Exceeded。依此类推,直到 TTL 增加到一个合适的值让数据包顺利到达 Host B,Host B 会返回一个 Final Replay 给 Host A。
UDP 和 ICMP traceroute 的区别就在于向外发送的数据包(上图中红色标明的 packet)和最后的 final reply。
- UDP 向外发送的是一个 UDP 数据包,final reply 是 ICMP Destination Unreachable
- ICMP 向外发送的是一个 ICMP Echo Request,final reply 是 ICMP Echo Reply
TCP Traceroute
TCP traceroute 同样利用了 TTL 来探测网络路径但是它向外发送的是 TCP SYN 数据包,这样做最大的好处就是穿透防火墙的几率更大因为 TCP SYN 看起来是试图建立一个正常的 TCP 连接。
关于 Cisco 的 traceroute 更详细的资料可以参考 Cisco Using the traceroute Command on Operating Systems (Document ID:22826).
原文链接:https://rumenz.com/rumenbiji/linux-traceroute.html
微信公众号:入门小站
Linux之traceroute命令相关推荐
- php tracert,Windows下tracert命令和Linux下traceroute命令
Windows下tracert命令和Linux下traceroute命令 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(so ...
- linux系统跟踪路由命令,Linux下traceroute命令的使用方法
在Linux系统中,traceroute命令可用于显示数据包经过的路由器的ip地址,了解行走路径,在Linux系统和windows系统中的名称有些不同,不熟悉Linux系统的朋友可能一时没认出来,下面 ...
- linux的traceroute命令详解
traceroute命令详解 traceroute [-46dFITUnrAV] [-f first_ttl] [-g gate,...] [-i device] [-m max_ttl] [-p p ...
- Linux之traceroute命令使用详解—网络故障定位(三)
现实世界中的网络是由无数的计算机和路由器组成的一张的大网,应用的数据包在发送到服务器之前都要经过层层的路由转发.而Traceroute是一种常规的网络分析工具,用来定位到目标主机之间的所有路由器 原理 ...
- Linux traceroute 命令详解
traceroute 命令 Linux中traceroute 命令用于显示数据包到目的主机的路径 Windows中路由追踪命令是tracert. traceroute 指令可以追踪你发送的数据包在网络 ...
- linux上跟踪命令,Linux traceroute命令
作为开发人员针对网络的路由追踪是经常使用的,Linux系统的traceroute命令.windows系统的tracert命令,接下来吾爱编程就为大家详细的介绍一下linux系统traceroute命令 ...
- 【Linux】一步一步学Linux——traceroute命令(167)
00. 目录 文章目录 00. 目录 01. 命令概述 02. 命令格式 03. 常用选项 04. 参考示例 05. 附录 01. 命令概述 traceroute命令用于追踪数据包在网络上的传输时的全 ...
- traceroute命令---Linux学习笔记
介绍: 通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可 ...
- linux系统里route -n不起作用,Linux系统中traceroute命令使用详解
Linux系统中traceroute命令可以追踪到网络数据包的路由途径.下面由学习啦小编为大家整理了linux系统中traceroute命令使用详解,希望对大家有帮助! Linux系统中tracero ...
最新文章
- mongodb的安装以及客户端
- 用计算机写作ppt文库,[百度文库.ppt
- Python开发【第八篇】:网络编程 Socket
- Keil 5安装激活教程
- update语句中使用子查询
- Matlab 2016b+TimeSat 3.1中文经典安装及使用教程(附下载地址)
- android mvc使用方法,详细学习android mvc设计模式教程
- NVMe闪存存储系统设计挑战
- 一图看懂B站2020Q2财报
- VS2012连接数据库问题
- 【转】crc16几种标准校验算法及c语言代码
- python敲七游戏代码_敲七游戏数字表
- C语言面试题 - 指针概念
- 打印预览和实际的打印不一致问题
- WordPress网站配置腾讯云cdn缓存
- matlab中concur怎么用,Matlab的concur、repmat、kron、reshape函数介绍
- 教你快速分割每段视频并自动分段导出保存
- 【认知觉醒:开启自我改变的原动力】
- Vue安装element ui踩坑
- 根证书,解决win7 sp1 64位系统在线安装VS2017 或VS2019的失败