《TCP/IP详解 卷1:协议》之第七、八章:Ping Traceroute

目录

一、ICMP回显请求和回显应答

1、ICMP回显请求

2、ICMP回显应答

二、ARP高速缓存

三、IP记录路由选项(Record Route,RR)

1、记录路由选项的工作过程

2、RR 选项的 IP 头部格式

2.1、RR 请求

2.2、RR响应

四、ping 的去返路径

五、tracert 原理

1、TTL 字段

2. 工作过程

六、tracert 测试


一、ICMP回显请求和回显应答

ping + ip/域名,这应该是 ping 程序最被常用的指令了,用来检测网络的连通性。其中,主要包含两类 ICMP 报文:icmp回显请求和回显应答,其报文格式如下

1、ICMP回显请求

type = 8,code = 0

2、ICMP回显应答

type = 0,code = 0

二、ARP高速缓存

正如原文中说到:“通常,第1个往返时间值要比其他的大。这是由于目的端的硬件地址不在ARP高速缓存中的缘故。”

解释:通常情况下,当我们第一次ping一个陌生的域名时,会先尝试寻求 dns 解析域名得到 ip 地址,然后再发送 arp 得到 ip 地址对应的以太网地址,这会需要一定的时间。而当得到 ip 跟 以太网地址的映射后会记录到 APR 高速缓存中,在这个映射被老化之前,以后的 ping 就不再需要经过 arp 请求动作。所以在 ping ip/域名时,可能会出现 “第1个往返时间值要比其他的大” 的现象。

三、IP记录路由选项(Record Route,RR)

记录路由选项(RR):是一种IP选项,用于记录数据报在传输过程中经过的路由器的IP地址。ping 程序通过设置这个选项,可以追踪数据报的传输路径。

注:值得注意的是,RR 是一个 IP选项,而不是定义封装在 ICMP 报文中的。

1、记录路由选项的工作过程

  • 发送阶段

    • 当ping程序发送包含IPRR选项的IP数据报时,数据报中会预留一个字段用于记录路由信息。

    • 每个处理该数据报的路由器都会将自己的IP地址写入这个预留字段中。

    • 这样,数据报在传输过程中会逐步记录经过的路由器的IP地址。

  • 接收阶段

    • 当数据报到达目的地时,目标主机的IP地址也会被记录在清单中。

    • 目标主机收到数据报后,会生成一个ICMP回显应答报文。

    • 在回显应答报文中,记录路由选项字段中的IP地址清单会被复制到回显应答报文中。

    • 当回显应答报文返回到源主机时,沿途经过的路由器也会将自己的IP地址加入到清单中。

2、RR 选项的 IP 头部格式

如下头部格式所示:其中,options 的 Type 为 7 表示 RR。Tpye、Length、Pointer 各占 1字节。

注:需要说明的一点,IP首部中的首部长度字段只有 4bit,因此整个IP首部最长只能包括15个32 bit 长度(即60个字节)。由于IP首部固定长度为20字节,RR选项用去3个字节,这样只剩下37个字节(60-20-3)来存放IP地址清单,也就是说只能存放 9个 IP地址。

当我们使用 ping 命令时也会有提示,RR(IP地址)清单 有效范围为 1~9。

2.1、RR 请求

如下,是一个 ping 程序携带 -r 8 参数抓取的报文,可以看到:

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

②、len是RR选项总字节长度,即 35字节 = 3 +(4*8)。

③、pontier 称作指针字段,指向存放下一个IP地址的位置。它的最小值为4,指向存放第一个IP地址的位置。随着每个IP地址存入清单,ptr的值分别为8,12,16,最大到36。

④、在 IP首部初始化了8个四字节的“Empty Route”

2.2、RR响应

可以看到,pontier 指针的值为 20,即记录了 4 = (20/4 - 1) 个路由IP地址

四、ping 的去返路径

值得留意的是,ping 的出发路径跟返回返回路径并不一定是对等的。这取决于路径中的设备的路由决策。

比如,由设备A ping 目的设备C,其 ping 的出发路径是 A -> B -> C,

而返回路径可能是 C->D->B->A,这是因为对于 C 目标设备来说,它并不知道 A设备的确定路由,于是采用默认路由策略将分组送往 D设备。

五、tracert 原理

注:我是在 windows 上测试的,所以使用的是 tracer。如果你是在例如 linux 上系统上执行,应该使用的是 traceroute。

我们知道,IP首部中留给选项的空间有限,不能存放当前大多数的路径。在IP首部选项字段中最多只能存放9个IP地址。所以这通常没办法通过 ping 来探测一个完整路径。

所以我们需要其他方式来探测完整的路由路径,比如 tracert。 tracert 的工作原理基于 IP 协议中的 TTL(Time To Live,生存时间) 字段和 ICMP(Internet Control Message Protocol,互联网控制消息协议) 消息。

