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

 

posted @ 2017-12-22 15:33  elewei  阅读(748)  评论(0)    收藏  举报