ICMP报文
一、 简介
ICMP(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。
协议号为1
ICMP报文在IP报文内部
一、 ICMP类型:
ICMP报文主要有两个功能:查询报文和差错报文
二、 ICMP报文头:
//定义ICMP首部 typedef struct _icmphdr{ unsigned char i_type; //8位类型 unsigned char i_code; //8位代码 unsigned short i_cksum; //16位校验和, 从TYPE开始,直到最后一位用户数据,如果为字节数为奇数则补充一位 unsigned short i_id ; //识别号(一般用进程号作为识别号), 用于匹配ECHO和ECHO REPLY包 unsigned short i_seq ; //报文序列号, 用于标记ECHO报文顺序 unsigned int timestamp; //时间戳 }ICMP_HEADER;
一、 ICMP报文的各种状态:
目的不可达报文(Destination Unreachable Message)
找不到目的IP传递路径
code:
0 = net unreachable
1 = host unreachable
2 = protocol unreachable
3 = port unreachable
4 = fragmentation needed and DF set
5 = source route failed
源端口抑制报文(Source Quench Message)
路由器在处理报文时会有一个缓存队列。如果超过了最大缓存队列,将无法处理,从而丢弃报文,并向源发送一个ICMP源冷却报文(Type为4),告诉对方不在接收报文了。
报文格式:
超时报文(Time Exceeded Message)
网络传输IP数据报的过程中,如果IP数据报的TTL值逐渐递减为0时,需要丢弃数据报,这时候路由器需要向源发送方发送ICMP超时报文(Type为11),code为0,表示传输过程中超时了。
参数错误报文(Parameter Problem Message)
当路由器或主机处理数据报文时,发现因为报文头的参数错误而不得不丢弃报文时,需要向源发送方发送参数错误报文(Type为12).当错误为0时,报文中的Pointer指出错误的字节位置。
改变路由重定向(Redirect Message)
当路由收到IP数据报,发现数据报的目的地址在路由表中没有,他就会发ICMP重定向报文(Type为5)个源发送方,告诉它发送的地址不在
回送请求和回答(Echo or Echo Reply Message)
Type为8是请求回显报文(Echo);Type(0)是回显应答报文(Echo Reply
)。请求回显包或回显应答报文属于查询报文,Ping就是用这种报文进行查询和应答的。
时间戳请求和回答(Timestamp or timestamp Reply Message)
时间戳报文时用来记录收发以及传输时间的报文Originate Timestamp记录的是发送方发送报文的时刻。Receive Timestamp记录的是接收方收到的报文的时刻;Transmit Timestamp表示回显这最后发送报文的时刻。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)