mbuf详解-84页
来源:互联网 发布:keepyourvoice软件 编辑:程序博客网 时间:2024/04/26 05:37
mbuf在TCP/IP协议簇里非常重要,它是TCP/IP的核心数据结构。它的主要用途是保存在进程和网络接口间互相传递的用户数据,但也用于保存其它各种数据,如源地址和目标地址、套接字选项等。
按照mbuf的m_flags字段的不同,mbuf可分为四类如下:
m_flags=0:该mbuf只包含分组的用户数据(最大为108字节),记为mbuf1。
m_flags=M_PKTHDR:该mbuf包含分组的首部,以及不超过100字节的用户数据,记为mbuf2。
m_flags=M_EXT:该mbuf不包含分组的首部,但包含208~1024(或2048,看协议的实现)字节的用户数据,记为mbuf3。
m_flags=M_PKTHDR|M_EXT:该mbuf包含分组的首部,以及超过208~1024(或2048)字节的用户数据,记为mbuf4。
这里有一个疑问:只要有mbuf1和mbuf2,原则上就可以表示任意分组(分组的用户数据小于100字节只用mbuf2就够了;如果分组的用户数据大于100字节,就用一个mbuf2链接上若干个mbuf1,总能表示),为什么还需要mbuf3和mbuf4呢?是出于性能的考虑。mbuf作为TCP/IP的核心数据结构,对它操作的时间复杂度对协议的运行效率有重大影响。因为TCP发送的报文段从来不超过1024字节,连续访问1024字节的数组明显比访问一共1024字节的几个链表块,明显快得多。
mbuf不是一个链表结构,它是一个128字节的结构体。所有类型的mbuf都有以下6个字段,即mbuf的头部,共20字节:
m_next:本分组的下一个mbuf块的地址,4字节
m_nextpkt:下一个分组的首部的地址,4字节
m_len:本mbuf中有效数据的长度(不包括头部),4字节
m_data:本mbuf块有效数据的起始地址,4字节
m_type:本mbuf的数据类型,2字节
m_flags:区分mbuf块,2字节
对应的C源码如下:
struct m_hdr {
struct mbuf *mh_next;
struct mbuf *mh_nextpkt;
int mh_len;
char *mh_data;
short mh_type;
short mh_flags;
};
- mbuf详解-84页
- mbuf
- mbuf
- mbuf
- TCP/IP详解2 学习笔记---mbuf
- TCP-IP详解 卷2:实现之mbuf存储器缓存
- TCP IP详解卷2之mbuf宏与函数
- dpdk mbuf
- 《TCP/IP详解,卷2:实现》读书笔记-mbuf的结构
- 《TCP/IP详解,卷2:实现》读书笔记-深入mbuf的结构
- 《TCP-IP详解 卷2:实现》学习笔记—mbuf(存储器缓存)的结构
- 《TCP-IP详解 卷2:实现》学习笔记—mbuf的深入解析
- 《TCP/IP详解卷2:实现》笔记--mbuf与输入输出(UDP篇)
- 《TCP/IP详解卷2:实现》笔记--4种不同类型的mbuf
- TCP/IP详解2 第2章 mbuf:存储器缓存 ,读书记录
- TCP/IP详解卷2:实现 第二章mbuf:存储器缓存 笔记一
- TCP/IP详解卷2:实现 第二章mbuf:存储器缓存 笔记二
- DPDK-Mbuf 结构学习MBUF LIBRARY
- cmd命令操作Windows注册表
- 【Android】对话框
- sockaddr详解-84页
- linux 错误返回值
- 简明 Vim 练级攻略(转自人人)
- mbuf详解-84页
- 学习知识点
- 网络游戏服务器端开发心得之网络
- [MySQL 工具] pt-mysql-summary使用分析mysq数据库
- Ubuntu 安装 Hive
- vim常用命令
- ifnet结构详解-53页
- Python执行系统命令的方法
- java之MyData类