sk_buff整理笔记(两、操作函数)
承接上一:sk_buff 整理笔记(一、数据结构)这一篇要讲的是内核为sk_buff结构提供的一些操作函数。
第一、首先要讲的是sk_buff中的四大指针:
四大指针各自是:head、data、tail、end;这四个指针都是指向了数据区的。数据区中存放的是协议头和数据。head和end指针是每一个数据包一样的,也是有这两个指针来确定数据区的大小的。最開始的时候head、data、tail三个指针都是指向一起的,当有协议数据加进来时才更改。
再来说下包的形成。首先是应用层的数据。然后到四层加上四层的TCP协议头(如果为TCP包),然后发往三层。在三层时把四层发来的数据都当作是负载,然后再往负载前加上一个三层IP协议头。发往二层。最后二层加上个帧头就能够发送了。所以在包形成时,这几个指针起到了很关键的作用。以下来看下四个指针的指向地址大小,这也有利于对以下要讲到一些操作函数的理解。
最后一句的意思是:当数据包在二层(即data指针指向二层协议头)时。获取到三层协议头指针的一种方法。当然也能够直接用自带的获取三层协议头指针的函数(事实上函数里面也是用上面这句代码实现的),这里仅仅是为了显示data添加时,是往下移动的。
方便后面的几个函数理解。
第二、几个操作sk_buff指针的函数:
首先来说下三个空间。方便以下介绍函数时理解。第一个是:headroom,就是skb->head和skb->data之间的空间。第二个是:data。就是skb->data和skb->tail之间的空间。第三个是:tailroom,就是skb->tail和skb->end之间的空间。例如以下图:
接下来说下四个操作sk_buff结构中指针的函数:(a)skb_put(), (b)skb_push(), (c)skb_pull(), and (d)skb_reserve();这四个函数在数据包在各层之间传输时。起到了至关
重要。
(a)skb_put():向后扩大数据区空间。headroom空间不变,tailroom空间降低,skb->data指针不变,skb->tail指针下移;
(b)skb_push():向前扩大数据区空间。headroom空间降低,tailroom空间不变。skb->tail指针不变,skb->data指针上移;
(c)skb_pull():缩小数据区空间,headroom空间增大。tailroom空间不变,skb->data指针下移,skb->tail指针不变;
(d)skb_reserve():数据区不变,headroom空间增大,tailroom空间降低,skb->data和skb->tail同一时候下移;
大家也能够照着源代码来分析,还有个当大家看源代码时。会发现好多函数都有个同名的,比方:skb_push()函数,就有两个:static inline unsigned char *__skb_push(struct sk_buff *skb, unsigned int len);和unsigned char *skb_push(struct
sk_buff *skb, unsigned int len);第一个函数是详细内容的实现(关键函数),第二个函数仅仅是在第一个函数的基础上进行一些合法性检查。
第三、其它简单的操作函数:
获取/设置协议头指针等一系列函数。如:获取IP头指针,unsigned char *skb_network_header(const struct sk_buff *skb);还有其它些函数(skb内存申请、skb克隆和复制、skb队列操作)将到后面做具体分析。
敬请观看下一篇sk_buff整理笔记(三、内存分配和释放)
sk_buff整理笔记(两、操作函数)的更多相关文章
- MongoDB整理笔记のGUI操作
值得幸运的是,其实MongoDB也有像类似于PL/SQL一样的界面操作工具操作MongoDB. 下面就来介绍几款不同的界面工具,大家各取所需! MongoVUE 主页:http://www.mongo ...
- JavaScript 数组操作函数--转载+格式整理
JavaScript 数组操作函数(部分)--转载+格式整理 今天看了一篇文章,主要讲的对常用的Js操作函数:push,pop,join,shift,unshift,slice,splice,conc ...
- python3.7内置函数整理笔记
#python3.7 内置函数整理 #abs(x) #返回数字的绝对值. 参数可以是整数或浮点数. 如果参数是复数,则返回其大小 # print(abs(1)) # print(abs(-1)) # ...
- (笔记)Linux内核中内存相关的操作函数
linux内核中内存相关的操作函数 1.kmalloc()/kfree() static __always_inline void *kmalloc(size_t size, gfp_t flags) ...
- canvas学习笔记、小函数整理
http://bbs.csdn.net/topics/391493648 canvas实例分享 2016-3-16 http://bbs.csdn.net/topics/390582151 html5 ...
- Qt 学习之路 2(19):事件的接受与忽略(当重写事件回调函数时,时刻注意是否需要通过调用父类的同名函数来确保原有实现仍能进行!有好几个例子。为什么要这么做?而不是自己去手动调用这两个函数呢?因为我们无法确认父类中的这个处理函数有没有额外的操作)
版本: 2012-09-29 2013-04-23 更新有关accept()和ignore()函数的相关内容. 2013-12-02 增加有关accept()和ignore()函数的示例. 上一章我们 ...
- 【阅读笔记】《C程序员 从校园到职场》第六章 常用文件操作函数 (Part 1)
参考链接:https://blog.csdn.net/zhouzhaoxiong1227/article/details/24926023 让你提前认识软件开发(18):C语言中常用的文件操作函数总结 ...
- canvas学习之API整理笔记(二)
前面我整理过一篇文章canvas学习之API整理笔记(一),从这篇文章我们已经可以基本了解到常用绘图的API.简单的变换和动画.而本篇文章的主要内容包括高级动画.像素操作.性能优化等知识点,讲解每个知 ...
- Linux C 文件操作函数(~上善止水~)
翻翻笔记,整理一下 C 语言中的文件操作函数 ~~~~~~,多注意细节,maybe 细节决定成败~ 1. fopen /* fopen(打开文件) * * 相关函数 open,fclose * * 表 ...
随机推荐
- 【JAVA高级】——myEclipse连接mysql启动数据库服务
背景: DRP项目要求使用Oracle数据库,但眼下因为种种原因,临时还装不了Oracle.但也不能闲着啊,就拿mysql来试试.安装完mysql以后,使用myEclipse连接数据库,就一直报错,报 ...
- IIS的WebGarden、WebFarm和StateServer
开启IIS的WebGarden.WebFarm和StateServer之旅 前言 公司系统虽然配置有1台NLB后拖4台App Server最后搭一台强劲无比的DB Server,但每天下午4点左右总被 ...
- HTML5_文本元素
<!DOCTYPE html> <hmtl> <html lang="zh-en"> <head> <meta chars ...
- MFC调试小技巧
今天看acl源码的时候看到一个函数AllocConsole().百度一下感觉这个函数对于调试非常不错,当然对于MFC里面的调试信息,我都是用TRACE打印自己感兴趣的消息的,而且仅仅有在DEBUG里面 ...
- 移动web:翻页场景动画
在移动web,特别是在微信中,经常看到一种翻页动画效果,也称为场景动画. 一页一页的翻过,像在看书,每页的内容以各种"炫酷"的效果出现在你的眼里,配上一首动听的音乐,你有没有喜欢上 ...
- [LeetCode226]Invert Binary Tree
题目: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 反转二叉树,左右儿子值交换 代码: / ...
- 最小二乘法 (转)good
最小二乘法也称为最小平方法,是一种数据优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配. 最小二乘法最初由高尔顿在创立回归分析的时候提出,现在已经成为探索变量间关系最重要的方法,最小二乘法根据 ...
- C#设计及其UML(反向工程)
OOP之C#设计及其UML(反向工程) 现在总结一下C#类关键字(virtual.abstract.override.new.sealed)的使用(以C#代码体现),并再次熟悉一下OOP思想,使用 ...
- Netty In Action中文版 - 第一章:Netty介绍
本章介绍 Netty介绍 为什么要使用non-blocking IO(NIO) 堵塞IO(blocking IO)和非堵塞IO(non-blocking IO)对照 Java NIO的问题和在Nett ...
- js的StringBuffer实施和使用类
<strong>JAVA有一个StringBuffer分类,js但不是在下面,以实现自己的简单js的StringBuffer分类.</strong> //创建一个StringB ...