1、TTL 字段

  • 每个 IP 数据包都有一个 TTL 字段,初始值由发送方设置。

  • 每经过一个路由器,TTL 值会减 1。当 TTL 值减到 0 时,路由器会丢弃该数据包,并向发送方发送一个 ICMP Time Exceeded 消息。

  • tracert 利用这一机制来确定数据包经过的每一跳路由器。

2. 工作过程

  1. 发送数据包

    • tracert 从本地主机开始,发送一个带有 TTL 值为 1 的 UDP(或 ICMP)数据包到目标主机。

    • 第一个路由器收到数据包后,将 TTL 减 1,发现 TTL 为 0,于是丢弃数据包,并向发送方发送一个 ICMP Time Exceeded 消息。

    • 发送方收到这个消息后,记录下第一个路由器的 IP 地址。

  2. 递增 TTL 值

    • 接下来,tracert 再发送一个带有 TTL 值为 2 的数据包。

    • 数据包经过第一个路由器后,TTL 减 1 变为 1,继续到达第二个路由器。

    • 第二个路由器将 TTL 减 1,发现 TTL 为 0,于是丢弃数据包,并向发送方发送一个 ICMP Time Exceeded 消息。

    • 发送方记录下第二个路由器的 IP 地址。

  3. 重复过程

    • tracert 逐渐增加 TTL 值,依次记录每一跳路由器的 IP 地址,直到数据包到达目标主机。

    • 当数据包到达目标主机时,目标主机会返回一个 ICMP Echo Reply 消息,表示数据包已经到达目的地。

  4. 输出结果

    • tracert 将每一跳的路由器 IP 地址、延迟时间等信息显示出来,形成完整的路径。

六、tracert 测试

1、tracert 100.164.0.1 的执行结果如下图

其实际路径是:192.168.31.201 -> 192.168.31.1 -> 100.64.0.1

2、对应抓取的报文如下:

正如原文中所说 tracert 一次发三个包,这在上图的抓包中明显体现了这一点。为了简化分析,我们只保留一份数据,如下:

3、过程分析

①、192.168.31.201 向 100.64.0.1 发送 ICMP 回显请求,并设置 TTL = 1

②、上面的包传到 192.168.31.1 时,TTL 就为 0 了,所以会回一个 ICMP Time Exceeded 消息。

当 192.168.31.201 的 tracert 收到这个 ICMP 差错报告报文后,就知道第一个路由是 192.168.31.1,将其记录下来

③、然后将 TTL 设置为 2,继续发送

④、192.168.31.201 主机收到  ICMP Echo Reply 消息,表示知道数据包已经到达目的地。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30天通过软考高项-第四天

30天通过软考高项-第四天 任务:项目进度管理 思维导图阅读 知识点集锦阅读 知识点记忆 章节习题练习 知识点练习 手写回忆ITTO 听一遍喜马拉雅关于范围的内容 进度管理-背 1. 过程定义 龟腚排池至控 规划进度管理:为了规划、编制、管理…

根据JSON动态生成表单表格

根据JSON动态生成表单表格 一. 子组件 DynamicFormTable.vue1,根据JSON数据动态生成表单表格,支持表单验证JS部分1.1,props数据1.2,表单数据和数据监听1.3,自动验证1.4,表单验证1.5,获取表单数据1.6,事件处理1.7,暴露方法给父组件2,HTML部分二,父组件1, 模拟数据2,…

【赵渝强老师】快速上手TiDB数据库

从TiDBv4.0起,提供了包管理工具TiUP,负责管理TiDB、PD、TiKV等组件。用户只需通过TiUP命令即可运行这些组件,显著降低了管理难度。TiUP程序只包含少数几个命令,用来下载、更新、卸载组件。TiUP通过各种组件来扩展其功能。组件是一…

springboot入门-DTO数据传输层

在 Spring Boot 应用中,DTO(Data Transfer Object,数据传输对象) 是专门用于在不同层(如 Controller 层、Service 层、外部系统)之间传输数据的对象。它的核心目的是解耦数据模型和业务逻辑,避免…

安装docker,在docker上安装mysql,docker上安装nginx

目录 一.安装docker 1.1查看Linux版本的命令这里推荐两种: 1.2查看内核版本有三种方式: 2.安装 2.1 如果之前安装了docker,先删除旧版本的doker 2.2 安装需要的软件包,yum-util提供yum-config-manager功能,另外两…

Android killPackageProcessesLSP 源码分析

