本篇文章主要针对入门新手,尽量能用简略的语言复述,避免用过于官方话术,因为对于萌新来说,那些太官方的话语不容易看懂,所有本人尽力用口语化叙述,只要理解了其中的内涵意思,再看官方话术就比较容易的多。主要讲述ICMP的主要功能。本文章仅仅是IPv4的内容,IPv6有不同之处。

ICMP(Internet Control Message Protocol)Internet控制报文协议:是IP协议的附属协议。通常被认为是IP层的一部分,因为它需要在所有IP实现中存在。它使用IP协议进行传输。因此,确切地说,它既不是一个网络层协议,也不是一个传输层协议,而是位于两者之间。ICMP主要功能就是ICMP差错报文、ICMP查询报文

1、既然要讲它们的功能,那么必须要说的肯定就是它的数据报是什么样的:

(图一)咳咳,虽然很丑,不过不要在意这些细节。

从这图可以看出ICMP报文封装这IP数据报内的,ICMP报文也可能会像其他IP数据报那样被分片(IP分片讲会在IP协议中详解,主要的意思是当数据报经过中间设备时,如路由器,由于数据报字节太大,那么路由器必须将其切开重新组装成小数据报。或者由于数据报开始就太大了,所以在发送端就开始被分片了)

(图二、ICMP报文)

4字节 = (8 + 8 +16)/8。类型和代码是一起表示改报文的作用的,例如:类型为3、代码为3,则该报文想表达意思是端口不可达,也就是说该端口不开放(如下图三)。校验和顾名思义,就是检验报文在传输过程中是否出现了差错,每个数据报都有相应的校验和,校验和是有相应的算法的(这里不展开说了)。如果校验和是错误的,则该报文将会被丢弃。

(图三)

2、ICMP查询报文:

(1)、例如,地址掩码请求/应答、时间戳请求/应答、信息请求/应答,但是这些功能以及被其他特殊的目的的协议代替(包括DHCP),也就是说极少出现了。唯一保存下来的广泛使用的ICMP查询类报文是回显请求/应答报文,通常称为ping,ping命令可以在Windows系统自带的终端命令行中使用,主要是用来探测主机是否存活(如果一个Hacker要攻击一台主机那,那么就必须先知道这台主机是否在运行着,也就是存活,所以ping也是Hacker很常用的一条命令,但是有些主机是禁止ping的,不允许别人发ICMP报给自己,如果发了很有可能会被那些主机拉黑关进小黑屋,这条命令也是慎用)。这里本人用wireshark抓包神器来抓一个ICMP报文,更能清楚ICMP里面的内容(如图四、图五)。

(图四)ICMP请求报文

(图五)ICMP响应报文   192.168.1.100是本人的电脑也就是发送端,183.232.231.172是百度的服务端也就是。

