TCP/IP详解——ICMP协议,Ping程序,Traceroute程序,IP源站选路选项

文章目录

  • 一、ICMP 协议
    • 1. ICMP 概念
    • 2. ICMP 重定向
    • 3. ICMP 差错检测
    • 4. ICMP 错误报告/差错报文
    • 5. ICMP 差错报文的结构
    • 6. ICMP 源站抑制差错
    • 7. ICMP 数据包格式
    • 8. ICMP 消息类型和编码类型
    • 9. ICMP 应用-Ping
    • 10. ICMP 应用-Tracert
    • 11. BSD 对 ICMP 报文的处理
    • 12. 总结
  • PING 程序
    • 1. Ping 简介
    • 2. Ping 程序
    • 3. IP 记录路由选项
    • 4. IP 记录路由选项结构
    • 5. IP 时间戳选项
  • Traceroute 程序
    • 1. Traceroute 介绍
    • 2. Traceroute 和 IP 路径记录选项的区别
    • 3. Traceroute 原理
    • 4. Windows 下的 Tracert 数据包分析
    • 5. Traceroute 注意事项
  • IP 源站选路选项
    • 1. IP 源站选路选项
    • 2. IP 源站选路的操作机制

一、ICMP 协议

1. ICMP 概念

Internet 控制消息协议 ICMP(Internet Control Message Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,并对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。

ICMP通常被IP层或者更高层的协议(TCP/IP)使用。一些ICMP报文把差错报文返回给用户进程。(告诉应用程序网络上存在什么问题)

image-20230719095640905

ICMP用来出传递差错、控制、查询等信息。

2. ICMP 重定向

image-20230719095649381

PC主机端都有网关,例如主机A网关是100,他要发送报文首先向他的网关路由器打招呼,RTB得和他连接得接口IP就是100,所以第一个找他,RTB检查报文信息发现不是找他,而是找他同网段的另一台网关设备,所以RTB会向主机发送redirect(重定向)消息,让他去找200的RTA,RTA则会将报文转发给服务器A。

image-20231120104034278

  1. 我们假定主机发送一份IP数据报给R1(R1是主机的默认网关)。
  2. R1收到数据报并且检查它的路由表,发现R2是发送该数据报的下一跳。当它把数据报发送给R2时,R1检测到它正在发送的接口与接收到数据报的接口是相同的。
  3. R1发送一份ICMP重定向报文给主机,告诉它以后把数据报发送给R2而不是R1。

一旦默认路由发生差错,默认路由器将通知它进行重定向,并允许主机对路由表作相应的改动。

ICMP 重定向报文的格式如下

image-20231120105709176

ICMP重定向报文的接收者必须查看三个IP地址:

1. 导致重定向的IP地址(即ICMP重定向报文中包含的IP首部中的目的IP地址)。
2. 发送重定向报文的路由器的IP地址(IP数据报首部中的源IP地址)。
3. 应该采用的路由器IP地址(ICMP重定向报文中的4~7字节)。

image-20231120110608370

重定向的条件

在生成ICMP重定向报文之前这些条件需要满足:

  • 出接口必须等于入接口。
  • 用于向外传送数据包的路由不能被ICMP重定向报文创建或者修改过,而且不能是路由器的默认路由。
  • 数据包不能用源站选路来转发。
  • 内核必须配置成可以发送重定向报文。
  • 在修改路由表之前要作一些检查。这是为了防止路由器或主机的误操作,以及恶意用户的破坏,导致错误地修改系统路由表。
  • 新的路由器必须直接与网络相连接。
  • 重定向报文必须来自当前到目的地所选择的路由器。
  • 重定向报文不能让主机本身作为路由器。
  • 被修改的路由必须是一个间接路由。

3. ICMP 差错检测

ICMP Echo RequestICMP Echo Reply分别用来查询和响应某些信息,进行差错检测。

image-20230719095836864

主机A向服务器A发送报文为请求报文,也就是request 服务器收到要回复,称为reply

简单来讲,抓包出来的报文,有请求,有回复的就是能够连接的,如果只有请求没有回复就是没链接成功

4. ICMP 错误报告/差错报文

image-20230719095904082

ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,主机A可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,且最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。如果目的地不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息;如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息

当发送一份ICMP差错报文的时候,报文始终包含IP的首部和产生ICMP差错报文的IP数据包的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户的进程(根据包含在IP数据报前8个字节中的TCP或者UDP报文首部中的TCP或UDP端口号来判断)联系起来。

image-20230719145712428

ICMP差错报文的数据包如下:

image-20231118180358111

image-20231118180927607

  • IP数据包的前8个字节中包含有源端口,目的端口,总长度和校验和。源端口对应的一个应用程序。也就是说这个数据包报错是给某个应用程序看的(上图中很明显是TFTP应用程序出现问题,目的端口是69,而69端口是TFTP应用程序所占用的)。

注意:下面各种情况都不会导致产生ICMP差错报文:

  1. ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)
  2. 目的地址是广播地址或多播地址(D类地址)的IP数据报。
  3. 作为链路层广播的数据报。
  4. 不是IP分片的第一片(只有第一片才会产生差错报文)。
  5. 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。

