《TCP/IP详解 卷2:实现》 —1.9 mbuf与输出处理

举报
华章计算机 发表于 2019/11/20 15:47:23 2019/11/20
【摘要】 本节书摘来自华章计算机《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。

image.png

图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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。