ICMP 协议

在之前网络层的介绍中,我们知道 IP 提供一种无连接的、尽力而为的服务。这就意味着无法进行流量控制与差错控制。因此在 IP 数据报的传输过程中,出现各种的错误是在所难免的,为了通知源主机 IP 数据报传输过程中遇到的问题,因此设计了因特网控制报文协议(ICMP)。

虽然说 ICMP 协议将 IP 协议封装在内部,所以大多数人将 ICMP 视为传输层的协议,但实际上 ICMP 是 IP 协议的重要组成部分,所以将其放在网络层更为合适。

ICMP 的报文一般有两种,查询报文和查询报文

查询报文:例如我们在使用 ping 命令,子网掩码查询,时间戳查询等情况时,都会发送查询报文。

差错报文:而差错报文是在当对应的路由器或者终端设备收到查询报文后,产生了一系列问题。把出现的问题,回复给发起者的报文就是差错报文。

但考虑到整体网络资源的占用上,在如下情况下,是不会产生差错报文的:

  1. 差错报文不会产生差错报文 - 防止 ICMP 无限产生和传送差错报文
  2. 目的地址是广播或多播的 IP 数据包
  3. 链路层广播的数据包
  4. 不是 IP 分片的第一片 - IP 是尽力而为,自然不需要可靠性
  5. 源地址不是某个主机的数据包

ICMP 类型

由于 ICMP 本身就是为了弥补 IP 协议不可靠的特性,起到排错目的,所以它的 Header 并不复杂。

正如图中所示的,对于 ICMP Header 来说,比较重要的就是 Type (8 bit)和 Code (8 bit) 字段,用来表示各种错误的情况。

其中完整的介绍可以参考这篇 wiki,下面就介绍上常用的部分。

下面我们抓个包,来看一下。

Ping 命令测试网络连通性

这里在主机上 Ping 下百度,通过 Wireshark 抓到的数据包如下:

先看一下 Echo Request 包,对应 Type 为8,Code 为0:

Echo Reply 包 - Type 为 0,Code 为 0:

Traceroute 测试网络连通性

在 IP 协议中,为了防止出现环路而设置了 TTL 字段。该字段也在 traceroute 中起到了很大的作用,通过设置 TTL 的数值,来获取数据报的传递过程。

TTL:当 IP 数据包进行传送时,每经过一个路由器,TTL 指就会减一,当 TTL = 0 时,该 IP 数据报会被丢弃。

下面就来了解下 Traceroute 的通信过程,用到的拓扑如下:

当主机收到目的主机的 IP 后,会给目的主机发送一个 TTL = 1 的 UDP 数据包。

而经过第一个路由器后,TTL - 1 变成 0.这时路由器会把数据报丢弃,然后把丢弃的数据包的 IP 头部封装起来,回复主机一个差错报文。如下:

这个过程主机会发三次,也就是说会产生 3 个 TTL =1 的 UDP,如下

接着会在再次发送 3 个 TTL = 2 的 UDP 报文,如下

第二个路由器,会再次向主机发送一个差错报文,如下:

这里需要注意的:由于第二台路由器已经相当于是目的地,所以将数据包拆到传输层,但由于传输层上的端口标识了应用层的应用,而在该路由器上不在该应用,进而回复了端口不可达的报文。

由于图中只经过 2 个路由器,所以截止发送到 TTL = 2

并且我们可以从 TTL = 2 的回复差错报文看出,只有两个差错报文。其中有个差错报文出现了丢失,并且没有给主机回复差错报文丢失的情况