这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。

5. ICMP 差错报文的结构

image-20231118183525201

ICMP的一个规则是,ICMP差错报文必须包含生成该差错报文的数据报IP首部(包含任何选项),还必须至少包含跟在该IP首部后面的前8个字节(在本例中是UDP首部)。

包含在UDP首部中的源端口号和目的端口号非常重要。就是由于目的端口号才导致产生了ICMP端口不可达的差错报文。而接收ICMP的系统可以根据源端口号来把差错报文与某个特定的用户进程相关联。导致差错的数据报中的IP首部要被送回的原因是因为IP首部中包含了协议字段,使得ICMP能够解释后面的8个字节(在本例中是UDP首部)。

6. ICMP 源站抑制差错

ICMP 源站抑制差错报文格式:

image-20231121092333558

在这里插入图片描述

当主机发送很多数据报,并且发送速度很快的时候。路由器转发不过来,资源不够了,缓存也缓存不下。就会发送一个ICMP源站抑制差错报文。

但是新的Router Requirements RFC 提出路由器不应该产生源站抑制差错报文。由于源站抑制要消耗网络带宽,且对于拥塞来说是一种无效而不公平的调整,因此现在人们对于源站抑制差错的态度是不支持的。

还需要指出的是,sock程序要么没有接收到源站抑制差错报文,要么接收到却将它们忽略了。结果是如果采用UDP协议,那么BSD实现通常忽略其接收到的源站抑制报文(TCP接受源站抑制差错报文,并将放慢在该连接上的数据传输速度)。其部分原因在于,在接收到源站抑制差错报文时,导致源站抑制的进程可能已经中止了。

7. ICMP 数据包格式

ICMP报文是在IP数据报内部被传输的。

ICMP报文分为两类,分别是查询报文差错报文

这里只是说ICMP数据包的格式,Type表示数据包类型,Code表示同一类型中不同的信息,Checksum也就是校验,用于检查消息是否完整,消息中包含32比特的可变参数,Checksum字段一般不使用

image-20230719100048498

ICMP消息封装在IP报文里,格式取决于Type和Code字段。ICMP报文内容可变,不使用时为0。

  • Type 是消息类型(8位)。类型字段可以有15个不同的值,以描述特定类型的ICMP报文。某些ICMP报文还使用代码字段的值来进一步描述不同的报文内容。

  • Code 是消息的具体参数(8位)。

  • Checksum 字段校验信息是否完整(16位校验和)。检验和字段覆盖整个ICMP报文。ICMP的检验和是必需的。

在ICMP的Redirect(重定向)消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到网关。

在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端向目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo请求和回复消息进行——对应。

ICMP Echo Request数据包

image-20231118170559474

ICMP Echo Reply数据包

