Linux网络子系统 sk_buff 数据结构与函数
一、基本概念 <inlcude/linux/skbuff.h>
sk_buff 是一个双向链表,还外加一个sk_buff_head 的数据结构
所有网络分层使用这个数据结构 <include/linux/skbuff.h> 头文件中
当一个数据包到达线路后,网络驱动程序会分配这个SKB,通过netdev_alloc_skb()方法,
释放调用 kfree_skb() 与 dev_kfree_skb()
sk_buff 解决了网络子系统中
内存分配
数据包队列
解析L2, L3, L4三层数据包头
具体参数信息
以太网数据包(14字节) + IPv4 头部(20 - 60 字节) + UDP 头部(8 字节) + Payload
二、相关函数 net/core/skbuff.c 文件
1. 内存分配函数 alloc_skb 和 dev_alloc_skb
2. 释放内存函数 kfree_skb 和 dev_kfree_skb
3. 数据预留及对齐函数 skb_reverse skb_put skb_push skb_pull
4. skb_shared_info 结构与 skb_shinfo 函数
5. 缓冲区的克隆与复制 skb_clone
7. 列表管理函数
参考资料:
http://www.skbuff.net/skbbasic.html

浙公网安备 33010602011771号