traceroute路由追踪-理论
1.traceroute介绍及基本原理
这篇文章讲的很清楚
TraceRoute程序的实现主要涉及IP头部生存时间(time to live, TTL)字段的使用。
设置TTL字段的目的是为了防止数据报由于选路错误或其他软硬件原因从而导致在网络中无休止的流动,TTL字段指定了数据报的生存时间。TTL的初始值由源主机设置,当一份数据报经过路由器时,处理该数据报的路由器都需要把TTL值减去数据报在路由器中停留的秒数。但事实上大多数路由器只是简单地将TTL值减1,因此TTL字段最终被实现为一个跳站计数器。当TTL字段的值被减为0时,路由器就不会转发该数据报,而是将其丢弃,并产生一份ICMP超时差错报文发往源主机以通知错误的发生。TraceRoute程序的关键就在于返回的这份ICMP超时差错报文的源地址就是途经路由器的IP地址。由此,通过依次递增TTL字段的值,就可以得到一份数据报在其传输路径上所经过的路由信息。
TraceRoute程序在具体实现时,是令其向目的主机发送一个ICMP回显请求(Echo request)消息,并重复递增IP头部TTL字段的值。刚开始的时候TTL等于1,这样当该数据报抵达途中的第一个路由器时,TTL的值就被减为0,导致发生超时错误,因此该路由器生成一份ICMP超时差错报文返回给源主机。随后,主机将数据报的TTL值递增1,以便IP报文能传递到下一个路由器,下一个路由器将会生成ICMP超时超时差错报文返回给源主机。不断重复这个过程,直到数据报到达最终的目的主机,此时目的主机将返回ICMP回显应答(Echo replay)消息。这样,源主机只需对返回的每一份ICMP报文进行解析处理,就可以掌握数据报从源主机到达目的主机途中所经过的路由信息。
其详细过程如下:
将传递到目的IP地址的ICMP Echo消息的TTL值被设置为1,该消息报经过第一个路由器时,其TTL值减去1,此时新产生的TTL值为0。
由于TTL值被设置为0,路由器判断此时不应该尝试继续转发数据报,而是直接抛弃该数据报。由于数据报的生存周期(TTL值)已经到期,这个路由器会发送一个一个ICMP时间超时,即TTL值过期信息返回到客户端计算机。
此时,发出traceroute命令的客户端计算机将显示该路由器的名称,之后可以再发送一个ICMP Echo消息并把TTL值设置为2。
第1个路由器仍然对这个TTL值减1,然后,将这个数据报转发到传输路径上的下一跳。当数据报抵达第2个路由器,TTL值会再被减去1,成为0值。
第2个路由器会像第1个路由器一样,抛弃这个数据包,并像第1个路由器那样返回一个ICMP消息。
该过程会一直持续,traceroute命令不停递增TTL值,而传输路径上的路由器不断递减该值,直到数据报最终抵达预期的目的地。
需要注意的是,并不是所有网关都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其余路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿全所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。一直达到默认或用参数指定的追踪限制(maximum_hops)才结束追踪。
每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样。
探测数据包每次向每个网关发送三个数据包。每次送出的为3个数据包包,包括源地址,目的地址和包发出的时间标签。发送数据包的大小默认为38个字节。
ICMP(Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
超时通知内含发送IP包的源地址、IP包的所有内容及路由器的IP地址。
Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。traceroute程序发送一个UDP数据报给目的主机,但是它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口,因此该数据报到达目的主机时,目的主机会产生一个“端口不可达”错误的ICMP报文,这样traceroute程序要做的就是区分接收到的ICMP报文是超时还是端口不可达,从而来区分是路由器还是目的主机。
2.traceroute结果分析
这篇文章讲的很明白
这个也很明白
记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关。每行有三个时间,单位是 ms,表示探测数据包向每个网关发送三个数据包后,网关响应后返回的时间。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
如果源从任何给定的路由器接收到的报文少于 3 条(由于网络中的分组丢失),traceroute 在该路由器号码后面放一个星号,并报告到达那台路由器的少于 3 次的往返时间。
使用UDP的traceroute,失败还是比较常见的。这常常是由于,在运营商的路由器上,UDP与ICMP的待遇大不相同。为了利于troubleshooting,ICMP ECHO Request/Reply 是不会封的,而UDP则不同。UDP常被用来做网络攻击,因为UDP无需连接,因而没有任何状态约束它,比较方便攻击者伪造源IP、伪造目的端口发送任意多的UDP包,长度自定义。所以运营商为安全考虑,对于UDP端口常常采用白名单ACL,就是只有ACL允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许DNS/DHCP/SNMP等。
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台DNS出现问题时,不能解析主机名、域名时,也会 有延时长的现象。
traceroute是一条缓慢的命令,因为每经过一台路由器都要花去大约10到15秒。
具体分析
3.traceroute的三种模式-UDP、TCP、ICMP
traceroute主要利用IP数据包的TTL字段值 + ICMP来实现,它发送的用于探测网络路径的数据包的IP之上的协议可以是 UDP、TCP或ICMP。不同模式下,探测过程中设计的数据包如下:
UDP模式:UDP探测数据包(目标端口大于30000) + 中间网关发回 ICMP TTL 超时(ICMP Time Exceeded Message)数据包 + 目标主机发回ICMP Destination Unreachable 数据包
TCP模式:TCP [SYN]探测数据包(目标端口为Web服务的80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回TCP [SYN ACK] 数据包
ICMP模式:ICMP Echo (ping) Request 探测数据包 + 中间网关发回ICMP TTL超时数据包 + 目标主机发回ICMP Echo (ping) reply 数据包。
TCP模式报文见这篇文章
traceroute路由追踪-理论相关推荐
- 3.ICMP_抓包分析traceroute路由追踪
一.路由追踪程序traceroute/tracert Traceroute是Linux和Mac OS等系统默认提供的路由追踪小程序,Tracert是Windows系统默认提供的路由追踪小程序.二者的功 ...
- Traceroute(路由追踪) --- 的原理及实现
现实世界中的网络是由无数的计算机和路由器组成的一张的大网,应用的数据包在发送到服务器之前都要经过层层的路由转发.而Traceroute是一种常规的网络分析工具,用来定位到目标主机之间的所有路由器. 原 ...
- 10.10 traceroute:追踪数据传输路由状况
traceroute命令 用于显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况.默认数据包大小是60字节(IPv4)或80字节(IPv6),用户可另行设置.它与Windows下的trace ...
- 路由追踪traceroute分析
原文 : http://www.freebuf.com/articles/network/118221.html 一.路由追踪程序traceroute/tracert Traceroute是Linu ...
- 路由追踪——traceroute与tracert
一.路由追踪 (一)路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. (二)ICMP协议 Internet控制报文协议(internet control mes ...
- 路由追踪工具 traceroute 使用技巧
路由追踪工具 traceroute 使用技巧 路由追踪工作原理 路由追踪实例 1. 如何运行 traceroute 2. 禁用 IP 地址和主机名映射 3. 配置回复等待时间 4. 配置每一跳的查询次 ...
- linux怎么做路由跟踪_linux使用traceroute命令追踪路由
Linux有一个基础的路由追踪软件:traceroute.# CentOS系统: yum update && yum install traceroute -y # Debian/Ub ...
- Traceroute(路由追踪)的原理及实现
Traceroute(路由追踪)的原理及实现 (1)相应的协议和原理 IP协议:IP协议是TCP/IP协议族中最核心的部分,它的作用是在两台主机之间传输数据,所有上层协议的数据(HTTP.TCP.UD ...
- nexttrace: 一款开源的全能可视化网络路由追踪工具
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 今天要给大家推荐一个 GitHub 开源项目 sjlleo/nexttrace,该项目在 GitHub 有超过 ...
最新文章
- 一个简单实用的,基于EF的三层架构
- String类常用方法(看一眼就懂)
- Zabbix 安装部署
- Powered Addition CodeForces - 1339C(位运算)
- 不带头结点的链表基础操作(初始化,增删改查)
- 中年发福谁之“过”?Science论文采用“双标水”法首次揭示全生命周期代谢规律...
- .NET开发 程序员必备工具 -- Regulator:生成正则表达式工具
- plt.title() 把标题置于图像下方
- 2021-09-08推荐系统 简述DeepFM模型
- 55本《大数据浪潮之巅:新技术商业制胜之道》,包邮!
- 【线性分类器】线性分类器理论知识
- 杨焘鸣:潜意识的特性
- 吴恩达新课快来了!万字博客回顾机器学习算法起源
- sqlserver with ties
- Google高级搜索
- sqlserver2000企业版,个人版,开发版,标准版的安装
- AWS知识图谱大赛之python数据处理和图数据库导入
- OpenCV实践之路——使用imread()函数读取图片的六种正确姿势
- ElasticSearch增删改查之python sort、scroll、scan
- 软考中级软件设计师难不难_为什么这么难处理设计师
热门文章
- 分布式任务-数据批量新增数据库
- 急救盘linux加pe,教你如何在PE系统盘里加入卡巴斯基急救盘2
- MySQL查看所有用户及权限
- 0x000007FEFD72A06D 处(位于 Opencv_Test.exe 中)引发的异常: Microsoft C++ 异常: cv::Exception
- Java Strings.isBlank和Strings.isEmpty使用与区别
- 用python turtle_python turtle有什么用
- 微信小程序裁剪视频部分内容导出
- 微信小程序---收藏/取消收藏(点改)
- css清除浮动的5种方法
- 运动蓝牙耳机怎么选,健身耳机运动耳机推荐