traceroute和tracert原理

traceroute和tracert原理一、Traceroutetraceroute命令用IP生存时间(TTL)字段和ICMP错误消息来确定从一个主机到网络上其他主机的路由。路由器收到TTL为1的包文减1后直接丢弃,然后回复ICMP(type=11,code=0,TTLequals0duringtransit——传输期间生存时间为0)。目标主机收到traceroute的UDP探测包回复ICMP(type=3,code=3,端口不可达)。Linux上称之为traceroute,Windos类似的功能为trace

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

一、Traceroute

traceroute 命令用 IP 生存时间 (TTL) 字段和 ICMP 错误消息来确定从一个主机到网络上其他主机的路由。
路由器收到TTL为1的包文减1后直接丢弃,然后回复 ICMP(type=11,code=0,TTL equals 0 during transit——传输期间生存时间为0)。
目标主机收到traceroute 的UDP探测包回复ICMP(type=3,code = 3,端口不可达)。Linux上称之为 traceroute,Windos类似的功能为tracert。

linux 上 traceroute 运行过程:
traceroute 连续发送TTL从1开始递增的UDP包,目标端口 30000+,相同的目标地址,每个TTL相同的UDP包默认发送三个,端口依次递增。当收到目标地址回的 ICMP包(端口不可达),traceroute 停止发包,否则继续发送,默认最多发送 30 个,每个包大小 60Byte(IP+UDP+Data)。

[root@localhost sbc]# traceroute 10.228.90.70
traceroute to 10.228.90.70 (10.228.90.70), 30 hops max, 60 byte packets
 1  10.228.113.1 (10.228.113.1)  1.513 ms  2.367 ms  3.182 ms
 2  10.228.2.173 (10.228.2.173)  1.709 ms  2.584 ms  3.338 ms
 3  10.228.1.37 (10.228.1.37)  1.533 ms  2.233 ms  3.057 ms
 4  10.228.1.26 (10.228.1.26)  1.870 ms  2.652 ms  3.477 ms
 5  10.228.3.162 (10.228.3.162)  1.909 ms  2.728 ms  3.756 ms
 6  10.228.90.70 (10.228.90.70)  0.292 ms  0.266 ms  0.261 ms

在这里插入图片描述

流程分析:
1.连续发送 UDP 包,从seq69到到seq83连续15个报文,每三个包TTL增加1,总共发送五跳网元的探测报文,从上面截图可以看端口是逐渐加1。
在这里插入图片描述
在这里插入图片描述
2.发送seq84包的时候,TTL是6,立马收到ICMP seq85的包,端口不可达响应。但是后面继续发送两个TTL为6的包,仍然收到ICMP的响应。
在这里插入图片描述
3.针对前面发送的15个探测包,全部收到ICMP的响应包,TTL超期。
在这里插入图片描述

二、Tracert

通过向目标发送不同 IP 生存时间 (TTL) 值的“Internet 控制消息协议 (ICMP)”回应数据包,Tracert诊断程序确定到目标所采取的路由。要求路径上的每个路由器在转发数据包之前至少将数据包上的 TTL 递减 1。数据包上的 TTL 减为 0 时,路由器应该将“ICMP 已超时”的消息发回源系统。

Tracert 先发送 TTL 为 1 的回应数据包,并随后的每次发送过程将 TTL 递增 1,直到目标响应或 TTL 达到最大值,从而确定路由。通过检查中间路由器发回的“ICMP 已超时”的消息确定路由。某些路由器不经询问直接丢弃 TTL 过期的数据包,这在 Tracert 实用程序中看不到。

Tracert 有一个固定的时间等待响应(ICMP TTL到期消息)。如果这个时间过了,它将打印出一系列的*号表明:在这个路径上,这个设备不能在给定的时间内发出ICMP TTL到期消息的响应。然后,traceroute 给TTL记数器加1,继续进行。

报文监测如下:

1、从10.40.140.97 到 10.43.85.162 经过 3 跳,第 4 跳到达目标主机。
在这里插入图片描述

2、PC机依次发送ICMP请求信息(Type=8,Echo request——回显请求[Ping请求]),收到目标主机的ICMP回的应答信息(type=0,Echo Reply——回显应答[Ping应答])后,停止发送请求信息,注意是三个应答信息都收到之后,才停止发送

在这里插入图片描述

3、当超出设定的跳数,源主机也会停止发送ICMP请求,如下所示设置跳数为3
在这里插入图片描述
在这里插入图片描述

3、小结
tracert 和 traceroute虽然都是路由跟踪,但是两者探测方法及探测的数据类型不同。默认情况下,traceroute是向目的地址的某个端口(大于30000)发送UDP数据报,tracert是向目的地址发出ICMP请求回显数据包。
当出现了tracert可达,但是traceroute不可达时,需要考虑路径的路由器是否对UDP进行了过滤,或者端口限制。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189902.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • URAL 1146

    URAL 1146题目大意:给出一个N*N的矩阵,每个元素的范围为[-127,+127]。求其所有子矩阵中各元素之和的最大值。TimeLimit:1000MS     MemoryLimit:65536KB     64bitIOFormat:%I64d&%I64u数据规模:N理论基础:无。题目分析:求和问题,用前缀和(每一行)+枚举(对列的起始与终点和行的起始与终点枚举)即

    2022年6月9日
    35
  • python标识符命名规则和要求_python必背入门代码

    python标识符命名规则和要求_python必背入门代码python标识符命名规则什么是标识符标识符:现阶段学习的变量名,后期会学习的函数名,类名这些都是标识符.简单来说就是程序中所有的名字的总称就是标识符.标识符的名字是不能乱起的,就像手机号不能用110是一个道理标识符命名规则有如下4个要求:1.见名知意:看到变量的名字就能知道这个变量干什么的2.由字母、下划线和数字组成,且数字不能开头3.区分大小写4.不能和关键字重复什么是关键字关键字是python语言已经使用的标识符,所以不允许开发者自己定义和关键字相同的名字的标识符.

    2022年9月9日
    0
  • html表格内容居中对齐_word里表格怎么居中

    html表格内容居中对齐_word里表格怎么居中加上样式如:margin:0auto;<tablestyle=”margin:0auto;”><tr><td><span>账号:</span></td><td><inputtype=”text”v-model=’user’/></td></tr><tr><td>…

    2022年9月18日
    1
  • css画三角形「建议收藏」

    css画三角形「建议收藏」实现原理将div的高和宽设置为0,然后设置四个border不同的颜色。效果如下:div#triangle{width:0;height:0;border-top:50pxsolidblue;border-right:50pxsolidred;border-bottom:50pxsolidgreen;bord…

    2022年6月30日
    26
  • zoj2781

    zoj2781zoj2781

    2022年7月16日
    19
  • mysql、Java、mabatis的字段映射

    mysql、Java、mabatis的字段映射mysql、Java、mabatis的字段映射

    2022年4月23日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号