(2)、ICMP查询报文还有一个很好用的功能tracert,那就是路由追踪,作用是发现整条链路上的所有路由(除了禁止ICMP报文的路由器),如图六所示,tracert命令发现了通往百度的所有路由器,而有些是请求超时,极有可能是禁止ICMP报文功能的路由器。路由追踪技术主要是通过ICMP报文和TTL值(类似于生命周期,每过一个路由器减一,最多只能有255个,主要是防止广播风暴)的结合来实现的。(#)沿途的路由器收到ICMP报文后将TTL减一得到零,则返回给发送端ICMP超时信息(比如说把TTL值设置为1,那么经过第一个路由器时,也就是10.157.0.1,TTL减一就得到了零,此时10.157.0.1路由器就会返回ICMP超时信息数据报,这样我们便可以得知此IP地址,那么经过第二个路由器时,则把TTL设置为2,如果还是设置为1得话,它在经过第一个路由器时就会减为零,以此类推)。捏,如图七所示。(图六)

(图七)

3、ICMP差错报文:

顾名思义,差错就是有错误时产生的ICMP报文,共五种差错报文:

(1)目的不可达(类型号为3):表示数据报无法送达目的地,可能是因为传输过程中出了问题或者接受者缺乏兴趣接收它。

(2)、重定向(类型号为5):假如一个路由器收到一个来自主机的数据报,并确定自身不是主机将数据报投递到目的地对应的路由器(就是说主机传输给的现在这个路由器离目的地不是最近的那个,而跟主机直连的路由器还有更加接近的),则该路由器发生一个重定向报文给主机并将该报文发送到正确的路由器,并请求主机改变它的转发表。(如图八)

(3)、源站抑制(类型号为4):路由器和主机的缓冲区有限,如果发送方发送数据的速率过快。将会导致缓冲区产生溢出。这时路由器或主机只能把某些IP数据报丢弃(就是说每个设备都有一定的存储空间,当空间满后,后面还有数据传输过来,这就不得不把后面来的数据丢弃)。

(4)、参数问题(类型号为12):如果路由器或目的主机发现数据报的某个字段不正确时,就会丢弃该数据报。

(5)、时间超过(类型号为11):可分为两种情况,第一种是TTL=0:当IP数据报通过路由器时,IP首部的TTL字段减一,当路由器发现收到IP数据报的TTL=0时,就丢弃该报文,同时该路由器向发送端发送ICMP超时报文(就是上面提到的tracet所用的方法)。第二种是当一个分片的IP数据报只有部分到达目的地时(既在一定的时间内不是所有的IP分片都到达了),这时ICMP超时报文便被用于告知发送端它的整个数据报被丢弃了。

(6)、下面几种情况不会产生ICMP差错报文:

*  ICMP差错报文(不会因为自身的丢失而产生差错报文)

*  目的地址是广播地址或组播地址的数据报

*  作为链路层的广播的数据报

*  不是第一个分片的其他分片(因为其他分片没有传输层头部)

*  源地址不是单个主机的数据报(源地址不能为零地址、环回地址、广播地址或组播地址)。

4、PTB报文路径MTU值(最大传输单元)发现:

如果一个IP路由器收到一个打算转发的数据报,若数据报大于选定的传出网络接口的MTU(每个路由器都有发送数据字节的最大值,如果要发送的数据报的字节比路由器的发送端口能发送的数据报字节还要大,就无法发送,这个发送端口能发送出去的数据报字节的最大值就是MTU,注意:接收端口是没有最大值的,来多少收多少),则数据报需要分片。如果到达的数据报则IP头部设置了不分片位字段,那么它会被丢弃而不是转发,此时将产生ICMP目的不可达(PTB)报文,该报文包含了MTU值。

5、与ICMP相关的攻击:

(1)、Smurf攻击:将源地址设置为受害者的IP地址,目的地址为广播地址。开始攻击后,受害者局域网内的多台主机会收到广播ICMP报文时,所有主机同时以ICMP报文的形式响应源地址(受害者地址)。

(2)、死亡之ping(Ping of Death):可以构造一个过大的IP数据报(大于最大值64KB),这就会导致某些系统直接崩溃蓝屏,因为之前的系统并不能处理过大的IP数据报,所以看到一个特大报就蒙了,然后就死机蓝屏给你看。

(3)、Smack或Bloop攻击:ICMP目的不可达报文可以造成现有连接(如TCP连接)的拒绝服务。当受害者主机接收来自于一个IP地址(正在通信的地址)的主机不可达、端口不可达或协议不可达报文时将导致关闭和该主机的连接。(比方说你正在下载东西,如果主机接收到ICMP目的不可达报文,那么该下载将会中断)

(4)、重定向攻击:可以使用ICMP重定向报文导致受害者主机修改它们的转发表,可以指向被入侵的机器。

(5)、PTB报文攻击:PTB报文包含一个表示推荐MTU值得字段。这将被传输协议(如TCP)用来选择它们数据包的大小。如果攻击者修改这个值,它将强制终端TCP运行时使用 非常小的数据包(导致性能低下)。

总结:ICMP报文是携带在IP数据报中的,大致可以分成差错类报文和信息类报文。然而重要的回显请求/应答和超时报文对于流行的ping和tracert工具来说是必需的。还有目的不可达、PTB和重定向报文。

如果有什么讲解得不好的地方,或者想问的问题都可以在下方评论区评论哟!

TCP/IP之ICMP协议简略介绍相关推荐

  1. http与https与socket tcp/IP与UDP 协议等

    网络由下往上分为:   物理层--                       数据链路层-- 网络层--                       IP协议 传输层--               ...

  2. 常见TCP/IP、HTTP协议以及三次握手和四次挥手

    面试常见TCP/IP.HTTP协议以及三次握手和四次挥手 IP(Internet Protocol):网际协议 IP协议是用于将多个包交换网络连接起来的,它在源地址和目的地址之间传送一种称之为数据包的 ...

  3. 计算机网络(OSI、TCP/IP、网络协议、常见网络设备工作原理)

    目录 OSI模型 TCP/IP模型 网络协议 IP协议 IP数据报格式 IP数据报分片 IPv4地址 NAT协议 ARP/RARP协议 ARP RARP DHCP协议 ICMP协议 ICMP差错报告报 ...

  4. TCP/IP通俗易懂网络协议

    昨晚在一个博主那里看懂一篇关于TCP/IP通俗易懂网络协议的文章,感觉写的非常不错,在这里就顺便做一下笔记吧.... 最简单的理解:TCP面向连接的,可靠的数据传输,建立连接需要三次握手,会造成del ...

  5. TCP/IP体系结构常用协议总结

    TCP/IP体系结构常用协议总结 文章目录 TCP/IP体系结构常用协议总结 1.简介 2.协议 2.1应用层协议 2.1.1POP3协议 2.1.2FTP协议 2.1.3HTTP协议 2.1.4Te ...

  6. TCP/IP网络四层协议与OSI七层协议

    OSI网络七层协议 OSI模型有7层结构,从上到下分别是 >>应用层 >> 表示层 >> 会话层 >> 传输层 >> 网络层 >> ...

  7. 【详解】以下关于TCP/IP协议栈中协议和层次的对应关系正确的是()

    以下关于TCP/IP协议栈中协议和层次的对应关系正确的是 解析: TCP协议和UDP协议都是基于IP协议的. 基于TCP的应用层协议:FTP.Telnet.SMTP.HTTP.POP3与DNS 基于U ...

  8. TCP/IP篇(1)--协议模型

    TCP/IP参考模型分为四个层次:应用层.传输层.网络互连层和主机到网络层. (1)主机到网络层:实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口, ...

  9. 前端工程师如何理解 TCP/IP 传输层协议?| 技术头条

    作者 | 浪里行舟 责编 | 郭芮 网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP ...

最新文章

  1. nginx在windows里面配置
  2. FineUI经典项目展示(1)生产在线管理系统
  3. Spring学习笔记(三) AOP_annotation,AOP_XML
  4. 虚拟机 Linux ubuntu16.04 对 windows 设置共享文件夹教程(samba)(ubuntu16.04换源【更换下载源】【更换源】【更新源】)(如果连不上需要开SSH服务)
  5. 云南无线数字电视文化传媒股份有限公司签约神策,数据赋能 IPTV
  6. zabbixdocker里的mysql_基于Docker安装与部署Zabbix
  7. cuda cudnn tensorflow对应_Ubuntu18.04下安装Tensorflow+cuda+cudnn+pytorch
  8. indesign教程,了解基本文本格式
  9. [机器学习笔记]奇异值分解SVD简介及其在推荐系统中的简单应用
  10. H264/AVC协议基本概况
  11. 英文词典 text 文本格式下载
  12. 零基础的学习者应该怎么开始学习呢?Python核心知识学习思维分享
  13. arm-linux内存页表创建
  14. codesys电子凸轮挺杆点的设置与使用
  15. 感冒发烧都能报?小额医疗险了解下!
  16. Qt5工程文件详解及使用方法
  17. BlueTooth: 无线技术之争谁将胜出 WiFi、蓝牙还是NFC?
  18. go get 命令介绍
  19. 基于区块链的供应链金融创新
  20. 废水硝酸盐的深度去除

热门文章

  1. 技术沙龙 | 从高并发架构到企业级区块链探索零售创新
  2. 不会画建筑CAD图纸?建筑CAD设计全流程解析打包送给你!
  3. 安卓 皮肤测试软件,你今天真好看皮肤测试工具|你今天真好看 1.0 安卓官网版...
  4. 已解决OSError: [Errno 22] Invalid argument: ‘E:\\桌面\\x0c.txt‘
  5. 洲际酒店首位中国籍COO邱尤:智选假日全球开业超3000间,策略是跟着高铁造智选...
  6. 计算机毕业设计Javaweb家教管理系统(源码+系统+mysql数据库+lw文档)
  7. 尚观嵌入式C语言学习
  8. 从国内外网站发展格局看秒杀竞拍网
  9. Python爬虫之 BeautifulSoup4(熬一锅美味的汤)
  10. 步步高java面试,步步高VIVO面试经验