认识ICMP协议 —— ping命令的作用过程

article/2025/9/16 17:37:46

目录

一、为什么需要ICMP协议?

二、ICMP协议的报文格式

三、ICMP协议的作用过程(ping命令的作用过程)

1、通过DNS解析域名

2、封装各个协议的报头

3、发送包

四、ping命令的坑


ICMP协议是一个网络层协议,但在IP协议之上,用于检测网络的连通性,平时我们使用的ping命令使用的就是ICMP协议。

一、为什么需要ICMP协议?

ICMP协议用于检查网络是否连通,你或许会疑惑,直接给对方发一个报文,如果对方有应答,那就说明连通了;如果没有就说明没连通。

这种理解存在误区,如果在传输过程中丢包了,网络层不提供可靠性传输,丢了就丢了,也不会通知传输层TCP协议,正是因为如此,TCP长时间没有收到响应,就会触发超时重传机制。

因此,ICMP协议能够检测网络是否连通,并提供传输异常的原因。

二、ICMP协议的报文格式

报文格式只是简单了解ICMP是怎么将应答或者错误信息反馈给我们的。这里主要了解 8位类型 和 返回内容的对应关系。

8位类型字段和报文内容的对应关系如下: 

三、ICMP协议的作用过程(ping命令的作用过程)

下面使用ping命令来了解ICMP协议的作用过程,假设我们ping的是 baidu.com。

1、通过DNS解析域名

用户输入的是域名baidu.com,但是封装IP报头需要的是IP地址,因此,用户输入域名的时候,会自动查询DNS 服务器,由DNS服务器检索数据库, 得到对应的IP地址 39.156.66.10

2、封装各个协议的报头

一些管理员命令使用的是原始套接字,这些套接字绕过了传输层直接发送IP报文,ping命令算是其中之一,使用ping命令的时候相当于应用层直接告诉ICMP协议,我想测试一下与IP地址39.156.66.10 是否连通。

  • 一开始是请求,所以ICMP协议的类型字段填入的是“询问报文”对应的值
  • 交给IP协议封装IP协议的报头;
    • 如果不知道下一跳的Mac地址,下面就要交给ARP协议获取下一跳的Mac地址;
    • 如果知道,直接进行下一步操作;
  • 获取到Mac地址以后,封装Mac帧报头

3、发送包

当主机X发送的报文到达路由器B的时候,路由器B为了获取到服务器的Mac地址,会发送ARP请求,但是如果多次发送ARP请求无响应,此时路由器B就会返回一个ICMP的包给主机X,这个包里就携带了错误信息。

 正常情况下,如果我们发送的测试报文能到达服务器,ping命令得到的结果如下:

四、ping命令的坑

telnet是23端口,ssh是22端口,ping是什么端口?很显然这是一个坑,端口号是传输层为了向上交付给应用层,但ping命令绕过了传输层,直接发送IP报文。


http://chatgpt.dhexx.cn/article/35y4D33D.shtml

相关文章

ICMP详解和实例分析

ICMP是网际报文控制协议,它是一个对IP协议的补充协议。允许主机或路由器报告差错情况和异常状况。 一、ICMP报文格式和各个字段的含义 ICMP报文的格式如下: ICMP协议封装在ip协议中,ICMP有很多报文类型,每一个报文类型又各自不相…

ICMP

网际控制报文协议 ICMP : 为了提高 IP 数据报交付成功的机会,在网际层使用了网际控制报文协议 ICMP (InternetControl Message Protocol)。 ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP 不是高层协议,而是 IP 层的协议。ICMP 报文作为 IP 层…

ping的整个流程详解(icmp)

原文:ping好几年 ?今天终于把 ping 的原理搞懂了,打算图解教你!_小林coding-CSDN博客 原文的大佬一整个系列都写的非常优秀,转载只为了个人记录 文章目录 前言正文IP协议的助手 —— ICMP 协议查询报文类型差错报文类…

icmp 报文详解

以下内容转载自: http://blog.csdn.net/tigerjibo/article/details/7356936 写的很好的 icmp 报文详解: 一.概述: 1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议&#xff…

icmp超详细讲解

最近被CISSP题目中各种攻击搞得晕晕的,找到一个详细的介绍ICMP的,写的真的很好。。。 目录 1.ICMP出现的原因 2.ICMP的用途 3.ICMP作为IP的上层协议在工作 4.ICMP实现之MTU探索 5.ICMP实现之改变路由 6.ICMP实现之源点抑制 7.ICMP实现之ping命令 …

常见的使用ICMP协议的命令

