traceroute是linux/unix系统中用于分析本地到目标网络地址间的路由转发路径的工具,也常用于诊断网络链路不通或异常的发生位置。在windows中也有类似功能的工具,名为tracert。

本文将介绍traceroute的用法并分析其原理。

用法

traceroute的使用方式很简单,只需要提供目标IP作为参数即可。工具也提供一些参数来设置探测的最大跳数、每跳的探测次数等,不过一般较少使用,可以参考--help输出的帮助信息。

上图是在windows下使用tracert追踪baidu.com对应的服务器IP 220.181.38.148所产生的结果。输出的第一行和探测结果无关,只是表示tracert最多探测30跳,如果30跳仍未到达目标则不再探测。

之后每行输出的是路由链路上每一跳的路由节点IP以及到这个节点的时延情况。可以看到第1跳是本地路由器,第2跳是本地运营商接入网关,之后每一跳都是网络转发路径上的一个节点。每增加一跳,时延一般都会增加一点,因为传输路径变长了。最终经过17跳,报文到达目标服务器。

对于这个结果,我们会产生一些疑问:

  1. 每一跳的IP和时延信息是怎么得到的?
  2. 为什么每一跳有3个时延信息,有时还会显示2个或者3个IP地址?
  3. 为什么有些跳数显示的结果是请求超时?为什么有节点请求超时了还能到达后续的节点?

要回答这些问题,就需要分析traceroute的原理。

原理

traceroute的原理其实非常简单,步骤如下:

1. 向目标IP发送3个TTL=n(n起始值为1)的ICMP ping request报文,等待回应

2. 如果收到ICMP ping response报文,则说明路由成功,通过n跳可以到达目标IP,traceroute工作完成。request和response的时间间隔就是时延,由于发送了3个request,因此有3个时延信息。

3.  如果收到ICMP TTL exceeded报文,则说明第n跳路由到达了这个报文的发送节点。IP报文的TTL字段每经过一次路由转发就会减1,当减到0时当前的转发节点就会向报文的源IP发送一个ICMP TTL exceeded报文,因此发送了这个报文的节点就是第n跳的路由节点。由于发送了3个request,因此会返回3个报文和对应的时延信息。由于到目标IP的路由路径不一定是唯一的,因此报文在第n跳时到达的节点不一定是同一个,就有可能会输出多个第n跳节点地址。

4. 如果在request发出3秒(默认超时时间)后仍然没有收到任何回应,则这轮检测超时。但这并不意味着目标IP不可达,而很可能是因为第n跳到达的节点不允许发送TTL exceeded报文。因此traceroute会继续后面的探测过程。

5. 将TTL加1,回到第1步继续探测。

通过上述步骤,traceroute根据发出的ICMP request和收到的响应情况,就可以获得路由路径上所有(允许发送TTL exceeded报文)的路由节点IP和时延了。由于每一跳的探测报文会发送3次,因此会有3个响应时延和3个路由节点IP(可能重合)。由于部分路由节点不允许发送TTL exceeded报文,因此在这些节点上TTL耗尽的探测包不会收到响应,也就无法获得这一跳的节点信息,但这个节点可以继续转发报文,因此路由过程和探测过程都可以继续。

traceroute用法与原理分析相关推荐

  1. jmp用法以及原理分析

    段内转移和段间转移 转移指令:控制cpu执行内存中的某行代码,可以通过修改IP或者同时修改cs:ip 只修改IP的称为段内转移:jmp ax  相当于 mov ax,ip   jmp ax 同时修改c ...

  2. ping 与 traceroute 的工作原理分析

    一.ping ping 程序的主要目的是测试主机是否可达,它发送 ICMP 回显请求报文给目的主机,并等待返回 ICMP 回显应答 ping 程序一般会周期性持续地发送 ICMP 请求报文,除非用户手 ...

  3. vue入门到精通及高级用法,原理分析

    v-html 的 XSS 攻击 在 Vue 中有 v-html 这个便利的指令,可以让我们直接输出 HTML,但它有个缺点. Vue 官网这样解释这个「指令」 双大括号会将数据解释为普通文本,而非 H ...

  4. java中的算数运算符号用法与原理分析

    一.表达式求值简单说明: 1.求值表达式主要包括加减乘除四种基本运算,其实表达式可以看做由一个个二元运算构成,前一个二元运算的结果作为后一个二元运算的输入. 举个例子: "1+2-4=&qu ...

  5. Android Activity跳转动画 - overridePendingTransition用法及原理分析

    overridePendingTransition()是在Activity类中实现的一个用来实现跳转动画的方式,也是最常使用的方法. overridePendingTransition() 先看这个名 ...

  6. 阻容降压原理分析及实际用法

    将交流市电转换为低压直流的常规方法是采用变压器降压后再整流滤波,当受体积和成本等因素的限制时,最简单实用的方法就是采用电容降压式电源. 阻容降压原理分析及实际用法 1.阻容降压简介 1.1什么是阻容降 ...

  7. Traceroute 原理分析

    Traceroute 原理分析 traceroute 用于查看IP数据报从一台主机传到另一台主机所经过的路由.其实,在IP数据报的头部的选项字段有一个 IP记录路由选项(RR),它也可以记录路由.为什 ...

  8. 并发编程-03线程安全性之原子性(Atomic包)及原理分析

    文章目录 线程安全性文章索引 脑图 线程安全性的定义 线程安全性的体现 原子性 使用AtomicInteger改造线程不安全的变量 incrementAndGet源码分析-UnSafe类 compar ...

  9. MyBatis版本升级引发的线上告警回顾及原理分析

    本文从一次MyBatis版本升级引发的线上告警开始讲起,然后针对告警定位过程.源码原理进行了深入的分析,并加入了不同版本的类比分析,最后结合实际工作做了一些经验总结,希望能对大家的工程实践有一定的帮助 ...

最新文章

  1. SAD和SATD的区别[摘]
  2. 30道linux面试题与答案(21-30)
  3. SBB:无机肥对土壤中固氮菌丰度和群落结构的影响
  4. Python学习笔记(2)-Python执行方式、变量
  5. 浅谈:稀疏数组与二维数组之间的转换
  6. 5 年之后,产品经理,没了?
  7. NumPy Cookbook 带注释源码 四、连接 NumPy 与 剩余世界
  8. Java 调用执行其他语言的程序
  9. electron 自定义标题栏_electron+vue制作桌面应用--自定义标题栏
  10. Express 4.x Node.js的Web框架----《转载》
  11. xcode 9.0 iOS 11
  12. 论文笔记——CPN(Corner-Proposal-Network)Det
  13. pci规划的三个原则_LTE中PCI规划目的和原则
  14. 给定三角形三边,如何判断该三角形的形状
  15. CentOS禁止Ping方法
  16. win10wifi间歇性断网重启后恢复_如何解决win10无线网间歇性掉线
  17. 【渝粤题库】陕西师范大学200551 英语语音
  18. 倍福EK1110模块介绍
  19. 【诡秘之主】封印物篇
  20. CNN(卷积神经网络)在视频动作分类中的应用

热门文章

  1. 一文说透为什么JavaScript最牛逼
  2. 百度快照被劫持 快速恢复快照的解决办法
  3. C# 利用Datagridview、BindingNavigator、BindingSource自动显示数据
  4. 什么是DNS(域名服务器)?(Powercert animated videos)
  5. 数据分析的作用及步骤
  6. Linux命令之 --- chmod命令
  7. java中stopwatch,Java StopWatch.stop方法代碼示例
  8. Linux虚拟机中安装source insight
  9. Source Insight 3解决中文乱码,破解版
  10. 银行业国产数据库现状