当前位置: 首页 > article >正文

网络工程师 (45)网际控制报文协议ICMP

前言

       网际控制报文协议ICMP(Internet Control Message Protocol)是TCP/IP协议簇的一个子协议,主要用于在IP主机、路由器之间传递控制消息。

一、定义与功能

       ICMP是TCP/IP模型中网络层的重要成员,与IP协议、ARP协议、RARP协议及IGMP协议共同构成TCP/IP模型中的网络层。ICMP协议是一种面向无连接的协议,用于传输出错报告控制信息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

       ICMP的主要功能包括:

  1. 侦测远端主机是否存在。
  2. 建立及维护路由资料。
  3. 重导资料传送路径(ICMP重定向)。
  4. 资料流量控制。
  5. 报告错误情况,如目标不可到达、源抑制、超时等。

二、报文格式与类型

       ICMP报文包含在IP数据报中,属于IP的一个用户。一个ICMP报文包括IP头部、ICMP头部和ICMP报文数据部分。IP头部就在ICMP报文的前面,IP头部的Protocol值为1就说明这是一个ICMP报文。

       ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型。ICMP报文种类主要分为三大类:ICMP差错报文、ICMP控制报文和ICMP请求/应答报文。

       已经定义的ICMP消息类型大约有十多种,每种ICMP数据类型都被封装在一个IP数据包中。主要的ICMP消息类型包括:

  1. 响应请求与应答报文:日常使用最多的ping,就是响应请求(Type=8)和应答(Type=0)。一台主机向一个节点发送一个Type=8的ICMP报文,如果途中没有异常(例如被路由器丢弃、目标不回应ICMP或传输失败),则目标返回Type=0的ICMP报文,说明这台主机存在。
  2. 目标不可到达报文:目标不可到达报文(Type=3)在路由器或主机不能传递数据报时使用。例如要连接对方一个不存在的系统端口(端口号小于1024)时,将返回Type=3、Code=3的ICMP报文。常见的不可到达类型还有网络不可到达(Code=0)、主机不可到达(Code=1)、协议不可到达(Code=2)等。
  3. 源抑制报文:充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有恢复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。
  4. 超时报文:无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。超时报文的代码域有两种取值:Code=0表示传输超时,Code=1表示重组分段超时。
  5. 时间戳请求与应答报文:时间戳请求报文(Type=13)和时间戳应答报文(Type=14)用于测试两台主机之间数据报来回一次的传输时间。传输时,主机填充原始时间戳,接收方收到请求后填充接收时间戳后以Type=14的报文格式返回,发送方计算这个时间差。

三、应用

  1. 网络连通性测试:通过ping命令发送ICMP回送请求报文,测试目标主机是否可达。如果目标主机能够返回ICMP回送应答报文,则说明网络连通性正常。
  2. 路由跟踪:通过tracert(Windows)或traceroute(UNIX/Linux)命令发送一系列IP数据报,数据报中封装的是无法交付的UDP用户数据报。每个数据报的TTL值从1开始递增,当数据报到达路径上的路由器时,路由器会将其TTL值减1并检查是否为零。如果TTL值为零,则路由器会丢弃该数据报并向源主机发送ICMP时间超过差错报告报文。源主机根据收到的ICMP报文可以确定数据包到达目的主机所经过的路径以及每个路径的往返时间。
  3. MTU测试:通过发送不同大小的ICMP数据包来测试网络路径上的最大传输单元(MTU)。这有助于确定数据包在传输过程中是否需要分片以及分片的大小。

四、安全性

       虽然ICMP在网络管理中扮演着重要的角色,但它也存在一些安全性问题。例如,ICMP攻击者可以利用ICMP报文进行网络扫描、DDoS攻击等。因此,在网络配置中需要合理设置ICMP报文的过滤规则,以防范潜在的安全威胁。

 结语    

永远自在

清澈明朗

!!!


http://www.kler.cn/a/551662.html

相关文章:

  • 分布式储能监测云平台
  • 麒麟V10离线安装docker和docker-compose
  • 1.王道_常用命令
  • 嵌入式学习第十六天--stdio(二)
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • STM32 HAL库USART串口中断编程:环形缓冲区防止数据丢失
  • 【开源】基于SSM框架网上招聘系统(计算机毕业设计)+万字毕业论文+远程部署+ppt+代码讲解 ssm592
  • android studio 界面启动模拟器无反应——从命令行启动模拟器
  • LLaVA-Mini部署教程 :模态预融合与视觉符元压缩,重新定义图像视频理解边界!
  • 调试变量的变化 vs数据断点调试
  • 核函数简述
  • 【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法
  • 高效执行自动化用例:分布式执行工具pytest-xdist实战
  • leetcod20-有效的括号
  • 基于机器学习的医疗图像分析:从图像识别到精准诊断
  • 关于JavaScript中的事件
  • 设计模式-结构型-享元模式
  • 【Python pro】基本数据类型
  • CentOS/RHEL如何更换国内Yum源
  • 深度学习笔记之自然语言处理(NLP)