linux 内核 skb
时间: 2023-10-18 13:05:07 浏览: 130
ipv4_linux内核skb处理流程图_
5星 · 资源好评率100%
在Linux内核中,skb是指socket buffer,它是用来在不同层级之间传递数据的数据结构。skb在内核中的使用非常广泛,它可以包含不同协议层的报文,例如ARP、IP等。[1]
对于skb的处理,内核使用child结构体变量来指向第二个sk_buff结构体的内存地址。在代码中,可以通过(child + 1)来获取引用计数器的开始地址,进而对skb进行操作。
当需要释放skb时,内核使用kfree_skb()函数进行释放。该函数首先判断skb是否为空,如果为空则直接返回。然后,通过判断引用计数器的值,决定是否继续释放skb。如果引用计数器的值为1,表示只有当前正在使用的引用,那么就可以进行释放。否则,如果引用计数器的值不为1,则返回。释放skb的具体实现是通过调用__kfree_skb()函数来完成的。
在__kfree_skb()函数中,首先调用skb_release_all()函数释放skb的头部状态,然后再调用skb_release_data()函数释放skb的数据部分。
总结来说,在Linux内核中,skb是用于在不同层级之间传递数据的数据结构,对于skb的处理包括分配、释放等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [ipv4_linux内核skb处理流程图_](https://download.csdn.net/download/weixin_42666036/25945917)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [linux 内核网络 sk_buff 之申请和释放 Ⅲ](https://blog.csdn.net/wangquan1992/article/details/112603882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [sk_buff封装和解封装网络数据包的过程详解](https://blog.csdn.net/weixin_33911824/article/details/89867585)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文