ICMP是网际报文控制协议,它是一个对IP协议的补充协议。允许主机或路由器报告差错情况和异常状况。

一、ICMP报文格式和各个字段的含义

ICMP报文的格式如下:

ICMP协议封装在ip协议中,ICMP有很多报文类型,每一个报文类型又各自不相同,所以无法找到一个统一的报文格式来进行说明,但是他们的前四个字节的报文格式是相同的。

如图所示:

1.校验和:占两个字节,是对整个报文的报文信息的校验。

2.类型:占一个字节:用来表示ICMP的消息类型。

3.代码:占一个字节:用来对类型的进一步说明。

下面是RFC792英文版的文档说明:

点击打开链接

下面试RFC792中文版的文档说明:

点击打开链接

二、ICMP常见的报文类型

下表列出了几种常见的类型:

ICMP的报文分为两类,一类是ICMP询问报文,一类是ICMP差错报告报文

常见的ICMP询问你报文有:8/0回送请求/应答报文,13/14时间戳回送请求/回答报文。

常见的ICMP差错报告报文有:3 目的站点不可达、 11时间超过、12参数问题、5改变路由、4源点抑制

目的站点不可达:当路由器或主机不能交付数据的时候,就会向源点发送终点不可达的报文。

源点抑制:当路由器或主机因为拥塞而导致丢包的时候,就会向源点发送源点抑制报文,请求发送报文速度降低

时间超过:当路由器或主机发现生存时间TTL值为0时,会丢弃该报文,并向源点发送时间超过的信息。或者目的主机没在规定时间内收到所有的数据分片,会丢弃之前的数据分片,并发出报告。

参数问题:当路由器或主机发现数据包首部字段值不正确的时候,会丢弃该报文,并发送参数错误报文。

改变路由:路由器把改变路由报文发给主机。

三、不发送ICMP差错报文的情况

1、对ICMP差错报文出错不在发送ICMP差错报文信息。

2、对于第一个ip分片后的所有ip分片报文不发送ICMP差错报文

3、对具有组播地址的数据报不发送ICMP报文

4、对具有特殊地址(127.0.0.0或0.0.0.0)不发送ICMP差错报文

四、ICMP协议的用法

icmp协议的常用用法就是ping和tracert

ping的命令参数为ping 目的ip

一般有选项参数 -n 次数 表示要ping目的ip的次数,windows默认ping10次

-l 大小 向目标主机发送ping 包的大小,单位为字节

tracert  目的ip 可以显示中间经过的路由器

五、ICMP回送请求和应答实例分析

该组的报文是通过ping来实现的

下面首先来看回送请求/应答报文的格式:

接下来我们来看一下回送请求的具体报文:

下面是回送应答的具体报文:

其中 Code 0 在RFC文档中提到,当这个值为0时表示网管或主机

ICMP详解和实例分析相关推荐

  1. java list用法_Java List 用法详解及实例分析

    Java List 用法详解及实例分析 Java中可变数组的原理就是不断的创建新的数组,将原数组加到新的数组中,下文对Java List用法做了详解. List:元素是有序的(怎么存的就怎么取出来,顺 ...

  2. MySQL——存储过程详解及实例分析

    目录 一.储存过程简介 1.什么是存储过程 2.存储过程优缺点 3.存储过程入门程序 4.在idea中如何调用储存过程? 二.存储过程编程 1.存储过程的变量 2.存储过程中的参数 3.选择结构if ...

  3. mmap函数的用法详解及实例分析

    1.mmap函数是一个比较神奇的函数,它可以把文件映射到进程的虚拟内存空间.通过对这段内存的读取和修改,可以实现对文件的读取和修改,而不需要用read和write函数.如下图所示,为mmap实现原理的 ...

  4. select函数详解及实例分析

    Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect. accept.recv或recvfrom这样的阻塞 ...

  5. python中flush什么意思_python flush()定义及作用详解(实例分析)

    今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思.这些东西我 ...

  6. RTMP协议详解及实例分析

    1.简介 RTMP协议是Real Time Message Protocol(实时信息传输协议)的缩写,它是由Adobe公司提出的一种应用层的协议,用来解决多媒体数据传输流的多路复用(Multiple ...

  7. RTSP协议详解及实例分析

    1.RTSP简介 RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层.RTSP以客户端方式工作,对流媒体提供播放.暂停.后退.前进等操作. ...

  8. 巩固剖析并发基础:并发三大特性详解 代码实例分析可见性问题 深入了解JMM模型

    文章目录 一.并发和并行 二.并发三大特性 2.1 可见性 2.2 有序性 2.3 原子性 三.Java内存模型(JMM) 3.1 JMM定义 3.2 JMM与硬件内存架构的关系 3.3 内存交互操作 ...

  9. C# 事件详解附实例分析

    一.定义 事件是两个对象间发布消息和响应后处理消息的过程,通过委托类型来实现的. 事件的机制被称为发布-订阅机制,其算法过程为:首先定义一个委托类型,然后在发布者类中声明一个event事件,同时此类中 ...

最新文章

  1. Redis源码试读(一)源码准备
  2. 未来脑机接口的电极”衣服”可能长这样,你会喜欢吗?
  3. Android中通过Intent调用其他应用的方法
  4. Java内部类的一些总结
  5. pythonbool类型数组生成_Python Numpy:如何计算bool数组中真正元素的数量
  6. k8s 基础介绍及概念
  7. oracle 增加间隔分区,oracle分区表之间隔分区(oracle 11g) - 漫兮网
  8. 稀疏矩阵的压缩存储--十字链表(转载)
  9. MyEclipse和Eclipse中修改编码
  10. C++写的B+树源码
  11. FISCO BCOS Solidity 智能合约 批量插入新增数据
  12. 新一配:程序员在地铁上写代码被路人吐槽:有什么好装的!网友评论炸锅了
  13. js获取传统节假日_js 两个时间之间工作日的计算问题(包含节假日)
  14. CentOS下Oracle11g部署
  15. php yield 返回值,[PHP] yield沟通函数循环内外
  16. 忘记电子商务吧,很快一切都将与元宇宙有关
  17. 计算机最学生写作的影响,计算机对学生英语写作影响的元分析
  18. 矢量切片地图前端开发tileserver-gl
  19. 使用wps表格、excel绘制方波图样
  20. 数据结构基础知识点总结

热门文章

  1. 8.9 五色定理(Heawood 1890)
  2. RBAC新解:基于资源的权限管理(Resource-Based Access Control)
  3. 基于spaCy的领域命名实体识别
  4. 如何去除任务栏右下角的红色盾牌图表
  5. 2021.5.5笔记 多态
  6. Android Jetpack架构组件(一)带你了解Android Jetpack
  7. [编程基础] Python谷歌翻译库googletrans总结
  8. Python 跳出嵌套循环的5种方法
  9. 西湖大学全披露:68位顶级科学家加盟,已获捐资35亿,最小捐赠者12岁
  10. Flex开发环境,开发工具,开发框架总结