head 指向内存中数据区的开头。这一指针在 sk_buff 和其相关的数据块分配时就固定了。 data 指向当前协议数据的开头。这一指针是随当前拥有 sk_buff 的是哪个协议层而变化的。 tail 指向当前协议数据的结尾。同样,这一指针也是随当前拥有 sk_buff 的是哪个协议层而变化的。 end 指向内存中数据区的结尾。这一指针在 sk_buff 和其相关的数据块分配时固定。 len 和 truesize 这两个字段分别用来描述当前协议包长度和数据缓存总体长度。 sk_buff 处理代码提供标准的操作来向应用程序增加和移除协议头和协议尾。这就可以安全地操作 sk_buff 中的 data , tail 和 len 字段。
push 它把 data 指针指向数据区的开始并增加 len 。用于在要传输的数据开始处增加协议头。
pull 它把 data 指针从数据区的开始处移到数据区的结尾处,并减小 len 。用于在已接收的数据开始处移除协议头。
put 它把 tail 指针指向数据区的结尾处,并增加 len 。用于在要传输的数据结尾处增加数据或协议信息。
trim 它把 tail 指针指向数据区的开始处,并减小 len 。用于在已接收的数据尾移除数据或协议信息。