Traceroute原理学习

Traceroute原理学习Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。曾经介绍过IP记录路由的选项RR,为什么不使用这个选项而另外开发一个新的应用程序Traceroute呢?原因有三:其一,并不是所有的路由器都支持记录路由这个选项;其二,记录路由一般是单向的选项,发送端设置了该选项,接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数的ping服

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

Traceroute可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。

曾经介绍过IP记录路由的选项RR,为什么不使用这个选项而另外开发一个新的应用程序Traceroute呢?

原因有三:

其一,并不是所有的路由器都支持记录路由这个选项;

其二,记录路由一般是单向的选项,发送端设置了该选项,接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数的ping服务器把接收到的RR清单返回(存于ICMP中),这样使得记录的IP地址翻了一番。

其三,IP首部的空间有限,不能存放当前大多数的路径。只能存放9IP地址。

 

Traceroute使用ICMP报文和IP首部中的TTL字段。TTL字段是由发送端初始设置的一个8bit的字段,推荐值为64,。每个处理数据包的路由都需要把TTL的值减1或者减去在路由器中停留的秒数,由于大多数路由器的转发数据包的时延都小于1秒,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减1

 

当路由器收到一个IP数据包时,如果其TTL字段是0或者1,则路由器不转发该数据报,而是将该数据包丢弃,并给信源机发送一份ICMP超时信息,Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。

 

Traceroute程序的操作过程:它发送一份TTL字段为1IP数据报给目的主机。处理这份数据报的第一个路由器将T TL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1I P数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?

Traceroute程序发送一份U DP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的U DP模块产生一份端口不可达错误的I CMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。

Traceroute出到百度主机的过程:

Traceroute原理学习

查看本机路由:

Traceroute原理学习

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

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

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


相关推荐

  • 常用邮件服务器软件(邮件服务器软件哪个好)

    常见邮件服务器软件1.微软ExchangeServer[3]​2.TurboMail3.Coremail4.U-Mail5.lifecube网络宝邮件服务器6.MDaemonServer7.WinWebMail8.IceWarp/MerakMailServer9.LotusDomino/Notes10.Postfix/Sendmail/Qm…

    2022年4月17日
    61
  • [教程] 《Mysql 实战 45 讲》[通俗易懂]

    [教程] 《Mysql 实战 45 讲》

    2022年2月17日
    137
  • anaconda3如何卸载干净「建议收藏」

    anaconda3如何卸载干净「建议收藏」最近跑代码的时候老出现各种错误,因为之前卸载过一次anaconda,所以猜测可能是没有卸载干净,所以又重新卸载了一遍,为了防止再次出现卸载不干净的情况,找了很久,终于从官网上找到了能够卸载干净的方法。安装Anaconda-Cleanpackage 打开AnacondaPrompt,输入命令行: condainstallanaconda-clean 接着输入命令行进行卸载…

    2022年6月29日
    296
  • STM32中重定向printf到SWO口[通俗易懂]

    STM32中重定向printf到SWO口[通俗易懂]Keil中调试:用SWO功能替代printf引用网址:http://blog.csdn.net/xiaolei05/article/details/8526021嵌入式软件开发中的一个基本需求就是能通过终端来输出调试信息,一般可通过2种方式实现:一种是使用串口线连接板上的UART和PC上的COM口,通过PC上的超级终端来查看调试信息;另一种则是采用半主机机制,但有可能不被

    2025年6月1日
    1
  • hibernate二级缓存策略

    hibernate二级缓存策略ibernate二级缓存策略2008-08-0111:00相关文章:关于HibernateCache数据库对象的缓存策略Spring+Hibernate缓存不起作用推荐圈子:JBPM@net更多相关推荐很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了。我的经验主要来自hi

    2022年5月23日
    31
  • 微信小程序api

    微信小程序api1.api1.概述小程序开发框架提供丰富的微信原生API,可以方便的调起微信提供的能力,如获取用户信息,本地存储,支付功能等2.api分类监听api约定以on开头的API用了来监听某个事件是否触发同步api约定,以Sync结尾的API都是同步API,直接接取函数返回的的结果既可,不需要等待异步api大多数API都是异步API,如wx.request,wx.login等,异步api方法主体是object结构,都有success/faill/complete几乎所有的异步api都支

    2022年7月16日
    18

发表回复

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

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