traceroute的工作原理

traceroute的工作原理MyySophia5个月前traceroute的工作原理是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A主机tracerouteB主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1,第二个分组的TTL设置为2以此类推…….当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这…

大家好,又见面了,我是你们的朋友全栈君。

MyySophia5个月前

traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推…….当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。

–update 2022年3月4日17:13:19

Traceroute,是个“大骗子”。它会使用 ICMP 的规则,故意制造一些能够产生错误的场景。

所以,Traceroute 的第一个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器。Traceroute 的参数指向某个目的 IP 地址,它会发送一个 UDP 的数据包。将 TTL 设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就表示它“牺牲”了。

如果中间的路由器不止一个,当然碰到第一个就“牺牲”。于是,返回一个 ICMP 包,也就是网络差错包,类型是时间超时。那大军前行就带一顿饭,试一试走多远会被饿死,然后找个哨探回来报告,那我就知道大军只带一顿饭能走多远了。

接下来,将 TTL 设置为 2。第一关过了,第二关就“牺牲”了,那我就知道第二关有多远。如此反复,直到到达目的主机。这样,Traceroute 就拿到了所有的路由器 IP。当然,有的路由器压根不会回这个 ICMP。这也是 Traceroute 一个公网的地址,看不到中间路由的原因。

怎么知道 UDP 有没有到达目的主机呢?Traceroute 程序会发送一份 UDP 数据报给目的主机,但它会选择一个不可能的值作为 UDP 端口号(大于 30000)。当该数据报到达时,将使目的主机的 UDP 模块产生一份“端口不可达”错误 ICMP 报文。如果数据报没有到达,则可能是超时。

这就相当于故意派人去西天如来那里去请一本《道德经》,结果人家信佛不信道,消息就会被打出来。被打的消息传回来,你就知道西天是能够到达的。为什么不去取《心经》呢?因为 UDP 是无连接的。也就是说这人一派出去,你就得不到任何音信。你无法区别到底是半路走丢了,还是真的信佛遁入空门了,只有让人家打出来,你才会得到消息。

Traceroute 还有一个作用是故意设置不分片,从而确定路径的 MTU。要做的工作首先是发送分组,并设置“不分片”标志。发送的第一个分组的长度正好与出口 MTU 相等。如果中间遇到窄的关口会被卡住,会发送 ICMP 网络差错包,类型为“需要进行分片但设置了不分片位”。其实,这是人家故意的好吧,每次收到 ICMP“不能分片”差错时就减小分组的长度,直到到达目标主机。

tracerouter发udp,为啥出错回icmp?

1、ICMP一般认为属于网络层的,和IP同一层,是管理和控制IP的一种协议,而UDP和TCP是传输层,所以UDP出错可以返回ICMP差错报文。

2、正常情况下,协议栈能正常走到udp,当然正常返回udp。
但是,你主机不可达,是ip层的(还没到udp)。ip层,当然只知道回icmp。报文分片错误也是同理。

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

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

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


相关推荐

  • 罗永浩欠六个亿脱口秀_罗永浩直播带货视频

    罗永浩欠六个亿脱口秀_罗永浩直播带货视频做直播赚钱,跟做其它所有合法工作赚钱一样,一样可以选择干干净净的赚钱。而越假装不在乎钱,就越不会去赚钱,所以她在30岁时,自己撕掉那块遮羞布,拼命赚钱,过积极的生活。站街上一天8小时,赚80元,可80元卖5盒明信片就有了啊。提及这段经历,就是想说,当你真的开始在乎钱,真的想赚更多钱时,你真的能找到各种办法。这个社会的很多人,有些病态,自己背着房贷,猪肉排骨都舍不得大口吃,还不努力赚钱,甚至还不好意…

    2022年9月21日
  • 排名前十的时序数据库[通俗易懂]

    排名前十的时序数据库[通俗易懂]时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。时序数据的兴起还是榜上了物联网的大风。物联网(InternetofThings,简称IOT)是指通过各种信息传感器实时采集任何需要管理设备的信息,并进行管理。物联网的基础数据具有数据量大、结构单一、时间属性强、查询简单等特点,传统的关系型数据库在面对物联网数据时,显得应对发力,基本上属于功能过剩但性能不足。目前最新的DB-Engine上时序数据库排名如下

    2022年10月4日
  • 开源中国招聘新增两大功能,让你的声音更有影响力[通俗易懂]

    开源中国招聘新增两大功能,让你的声音更有影响力

    2022年3月4日
  • js es6转es5在线_es6 array

    js es6转es5在线_es6 arrayes6尚未得到所有浏览器的全部支持将es6转化为es5必要。下面将利用babel转换js语法首先安装npminstall–save-dev@babel/core@babel/cli@babel/preset-env@babel/node在项目中创建babel.config.js文件(不可更改)在文件中写入如下代码constpresets=[ [“@babel/env”,{ targets:{ ie:”8″, edge:”17″, firef

    2022年9月24日
  • ruby语言是什么东西

    ruby语言是什么东西1、简介Ruby是日本的YukihiroMatsumoto写的,简单易学的面向对象的脚本语言,像perl一样,有丰富的文字处理、系统管理等丰富功能,但是ruby要简单,容易理解和扩充。跟pyth

    2022年8月5日
  • mysql数据库中sql修改字段类型

    mysql数据库中sql修改字段类型首先说明一下:在mysql数据库中可以对表的字段类型进行修改的,这样的好处是正常情况下原来的数据不会丢失的。  它的语法规则是:altertablenewexamplemodifyidvaechar(20);

    2022年6月10日

发表回复

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

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