动态图解 | 9分钟让你明明白白看懂Traceroute(路由追踪)的原理与实现

简介: 动态图解 | 9分钟让你明明白白看懂Traceroute(路由追踪)的原理与实现


目录


关于ICMP协议,本期就不在这里具体介绍,这里只是简单回顾一下报文类型。ICMP报文大致3大类,当然也可以分为2类:查询报文差错报文。(也就说,一个ICMP报文,要么是查询报文,要么就是差错报文。)


ICMP分3大类



ICMP报文类型

ICMP 报文由首部数据组成。首部为定长8字节(前4字节是通用部分,后4字节随类型不一样有所差异。)ICMP报文的一般格式如图所示:



tracert会用到的报文如下:









tracert原理除了会涉及上述报文,还涉及到一个机制,就是IP报文首部的TTL字段


TTL是 Time To Live的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。TTL是IPv4报头的一个8 bit字段。TTL的作用是限制IP数据包在计算机网络中的存在的时间。TTL的最大值是255,TTL的一个推荐值是64。




traceroute的实现原理,有两种方法:1、基于UDP报文实现的;2、基于ICMP报文实现。接下来分别与大家介绍一下这2种方法是如何实现的?


基于UDP报文的traceroute是这样实现的:让你在客户端输入 traceroute 命令+ip时, 客户端就发起一个UDP报文,使用一个大于30000的端口号(选这么端口号,目的端一般都是未使用,所以待会就收到一个端口不可达信息。)这样子,服务器端收到这个UDP报文后就会返回ICMP端口不可达的错误信息。同时,第一个数据包,TTL=1,这样第一跳路由器收到后,要转发出去时,会将TTL减一,即TTL=0, 就丢弃,然后第一跳路由器就返回一个ICMP超时的错误信息,所以,客户端通过判断收到ICMP端口不可达报文来确定数据包已到达目的地,如果是收到ICMP超时错误信息报文,说明还没到达目的地,就会将TTL加1,以此类推。


下面,龙哥将通过动态图给大家演示,traceroute基于UDP的实现原理:希望大家看完能更加直观地掌握。




1、客户端发送第一个端口大于30000,TTL=1的UDP数据报文,第1跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第1跳地址:10.10.10.10






2、由于客户端发现还没收到端口不可达的ICMP报文,于是继续尝试发送,端口号比上次发送的进行加1,TTL也进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=1。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。


客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第2跳地址:20.20.20.20




3、由于客户端仍然还没收到端口不可达的ICMP报文,于是继续尝试发送,端口号比上次发送的进行加1,TTL也进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=2。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=1, TTL不是0,路由器就继续转发。数据包终于到达服务器啦!服务器查看目的地址,就是找我的,于是继续解封装,查看UDP报文的数据部分,发现端口号不可达,于是向客户端发送一个 端口不可达的ICMP报文。


客户端收到,端口不可达的ICMP报文,确认UDP数据包已成功到达服务器了,traceroute结束,并记录源IP地址:192.168.2.1



这一次,我们不再使用UDP报文了,而是使用ICMP的回显请求回显应答这两种报文。原理跟 前面介绍UDP差不多,换汤不换药。


基于ICMP报文的traceroute是这样实现的:让你在客户端输入 traceroute 命令+ip时, 客户端就发起一个ICMP回显请求报文,第一个数据包,TTL=1,这样第一跳路由器收到后,要转发出去时,会将TTL减一,即TTL=0, 就丢弃,然后第一跳路由器就返回一个ICMP超时的错误信息,客户端收到后,会判断是否收到ICMP 回显应答 报文? 如果还没收到,就会继续发送回显请求报文,TTL加1进行尝试,当到底服务器后,服务器就会发送ICMP 回显应答报文。




1、客户端发送第一个TTL=1的ICMP 回显请求报文,第1跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第1跳地址:10.10.10.10




2、由于客户端发现还没收到回显应答 的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=1。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=0,就丢弃该数据包,并向客户端返回TTL超时的ICMP报文。


