2.3 - 网络协议 - ICMP协议工作原理,报文格式,抓包实战

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

ICMP协议

ICMP(Internet Control Message Protocol)是「控制报文协议」,是IP协议的一个组成部分,负责在主机和路由器之间「传递控制信息」(不传递用户数据),比如网络通不通,主机是否可达等。

1、ICMP协议工作原理

ICMP的功能是「检错」而不是纠错。

它将出错的报文返回给发送方的设备,发送方根据ICMP报文确定「错误类型」,从而更好的重发错误的数据包。

pingtracert 命令就是利用ICMP协议来实现的

  • ping 127.0.0.1:检查网络连通性,ping的过程就是ICMP协议的工作过程。如果对方禁用了ICMP协议,就会Ping不通,但这并不代表网络不通。
  • tracert 127.0.0.1:路由跟踪,显示数据包到达目标主机经过的设备和消耗时间。

2、ICMP协议报文格式

ICMP是IP协议的一部分,因此,ICMP协议的报文包含在IP数据报的数据部分:

我们结合数据包解释一下每个字段的作用

  • Type:类型【4位】,标明ICMP报文的作用及格式。
  • Code:代码【4位】,标明报文的类型。
  • Checksum:校验和【8位】,检验报文是否有误。
  • Identifier:标识符【取决于类型】,确定是否是同一次请求响应。
  • Sequence number:序列号【取决于类型】,表示数据包在传输过程中的顺序。

3、ICMP协议报文类型

ICMP协议主要通过 Type 和 Code 的组合,来表示报文的「类型」。

比如正常的请求响应:发送方 Type=8 的报文,途中没有异常,接收方就返回 Type=0 的报文

如果端口不可达,接收方就返回 Type=3,Code=3

常见的ICMP响应类型:

  • 网络连通:Type=0Code=0
  • 网络不可达:Type=3Code=0
  • 主机不可达:Type=3Code=1
  • 协议不可达:Type=3Code=2
  • 端口不可达:Type=3Code=3

完整的ICMP类型:

TYPE CODE Description
0 0 Echo Reply------回显应答(Ping应答)
3 0 Network Unreachable------网络不可达
3 1 Host Unreachable------主机不可达
3 2 Protocol Unreachable------协议不可达
3 3 Port Unreachable------端口不可达
3 4 Fragmentation needed but no frag. bit set------需要进行分片但设置不分片比特
3 5 Source routing failed------源站选路失败
3 6 Destination network unknown------目的网络未知
3 7 Destination host unknown------目的主机未知
3 8 Source host isolated (obsolete)------源主机被隔离(作废不用)
3 9 Destination network administratively prohibited------目的网络被强制禁止
3 10 Destination host administratively prohibited------目的主机被强制禁止
3 11 Network unreachable for TOS------由于服务类型TOS,网络不可达
3 12 Host unreachable for TOS------由于服务类型TOS,主机不可达
3 13 Communication administratively prohibited by filtering------由于过滤,通信被强制禁止
3 14 Host precedence violation------主机越权
3 15 Precedence cutoff in effect------优先中止生效
4 0 Source quench------源端被关闭(基本流控制)
5 0 Redirect for network------对网络重定向
5 1 Redirect for host------对主机重定向
5 2 Redirect for TOS and network------对服务类型和网络重定向
5 3 Redirect for TOS and host------对服务类型和主机重定向
8 0 Echo request------回显请求(Ping请求)
9 0 Router advertisement------路由器通告
10 0 Route solicitation------路由器请求
11 0 TTL equals 0 during transit------传输期间生存时间为0
11 1 TTL equals 0 during reassembly------在数据报组装期间生存时间为0
12 0 IP header bad (catchall error)------坏的IP首部(包括各种差错)
12 1 Required options missing------缺少必需的选项
13 0 Timestamp request (obsolete)------时间戳请求(作废不用)
14 Timestamp reply (obsolete)------时间戳应答(作废不用)
15 0 Information request (obsolete)------信息请求(作废不用)
16 0 Information reply (obsolete)------信息应答(作废不用)
17 0 Address mask request------地址掩码请求
18 0 Address mask reply------地址掩码应答

4、ICMP协议抓包分析

Wireshark开启抓包,cmd 执行 ping 192.168.2.1 -n 1,ping一次我的网关。

Wireshark 过滤 icmp,第一个是ICMP请求包,第二个是ICMP响应包。

1)先看第一个包,重点看我圈中的字段:

  • Type=8Code=0,表示这是一个回显请求Echo (ping) request
  • Checksum Status = Good,表示校验状态是良好的,报文无误

2)再看第二个包,重点看我圈中的字段

  • Type=0Code=0,表示这是一个回显应答Echo (ping) Reply
  • Response time只出现ICMP响应包,Ping命令返回的响应时间,就是从这里获取的
  • Data表示数据包的大小,Ping命令返回的字节,就是从这里获取的

3)IdentifierSequence number 这四个字段用来对应请求和响应的关系。

  • 请求和响应中,这四个字段都是一样的,用来标识这次请求。比如我给你发个1,你给我回个1,我就知道我们俩是同一个请求;如果你给我回个2,我就知道我们不是同一个请求,你是回给别人的,你不是会给我的。

日常使用,主要看TypeCode 这两个字段,知道ICMP的报文类型即可。

相关推荐
weisian1513 分钟前
基础篇--概念原理-25-大模型的剪枝是什么?怎么理解?——从原理到实战,一篇讲透
算法·机器学习·大模型·剪枝
带土13 分钟前
8. TCP 协议概述
网络·网络协议·tcp/ip
IT乐手5 分钟前
Qwen3.7-Plus 重磅发布:11小时自主闭环开发APP,多模态智能体迎来新纪元
人工智能
金融RPA机器人丨实在智能8 分钟前
橡胶原料供应链转型:海外AI Agent适配国产进销存系统改造费用解析与实在Agent降本方案
人工智能·ai
带土18 分钟前
7. WireShark分析IP数据包格式
网络·tcp/ip·wireshark
AI服务老曹9 分钟前
源码交付与低代码布控:基于Docker与边缘计算的GB28181/RTSP视频AI管理平台架构二次开发实战
人工智能·低代码·docker
共创splendid--与您携手1 小时前
AI读取前端项目生成skill.md
前端·人工智能·ai
weixin_427771611 小时前
http 请求body加密
网络·网络协议·http
小杨勇敢飞2 小时前
记录一次 VMware 虚拟机固定 IP 后,FinalShell 连接不上的排查过程
网络·网络协议·tcp/ip
gis分享者2 小时前
AI数字营销实测体验,GEO效果查询功能体验
人工智能·csdn·geo·数字营销·实测体验·效果查询