skb是linux kernel中收发数据包用到的控制结构体,有些字段指向分配的内存用于存放数据包,
向协议栈传送时,通过移动指针来获取到以太头,网络头,传输头等信息。
-
skb结构和相关操作函数
a. skb结构体,如下图片(盗图)image.png
struct sk_buff {
__u16 transport_header; //传输头相对于skb->head的偏移
__u16 network_header;//网络头相对于skb->head的偏移
__u16 mac_header;//以太网头相对于skb->head的偏移
/* These elements must be at the end, see alloc_skb() for details. */
sk_buff_data_t tail;
sk_buff_data_t end;
unsigned char *head, *data;
}
head和end分别指向存放数据内存区域的头和尾,一旦分配就固定不变。
data和tail分别是真正数据的起始位结束。
head和data之间的区域成为headroom,data和tail之间的区域存放真正的数据,tail和end之间的区域成为tailroom。skb刚分