一、引言
1、linux kernel中要保证IP/TCP/UDP数据的正确性,就要对数据进行校验。校验方法,简单来说,就是对要计算的数据,以16bit为单元进行累加,取反。
2、由于目前很多网卡设备是支持对L4层(传输层 tcp/udp层)数据包进行checksum的计算和验证的,所以在L4协议软件的实现中,会根据网卡的支持情况作不同的处理,为此内核在struct sk_buff结构和struct net_device中增加了校验和相关的参数,如下:
二、struct sk_buff 结构
struct sk_buff 中与checksum有关的字段如下:
struct sk_buff
{
...
__u8 ip_summed:2;
...
un