TCP/IP详解卷2:实现 第一章 笔记三

来源:互联网 发布:大数据时代带来的问题 编辑:程序博客网 时间:2024/06/06 05:19

今天接着上篇写:若看破红尘往事,心又该放在哪里。凡事不要看的太透,尽管近视也不要戴眼镜吧,只为心安。

  • 红尘啊滚滚 痴痴啊情深
  • 聚散终有时
  • 留一半清醒 留一半醉
  • 至少梦里有你追随

来说正题:

以太网输入:

以太网设备会处理这个中断,数据从设备读到mbuf链表中,依旧是20个字节IP首部和8字节的UDP首部剩下的就看下面的图片吧很清楚的,设备驱动把这个mbuf传给一个通用以太网输入例程,他通过以太网帧类型来确定那个协议接收他,



IP输入例程处理每个接收到的IP数据报,他验证IP首部检验和,处理IP选项,验证数据包被传递到正确的主机(通过比较数据报的目标IP地址与主机地址),并当系统被配置了一个路由器,且数据报被注为其他IP地址时,转发此数据。如果IP数据报到达他的最终目标,调用IP首部中标识的协议的输入例程:ICMP\IGMP\TCP和UDP。

UDP输入

UDP输入例程从一个全局变量udb开始,查看所有UDP协议控制块链表,找到一个本地端口号与接收的UDP数据报的目标端口号匹配的协议控制块。pcb是由我们呢调用socket创建的,他的成员inp_scoket指向相应的插口也就是socket,就是我们第二节里面那个socket进程创建过程图里面。



首先上面第一个mbuf是在插口称创建的一个包括16个字节Internet插口地址结构,他带有发送房的IP地址和端口号,他的类型是MT_SONAME,第二个mbuf是数据他的类型是MT_DATA所以这里个mbuf不能放在同一个mbuf中。如果接收进程处于睡眠状态等待数据的到达,进程就得等被标志为可运行的状态等内核调度了。也可以通过select系统调用或SIGIO信号来通知进程数据到达。

进程输入

我们的例子中是用了recvfrom来接受,他处于睡眠状态。现在进程被唤醒了,udp追加插口层的26个字节数据被内核从mbuf复制到程序的缓存中。

网络实现概述

总结了在各层间为网络输入输出而进行通信。来一张图也方便我们讲下一个中断内容。


明天结束第一章。


0 0