Linux 命令 - traceroute: 数据报传输路径追踪
traceroute 工具用于跟踪数据报的传输路径:当数据报从一台计算机传向另一台计算机时,会经过多重的网关,traceroute 命令能够找到数据报传输路径上的所有路由器。通过 traceroute 工具跟踪到的传输路径只是这两台计算机之间众多通路中的一条,所以不能肯定火假设数据报会永远只走这一条通路。
traceroute 过程
1. 将传递到目的 IP 地址的 ICMP Echo Request 消息的 TTL 值设置为 1,该数据报经过第一个路由器时,其 TTL 值减去 1,此时新产生的 TTL 值为 0。
2. 由于 TTL 值被置为 0,路由器判断此时不应该尝试继续转发数据报,而是直接抛弃该数据报。由于数据报的生存周期(TTL 值)已经到期,这个路由器会发送一个 ICMP 时间超时,即 TTL 值过期信息返回到客户端计算机。
3. 此时,发出 traceroute 命令的客户端计算机将显示该路由器的名称,之后可以再发送一个 ICMP Echo 消息并把 TTL 值设置为 2。
4. 第一个路由器仍然对这个 TTL 值减 1,然后,如果可能的话,将这个数据报转发到传输路径上的下一跳。当数据报抵达第二个路由器,TTL 值会再被减去 1,变成 0。
5. 第二个路由器会像第一个路由一样,抛弃掉这个数据报,并像第一个路由器那样返回一个 ICMP 超时消息。
6. 该过程会一直持续,traceroute 命令不停递增 TTL 值,而传输路径上的路由器不断递减该值,直到数据报最终抵达预期的目的地。
7. 当目的计算机接收到 ICMP Echo Request 消息时,会回传一个 ICMP Echo Reply 消息。
命令格式
traceroute [options] [host]
命令参数
-4
使用 IPv4。
-6
使用 IPv6。
-I
使用 ICMP ECHO 探测。
-T
使用 TCP SYN 探测。
-U
使用 UDP 数据报探测,这是默认的探测方式。
-d
启用 Socket 级的调试功能(如果 Linux 内核支持的话)。
-F
设置 Don’t Fragment 位,不允许 IP 封包分段。
-f first_ttl
设置第一个检测数据包的存活数值 TTL 的大小,默认值为 1。
--help
打印帮助信息
-m max_ttl
指定探测时的最大跳数,即 TTL 的最大值,默认值为 30。
-n
显示信息时不会尝试将 IP 地址映射成主机名称。
-p port
设置目的端口号。对于 ICMP 追踪,则是指定 ICMP 的序列值。
-q nqueries
设置每一跳的探测包数量,默认值为 3 。
-r
绕过正常的路由表,直接发送到网络直连的主机。
-t tos
当使用 IPv4 时,设置 Type of Service 值;使用 IPv6 时,则设置 Traffic Control 值。
-V
打印版本信息
-w waittime
设置等待测试响应的秒数,默认值为 5.0。
实例
a) 显示本机至 example.com 数据包的传输路径。
[huey@huey-K42JE ~]$ traceroute example.com
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
1 10.1.228.254 (10.1.228.254) 1.545 ms 1.470 ms 1.381 ms
2 192.168.100.2 (192.168.100.2) 0.818 ms 0.691 ms 0.601 ms
3 * * *
4 * * *
5 * * *
...
28 * * *
29 * * *
30 * * *
记录序号从 1 开始,每行记录表示一跳,每一跳表示一个网关。除了主机名称与其 IP 地址外,每行记录还有 3 个时间,即默认的 -q 值。这些时间值表示数据报抵达路由器的往返时间。以 * * * 表示的记录,是因为在默认的等待时间 5.0 秒内没有接收到 ICMP 响应。这可能是因为防火墙把 ICMP 返回信息过滤掉。
Linux 命令 - traceroute: 数据报传输路径追踪的更多相关文章
- Linux命令学习(20):traceroute命令
版权声明 更新:2017-06-13博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的mv命令. 2 ...
- 运维工程师必会的109个Linux命令
运维工程师必会的109个Linux命令 版本1.0 崔存新 更新于2009-12-26 目录 1 文件管理 6 1.1 basename 6 1.2 cat 6 1.3 cd 7 1.4 chgrp ...
- 《Linux命令学习手册》系列分享专栏
<Linux命令学习手册>系列分享专栏 <Linux命令学习手册>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/207 ...
- 【Linux】linux命令大全
[注意]:命令[compgen -b]可以列出所有当前系统支持的命令. 109个Linux命令 目录 1 文件管理... 5 1.1 basename. 5 1.2 ...
- linux学习(1):linux命令大全
Linux命令 目录 1 文件管理... 5 1.1 basename. 5 1.2 cat 5 1.3 cd. 5 1.4 ...
- 45 个常用Linux 命令,让你轻松玩转Linux!
Linux 的命令确实非常多,然而熟悉 Linux 的人从来不会因为 Linux 的命令太多而烦恼.因为我们仅仅只需要掌握常用命令,就完全可以驾驭 Linux. 接下来,让我们一起来看看都有那些常用的 ...
- (3)Linux命令分类汇总(7~12)
Linux命令分类汇总(7~12) (七)用户管理命令(12个) 1 useradd cdgs 添加用户. 2 usermod 修改系统已经存在的用户属性. 3 userdel ...
- 干货分享:盘点那些最常用的Linux命令,需熟记!
- 166个最常用的Linux命令,哪些你还不知道?
linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心. 线上查 ...
随机推荐
- 十,选择cfee编辑器并学会调试程序。以及结束语。
为什么推荐用cfree呢?因为我认为这个编辑器界面友好,用起来方便. 你也许会问,调试程序是什么? 那么下面思考几个问题:对于前面讲的分支结构和循环结构有点不懂怎么办?如果写的程序语法没有错误但是运算 ...
- log_bin_trust_function_creators错误解决
log_bin_trust_function_creators错误解决 当有mysql本地或远程建立function或procedure时报上面的错误 经试验是log_bin_trust_fun ...
- linux下的shell命令的编写,以及java怎样调用linux的shell命令(java怎样获取linux上的网卡的ip信息)
程序猿都非常懒,你懂的! 近期在开发中,须要用到server的ip和mac信息.可是server是架设在linux系统上的,对于多网口,在获取ip时就产生了非常大的问题.以下是在windows系统上, ...
- SQL Server中DML语句要申请的锁
对于select语句: 1.当採用表扫描时,会直接锁定page,而不是锁定详细的某条记录,所以会有这些锁: A.数据库S锁 B.表的IS锁 C.页的S锁 2.当採用索引来查找数据时,会锁定详细的记录, ...
- vector<int> v2 = 42; 为何非法
C++ Primer 第四版,第十三章“复制控制” 习题13.2,为何vector<int> v2 = 42; 不能编译? 百度贴吧里的一位楼主给出了答案,本人认为正确,特此引用: 参考链 ...
- 详谈 php定时器
以前对se特别感兴趣,但是自己又不会java,lucene等搜索引擎开发工具,于是不断挖掘php的功效. 最后发现php也可以做抓取,并且原理很易:直接获取页面源文件,然后通过正则或字符串的参照截取来 ...
- Android 滑动效果高级篇(八)—— 自定义控件
自定义控件,较常用View.ViewGroup.Scroller三个类,其继承关系如下: 本示例自定义控件,实现一个Gallery效果,并添加了一个显示View个数和位置的bar条,效果图: 自定义控 ...
- iOS开发——新特性篇&swift新特性(__nullable和__nonnull)
swift新特性(__nullable和__nonnull) 最近在看老师写代码的时候经常遇到两个陌生的关键字,但是当我在我的电脑上敲得时候就是敲不出,后来才知道这是为了swift与OC混编的时候产生 ...
- 第1章 游戏之乐——NIM(3)两堆石头的游戏
NIM(3)两堆石头的游戏 1. 问题描述 假设有两堆石头,有两个玩家会根据如下的规则轮流取石头:每人每次可以从两堆石头中各取出数量相等的石头,或者仅从一堆石头中取出任意数量的石头:最后把剩下的石头一 ...
- GLOG使用注意事项
FLAGS_stderrthreshold 输出到stderr的门限,默认为2(ERROR),默认,ERORR以下的信息不打印到终端 FLAGS_alsologtostderr 当这个全局变量 ...