本文将介绍几种使用ICMP协议的命令,这些命令在网络测试和排错都有重要的作用。 1、ping命令 ping命令是检查网络是否畅通的常用命令,使用 ping 主机ip 后返回的数据包如图: 我们输入ping www.baidu.com,电脑会自动向DNS服务器查…

ICMP的使用

大家好呀,我是请假君,今天又来和大家一起学习数通了,今天要分享的知识是ICMP。 RFC792定义的ICMP ( Internet Control Message Protocol,互联网控制消息协议)是一个网络层协议,基于IP运行。ICMP定义了错误报告和其它回…

ICMP详解

ICMP简介 ICMP的全称是Internet Control Message Protocol。也就是网络控制报文协议。 ICMP是一个网络层协议。用来检测IP报文是否能够正常发送,以及出错原因,以及查询主机的信息。 也就是差错查询和信息查询。 我们经常使用的ping工具就是利用ICMP实…

JMeter官网文档

JMeter官网文档API 步骤: 解压下载的安装包进入\apache-jmeter-5.4.1\docs\api目录打开index.html网页显示内容如下:

如何使用Jmeter,看完这本指南你就知道了

序言 由于公司在来年需要进行压力测试,所以也就借节假日的机会来学习一下压力测试的步骤,由于本人的学习时间比较短,希望各位大神朋友们能够多多的谅解并指正在下的错误,在此仅表敬意 适应人群 1、初入门的压力测试工程师 2、…

01-下载安装jmeter

1、前期准备: 下载配置好jdk:下载地址,点击下载 配置教程参考: 2、jmeter下载地址: 1、下载jmeter地址,点击进入官网下载 2、进入官网,会看到两种下载资源 binaries是可执行版本,直接下载解…

【jmeter】

目录 环境配置安装Java环境安装jmeter安装python环境数据库配置 线程组HTTPHTTP请求默认值HTTP信息头管理器 参数化用户定义的变量csv数据文件设置用户参数函数计数器函数随机数函数时间函数 直连数据库断言响应断言大小断言:判断字符串内容的长度。断言持续时间 逻…

1-1 JMeter官网了解

作为测试小白的我,在微信知识星球,参加了一个为期1年的21天打卡的,关于测试方方面面知识的星球。 听同事说JMeter似乎很强大,接口测试、自动化测试、性能测试都可以搞? 所以选择从JMeter开始,因为自己最近也…

JMeter下载及安装配置教程

参考:入门部署教程 – Jmeter中文网 本文是在win10环境下安装使用jmeter,jmeter可以运行在多平台上Windows和Linux。 环境准备: java 8 jmeter 5.1.1 jmeter环境 jmeter环境依赖JAVA环境,需安装JDK1.8环境,JDK下载地…

Jmeter下载与安装

Jmeter与JDK下载与安装 1、进入jmeter官网,下载地址:https://jmeter.apache.org/ 第一步,点击Download Releases 第二步, 点击apache-jmeter-5.1.1.zip sha512 pgp,下载完后解压 2、下载并安装JDK,下载地址:https://www.oracle.com/technetwork/java/javase/downloads…

jmeter(一)基础介绍

参考书籍:段念《软件性能测试与案例剖析》——第二版 推荐一本书《零成本实现web性能测试——基于Apache—jmeter》,主要内容是一些关于jmeter的实战使用,想学习的可以去看看。。。 jmeter是一款优秀的开源性能测试工具,目前最新版…

Kotlin带有接收者的函数类型(block: T.() -> Unit)

前言 Kotlin标准库的 Standard.kt 包含几个函数,其唯一目的是在对象上下文内执行代码块。 当我们在提供了lambda表达式的对象上调用此类函数时,它将形成一个临时作用域。在此作用域中,我们可以访问没有其名称的对象,这些功能称为…

mysql之类型转换函数

类型转换函数 类型转换函数和case函数 1.隐式类型转换和显式类型转换的概念 隐式类型装换: 两个值进行运算或者比较,首先要求数据类型必须一致。如果发现两个数据类型不一致时就会发生隐式类型转换。例如,把字符串转成数字,或者相反: SELECT 1+‘1’; – 字符串1转成数字 …

C语言入门---函数类型与返回值(int和void)

int和void的区别? 哈喽,各位小伙伴们,在我们学习C语言的过程中经常会看到书中的main函数前带有int和void,就像下面这样: 上面这两种有什么区别呢?在C语言中,可以把函数分为有返回值函数和无返…

Typescript总结(三)——函数类型详解

本篇博客主要总结一下在Typescript中的函数写法,以及函数类型的总结。 一、Typescript的函数类型 如果在一个函数中,需要传入一个函数作为参数,可以如下所示,进行声明定义。 我们也可以通过type来定义函数类型 如上述代码所示…