TCP/IP详解卷2:实现 第二章mbuf:存储器缓存 笔记一
2014-11-03 21:15
513 查看
接下来让我们进入第二章的学习:每一天都在煎熬中度过,今天说过最多的话,我不敢在听别人的工资了,我该去跳楼了。为什么啥都不会都可以拿那么高的工资,答:不要去想为什么,做好自己的,勿忘心安。
在第一章我们介绍了普遍应用于net3内核中的存储器缓存:mbuf,他的主要用途是保存在进程和网络接口间互相传递的用户数据,但mbuf也用于保存其他的各种数据:源与目标地址、插口选项等。
接下来我们说遇到的四种不同类型mbuf,他们根据m_flag中填写的不同标志M_PKTHDR和M_EXT而不同。
![](https://img-blog.csdn.net/20141104231152508?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd3ZWkxOTkxMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
1)如果m_flags等于0,mbuf指存数据,mbuf中有108个字节的数据空间,指针m_data指向这个开始地址,m_len为从这个开始地址的长度,m_hdr中有6个成员占有20个字节,前四个成员每个占有4个字节,后俩个占有俩个字节,一个20个字节。
2)第二个mbuf是m_flags为M_PKTHDR,他指示这是一个分组首部,他表示分组数据的第一个mbuf,他是一个占有8字节的首部pkthdr{}。
3)下一种mbuf不包含分组首部,但包含超过208个字节的数据,这是用到一个叫簇的外部缓存M_EXT。net/3分配了一个大小为1024或者2048字节的簇。net/3支持7种不同的结构,定义了4中1024字节的簇,三种2048字节的簇。以太网分组的标准大小为1500字节。
4)最后一类mbuf包含一个分组首部,并包含超过208个字节的数据。同时设置了标志M_PKTHDR和M_EXT;
有几点需要注意的就是:
-----mbuf结构的大小总是128个字节。这意味着右边的俩个mbuf在m_ext后面的为用88个字节。
-----既然有些协议允许零长纪录,当然就可以有m_len为0的缓存。
-----在每个mbuf的成员m_data指向相应的缓存的开始。这个指针能指向相应缓存的任意位置,不一定起始。
-----带有簇的mbuf总是包含缓存的起始地址和他的大小。我们本书采用的是2048.
-----指针mnetxt把mbuf链表连接在一起,把一个分组形成一条mbuf链表。
-----指针m_nextpkt把多个分组连接成一个mbuf链表队列
![](https://img-blog.csdn.net/20141104231252265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbmd3ZWkxOTkxMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这个图有俩个分组的例子,这就是net/3处理接口输出队列的方法。
在第一章我们介绍了普遍应用于net3内核中的存储器缓存:mbuf,他的主要用途是保存在进程和网络接口间互相传递的用户数据,但mbuf也用于保存其他的各种数据:源与目标地址、插口选项等。
接下来我们说遇到的四种不同类型mbuf,他们根据m_flag中填写的不同标志M_PKTHDR和M_EXT而不同。
1)如果m_flags等于0,mbuf指存数据,mbuf中有108个字节的数据空间,指针m_data指向这个开始地址,m_len为从这个开始地址的长度,m_hdr中有6个成员占有20个字节,前四个成员每个占有4个字节,后俩个占有俩个字节,一个20个字节。
2)第二个mbuf是m_flags为M_PKTHDR,他指示这是一个分组首部,他表示分组数据的第一个mbuf,他是一个占有8字节的首部pkthdr{}。
3)下一种mbuf不包含分组首部,但包含超过208个字节的数据,这是用到一个叫簇的外部缓存M_EXT。net/3分配了一个大小为1024或者2048字节的簇。net/3支持7种不同的结构,定义了4中1024字节的簇,三种2048字节的簇。以太网分组的标准大小为1500字节。
4)最后一类mbuf包含一个分组首部,并包含超过208个字节的数据。同时设置了标志M_PKTHDR和M_EXT;
有几点需要注意的就是:
-----mbuf结构的大小总是128个字节。这意味着右边的俩个mbuf在m_ext后面的为用88个字节。
-----既然有些协议允许零长纪录,当然就可以有m_len为0的缓存。
-----在每个mbuf的成员m_data指向相应的缓存的开始。这个指针能指向相应缓存的任意位置,不一定起始。
-----带有簇的mbuf总是包含缓存的起始地址和他的大小。我们本书采用的是2048.
-----指针mnetxt把mbuf链表连接在一起,把一个分组形成一条mbuf链表。
-----指针m_nextpkt把多个分组连接成一个mbuf链表队列
这个图有俩个分组的例子,这就是net/3处理接口输出队列的方法。
相关文章推荐
- TCP/IP详解卷2:实现 第二章mbuf:存储器缓存 笔记二
- 《TCP-IP详解 卷2:实现》学习笔记—mbuf(存储器缓存)的结构
- 第二章 mbuf(存储器缓存)
- TCP-IP详解 卷2:实现之mbuf存储器缓存
- iPhone开发笔记(16)使用ASIHTTPRequest和ASIDownloadCache实现本地缓存
- 《TCP/IP具体解释卷2:实现》笔记--4种不同类型的mbuf
- [笔记] ASP.NET本身的缓存实现机制,基于Cache的实现。提供按分类进行管理的缓存功能
- 第一行代码学习笔记-第二章 探究活动-5. 活动的最佳实现
- iPhone开发笔记(16)使用ASIHTTPRequest和ASIDownloadCache实现本地缓存
- TCP/IP详解2 第2章 mbuf:存储器缓存 ,读书记录
- linux 内核设计与实现(第二章笔记)
- 《Spring技术内幕》笔记-第二章 IoC容器的实现
- Linux内核设计与实现笔记之第一章、第二章
- Linux网络安全技术与实现(第2版)第二章笔记(NAT结构与分类)
- Linux网络安全技术与实现(第2版)第二章笔记(SNAT与DNAT的关系)
- iPhone开发笔记(16)使用ASIHTTPRequest和ASIDownloadCache实现本地缓存
- 10、深入理解计算机系统笔记:存储器层次结构,高速缓存存储器(2)
- 《TCP-IP详解 卷2:实现》学习笔记—mbuf的深入解析
- Linux网络安全技术与实现(第2版)第二章笔记
- Linux网络安全技术与实现(第2版)第二章笔记(反向代理)