《TCP/IP详解 卷2:实现》 —1.9 mbuf与输出处理
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第1章,第1.9.1节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。
1.9 mbuf与输出处理
在伯克利联网代码设计中,有一个基本概念就是存储器缓存,称作一个mbuf,在整个联网代码中用于存储各种信息。下面通过我们的简单例子(图1-2)分析mbuf的一些典型用法,在第2章中我们会更详细地说明mbuf。
1.9.1 包含插口地址结构的mbuf
在sendto调用中,第5个参数指向一个Internet插口地址结构(叫serv),第6个参数指示它的长度(后面我们将要看到是16字节)。插口层为这个系统调用做的第一件事就是验证这些参数是有效的(即这个指针指向进程地址空间的一段存储器),并且将插口地址结构复制到一个mbuf中。图1-6所示就是这个所得到的mbuf。
图1-6 mbuf中针对sendto的目的地址
mbuf的前20字节是首部,它包含关于这个mbuf的一些信息。这个20字节的首部包括四个4字节字段和两个2字节字段。mbuf的总长度为128字节。
稍后我们会看到,mbuf可以用成员m_next和m_nextpkt链接起来。在这个例子中都是空指针,它是一个独立的mbuf。
成员m_data指向mbuf中的数据,成员m_len指示它的长度。对于这个例子,m_data指向mbuf中数据的第一个字节(紧接着mbuf首部)。mbuf后面的92字节(108-16)没有用(图1-6的阴影部分)。
成员m_type指示包含在mbuf中的数据的类型,在本例中是MT_SONAME(插口名称)。首部的最后一个成员m_flags,在本例中是0。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)