icmp回复报文_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了相关推荐

  1. icmp回复报文_ICMP报文

    一.简介 ICMP(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议. 协议号为1 ICMP报文在IP报文内部 一.ICMP类型: ICMP报文主要有两个功能:查询 ...

  2. icmp回复报文_如果目标主机阻塞了,ICMP回显请求报文,我们可以

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:如果目标主机阻塞了,ICMP回显请求报文,我们可以通过类推荐回答:这种机制就是我们通常所用的ping命令来检测目标主机是否可以pin ...

  3. icmp回复报文_ICMP分为()和查询报文两类

    ICMP分为()和查询报文两类 答:差错报告报文 全同态加密机制同时具有加同态和乘同态性质 答:对 提高价格,一定会带来总收益的增加 答:× 复活节是每年公历3月21日 答:× 矛盾就是事物内部之间对 ...

  4. 【计算机网络】网络层 : ICMP 协议 ( ICMP 差错报文 | 差错报文分类 | ICMP 询问报文 | ICMP 应用 | Ping | Traceroute )

    文章目录 一.ICMP 协议 二.ICMP 协议 简介 三.ICMP 五种差错报告报文 四.ICMP 差错报文形成 五.ICMP 差错报文 不发送 情形 六.ICMP 询问报文 七.ICMP 应用 一 ...

  5. 不应发送ICMP差错报文的几种情况

    1.对ICMP差错报文,不再发送ICMP差错报告报文. 2.对第一个分片的数据报片的所有后续数据报片,都不发送ICMP差错报告报文 3.对具有多播地址的数据报,都不发送ICMP差错报告报文 4.对具有 ...

  6. icmp协议_CCNA - Part7:网络层 - ICMP 应该是你最熟悉的协议了

    ICMP 协议 在之前网络层的介绍中,我们知道 IP 提供一种无连接的.尽力而为的服务.这就意味着无法进行流量控制与差错控制.因此在 IP 数据报的传输过程中,出现各种的错误是在所难免的,为了通知源主 ...

  7. 计算机网络——ICMP询问报文

    网际控制报文协议ICMP 网络层功能:尽最大努力的为你转发数据分组 那么除了它自身所提供的功能外,还能不能想到其它方法,来加强其转发数据报的成功率. 所以就有了ICMP协议. ICMP是什么时候有用呢 ...

  8. 网络层 ICMP与ping:投石问路的侦察兵

    无论是在宿舍,还是在办公室,或者运维一个数据中心,我们常常会遇到网络不通的问题.那台机器明明就在那里,你甚至都可以通过机器的终端连上去看.它看着好好的,可是就是连不上去,究竟是哪里出了问题呢? ICM ...

  9. ICMP诊断报文类型

    表7.3 ICMP诊断报文类型 类型 描述 0 回应应答(Ping应答,与类型8的Ping请求一起使用) 3 目的不可达 4 源消亡 5 重定向 8 回应请求(Ping请求,与类型8的Ping应答一起 ...

最新文章

  1. UWP 负载包含两个或多个具有相同目标的路径 'xxx'
  2. makefile小技巧
  3. javascript中常用的
  4. IOS模拟登录之沙盒原理
  5. Gartner公布2017年十大战略科技发展趋势
  6. 如何更改Visual Studio 2008中类文件引用的默认名称空间?
  7. 电脑 linux系统下载官网,红旗Linux操作系统
  8. 年底了,按约定把2021 Go面试八股整理全了
  9. 废旧手机屏幕做单片机显示屏_ipadmini显示屏拆解,一探究竟
  10. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(7) - 标志寄存器/标志控制指令 段寄存器指令
  11. 战“疫”日记②|火神山小分队:像听到发令枪一样;徐碧江带勇士集结长沙“小汤山”...
  12. Android集成Zxing
  13. 浏览器接收响应消息并显示内容
  14. 亲爱的,别把上帝缩小了 ---- 读书笔记4
  15. tomcat搭建之Jenkins环境
  16. 学习微信开发公众号的第一天(根据文字自动回复文字)
  17. 多次重复原生进入RN优化Catalyst Instance has already disappeared
  18. 电子元器件3D模型免费下载资源
  19. matlab小苹果,我要用计算器弹曲子,求亲们发点计算器简谱
  20. 魔方cfop公式软件_魔方与群论(一)(不要被标题吓到,高中生就可以看)

热门文章

  1. 解析IBM TSM6.0版本特色功能与技术优势
  2. zabbix客户端安装二
  3. 程序员,什么是高手?什么是低手?
  4. 中文停用词文档_使用Python中的NLTK和spaCy删除停用词与文本标准化
  5. linux fifo 视频,Linux FIFO学习
  6. linux注入内存泄露,Linux 内存泄露小结
  7. python定义一个字典并遍历字典中的键和值_python字典操作总结
  8. Jquery的html方法里包含特殊字符的处理,类似双引号之类的
  9. 250鲁大师跑分_看了鲁大师跑分,会发现MX250独显笔记本已落伍了
  10. python的迭代器for_python特性(二):迭代器与for语句