sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。
    这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。
    由于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve。
    协议栈中的每一层在往下一层传递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。
    skb_reserve同样被设备驱动使用来对齐接收到包的包头。如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。

转载于:https://www.cnblogs.com/linyx/p/3861881.html

Network | sk_buff相关推荐

  1. Linux内核--网络协议栈深入分析(二)--sk_buff的操作函数

    本文分析基于Linux Kernel 3.2.1 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7972647 更多请查看网络栈分析 ...

  2. [翻译:更新]Understanding Linux Network Internals - Table of Contents

    会在每一节翻译完成后,更新本目录的链接,没有链接的就是还没有翻译的. Linux内核源代码下载(linux-2.6.10): http://www.softpedia.com/progDownload ...

  3. sockert组成部分_Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )

    sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息.它在skbuff.h中定义,并包含很多成员变量供网络代码中的各子系统使用. 这个结构在linux内核的发 ...

  4. 网络协议栈深入分析(二)--sk_buff的操作函数

    1.alloc_skb()函数 该函数的作用是在上层协议要发送数据包的时候或网络设备准备接收数据包的时候会调用alloc_skb()函数分配sk_buff结构体,需要释放时调用kfree_skb()函 ...

  5. struct sk_buff与struct socket及struct sock 结构体分析

    sk_buff是Linux网络协议栈最重要的数据结构之一,该数据结构贯穿于整个数据包处理的流程.由于协议采用分层结构,上层向下层传递数据时需要增加包头,下层向上层数据时又需要去掉包头.sk_buff中 ...

  6. [转]Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )

    因为太喜欢这篇文章,所以有保存在自己blog里的冲动,同时也对文章代码的相关部分加上了颜色,给阅读时黑压压的一片带来一些亮色,也减少了阅读时的单调情愫. sk_buff结构可能是linux网络代码中最 ...

  7. Linux:sk_buff完全剖析与理解【转】

    sk_buff http://note.youdao.com/share/?id=7dce6efd7d8d96bf8f769f3427430023&type=note#/ 目录 1 sk_bu ...

  8. 非常详细的详谈struct sk_buff

    非常详细的详谈struct sk_buff 排版太慢 难看的话可以下载WOR文档 专门详解struct_sk_buff 链接: http://pan.baidu.com/s/1gf8VNKR 密码: ...

  9. Linux网络技术学习(一)—— sk_buff数据结构解析

    文章目录 Linux网络代码中结构体 套接字缓冲区:sk_buff数据结构 sk_buff数据结构定义文件位置 sk_buff数据结构分布 sk_buff数据结构在传输中的流程 网络选项以及内核结构 ...

最新文章

  1. 2022-2028年中国金融云行业市场研究及前瞻分析报告
  2. 吃了这些数据集和模型,跟 AI 学跳舞,做 TensorFlowBoys
  3. gogs创建项目_容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
  4. 常用于评价回归模型优劣的统计量包括( )。_第四十一讲 R-判断回归模型性能的指标...
  5. vue 前端设置允许跨域_web 前端的一些小问题
  6. 2021年中国硬核创业者调研报告
  7. html5 can,基于html5 can-vas实现漫天飞雪效果实例
  8. hive连接mysql报错_hive远程模式初始化mysql报错
  9. Ubuntu系统---WeChat安装
  10. Flink 在快手实时多维分析场景的应用
  11. c++ std::map find 用法
  12. 卡巴斯基2017免费版发布下载:文件/网页杀毒、自动更新/保护
  13. 本地图文直接复制到动易CMS编辑器中
  14. 怎么让模糊的数字变清楚_为什么有的数字视频看起来很清晰 有的却很模糊
  15. 安卓投屏软件_安卓投屏下载-安卓投屏下载v7.7.3
  16. 信息系统开发与管理简答题、应用题和名词解释题汇总
  17. user后面的计算机名更改,更改电脑用户名(可更改C:\Users\用户名)
  18. SCAR:Scalable Consensus Algorithm 一种可伸缩共识算法
  19. 联合国会常务委员会明确破产法规:Arun Jaitley
  20. 【MySQL】 ---- 共享锁、独占锁、行锁、表锁

热门文章

  1. mysql的越过用户权限表登录
  2. mass Framework event模块 v4
  3. Linux 服务器日志文件查找技巧精粹
  4. 无线路由器与无线AP的区别
  5. 坑爹的微软官方文档:SQL无人值守安装
  6. kubernetes学习笔记之十三:基于calico的网络策略入门
  7. 比较v-bind和v-model
  8. 软件开发文档模板 (学习)
  9. centos7 lvm管理 把/home空间转移给/
  10. [改善Java代码]用整数类型处理货币