image-20231118170637151

8. ICMP 消息类型和编码类型

image-20231118183643641

图中的最后两列表明ICMP报文是一份查询报文还是一份差错报文。对ICMP差错报文有时需要作特殊处理,因此我们需要对它们进行区分。

image-20230719100324016

  • ICMP定义了多种消息类型,并用于不同的场景。

  • 有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1)、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3)等。

主机不可达

image-20231118172340610

image-20231118172419653

Echo Request

image-20231118172300436

端口不可达

image-20231118172944968

UDP的端口不可达

image-20231118173103386

image-20231118173012227

需要分片但设置了不分片比特

DF位为1

image-20231118174422492

由于过滤,通讯被强制禁止

image-20231118174842124

9. ICMP 应用-Ping

image-20230719100814435

ICMP的一个典型应用是Ping。Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等,设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。

Ping常用的配置参数说明如下

  • -a:source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO-REQUEST报文发送的源地址。

  • -c:count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。

  • -h:ttl-value指定TTL的值。缺省值是255。

  • -t:timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO-REPLY的超时时间。

  • ping命令输出信息包括目的地址,ICMP报文长度、序号、TTL往返时间。序号包含在可变参数字段中,TTL包含在IP头中。

image-20230719135857824

Ping命令的输出信息中包括目的地址、ICMP报文长度、序号、TTL值以及往返时间。序号是包含在Echo回复消息(Type=0)中的可变参数字段,TTL和往返时间包含在消息的IP头中。

10. ICMP 应用-Tracert

image-20230719101638764

ICMP的另一个典型应用是Tracert(路由追踪)。

Tracert基于报文头中的TTL值来逐跳跟踪报文的转发路径。为了跟踪到达某特定目的地址的路径,源端首先将报文的TTL值设置为1。该报文到达第一个节点后,TTL超时,于是该节点向源端发送TTL超时消息,消息中携带时间戳。然后源端将报文的TTL值设置为2,报文到达第二个节点后超时,该节点同样返回TTL超时消息,以此类推,直到报文到达目的地。这样,源端根据返回的报文中的信息可以跟踪到报文经过的每一个节点,并根据时间戳信息计算往返时间。Tracert是检测网络丢包及时延的有效手段,同时可以帮助管理员发现网络中的路由环路。

Tracert常用的配置参数说明如下

  • -a:source-ip-address指定tracert报文的源地址。
  • -f:first-ttl指定初始TTL。缺省值是1。
  • -m:max-ttl指定最大TTL。缺省值是30。
  • -name:使能显示每一跳的主机名。
  • -p:port指定目的主机的UDP端口号。

image-20230719102444069

  • RTA向主机B发UDP报文,选择大于30000的端口数。
  • 第一跳,判断不是目的IP地址不是本机地址,TTL减一为零,丢弃报文发送ICMP超时报文(且含有该跳IP地址10.0.0.2),这样RTA得到RTB地址。
  • 第二跳,三跳类似。
  • 直到主机收到UDP报文,目的IP地址是本机地址,但没用应用程序对于UDP端口数,返回源一个ICMP端口不可达。源收到ICMP端口不可达后得知报文已经到目的端,停止Tracert程序,得到经历的路径
tracert www.baidu.com	# 路由追踪

image-20231112172536677

11. BSD 对 ICMP 报文的处理

BSD:Unix操作系统

image-20231118183601910

12. 总结

  • Ping使用的是哪两类ICMP消息

    • Ping利用ICMP Echo Request请求消息(Type值为8)来发起检测目的可达性。目的端收到ICMP Echo Request请求消息后,根据IP报文头中的源地址向源端发送ICMP Echo Reply回复消息(Type值为0)。
  • 当网络设备收到TTL值为0的IP报文时,会如何操作

    • 如果IP数据包在到达目的地之前TTL值已经降为0,则收到IP数据包的网络设备会丢弃该数据包,并向源端发送ICMP消息通知源端TTL超时。