该方法用于终止指定包名/用户ID/应用ID下符合条件的应用进程,涉及多进程管理、资源冻结、进程清理及优先级更新等操作。核心流程分为进程筛选、资源冻结、进程终止与资源恢复三个阶段。 /*** 从已排序的进程列表中,提取从指定起始索引 startIdx 开始的连…

openAICEO山姆奥特曼未来预测雄文之三个观察

《三个观察》 山姆奥特曼 这篇文章主要讲的是关于AGI(人工通用智能)的未来发展及其对社会的影响,用大白话总结如下: 核心观点: AGI是什么? AGI是一种能像人类一样解决各种复杂问题的智能系统,比…

部署yolo到k230教程

训练:K230 借助 AICube部署AI 视觉模型 YOLO等教程_嘉楠 ai cube多标签分类-CSDN博客K230模型训练ai cube报错生成部署文件异常_aicube部署模型显示生成部署文件异常-CSDN博客 部署: # 导入必要的库和模块 import os import ujson # 超快的JS…

Flask 应用封装成 Docker 服务的完整技术指南

一、实现原理 容器化核心逻辑 Docker 通过将应用代码、运行环境和依赖项打包成镜像,实现环境一致性。Flask 应用容器化需包含: Python 基础运行环境项目代码及依赖库(requirements.txt)WSGI服务器(如 Gunicorn&#xf…

windows上的 Vmware Workstation 环境搭建

本文的视频版本:https://www.bilibili.com/video/BV1JhLRzyESh Vmware Workstation 是一款跨平台的桌面级虚拟化软件,可以使用 Vmware 创建虚拟机,我们一般使用 Linux 虚拟机(目前主流的 Linux 发行版是 Ubuntu)&…

Linux下终端命令行安装常见字体示例

一、准备工作: 准备好要安装的字体文件,如宋体、微软雅黑(simsun.ttc、msyh.ttc)。进入字体路径: /usr/share/fonts,使用root权限,新建一个目录shell_fonts。 二、命令行安装字体: 将要安装…

CentOS中在线安装Docker(超详细)

1)检查安装docker的基本要求: 64位CPU架构的计算机,目前不支持32为CPU架构的计算机 系统的Linux内核版本为3.10及以上 开启CGroups和namespace功能 2)使用命令查看当前系统的内核版本 [rootlocalhost ~]# uname -r 3.10.0-862…

武汉昊衡科技OLI光纤微裂纹检测仪:高密度光器件的精准守护者

随着AI技术应用越来越广,算力需求激增,光通信系统正加速向小型化、高密度、多通道方向演进。硅光芯片、高速光模块等核心器件内部的光纤通道数量成倍增加,波导结构愈发精细,传统检测手段因分辨率不足、效率低下,难以精…

Java数据结构——Stack

Stack 栈的概念和使用栈的概念栈的使用 栈的应用出栈元素序列有效的括号栈的压入、弹出序列逆波兰表达式最小栈 栈的概念和使用 栈的概念 栈(Stack):一种特殊的线性表,只允许再栈的一端进行插入和删除元素,这一端点被称为栈顶,另…

神经网络与计算机视觉

2016 年,随着 AlphaGo 在围棋比赛中击败李世石,“人工智能”、“神经网络”、“深度 学习”等字眼便越来越多的出现在大众眼前,智能化好像成为一种不可逆转的趋势,带给大家新奇感的同时也带来了一丝忧惧:在不远的未来,机器是否真的拥有思维和情感?《终结者》中天网大战人…

VS2019 与gitcode团队管理

1、安装git 点击下一步安装即可 2、vs2019连接gitcode 然后更改本地的代码添加文件等都可以进行远程同步操作了

Python类和对象四(十三)

魔法方法: 按位运算 按位于运算 只要相同才是1 或运算: 只要某个位是1结果就是1 、 按位非 将结果取反 按位异或: 左移和右移运算符: 右移两位 右移动n位,就是除以2的n次方 左移两位: 左移n位就是乘…

如何设置极狐GitLab 议题截止日?

极狐GitLab 是 GitLab 在中国的发行版,关于中文参考文档和资料有: 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 截止日期 (BASIC ALL) 可以在议题中使用截止日期,来跟踪截止日期并确保功能按时交付。用户至少需要报告者权限才…

如何在 Conda 环境中降级 Python 版本:详细指南

如何在 Conda 环境中降级 Python 版本:详细指南 Python 版本的管理在开发过程中至关重要,特别是在处理不同项目需求时。对于使用 Conda 环境的 Python 程序员来说,版本管理不仅仅是安装不同的 Python 版本,还涉及到依赖关系的兼容…

【随笔】地理探测器原理与运用

文章目录 一、作者与下载1.1 软件作者1.2 软件下载 二、原理简述2.1 空间分异性与地理探测器的提出2.2 地理探测器的数学模型2.21 分异及因子探测2.22 交互作用探测2.23 风险区与生态探测 三、使用:excel 一、作者与下载 1.1 软件作者 作者: DOI: 10.…