UDP报头只有4个字段,分别是:源端口号、目的端口号、报文长度和报头checksum,其中的报头checksum这个字段在IPv4中并不是强制的,但在IPv6中是强制的,本文介绍UDP报头中checksum的计算方法,并给出相应的源程序,实际上,网络通信中常用的IP报头、TCP报头和UDP报头中都有checksum,其计算方法基本一样,所以把这些检查和一般统称为Internet Checksum。
1. UDP报文结构
-
UDP报文为两部分,报头+数据;
-
在Linux下,UDP报头定义在头文件linux/udp.h中;
struct udphdr { __be16 source; __be16 dest; __be16 len; __sum16 check; };
- source - 来源端口号,可选项,如果不使用,填充 0;
- dest - 目的端口号;
- len - 报文长度;
- check - 报头的校验和,在IPv4中是可选的,IPv6中是强制的,如果不使用,应填充0;
图1:UDP数据报结构