套接字數(shù)據緩存(socket buffer)在Linux內核中表示為:struct sk_buff,是Linux內核中數(shù)據包管理的基本單元,主要包含兩個部分,其一:管理數(shù)據,即數(shù)據包的管理信息;其二:報文數(shù)據,保存了實際網絡中傳輸?shù)臄?shù)據,在內核協(xié)議棧起承上啟下的作用,也有很多值得關注的sk_buff操作。
1、sk_buff四大指針與相關操作
**分配初始化:**struct sk_buff中四個指針都指向數(shù)據區(qū),分別是head、data、tail、end,剛剛分配出來的sk_buff會立馬進行四大指針的初始操作。
分配sk_buff如下所示:
struct sk_buff *buff;
buff = sk_stream_alloc_skb(sk, 0, sk- >sk_allocation, true);
sk_stream_alloc_skb最終調用__alloc_skb函數(shù)進行內存分配,分配skb后,進行四大指針的初始化操作:
struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,
int flags, int node)
{
struct sk_buff *skb;
skb = kmem_cache_alloc_node(cache, gfp_mask & ~__GFP_DMA, node)
skb- >head = data;
skb- >data = data;
skb_reset_tail_pointer(skb);
skb- >end = skb- >tail + size;
}
其中skb_reset_tail_pointer(skb):
static inline void skb_reset_tail_pointer(struct sk_buff *skb)
{
skb- >tail = skb- >data;
}
最終四大指針初始化為以下圖所示:
此時head、data、tail三個指針指向一起,end指向數(shù)據緩沖區(qū)的尾部。
-
嵌入式
+關注
關注
5136文章
19521瀏覽量
314563 -
內核
+關注
關注
3文章
1408瀏覽量
41068 -
Linux
+關注
關注
87文章
11454瀏覽量
212711 -
內存
+關注
關注
8文章
3107瀏覽量
74968
發(fā)布評論請先 登錄
Linux sk_buff四大指針與相關操作

Linux內存點滴 用戶進程內存空間
DM8127使用SWOSD_TI_alloc()分配內存空間怎么加大?
ARM32 Linux的內存布局
RTThread的動態(tài)內存空間該如何去分配呢
Linux網絡設備驅動程序
如何讓你的手機省出內存空間
網卡的Ring Buffer詳解
網卡的Ring Buffer詳解
sk_buff內存空間布局情況與相關操作(二)

sk_buff內存空間布局情況與相關操作(三)

淺析新能源電動汽車充電樁空間布局優(yōu)化研究

評論