《TCP/IP详解 卷2:实现》 —1.10 输入处理
【摘要】 本节书摘来自华章计算机《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)。
mbuf的前16字节数据空间被分配给一个接口层首部,但没有使用。数据就存储在这个mbuf中,54字节的数据存储在剩余的84字节的空间中。
设备驱动程序把mbuf传给一个通用以太网输入例程,它通过以太网帧中的类型字段确定哪个协议层来接收此分组。在这个例子中,类型字段标识一个IP数据报,从而mbuf被加入到IP输入队列中。另外,会产生一个软中断来执行IP输入例程。这样,这个设备中断处理就完成了。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)