Traceroute原理学习

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

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

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

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

原因有三:

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

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

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

 

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

 

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

 

Traceroute程序的操作过程:它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将T TL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1的I 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 怎样在pycharm中安装torch

    怎样在pycharm中安装torch1.方法一:首先尝试如下办法Pytorch安装及使用(Pycharm版)_OTip的博客-CSDN博客_pycharm安装pytorch2.方法二:其次尝试第二种办法windows中在pycharm中安装pytorch_垃圾就应该待在垃圾桶里的博客-CSDN博客_pycharm怎么安装pytorch3.方法三:最后尝试第三种方法torch包在pycharm里面的导入问题_木槿的世界-CSDN博客…

    2022年8月26日
  • 实验室管理系统数据库代码_实验室废液分类标准

    实验室管理系统数据库代码_实验室废液分类标准实验室设备管理系统SQL代码课程设计时的SQL代码,不是很完整,仅供参考。完整的实验室设备管理系统设计代码包括界面设计(使用的是C#)上传到了我的资源中。***界面截图***createdatabase实验室设备管理系统onprimary( name=’实验室设备管理_data’, filename=’E:\SqlServerData\实验室设备管理系统\实验室设备管理_data.mdf’, size=5MB, maxsize=100MB, filegrow

    2022年10月13日
  • 向量内积_向量的内积和外积公式

    向量内积_向量的内积和外积公式向量内积一般指点积;在数学中,数量积(dotproduct;scalarproduct,也称为点积)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。[1] 两个向量a=[a1,a2,…,an]和b=[b1,b2,…,bn]的点积定义为:a·b=a1b1+a2b2+……+anbn。使用矩阵乘法并把(纵列)

    2022年9月25日
  • spring boot打jar包、war包的区别

    spring boot打jar包、war包的区别maven打包项目的打包类型:pom、jar、warpacking默认是jar类型,<packaging>pom</packaging>———>父类型都为pom类型<packaging>jar</packaging>———>内部调用或者是作服务使用<packa…

    2022年5月15日
  • IIS7配置防盗链「建议收藏」

    IIS7配置防盗链「建议收藏」在IIS下如何实现Web的防盗链等Url重定向了,用下面的方法即可实现:1、下载微软官方提供的IISREWRITE模块:http://www.microsoft.com/downloads/zh-cn/details.aspx?familyid=1b8c7bd8-8824-4408-b8fc-49dc7f951a002、修改Web站点的web.config<syst…

    2022年7月23日
  • Oracle修改字段类型Sql –ORA-01439

    Oracle修改字段类型Sql –ORA-01439有一个表名为tb,字段段名为name,数据类型nchar(20)。1、假设字段数据为空,则不管改为什么字段类型,可以直接执行:altertabletbmodify(namenvarchar2(40));2、假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题:–修改原字段…

    2022年5月26日

发表回复

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

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