PING 程序

1. Ping 简介

”ping” 这个名字源于声纳定位操作。其目的是为了测试另台主机是否可达。该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。

可以用Ping程序来确定问题出在哪里。Ping程序还能测出到这台主机的住返时间,以表明该主机离我们有 “多远“ 。

一台主机的可达性可能不只取决于IP层是否可达,还取决于使用何种协议以及端口号。Ping程序的运行结果可能显示某台主机不可达,但是可以用Telnet远程登录到该台主机的25号端口。

2. Ping 程序

我们称发送回显请求的Ping程序为客户,而称被Ping的主机为服务器。大多数的TCP/IP实现都在内核中直接支持Ping服务器,这种服务器不是一个用户进程。

Unix系统在实现ping程序时是把ICMP报文中的标识符字段置成发送进程的ID号。这样即使在同一台主机上同时运行了多个ping程序实例, ping程序也可以识别出返回的信息。

序列号从0开始,每发送一次新的回显请求就加1。ping程序打印出返回的每个分组的序列号,允许我们查看是否有分组丢失、失序或重复。IP是一种最好的数据报传递服务,因此这三个条件都有可能发生。

ICMP回显请求和回显应答报文如图所示:

image-20231119101219852

  • 标识符 Identifier:16位字段,通常由发送方设置,用于唯一标识发送的ping消息。这样即使在同一台主机上同时运行了多个ping程序实例, ping程序也可以识别出返回的信息。
  • 序列号 Sequence Number:16位字段,表示ping消息的序列号,通常由发送方设置,用于标识不同的ping消息。每发送一次新的回显请求就加1。ping程序打印出返回的每个分组的序号。
  • 选项参数
    • **数据 Data **包含数据字段,可以用来携带任意数据,通常用来填充数据以达到指定的数据包大小。

image-20231118221103056

序列号位是每发送一次新的Request请求就加1。

image-20231118221325504

Linux中的ping结果

image-20231119103356152

  • 当返回ICMP回显应答的时候,要打印出序列号和TTL值,并计算往返的时间。

  • 回显应答是以发送的次序返回的(0,1,2等)

  • ping程序通过在ICMP报文数据中存放发送请求的时间值来计算往返时间。当应答返回的时候,用当前时间减去存放在ICMP报文中的时间值,即是往返时间。

  • Windows的数据部分没有意义。

    image-20231119103811303

广域网输出(不常见)

image-20231119103250064

  • 重复的分组:可能看到两个icmp_seq 值一样的信息。
  • 失序的分组:可能看到icmp_seq值9在8的前面。
  • 表示IP协议是不可靠的协议,可以重复,丢失,失序…

3. IP 记录路由选项

IP记录路由选项是IPv4协议中的一种选项,用于在IP数据报文头部中记录数据包在传输过程中经过的路由节点。当一个数据包通过互联网传输时,它可能会经过多个路由器和网络节点,IP记录路由选项可以用来记录这些经过的节点信息。

  • ping程序为我们提供了查看IP记录路由(RR)选项的机会。大多数不同版本的ping程序都提供 -R 选项,以提供记录路由的功能。它使得ping程序在发送出去的IP数据报中设置IP的RR选项(该IP数据报包含ICMP回显请求报文)。这样,每个处理该数据报的路由器都把它的IP地址放入选项字段中。当数据报到达目的端时, IP地址清单应该复制到ICMP回显应答中,这样返回途中所经过的路由器地址也被加入清单中。当ping程序收到回显应答时,它就打印出这份IP地址清单。

    • 在IP数据报中,“RR"通常指的是"Record Route”(记录路由)选项。记录路由选项允许数据包在传输过程中记录经过的路由器的IP地址,以便后续分析和跟踪数据包的路径。
  • 最大的问题是IP首部中只有有限的空间来存放IP地址(IP首部一共站60个字节)。IP首部中的首部长度字段只有4bit,因此整个IP首部最长只能包括15(4bit全为1,8+4+2+1=15)个32bit长的字(即60个字节)。由于IP首部固定长度为20字节, RR选项用去3个字节,这样只剩下37个字节(60-20-3)来存放IP地址清单,也就是说只能存放9(4×9)个IP地址。

