Linux查看协议栈缓冲区使用,Linux网络协议栈之套接字缓冲区

news/2023/9/28 18:54:04

链表管理

在对skb链表的操作中,为了防止被其他异步操作打断,在操作前都必须现获取SKB头节点中(sk_buff_head结构)的自旋锁,然后才能访问队列中的元素。该链表头结构如下:

struct sk_buff_head {

/* These two members must be first. */

struct sk_buff   *next;

struct sk_buff   *prev;

/*链表中的节点数,即队列长度*/

__u32                 qlen;

/*用来控制SKB链表并发操作的自旋锁*/

spinlock_t         lock;

};

db739ecb3a9ca8b0fde62031f6c55842.png

对链表操作也增加了很多函数,包括初始化、入队列、出队列等等,也在skbuff.h中。

Skb_shared_info结构

在alloc_skb()看到,其中中分配数据部分分配了一个该结构,在数据缓存区的末尾,保存了数据块的附加信息。如下:

#define skb_shinfo(SKB)           ((struct skb_shared_info *)((SKB)->end))

该结构定义如下:

struct skb_shared_info {

/*引用计数,当一个数据缓存区被多个SKB的描述符引用时

就会设置相应的计数*/

atomic_t   dataref;

/*ip分片的存储有关,片段数*/

unsigned short nr_frags;

/*生成GSO段时的MSS,因为GSO段的长度是与发送该段的套接口中

合适MSS的整数倍*/

unsigned short gso_size;

/* Warning: this field is not always filled in (UFO)! */

/*GSO段的长度是gso_size的整数倍,即用gso_size来分割大段时

产生的段数*/

unsigned short gso_segs;

/*该SKB中的数据支持的GSO类型*/

unsigned short  gso_type;

__be32          ip6_frag_id;

/*ip分片的存储有关,使用情况如下:

1,用于在接收分片组后连接多核分片,组成一个完整的IP数据报;

2,在UDP数据报的传输中,将待分片的SKB连接到第一个SKB中,然后在

传输过程中能够快速的分片;

3,用于存放FRAGLIST类型的聚合分散I/O的数据包,如果输出网络设备支持

FRAGLIST类型的聚合分散I/O,则可以直接输出*/

struct sk_buff   *frag_list;

/*ip分片的存储有关,片段以关联的方式存储在该数组中*/

skb_frag_t        frags[MAX_SKB_FRAGS];

};

其中skb_frag_t类型如下:

struct skb_frag_struct {

/*指向文件系统缓存页的指针*/

struct page *page;

/*数据起始地址在文件系统缓存页中的偏移*/

__u16 page_offset;

/*数据在文件系统缓存页面中使用的长度*/

__u16 size;

};

关于该结构的操作在后面的协议分析中碰到后进行阅读。接下来依着协议栈的层次进行分析和学习,从驱动一直到传输层。只会涉及最基本的几个协议(TCP、IP、UDP、ICMP以及ARP等)。0b1331709591d260c1c78e86d0c51c18.png


https://dhexx.cn/news/show-18607.html

相关文章

linux 输入输出错误重定向

什么是输入重定向? 通俗的讲,输入重定向就是把要输入的信息写入到指定的文件中去什么是输出重定向? 通俗的讲,输出重定向就是把要输出的信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台(显示…

ArcGIS Runtime for Android开发教程V2.0(3)基础篇---Hello World Map

目录 创建项目项目结构编码实现通过上面章节,我们已经了解如何配置一个ArcGIS Runtime for Android开发环境,下面我们将介绍如何使用Eclipse创建一个ArcGIS移动项目Hello World Map,并且分析项目的相关结构。 1、 创建项目 打开我们已经配置…

linux系统常见的目录和作用

/:根目录,一般根目录下只存放目录,不要存放文件,也不要修改,或者删除目录下的内容 /mnt:测试目录 /root:root用户的家目录 /home:普通用户的家目录 /tmp:临时目录(比如文…

SQL Server 备份和还原全攻略

SQL Server 备份和还原全攻略 原文:SQL Server 备份和还原全攻略一、知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已…

布局文件Android ListView入门知识--各种Adapter配合使用

PS:今天上午,非常郁闷,有很多简略基础的问题搞得我有些迷茫,哎,代码几天不写就忘。目前又不当COO,还是得用心记代码哦! 在Android开发中ListView是比较经常使用的组件,它以列表的情势展示详细内…

dom4j解析xml字符串实例[转]

DOM4J 与利用DOM、SAX、JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异、功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml。dom4j是一套开源的api。实际项目中,往往选择d…

cug上的几道dp题

题目链接:http://acm.cug.edu.cn/JudgeOnline/problem.php?id1317 思路:dp[i][j]表示以a[i]为结尾的串与以b[j]为结尾的串的最小编辑距离,则 若a[i]a[j],有dp[i][j]dp[i-1][j-1]; 否则dp[i][j]min{dp[i-1][j-1]2,dp[i-1][j]3,dp[i][j-1]3} 1…

微信小程序语言c#,微信小程序推出最新脚本语言WXS,你需要知道的全在这里了...

原标题:微信小程序推出最新脚本语言WXS,你需要知道的全在这里了感谢“造程序”(微信ID:zaochengxucom)的授权发布。责编:陈秋歌,关注微信开发等领域,寻求报道或者投稿请发邮件至chenqg#csdn.net。WXS脚本语…

Preference+PreferenceArray+DataModel

在Mahout中,用户的喜好被抽象为一个Preference,包含了userId,itemId和偏好值(user对item的偏好)。Preference是一个接口,它有一个通用的实现是GenericPreference。 因为用户的喜好数据是大规模的&#xff0…

android 向js传递参数,《成为大前端》系列 4.4 Native与JS通信-参数传递和结果返回(Android)...

JS 传递参数到 Native前面完成了 JS 调用 Native,接下来继续 JS 如何传递参数到 Native传递原始类型数据先看 JS 端的代码:function onClickButton(){window.androidBridge.callNative("Hello");}复制代码Native 端:inner class Br…