TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]

TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]作用可以让我们看到IP数据报从1台主机传到另一台主机所经过的路由。比Ping程序看到更多东西优势不是所有路由器都支持RR选项。所以有些路由器上会出现不记录IP的现象。Traceroute不需要路由器具备任何特殊的功能RR选项的数据报的目的Ping服务器(主机)会将接受到的RR清单Copy回去。然后再加上回去的IP清单。这样就是X2。这会收到一些限制IP首部的空间有限,不能存放太多的IP…

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

作用

可以让我们看到IP数据报从1台主机传到另一台主机所经过的路由。比Ping程序看到更多东西

优势

  1. 不是所有路由器都支持RR选项。所以有些路由器上会出现不记录IP的现象。Traceroute不需要路由器具备任何特殊的功能
  2. RR选项的数据报的目的Ping服务器(主机)会将接受到的RR清单Copy回去。然后再加上回去的IP清单。这样就是X2。这会收到一些限制
  3. IP首部的空间有限,不能存放太多的IP(最多9个)
  4. 将TTL字段改成跳站的计数器

TTL

如果TTL的值为1或0时,路由器丢弃该数据报。并且给源主机发送一份ICMP超时信息。Traceroute程序将该路由器的IP地址包含在这份ICMP数据报中

如果是主机返回的ICMP是端口不可达的ICMP数据报。以此来区分路由器发送回来的还是主机发送回来的

ICMP超时报文

在这里插入图片描述

如果是TTL值等于0的时候产生的那code字段的值为0
如果是组装分片的时候发生超时,则code字段的值为1

Traceroute注意事项

不能保证ICMP报文的路由与Traceoute程序发送的UDP数据报采用同一路由
返回的ICMP数据报中包含的信源地址是路由器地址。但是IP记录路由选项(RR)是记录发送接口的地址。由于路由器有多个接口因此 A-B和B-A上运行Traceroute的返回结果可能会有所不同

IP源站选路选项

路由器发现下一站需要转发的路由器通常是采用Traceroute这样的程序完成。由发送者指定路由
规则有两种,严格的源路由选择(SSRR)和宽松的源路由选择(LSRR)
严格的源路由选择: 发送端指明IP数据报所要经过的确切路由,如果该IP不在其直接相连的网络上,则返回一个“源站路由失败”的ICMP差错报文
宽松的源路由选择:发送端指名IP数据报所要经过的IP清单,清单上的任意两个IP地址之间可以通过其他路由器

IP首部路由选项通用格式
在这里插入图片描述
跟IP路由选项的格式一样,不同的是源站选路一开始就要把清单填入。并且只需要分配足够的空间即可(IP地址清单通长会少于9个)
宽松的源站选路的code是0x83,严格的是0x89

源站路由选项运行过程:

  1. 发送主机收到源站路由清单,将第1个表项去掉(数据报的最终目的地),将剩下的项往前移动,然后将目的地址作为清单最后一项,类似把原本第一行的数据丢到最后一行去
  2. 每个处理数据报的路由都会检查自己的IP是否是清单中的最终地址。如果不是则转发(宽松的源站选路才可以)
  3. 如果路由是最终地址了那就将路由器的外出接口相对应的IP设为源地址,指针+4
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

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


相关推荐

  • MODIS数据介绍及下载

    MODIS数据介绍及下载MODIS数据简介中分辨率成像光谱仪(MODerate-resolutionImagingSpectroradiometer)-MODIS是Terra和Aqua卫星上搭载的主要传感器之一。MODIS标准数据产品根据内容的不同分为0级、1级数据产品,在1B级数据产品之后,划分2-4级数据产品,包括:陆地标准数据产品、大气标准数据产品和海洋标准数据产品等三种主要标准数据产品类型,总计分解为44种标准数据产品类型。数据产品的详细介绍参考博文。官网下载数据数据产品投影MODIS数据采用正弦投影(Sin

    2022年5月30日
    80
  • 不是单组分组函数「建议收藏」

    不是单组分组函数「建议收藏」问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

    2022年6月30日
    29
  • 安装与卸载tensorflow-gpu

    安装与卸载tensorflow-gpu安装到Anaconda:安装:pipinstalltensorflow-gpu==1.2.1pipuninstall tensorflow-gpu==1.2.1安装与卸载keras同样:安装:pipinstallkeras==2.0.5pipuninstallkeras=2.0.5

    2022年6月22日
    82
  • 微软面试-微软面试题(5)[通俗易懂]

    微软面试-微软面试题(5)[通俗易懂]微软面试题-头脑  ★如果你有一个许多部件可以拆卸的时钟,你将它一块块拆开,但是没有记住是怎样拆的。然后你将各个零件重新组装起来,最后发现有三个重要零件没有放进去。这时你如何重新组装这个时钟?  ★如果你需要学习一门新的计算机语言,你会怎样做?  ★假设由你负责设计比尔·盖茨的卫生间。当然,钱不成问题,但是你不可以和比尔谈。你会怎样做?  ★到目前为止,你遇到的最难回答的问题是什么?  ★如果微软

    2022年8月26日
    8
  • 你了解System.out.println()的真正含义吗?

    你了解System.out.println()的真正含义吗?在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?  其实System是java.lang里面的一个类,如下图:     而out就是System里面的一个静态数据成员,而且这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可…

    2025年7月24日
    3
  • 微信小程序switchTab传参以及接收参数

    微信小程序switchTab传参以及接收参数我们可以在switch跳转之前设置一个全局变量,到下一个页面的时候,直接去获取全局变量。index.js保存参数先。contact.js获取参数。这样的传参方式是不行的。

    2025年6月21日
    4

发表回复

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

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