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

ICMP 协议的格式

一般情况下,你会想到 ping 一下。那你知道 ping 是如何工作的吗?

ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。这里面的关键词是“控制”,那具体是怎么控制的呢?

网络包在异常复杂的网络环境中传输时,常常会遇到各种各样的问题。当遇到问题的时候,总不能“死个不明不白”,要传出消息来,报告情况,这样才可以调整传输策略。这就相当于我们经常看到的电视剧里,古代行军的时候,为将为帅者需要通过侦察兵、哨探或传令兵等人肉的方式来掌握情况,控制整个战局。

ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身非常简单。因为作为侦查兵,要轻装上阵,不能携带大量的包袱。

ICMP 报文有很多的类型,不同的类型有不同的代码。最常用的类型是主动请求为 8,主动请求的应答为 0。

查询报文类型

我们经常在电视剧里听到这样的话:主帅说,来人哪!前方战事如何,快去派人打探,一有情况,立即通报!

这种是主帅发起的,主动查看敌情,对应 ICMP 的查询报文类型。例如,常用的 ping 就是查询报文,是一种主动请求,并且获得主动应答的 ICMP 协议。所以,ping 发的包也是符合 ICMP 协议格式的,只不过它在后面增加了自己的格式。

对 ping 的主动请求,进行网络抓包,称为 ICMP ECHO REQUEST。同理主动请求的回复,称为 ICMP ECHO REPLY。比起原生的 ICMP,这里面多了两个字段,一个是标识符。这个很好理解,你派出去两队侦查兵,一队是侦查战况的,一队是去查找水源的,要有个标识才能区分。另一个是序号,你派出去的侦查兵,都要编个号。如果派出去 10 个,回来 10 个,就说明前方战况不错;如果派出去 10 个,回来 2 个,说明情况可能不妙。

在选项数据中,ping 还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

差错报文类型

当然也有另外一种方式,就是差错报文。

主帅骑马走着走着,突然来了一匹快马,上面的小兵气喘吁吁的:报告主公,不好啦!张将军遭遇埋伏,全军覆没啦!这种是异常情况发起的,来报告发生了不好的事情,对应 ICMP 的差错报文类型。

我举几个 ICMP 差错报文的例子:终点不可达为 3,源抑制为 4,超时为 11,重定向为 5。这些都是什么意思呢?我给你具体解释一下。

网络不通的情况下,通常会想到ping命令,ping一下,但是ping命令内部如何执行的,可能并不清楚,其实ping是基于ICMP协议进行工作的。

 一、ICMP协议的格式

  ICMP是在RFC 792中定义的互联网协议族之一。通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减1。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。

  ping是基于ICMP协议的,ICMP全程Internet Control Message Protocol,就是互联网控制报文协议,网络包在异常复杂的网络环境进行传输的时候,常常会遇到各种各样的问题,当遇到问题的时候,总要传出消息来,报告情况,这样才可以调整传输策略。

  ICMP报文是封装在IP包里面的,因为传输的时候,肯定需要源地址和目标地址,它本身非常简单。ICMP报文有很多种类型,最常用的类型是主动请求为8,主动应答为0。

1、查询报文类型

常用的ping就是查询报文,是一种主动请求,并且获得主动应答的ICMP协议,所以,ping包也是符合ICMP协议的格式的,只不过他在后面增加了自己的格式。

对ping的主动请求,进行网络抓包,称为ICMP ECHO REQUEST,同理,主动请求的回复,称为ICMP ECHO REPLY,比起原生的ICMP,这里面多了两个字段,一个是标识符,一个是序号,在选项数据中,ping还会存放发送请求的时间值,来计算往返时间,说明路程的长短。

2、差错报文类型

ICMP差错报文的几个例子:终点不可达为3,源抑制为4,超时为11,重定向为5

(1)终点不可达

网络不可达、主机不可达、协议不可达、端口不可达、需要设置了分片但设置了不可分片

(2)源站抑制

让源站放慢发送速度

(3)时间超时

超过网络的生存时间还没有到达

(4)路由重定向

也就是下次发送给下一个路由

二、ping:查询报文的使用

ping的发送和接受过程:

具体的执行过程:

假设主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,他们都在同一个子网。那么当你在主机A上运行“ping 192.168.1.2”后,会发生什么呢?

(1)ping命令执行的时候,源主机首先会构建一个ICMP请求数据包,ICMP数据包内包含多个字段。最重要的是两个,第一个是类型字段,对于请求数据包而言该字段为8;另一个是顺序号,主要用于区分连续ping的时候发出的多个数据包。每发出一个数据包,顺序号会自动加1,为了能够计算往返的时间RTT,它会在报文的数据部分插入发送时间。

(2)由ICMP协议将这个数据包,连同地址192.168.1.2一起交给IP层,IP层将以192.168.1.2作为目的地址,本机IP作为源地址,加上一些其他的信息,构建一个IP数据包。

(3)接下来,需要加入MAC头,如果在本节ARP映射表中查找出IP地址192.168.1.2所对应的MAC地址,由数据链路层构建一个数据帧,目的地址是IP层传过来的MAC地址,源地址则是本机的MAC 地址;还要加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

(4)主机B收到这个数据帧后,先检查它的目的MAC地址,并和本机的MAC地址对比,如符合,则接收,否则就丢弃,接收后检查该数据帧,将IP包从数据帧中取出来,交给本机的IP层,同样,IP层检查后,将有用的信息提取出来后交给ICMP协议。

(5)主机B会构建一个ICMP应答包,应答数据包的类型字段为0,顺序号为接收到的请求数据包中的顺序号,然后再发送给主机A

分析:

在规定的时间内,源主机如果没有接收到ICMP的应答包,则说明目标主机不可达。

如果接收到了ICMP的应答包,则说明目标主机可达

