开始之前先附上网络模型的图,此次问题的重点出在运输层、网络层、数据链路层。
协议栈应用:lwip_1.4.1
问题现象:在udp send数据包大小不超过MTU值时,数据包发送且接收方接收成功;当udp send数据包大小超过MTU值时,数据包用wireshark抓包发现发送成功,但是接收方未接收成功。
分析流程:
1.查看了应用层的数据,确认无误,于是问题指向了udp自身包头一块。
2.在udp自身包头中确认MAC、IP地址、port等信息无误,然而又因为只会在协议栈IP层自动拆包后会出现接收方未接收成功的情况,于是问题又指向了IP层的TTL值与checksum值。
在这里插入代码片
普通的 IP 头部长度为20 个字节,不包含IP 选项字段。
版本号(Version)字段标明了IP 协议的版本号,目前的协议版本号为4。下一代IP 协议的版本号为6。
报文长度指 IP 包头部长度,占4 位。
8 位的服务类型(TOS,Type of Service)字段包括一个3 位的优先权字段(COS,Class of Service),4 位TOS 字段和1 位未用位。4 位TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用。
总长度(Total length)是整个IP 数据报长度,包括数据部分。
标识符(Identification)字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1.
生存时间(TTL,Time to Live)字段设置了数据包可以经过的路由器数目。一旦经过一个路由器,TTL 值就会减1,当该字段