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的报文类型即可。

相关推荐
NAGNIP1 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab1 天前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab1 天前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP1 天前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年1 天前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼1 天前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS1 天前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区1 天前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈1 天前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang1 天前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx