返回总目录

上一篇

下一篇

ICMP协议是一个网络层协议。 
一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。 
所以我们就需要一种协议来完成这样的功能–ICMP协议。

ICMP协议的功能
ICMP协议的功能主要有: 
1. 确认IP包是否成功到达目标地址 
2. 通知在发送过程中IP包被丢弃的原因 
如下图所示:

我们需要注意几点: 
1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议 
2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6

ICMP的报文格式
ICMP报文包含在IP数据报中,IP报头在ICMP报文的最前面。一个ICMP报文包括IP报头(至少20字节)、ICMP报头(至少八字节)和ICMP报文(属于ICMP报文的数据部分)。当IP报头中的协议字段值为1时,就说明这是一个ICMP报文。ICMP报头如下图所示。 
如下图:


 
字段说明:


ICMP大概分为两类报文: 
一类是通知出错原因 ;一类是用于诊断查询 
类型及含义如下:


常见的ICMP报文
相应请求
我们用的ping操作中就包括了相应请求(类型字段值为8)和应答(类型字段值为0)ICMP报文。 
过程: 
一台主机向一个节点发送一个类型字段值为8的ICMP报文,如果途中没有异常(如果没有被路由丢弃,目标不回应ICMP或者传输失败),则目标返回类型字段值为0的ICMP报文,说明这台主机存在。

目标不可达,源抑制和超时报文
这三种报文的格式是一样的。 
(1)目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。 
例如:我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。 
常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。 
(2)源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。 
(3)无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。 
超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。

时间戳请求
时间戳请求报文(类型值字段13)和时间戳应答报文(类型值字段14)用于测试两台主机之间数据报来回一次的传输时间。 
传输时,主机填充原始时间戳,接受方收到请求后填充接受时间戳后以类型值字段14的报文格式返回,发送方计算这个时间差。 
(有些系统不响应这种报文)

ping命令
用法如下: 
 
注意, 此处 ping 的是域名,不是url,域名可以通过DNS解析成IP地址 
关于DNS可见这里写链接内容

ping命令的功能
(1)能验证网络的连通性 
(2)会统计响应时间和TTL(IP包中的Time To Live,生存周期) 
那么如何验证的呢? 
(1)ping命令会先发送一个 ICMP Echo Request给对端 
(2)对端接收到之后, 会返回一个ICMP Echo Reply 
(3)若没有返回,就是超时了,会认为指定的网络地址不存在。

问题:
telnet是23端口,ssh是22端口,那么ping是什么端口? 
答:ping命令是基于ICMP,是在网络层。 
而端口号,是传输层的内容。所以在ICMP中根本就不关注端口号这样的信息。

traceroute
traceroute也是基于ICMP协议实现的。 
功能: 
打印出可执行程序主机,一直到目标主机之前经历多少路由器。 
举例如下:

参考:https://www.cnblogs.com/iiiiher/p/8513748.html

4、以太网基础知识——ICMP协议详解相关推荐

  1. 计算机在线问,计算机基础知识在线测试问题详解

    计算机基础知识在线测试问题详解 (75页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实用文档题目1of100以下不属于计算机外部设备 ...

  2. ICMP协议 详解,ICMP协议的功能及实现原理,ICMP协议报文类型。

    「作者主页」:士别三日wyx 「作者简介」:CSDN top100.阿里云博客专家.华为云享专家.网络安全领域优质创作者 「专栏简介」:此文章已录入专栏<计算机网络零基础快速入门> ICM ...

  3. 安卓基础知识-layout布局详解。

    安卓基础知识 1. 目录结构: src存放java源代码. gen存放系统自动生成的配置文件 res存放应用用到的所有资源文件,如图片,布局等等 drawable存放不同分辨率的图片 layout存放 ...

  4. Linux操作系统基础知识命令参数详解

    Linux操作系统 RAID分组 RAID JBOD RAID JBOD的意思是Just a Bunch Of Disks,是将多块硬盘串联起来组成一个大的存储设备,从某种意义上说这种类型不被算作RA ...

  5. Linux基础知识之systemd详解

    0x00 Systemd 简述 1.Linux 启动流程 2.主角登场 0x01 Systemd Unit 1.配置文件 2.启动流程 3.进程树(Process tree) 4.运行级别 0x02 ...

  6. 2、以太网基础知识——IP协议

    返回总目录 上一篇 下一篇 1.简介 IP 地址(Internet Protocol Address)是互联网协议特有的一种地址,它是 IP 协议提供的一种统一的地址格式.IP 地址为互联网上的每一个 ...

  7. 零基础了解Https-https协议详解

    https其实就是在TLS(TLS是SSL的继任者,目前SSL基本被废除,用TLS代替)之上的http协议,所以各种头信息以及数据格式和http其实都一样,主要区别就在TLS,下面我们来看看TLS是如 ...

  8. OpenStack基础知识-virtualenv工具详解

    1.virtualenv介绍 virtualenv通过创建一个单独的虚拟化python运行环境,将我们所需的依赖安装进去,不同项目之间相互不干扰,从而解决不同的项目之间依赖不同,造成的冲突问题 2.安 ...

  9. 基础知识 | hex文件格式详解

    hex文件格式总结 什么是hex文件? 文件格式 指令类型(Record type) 校验和 :04 02B0 00 92020008 AE :04 0000 05 08000135 B9 :00 0 ...

最新文章

  1. 测试机房质量之上传下载速率测试
  2. 关于.h .cpp和inline的讨论
  3. Consul入门01 - 安装Consul
  4. Linux安装Elasticsearch-head插件
  5. 【Apache】 alias+proxy 将资源路径指向某个本地目录
  6. uva-10602-贪心
  7. SAP UI5中的同步请求和异步请求
  8. json日期格式化 java_java_Java Web程序中利用Spring框架返回JSON格式的日期,返回Json时格式化日期Date 第一 - phpStudy...
  9. count(1),count(*)与count(列名)到底有什么区别?
  10. 图像处理库 FreeImage的简述
  11. 小米手机怎么打不开云服务器错误,为什么小米云服务打不开页面?
  12. 利用ZEBAR 软件生成ZPL 代码
  13. win10系统迁移后系统重装_win7/win10系统迁移到新SSD硬盘的方法
  14. 再见了,少年——转自有意思吧
  15. Hibernate基于JAP注解开发
  16. 京东首页之nav导航栏、banner广告部分、footer备案号
  17. 一点资讯signature分析
  18. (ICRA 2020) Instance Segmentation of LiDAR Point Clouds
  19. 一个桌面弹幕软件,用来记单词刚刚好
  20. 数据结构面试100题

热门文章

  1. JavaScript类库
  2. junit jumpstart
  3. dhl: js判断网页对象是否存在
  4. WPF中splashScreen启动程序之前出现一个过程动画的效果
  5. C++ STL Pair
  6. UA MATH564 概率论II 连续型随机变量1
  7. Python(3) 进制转换
  8. OpenCode:template
  9. mysql的配置和启动命令
  10. 从tabBarController的一个item上的控制器跳转到另一个item上的控制器