1. udp 结构:
IP + UDP +data
2. checksum 校验和:
IP 为自身的20个字节
UDP 为 伪头部+ UDPhead + data。 其中伪头部为:(伪头部在实际的数据中不进行发送。只是为了接收方进行校验是真的发送给我的。)
- struct pseudo_hdr
- {
- struct in_addr src;
- struct in_addr dst;
- uint8_t mbz;
- uint8_t proto;
- uint16_t len;
- } __attribute__((__packed__));
len 为 UDP + 数据。 协议为 17 (UDP), MBZ 为填充字段 一定为0.
3. checksum 计算:
将数据采用16位,2字节无符号进行相加。 最终的__u16 sum 再拆分为 2个1字节相加。所得结果 取反 即是 校验和