4. IP 记录路由选项结构

image-20231119111847343

  • code:是一个字节,指明IP选项的类型。对于RR选项来说,它的值为7。

  • 长度(Length):占据1个字节,表示RR选项的总长度,包括类型和长度字段自身,以及后续的地址字段。通常情况下,长度为3至39,具体取决于记录的路由节点数量。(尽管可以为RR选项设置比最大长度小的长度,但是ping程序总是提供39字节的选项字段,最多可以记录9个IP地址。由于IP首部中留给选项的空间有限,它一般情况都设置成最大长度)。

  • ptr称作指针字段。它是一个基于1的指针,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单, ptr的值分别为8,12,16,最大到36。当记录下9个IP地址后,ptr的值为40,表示清单已满。

  • 地址(Address):每个地址占据4个字节,记录经过的路由器的IP地址。选项字段中可以包含多个地址,根据长度字段确定数量。

当路由器(根据定义应该是多穴的)在清单中记录IP地址时,它应该记录哪个地址呢?是入口地址还是出口地址?为此,RFC 791 [Postel 1981a] 指定路由器记录出口IP地址。当原始主机(运行pins程序的主机)收到带有RR选项的ICMP回显应答时它也要把它的入口IP地址放入清单中。

路径记录是记录的出接口

5. IP 时间戳选项

时间戳功能没什么用处。

IP时间戳选项与记录路由选项类似。

image-20231119145531760

  • 时间戳选项的代码为0x44。其他两个字段len和ptr与记录路由选项相同:选项的总长度(一般为36或40)和指向下一个可用空间的指针( 5,9,13等)。接下来的两个字段是4 bit的值:

    • OF 表示溢出字段。

    • FL 表示标志字段。

  • 时间戳的取值一般为自UTC午夜开始计的毫秒数,与ICMP时间戳请求和应答类似。如果路由器不使用这种格式,它就可以插入任何它使用的时间表示格式,但是必须打开时间戳中的高位以表明为非标准值。

  • 与我们遇到的记录路由选项所受到的限制相比,时间戳选项遇到情况要更坏一些。如果我们要同时记录IP地址和时间戳(标志位为1),那么就可以同时存入其中的四对值。只记录时间留戳是没有用处的,因为我们没有标明时间戳与路由器之间的对应关系(除非有一个永远不变的拓扑结构)。

Traceroute 程序

Windows下是Tracert

Linux下是Traceroute

1. Traceroute 介绍

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。Traceroute可以看到 IP 数据从一台主机传到另一台主机所经过的路由。尽管ping工具也可以进行侦测,但是因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。

Traceroute程序还可以让我们使用IP源路由选项。

Traceroute程序发送的是UDP的数据包,而且目的端口是一个高端口

2. Traceroute 和 IP 路径记录选项的区别

描述了IP记录路由选项(RR)。为什么不使用这个选项而另外开发一个新的应用程序?有三个方面的原因。

  • 首先,原先并不是所有的路由器都支持记录路由选项,因此选项在
  • 某些路径上不能使用(Traceroute 程序不需要中间路由器具备任何特殊的或可选的功能)。
  • 其次,记录路由一般是单向的选项。发送端设置了该选项,那么接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端。大多数ping服务器的实现(内核中的ICMP回显应答功能)把接收到的RR清单返回,但是这样使得记录下来的IP地址翻了一番(一来一回)。这样做会受到一些限制(Traceroute程序只需要目的端运行一个UDP模块一其他不需要任何特殊的服务器应用程序)。
  • 最后一个原因也是最主要的原因是,IP首部中留给选项的空间有限,不能存放当前大多数的路径。

3. Traceroute 原理

Traceroute的原理是,它收到目的主机的 IP 后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生了一个主机不可达的ICMP数据报给主机。