此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是ICMP数据包的时间延迟

扩展:

如果跨网断的话,还会涉及到网关的转发、路由器的转发等等。但是对于ICMP的头来讲,是没什么影响的,会影响的是根据目标IP地址,选择路由的下一跳,还有每经过一个路由器到达一个新的局域网,需要换MAC头里面的MAC地址。

参考连接:https://time.geekbang.org/column/article/8445#previewimg

ICMP协议和ping命令相关推荐

  1. 43-44网络层-ICMP协议和ping命令,ping和pathping排除网络故障。

    使用ICMP协议的命令 ping time 查看延迟 linux 64 windows 128 unix 255 TTL每过一个路由器减一,防止一直传播,可以粗略看对面是什么系统 ping 10.7. ...

  2. 网络层协议详解(主要是IP协议、ICMP协议和ARP协议)

    网络层协议详解(主要是IP协议.ICMP协议和ARP协议) 一.网络层的功能 定义了基于IP协议的逻辑地址: 连接不同的媒介类型: 选择数据通过网络的最佳路径. 二.IP数据包格式 第一层 版本:该字 ...

  3. ARP协议、路由、ICMP协议(ping命令)、三层交换机

    本机ip:192.168.0.237/24                      ping  192.168.90.1 ping的过程: 1.如果是域名,先进行域名解析到具体的一个ip 2.拿目的 ...

  4. 了解TCP协议,IP协议、ICMP协议和ARP协议(TCP报文,TCP的分成管理,TCP与UDP,TCP的三次握手四次挥手原理)

    文章目录 了解TCP/IP协议 TCP报文格式 TCP/IP 的分层管理 TCP与UDP TCP的三次握手与四次挥手 为什么要三次握手? 为什么要四次挥手? IP数据包格式 ICMP协议 ICMP协议 ...

  5. c语言实现icmp协议ping命令,利用ICMP协议实现ping命令

    一.实现原理 ping利用ICMP协议包来侦测另一个主机是否可达.Ping的原理是使用了类型码为8的ICMP回送请求包,收到请求的主机则用类型码为0的ICMP回应报文.如果应答包和请求包的标示号.序号 ...

  6. ICMP协议和ICMP重定向详解

    ICMP协议 internet消息控制协议(ICMP)指定了多种消息类型,这些消息的共同目的就是管理网络,详见RFC792.ICMP的消息可以分为错误消息.请求消息和响应消失.ICMP数据包格式如图所 ...

  7. 网络-ICMP协议、Ping命令实现与ICMP攻击

    目录 简介 报文格式 差错报文 常见类型 不发送ICMP差错报文的情况 询问报文 常见类型 实战 简单Ping命令实现 抓包 手算校验和 全部代码 Traceroute 抓包 ICMP重定向攻击 原理 ...

  8. 【计算机网络】ICMP协议与ping命令

    IP协议及ICMP.Ping命令详解: https://blog.csdn.net/lixin_com/article/details/82014542 常见的IP协议号: ICMP:协议号1; IG ...

  9. 网络层协议详解(IP协议、ICMP协议和ARP协议)

    这里写目录标题 一.网络层的功能 二.IP数据包格式 三.ICMP协议 四.ARP协议 一.网络层的功能 定义了基于IP协议的逻辑地址: 连接不同的媒介类型: 选择数据通过网络的最佳路径. 二.IP数 ...

  10. php 基于ICMP协议实现一个ping命令

    php 基于ICMP协议实现一个ping命令 网络协议是什么 ICMP 协议 什么是ICMP? ICMP 的主要功能 ICMP 在 IPv4 和 IPv6 的封装 Wireshark抓包 ICMP 请 ...

最新文章

  1. 如何退出终端中的“git status”列表?
  2. 图形基础 GPU架构(4)GPU CPU
  3. awk中如何使用shell的环境变量
  4. C语言学习笔记---时间函数clock()和time()
  5. 各大科技公司都是如何使用CSS
  6. Socket网络编程
  7. LabVIEW控制Arduino实现红外测距(进阶篇—6)
  8. coodblock调试_codeblocks怎么调试?
  9. “对不起,我是用AI做的警察”
  10. New-Age 目录 (2005.03.22/ 整理和使用ShitMp3 修改MP3信息)
  11. 计算机基础课程听课记录,听课记录-计算机应用基础
  12. 【记录CF】Codeforces Round #777 (Div. 2) A~C 题解
  13. “碳中和”研究为什么需要气象数据
  14. 吞噬星空鸿蒙殿主,论《吞噬星空》是鸿蒙三部曲的最后一部!
  15. java 数组 未初始化_Java数组未保持初始化状态
  16. 不安抗辩权有哪些规定
  17. oracle如果不存在则建分区,Oracle建分区表
  18. 管理干净的CItrix vDisk镜像
  19. 汉朔电子价签墨水屏网络时钟,基于Esp32的Arduino的测试代码
  20. 操盘手如何在牛市中基于MACD进行选股

热门文章

  1. ks检验正态分布结果_正态分布检验的那些方法
  2. 计算机与信息科学相关教材,AdobeIllustrator实例教程/计算机与信息科学系列规划教材...
  3. 一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)
  4. Android Camera动态人脸识别+人脸检测基于OpenCV(无需OpenCVManager)
  5. 基于Edge插件+格式工厂下载B站上的喜欢视频
  6. 手机上PDF转换成JPG图片超简单的方法
  7. Git 删除提交\commit的log记录、修改历史提交消息、删除历史提交、修改所有提交的邮箱地址、从所有提交中删除一个文件
  8. uniapp换行符号_第15讲 : uni-app 组件 - 地图组件
  9. 沉思录(MEDITATIONS)1-12卷
  10. 数学常用特殊符号读音