【lwIP(第九章)】ICMP协议

一、ICMP协议简介

ICMP协议是一个网络层协议。 一个新搭建好的网络,往往需要先进行一个简单的测试,来验证网络是否畅通;但是IP协议并不提供可靠传输。如果丢包了,IP协议并不能通知传输层是否丢包以及丢包的原因。因此我们需要ICMP协议来完成这样的功能

1. ICMP协议类型与结构

2. ICMP 差错报文

用于检测IP数据报在传输过程的异常信息(目的不可达、源站抑制、重定向、超时、参数错误)

3. ICMP 查询报文

用于诊断两个网络设备之间彼此是否能够通信,目的主机收到 ICMP 回送请求报文后立刻回送应答报文,若源主机能收到 ICMP 回送应答报文,则说明到达该主机的网络正常(PING)

二、ICMP协议原理

1. ICMP报文数据结构

/* icmp.h */
struct icmp_echo_hdr 
{
          
    
	PACK_STRUCT_FLD_8(u8_t type); 		/* 类型 */
	PACK_STRUCT_FLD_8(u8_t code); 		/* 代码 */
	PACK_STRUCT_FIELD(u16_t chksum); 	/* 校验和 */
	PACK_STRUCT_FIELD(u16_t id); 		/* 标志符 */
	PACK_STRUCT_FIELD(u16_t seqno); 	/* 序号 */
} 
PACK_STRUCT_STRUCT;

2. ICMP的差错报文

lwIP只实现目的不可达、超时差错报文,它们分别为icmp_dest_unreach和icmp_time_exceeded函数

3. 差错报文的原理

把丢弃的数据包IP首部和数据区域(前8字节)拷贝到差错报文当中

4. ICMP的查询报文

请求报文发送,应答报文重复。简单来讲,应答包是在请求包的基础上修改得来
经验分享 程序员 微信小程序 职场和发展