主机收到数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样Traceroute就拿到了所有的路由器IP。从而避开了IP头只能记录有限路由IP的问题。

那么是怎么知道UDP到没到达目的主机呢?这就涉及一个技巧的问题,TCP和UDP协议有一个端口号定义,而普通的网络程序只监控少数的几个号码较小的端口,比如说80,比如说23,等等。而Traceroute发送的是端口号>30000的UDP数据报,所以到达目的主机的时候,目的主机只能发送一个端口不可达的ICMP数据报给主机。主机接到这个报告以后就知道,目的主机到了。

  • 通过使用高端口号,Traceroute可以确保其发送的ICMP数据包不会与正在运行的服务之间发生冲突,从而更准确地显示跟踪数据包在网络中的路径和延迟情况。

Traceroute程序里面提供了一些很有用的选项,甚至包含了IP选路的选项。

Cisco的Traceroute工作原理

在cisco中,发送去往目的地UDP:33434(端口号)(cisco默认),TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地UDP:33435,TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,如此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,继续查看4层信息,发现端口自己没有开启,会给源发送一个ICMP差错信息端口不可达信息。当源读取这个端口不可达信息,就知道到达目的地了,继续打印出来。

微软的Tracert的工作原理

发送去往目的地的ICMP请求报文TTL值为1的报文,到达第一个路由器时,路由器发现TTL值为1,路由器就会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,然后继续发送去往目的地的ICMP请求报文TTL值为2的报文,到达第二个路由器时,路由器发现TTL值为1,路由器又会给源发送一个ICMP差错信息TTL不可达。当源收到ICMP时,读取ICMP中的源地址打印出来,若此重复,获取经过的所有路由,当抵达目的时,目的地路由器发现是找自己的,不会看TTL值是否为1,直接回应一个ICMP应答报文,当源读取这个ICMP应答报文时,就知道到达目的地了,继续打印出来。

4. Windows 下的 Tracert 数据包分析

追踪数据包从本机到Kali虚拟机的路径。

tracert 192.168.199.249

image-20231119161150791

发送Echo Request,第一跳的TTL值为1。

image-20231119161103692

如果返回Echo Reply数据包,就证明抵达目的地。

image-20231119161536753

尝试追踪数据包从本机到www.baidu.com的路径。

tracert www.baidu.com

image-20231119161950783

发现后面的数据包中的TTL值是逐渐增加的。

image-20231119162633221

TCMP差错报文。

image-20231119162313519

最后抵达目的地是Echo reply数据包。

image-20231119162358375

5. Traceroute 注意事项

image-20231119164440289

  • 源端口号(42804)看起来有些大。traceroute程序将其发送的UDP数据报的源端口号设置为Unix进程号与32768之间的逻辑或值。对于在同一台主机上多次运行traceroute程序的情况,每个进程都查看ICMP返回的UDP首部的源端口号并且只处理那些对自己发送应答的报文。

  • 第一:并不能保证现在的路由也是将来所要采用的路由,甚至两份连续的IP数据报都可能采用不同的路由。

  • 第二:不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由。这表明所打印出来的往返时间可能并不能真正体现数据报发出和返回的时间差(如果UDP数据报从信源到路由器的时间是1秒,而ICMP报文用另一条路由返回信源用了3秒时间,则打印出来的往返时间是4秒)。

  • 第三:返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。这与IP记录路由选项不同,记录的IP地址指的是发送接口地址。由于每个定义的路由器都有2个或更多的接口,因此,从A主机到B主机上运行 traceroute 程序和从B主机到A主机上运行traceroute程序所得到的结果可能是不同的。

  • Traceroute是入接口,而IP路径记录是出接口

  • Traceroute需要发送三个数据包到目标主机,这样三个数据包的平均值才是有效的,有助于提高Traceroute结果的准确性和可信度。

IP 源站选路选项

