SKB直接影响网络处理的性能:
能够方便处理可变长缓存,因为接收和发送的数据报长度不是固定的。
能够很容易地实现在头尾部添加和移除数据,因为这些缓冲区需要在不同网络层次间进行传递。
在添加和移除数据时能够尽量避免数据的复制。
SKB的主要用途是保存在进程和网络接口之间互相传递的用户数据,以及其他一些(如套接口选项等)。
SKB操作函数及宏涉及一下文件:
include/linux/skbuff.h,SKB结构定义和SKB宏。
net/core/skbuff.c,操作SKB的函数。
sk_buffer的成员可大致分为一下几类:
与SKB组织相关的成员变量。
通用成员变量。
标志性变量。
与特定相关的成员变量。
协议栈中的每一层在往下一层传递SKB前,首先就是调用skb_reserve()在数据缓冲区头部预留出的空间。
向上层协议传递SKB时,内核不会将首部从数据缓冲区中删除,而是把有效载荷指针指向上层协议的首部。
内核编译之后,由某些选项所控制的数据结构是固定的而不是动态变化的。一般来说,如果某些选项修改了内核数据结构,则包含该选项的组件就不能被编译成内核模块。