【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的查询报文
请求报文发送,应答报文重复。简单来讲,应答包是在请求包的基础上修改得来
上一篇:
Java架构师技术进阶路线图
下一篇:
HTTP请求与响应参数中文乱码问题