IP源站选路选项是IPv4协议中的一种选项,用于指示数据包在传输过程中经过指定的路由节点。当一个数据包携带了源站选路选项时,它将会按照选项中指定的路由路径进行传输,而不再依赖于网络中的动态路由选择。

1. IP 源站选路选项

源站选路的思想是由发送者指定路由。可以采用以下两种形式。

严格源站路由选择:发送端指明IP数据报所必须采用的确切路由,,那么它就会返回一个 “源站路由失败” 的 ICMP 差错报文。(里面的IP地址必须的直连路由

宽松的源站路由选择:发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

image-20231119170549991

  • 这个格式与记录路由选项格式基本一致。不同之处是,对于源站选路必须在发送IP数据报前填充IP地址清单;而对于记录路由选项,我们需要为IP地址清单分配并清空一些空间,并让路由器填充该清单中的各项。
  • 对于源站选路,只要为所需要的IP地址数分配空间并进行初始化,通常其数量小于9。而对于记录路由选项来说,必须尽可能地分配空间,以达到9个地址。
  • 对于宽松的源站选路来说,code字段的值是0x83;而对于严格的源站选路,其值为0x89。len和ptr字段与记录路由选项格式中所描述的一样。

image-20231119171228436

源站路由报错数据包:

image-20231119173207857

2. IP 源站选路的操作机制

image-20231119171926824

图中的#号表示下一跳的地址。

image-20231119172017180

当一个源站路由发出时,指针会指向选项位的第一个IP地址,相当于告诉客户端第一条去哪,然后R1收到的会是指针指向下一跳的IP地址,在R1发送出去的时候,会将自己出接口的IP地址填写到选项位的第一个IP地址(回去的时候才知道反向的源站路由),如此重复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/245952.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:队列

数据结构:队列 文章目录 数据结构:队列1.队列常用操作:2.队列的实现3.队列典型应用 ***「队列 queue」是一种遵循先入先出规则的线性数据结构。***队列模拟了排队现象,即新来的人不断加入队列尾部,而位于队列头部的人逐…

Visual studio+Qt开发环境搭建以及注意事项和打开qt的.pro项目

下载qt-然后安装5.14.2_msvc2017 不知道安装那个就全选5.14.2的父级按钮 https://download.qt.io/archive/qt/5.14/5.14.2/ 安装Visual studio,下载直接下一步就行 配置Visual studio的qt环境 在线安装-重启Visual studio会自动安装 离线安装-关闭Visual studio点击安装 关闭…

a16z:加密行业2024趋势“无缝用户体验”

近日,知名加密投资机构a16z发布了“Big ideas 2024”,列出了加密行业在 2024 年几个具备趋势的“大想法”,其中 Seamless UX(无缝用户体验)赫然在列。 从最为直观的理解上,Seamless UX 是在强调用户在使用产…

路由器原理

目录 一.路由器 1.路由器的转发原理 2.路由器的工作原理 二.路由表 1.路由表的形成 2.路由表表头含义 直连: 非直连: 静态 静态路由的配置 负载均衡(浮动路由) 默认路由 动态 三.交换与路由对比 一.路由器 1.路由器…

独立完成软件的功能的测试(4)

独立完成软件的功能的测试(4) (12.14)(功能测试>头条项目实战) 项目总体概述 项目背景和定位:一款汇聚科技咨询,技术文章和问答交流的用户移动终端产品,用户可以通过…

STM32在CTF中的应用和快速解题

题目给的是bin文件,基本上就是需要我们手动修复的固件逆向。 如果给的是hex文件,我们可能需要使用MKD进行动态调试 主要还是以做题为目的 详细的可以去看文档:https://pdf1.alldatasheet.com/datasheet-pdf/view/201596/STMICROELECTRONIC…

微服务学习:Gateway服务网关

一,Gateway服务网关的作用: 路由请求:Gateway服务网关可以根据请求的URL或其他标识符将请求路由到特定的微服务。 负载均衡:Gateway服务网关可以通过负载均衡算法分配请求到多个实例中,从而平衡各个微服务的负载压力。…

一入二出热电阻温度信号隔离变送器

一入二出热电阻温度信号隔离变送器 用于测量铂热电阻Pt10,Pt100,Pt1000,Cu50,Cu100的热电阻传感器的小型仪器设备。广泛应用于工业测量温度系统,是降低成本且有效的测量方式。 型号:JSD TARZ-1002系列 我们来看下有什么特点: ◆小体积&#x…

天猫数据分析平台-天猫销售数据查询软件-11月天猫平台冲锋衣市场销售运营数据分析

随着气温逐渐下降,保暖服饰迎来热销,冲锋衣的需求大增。如今冲锋衣已经不仅仅是户外运动的装备,还成为很多年轻人的日常穿搭和时尚的追求。 新的穿搭趋势也带来了巨大的市场机会。据公开数据显示,中国有冲锋衣生产及经营企业超过8…

竞赛保研 python+opencv+机器学习车牌识别

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器学习的车牌识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖,适…

什么是纯净IP?如何判断IP地址的纯净度?有哪些干净IP推荐?

您是否想知道什么使代理“干净”或如何确保您的代理不会将您列入网站的黑名单?对于通过代理访问网络的人来说,干净的代理是无缝在线体验的重要组成部分。在这篇文章中,我们将深入研究干净代理的世界,并探讨决定其质量的因素。 一、…

k8s常用命令及示例(三):apply 、edit、delete

k8s常用命令及示例(三):apply 、edit、delete 1. kubectl apply -f 命令:从yaml文件中创建资源对象。 -f 参数为强制执行。kubectl apply和kubectl create的区别如下:kubectl create 和 kubectl apply 是 Kubernetes 中两个常用的命令&…

加速数据采集:用OkHttp和Kotlin构建Amazon图片爬虫

引言 曾想过轻松获取亚马逊上的商品图片用于项目或研究吗?是否曾面对网络速度慢或被网站反爬虫机制拦截而无法完成数据采集任务?如果是,那么本文将为您介绍如何用OkHttp和Kotlin构建一个高效的Amazon图片爬虫解决方案。 背景介绍 亚马逊&a…

Spring Boot之自定义starter

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于Spring Boot的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一. starter是什么 二.为什么要使…

万界星空科技AI低代码云MES系统

在企业生产管理过程中,从市场、生产现场到产品交付,生产制造行业都面临着诸多挑战,比如: 订单排产难度大:订单混乱,常漏排产、错排产;产能不明晰,无法承诺交期,常丢单&a…

智慧工地源码(微服务+Java+Springcloud+Vue+MySQL)

智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三…

python selenium chrome114版本之后环境配置和携带缓存打开chrome

尽力局 chrome驱动环境配置chrome打开带缓存设置待缓存打开自动关闭浏览器自动关闭浏览器弹窗 最终代码找资料难啊最终效果代码 依赖包和生成依赖包方法关闭谷歌升级 chrome驱动环境配置 网上找到的资料,我现在安装的是120版本的,这个资料是可行的。比较…

物流实时数仓:数仓搭建(DWD)一

系列文章目录 物流实时数仓:采集通道搭建 物流实时数仓:数仓搭建 物流实时数仓:数仓搭建(DIM) 物流实时数仓:数仓搭建(DWD)一 文章目录 系列文章目录前言一、文件编写1.目录创建2.b…

亚信科技AntDB数据库——深入了解AntDB-M元数据锁的实现(一)

锁的获取 5.1 锁的强弱 当线程已经持有的锁比新申请的锁更强时,认为已经持有了锁,无需再对申请锁类型加锁。锁的强弱指持有的锁与其他锁的不兼容集合大小,集合相同锁相同,集合更大锁更强,否则无强弱关系。通过锁的兼…

Kafka-Kafka基本原理与集群快速搭建

一、Kafka介绍 ​ ChatGPT对于Apache Kafka的介绍: Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理…