Ch1:概述

2024-06-22 08:18
文章标签 概述 ch1

本文主要是介绍Ch1:概述,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


一、 概述

本章对Net/3网络代码的概述。


二、 网络实现概述

Net/3通过支持多种通信协议来提供通用的底层基础服务。4.4BSD支持四种不同的通信协议族:TCP/IP、XNS、OSI协议和Unix域协议。

内核对联网代码通过分层来组织,分为三层,如下图所示。


图1. Net/3联网代码分层结构

  • 插口层是一个到下面协议相关层的协议无关接口。所有系统调用从协议无关的插口层开始。
  • 协议层包括我们前面提到的四种协议族(TCP/IP,XNS,OSI和Unix域)的实现。
  • 接口层包括同网络设备通信的设备驱动程序。

上图在各层间添加网络输入输出后的实现如下图2所示。


图2. 网络输入输出层间通信


三、 mbuf简介

mbuf, memory buffer简写。在整个联网代码中用于存储各种信息的数据结构。简单的mbuf数据结构图示。


图3. mbuf简单数据结构图示

更多关于mbuf的介绍见“Ch2:mbuf”。


四、 以太网输出

应用程序通过以太网发送UDP报文的输出流程如下图示。


图4. 三层处理一个简单UDP输出的执行过程

  1. 应用进程调用sendto系统调用。
  2. 插口层将插口地址结构复制到一个mbuf,并将sendto调用中指定的数据复制到一个或多个mbuf中。
  3. 协议层被调用,添加一个IP首部和一个UDP首部,调用IP输出例程。
  4. 以太网接口通过ARP学习48 bit以太网地址,并添加一个14字节的以太网首部至第一个mbuf中,接着将mbuf链表添加到接口的输出队列队尾,等待输出。


五、 以太网输入

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

以太网输入的处理流程如下:

  1. 以太网设备驱动程序处理中断,并将数据从设备读到一个mbuf链中。接着,以太网输入例程通过判断mbuf链中帧数据的类型字段把分组加入到IP输入队列中,同时产生一个软中断来执行IP输入例程。
  2. IP例程处理接收到的IP数据报,根据IP数据报头部信息(UDP输入)确定调用UDP输入例程来处理UDP数据报。
  3. UDP输入例程验证UDP首部各字段,然后选择一个进程来接收此数据报。


六、 中断与并发

我们从以太网输入可以看到网络代码处理输入分组用的是异步和中断驱动的方式。下面,介绍内核中定义的中断。


图5. 阻塞中断的内核函数说明

Net/3代码中经常调用函数splimp和splnet来阻止网络设备驱动程序中断的发生。具体来说,splimp把CPU的优先级升高到网络设备驱动程序级;而splx使处理器返回到原来的优先级。


七、 源代码组织

Net/3的网络源代码组织结构如下图(假设代码位于/usr/src/sys)。


图6. Net/3源代码目录

Net/3联网代码主要分布在:

  • kern:通过的内核文件。
  • net:通用联网文件。
  • netinet:Internet协议代码:IP,ICMP,IGMP,TCP和UDP。
  • sys:系统头文件。


八、 相关函数

8.1 sendto

功能:将数据由指定的socket传给对方主机。

原型:int sendto ( socket s , const void * msg, int len, unsigned int flags, const struct sockaddr * to , int tolen ) ;

8.2 recvfrom

功能:接收远程主机经指定的socket传来的数据,并把数据传到由参数buf指向的内存空间。

原型:ssize_t recvfrom(int sockfd,void *buf,int len,unsigned int flags, struct sockaddr *from,socket_t *fromlen); 

8.3 bzero

功能:置字节字符串s的前n个字节为零且包括‘\0’。

原型:extern void bzero(void *s, int n);

8.4 socket

功能:创建socket套接字。

原型:int socket(int domain, int type, int protocol);


(完)



这篇关于Ch1:概述的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083747

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Java 多线程概述

多线程技术概述   1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间。线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换、并发执行,一个进程最少有一个线程,线程实际数是在进程基础之上的进一步划分,一个进程启动之后,进程之中的若干执行路径又可以划分成若干个线程 2.线程的调度 分时调度:所有线程轮流使用CPU的使用权,平均分配时间抢占式调度

java集合的概述

集合就是一个容器,我们可以把多个对象放入的容器中。就像水杯(假设容量可以不断扩大)一样,你可以往水杯中不断地添加水,既然是水杯,你就不能往里添加沙子,也就是说集合中添加的对象必须是同一个类型的(引用类型,而不能是基本类型)。 看到集合的介绍会让我们的想起数组,那么集合和数组有什么区别呢? 首先,数组的大小是固定的,而集合理论上大小是不限的。 其次,数组既可以存储基本数据类型的数据,也可以存储

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

Unity Adressables 使用说明(一)概述

使用 Adressables 组织管理 Asset Addressables 包基于 Unity 的 AssetBundles 系统,并提供了一个用户界面来管理您的 AssetBundles。当您使一个资源可寻址(Addressable)时,您可以使用该资源的地址从任何地方加载它。无论资源是在本地应用程序中可用还是存储在远程内容分发网络上,Addressable 系统都会定位并返回该资源。 您

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开

类和对象的概述以及this指针的应用

定义 类是一种用户自定义的复合数据类型,即包括表达属性的成员变量,也包括表达行为的成员函数                                                                                                                                         类可用于表达那些不能直接与内置基