Linux sk_buff 结构详解 Linux kernel 中的 sk_buff 结构是网络代码中最重要的数据结构之一,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。本结构被网络的不同层(MAC 或者其他二层链路协议,三层的 IP,四层的 TCP 或 UDP 等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。 sk_buff 结构包含以下成员变量: 1. sk_buff->next 和 sk_buff->prev:这两个指针用于组织 sk_buff 成为一个双向链表。 2. sk_buff->qlen:表示链表元素的个数。 3. sk_buff->lock:用于防止对链表的并发访问。 4. sk_buff->sk:这是指向拥有这个 sk_buff 的 sock 结构的指针。 5. sk_buff->len:表示当前协议数据包的长度,包括主缓冲区中的数据长度和分片中的数据长度。 6. sk_buff->data_len:计算分片中数据的长度。 7. sk_buff->mac_len:这是 mac 头的长度。 8. sk_buff->users:这是一个引用计数,用于计算有多少实体引用了这个 sk_buff 缓冲区。 9. sk_buff->truesize:这是缓冲区的总长度,包括 sk_buff 结构和数据部分。 10. sk_buff->head、sk_buff->data、sk_buff->tail 和 sk_buff->end:它们表示缓冲区和数据部分的边界。 sk_buff 结构的使用: * 在网络协议栈中的每一层,在往下一层传递缓冲区前,第一件事就是调用 skb_reserve 在缓冲区的头部给协议头预留一定的空间。 * skb_reserve 同样被设备驱动使用来对齐接收到包的包头。 * 内核可以把 sk_buff 组织成一个双向链表,链表的结构要比常见的双向链表的结构复杂一点。 * sk_buff 结构可以被网络的不同层使用,并且其中的成员变量在结构从一层向另一层传递时改变。 sk_buff 结构是 Linux 网络代码中最重要的数据结构之一,它提供了一个灵活的机制来处理网络协议栈中的数据传输。
剩余8页未读,继续阅读
- ympop2014-12-02讲的很清楚,研究Linux上面网络协议栈必备
- 粉丝: 112
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助