首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >skbuff frags和frag_list之间的区别

skbuff frags和frag_list之间的区别
EN

Stack Overflow用户
提问于 2012-04-06 14:02:46
回答 2查看 3.6K关注 0票数 5

sk_buff有两个地方可以存储下一个碎片数据:

代码语言:javascript
运行
复制
skb_shinfo(head)->frag_list 
skb_shinfo(head)->frags[]

请解释一下这两种处理碎片的方式之间的区别。

谢谢并致以最良好的问候!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-09 17:44:38

两者都用于不同的情况。

frags[]

当您的设备支持分散聚集I/O,并且您希望它进行数据合并等操作时。您可以填充从第二个片段到第n个片段的frags[]结构。第一个片段始终由datatail指针指定。其余的片段被填充到frags[]结构中。如果不使用scatter gather,则此变量为空。

frag_list

这是IP片段的列表。此字段将在ip_push_pending_frames期间填充。假设您的sk_buffs在此安排中

代码语言:javascript
运行
复制
sk_buff0->next = sk_buff1
sk_buff1->next = sk_buff2
...
sk_buffn-1->next = sk_buffn

在调用ip_push_pending_frames之后

代码语言:javascript
运行
复制
sk_buff0->frag_list = sk_buff1
sk_buff1->next = sk_buff2
...
sk_buffn-1->next = sk_buffn

简单地说

  • frags[]用于分散聚集i/o buffers
  • frag_list用于ip fragments
票数 10
EN

Stack Overflow用户

发布于 2015-05-30 22:47:23

skb_shinfo(head)->frags[]

如果NIC支持SG I/O,__ip_append_data会将用户空间数据拷贝到skb_shinfo(头)->frags。NIC驱动程序(例如ixgbe_add_rx_frag)也可以使用这些frags[]来传输接收到的网络流量;请注意,frags[]中的每个内容都是完整数据包的一部分。一个完整的数据包由所有frags[] + (skb->data ~ skb->tail)组成。

skb_shinfo(head)->frag_list

此成员不直接由IP碎片使用。在__ip_make_skb()中,frag_list用于收集sk->sk_write_queue中的所有frag_list;一些NIC驱动程序也使用此skbs将数据包传送到上层网络堆栈。frag_list中的每个内容/skb也不是complete数据包;tcp_v4_send_ack -> ip_send_unicast_reply -> ip_push_pending_frames -> ip_finish_skb ->__ip_make_skb;

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10039744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档