客户端收到,TTL超时ICMP报文,从报文里面的源地址,得到第2跳地址:20.20.20.20




3、由于客户端仍然还没收到 回显应答 的ICMP报文,于是继续尝试发送,TTL进行加1。第1跳路由器收到后,根据目的地址进行转发,转发出去时,TTL减1,减完后TTL=2。第2跳路由器收到后,查看目的地址进行转发,转发前会将TTL会减1,减完后TTL=1, TTL不是0,路由器就继续转发。数据包终于到达服务器啦!服务器查看目的地址,就是找我的,于是继续解封装,查看IP数据部分(ICMP),发现是回显请求的ICMP报文,于是向客户端发送一个 回显应答的ICMP报文。


客户端收到,回显应答的ICMP报文,确认UDP数据包已成功到达服务器了,traceroute结束,并记录源IP地址:192.168.2.1





配置很简单,这里不再列出。

1、配置直连接口IP地址、设备名。2、把路由打通,我随便配了OSPF路由协议,全网可达就行。






R1处抓包:TTL=1 , ICMP请求报文。


PC1收到TTL 超时报文:


实现中,traceroute每次会发3个同样的数据包,这里只列举一个。




R1处抓包:TTL=2, ICMP请求报文。


R2处抓包:TTL=1, ICMP请求报文。


PC1收到的TTL 超时报文:



中间的多跳路由器,收到的ICMP 回显请求报文,这里不在列举。这列举一下,PC1收到的回显应答报文:




2、在路由器上R1 tracert PC 2,然后再每个进方向的接口处抓包:






发送UDP报文,TTL=1 ,端口号 33434


收到TTL超时报文,并且会把刚刚请求报文的头部信息放在数据部分:



每一次会发3个同样的UDP报文,TTL一样,端口会再上一个基础上加1::


发送UDP报文,TTL=2,端口号 334347


第2跳路由器收到的UDP报文:TTL=1,端口号 334347


PC1收到的TTL 超时报文:



中间的多跳路由器,收到的很多UDP报文,这里不在列举。这列举一下,PC1收到的端口不可达报文:



相关文章
|
安全 网络安全 网络架构
掌握traceroute:网络工程师解决路由问题的利器
【8月更文挑战第22天】`traceroute`是网络工程师的关键工具,用于追踪数据包从源到目的地的路径,帮助诊断网络问题并优化性能。通过向目标发送具有特定生存时间(TTL)值的数据包,`traceroute`能揭示每跳路由器的信息及延迟,便于识别瓶颈与故障。其基本用法为`traceroute [options] hostname/IP`。
417 1
|
负载均衡 安全 网络安全
什么是 Traceroute?为什么要使用它?
【8月更文挑战第31天】
1170 0
|
7月前
|
网络协议 网络安全
如何使用Traceroute定位网络问题?
`Traceroute` 是网络诊断工具,用于追踪数据包从源主机到目标主机的路径,帮助定位网络延迟、路由故障或中间节点问题。常用参数包括禁用DNS解析(`-n`)、指定最大跳数(`-m`)、每跳探测包数量(`-q`)等。结果解读涉及时间值、符号含义(如`*`表示未响应),并可进行高级用法如指定源接口、强制使用ICMP或TCP协议。常见问题包括中间节点高延迟、路径终点无法到达和路径环路,需根据具体情况进行排查和解决。
1234 1
|
12月前
|
负载均衡 网络协议 算法
|
12月前
|
运维 定位技术 网络虚拟化
|
监控 安全 Linux
【专栏】Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip
【4月更文挑战第28天】本文介绍了Linux中六个常用的网络命令:ping、traceroute、netstat、nmap、ifconfig和ip,以及它们在测试网络连通性、追踪路由、查看网络状态、安全扫描和接口配置等场景的应用。通过学习和运用这些命令,系统管理员和网络爱好者能更有效地诊断和管理网络问题,确保网络稳定运行。
904 0
|
网络安全 网络架构 网络协议
|
网络安全 网络架构
traceroute命令详解
traceroute命令详解