《TCP/IP详解 卷2:实现》 —1.10 输入处理

举报
华章计算机 发表于 2019/11/20 15:55:38 2019/11/20
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第1章,第1.10.1节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。

1.10   输入处理

输入处理与刚讲过的输出处理不同,因为输入是异步的。也就是说,它通过一个“接收完成中断”触发以太网设备驱动程序来接收输入分组,而不是通过进程的系统调用。内核处理这个设备中断,并调度设备驱动程序进入运行状态。

1.10.1   以太网输入

以太网设备驱动程序处理这个中断,假定它表示一个正常的接收已完成,数据从设备读到一个mbuf链表中。在我们的例子中,接收了54字节的数据并复制到一个mbuf中:20字节IP首部、8字节UDP首部及26字节数据(服务器的时间与日期)。图1-10所示的是这个mbuf的格式。

这个mbuf是一个分组首部(m_flags被设置成M_PKTHDR),它是一个数据记录的第一个mbuf。分组首部的成员len包含数据的总长度,成员rcvif包含一个指针,它指向接收数据的接口的结构(第3章)。我们可以看到成员rcvif用于接收分组而不是输出分组(图1-7和图1-8)。

image.png

mbuf的前16字节数据空间被分配给一个接口层首部,但没有使用。数据就存储在这个mbuf中,54字节的数据存储在剩余的84字节的空间中。

设备驱动程序把mbuf传给一个通用以太网输入例程,它通过以太网帧中的类型字段确定哪个协议层来接收此分组。在这个例子中,类型字段标识一个IP数据报,从而mbuf被加入到IP输入队列中。另外,会产生一个软中断来执行IP输入例程。这样,这个设备中断处理就完成了。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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