OSI模型
OSI模型有8个层次
1. Physical物理层
它在物理线路上传输bit 信息,处理与物理介质有关的机械的,电气的,功能的和规
程的特性。它是硬件连接的接口。
2. Data Link数据链路层
它负责实现通信信道的无差错传输,提供数据成帧,差错控制,流量控制和链路控制
等功能。
3. NetWork 网络层
负责将数据正确迅速的从源点主机传送到目的点主机,其功能主要有寻址以及与相关
的流量控制和拥塞控制等。
物理层,数据链路层和网络层构成了通信子网层。通讯子网层与硬件的关系密切,它
为网络的上层(资源子网)提供通讯服务。
4. Transport 传输层
为上层处理过程掩盖下层结构的细节,保证把会话层的信息有效的传到另一方的会话
层。
5. Session 会话层
它提供服务请求者和提供者之间的通讯,用以实现两端主机之间的会话管理,传输同
步和活动管理等。
6. Presentation 表示层
它的主要功能是实现信息转换,包括信息压缩,加密,代码转换及上述操作的逆操作
等。
7. Application 应用层
它为用户提供常用的应用,如电子邮件,文件传输,Web 浏览等等。
TCP/IP模型
OSI模型主要用于理论研究,现阶段主要使用的TCP/IP网络体系结构
第一层和第二层是TCP/IP 的基础分别是物理层和数据链路层,其中PDN 为公共数据网。第三层是网络层,它包含四个协议:IP,ICMP,ARP 和反向ARP。第四层是传输层,在网络上的计算机间建立端到端的连接和服务,它包含TCP,UDP 和 NVP 等协议。最高层应用层包含了FTP,TELNET,SMTP,DNS,HTTP 等协议。
客户端服务器模型
Unix/Linux基本结构
图中心的硬件部分向操作系统提供基本服务。操作系统直接与硬件交互,向程序提供公共服务,并使他们同硬件特性隔离。当我们把整个系统看成层的集合时,通常将操作系统成为系统内核,或简称内核,此时强调的是它同用户程序的隔离。外层的程序,诸如shell 及编辑程序(vi),是通过引用一组明确定义的系统调用而与内核交互的。
系统内核结构
在图2-2 中我们看到了三个层次:用户、内核及硬件。系统调用与库接口体现了图2-1
中描绘的用户程序与内核间的边界。系统调用看起来象C 程序中普通的函数调用,而库把
这些函数调用映射成进入操作系统所需要的源语。然而,汇编语言程序可以不经过系统调
用库而直接引用系统调用。程序常常使用像标准I/O 库这样一些其它的库程序以提供对系
统调用的更高级的使用。由于在编译期间把这些库连接到程序上,因此,以这里的观点来
说,这些库是用户程序的一部分。
图2-2 把系统调用的集合分成与文件子系统交互作用的部分及与进程控制子系统交互
作用的部分。文件子系统管理文件,其中包括分配文件空间,管理空闲空间,控制对文件
的存取,以及为用户检索数据。进程通过一个特定的系统调用集合,比如通过系统调用
open,close,read,write,stat,chown 以及chmod 等与文件子系统交互。
文件子系统使用一个缓冲机制存取文件数据,缓冲机制调节在核心与二级存储设备之间的数据流。缓冲机制同块I/O 设备驱动程序交互作用,以便启动往核心去的数据传送及从核心的来的数据传送。设备驱动程序是用来控制外围设备操作的核心模块。块I/O 设备是随机存取存储设备,或者说,它们的设备驱动程序似的它们的设备驱动程序使得它们对于系统的其它部分来说好像是随机存取存储设备。例如,一个磁带驱动程序可以允许核心把一个磁带装置作为一个随机存取存储设备看待。文件子系统和可以在没有缓冲机制干预
的情况下直接与“原始”I/O 设备驱动程序交互作用。原始设备,有时也被成为字符设备,包括所有非块设备的设备。
进程控制子系统负责进程同步、进程间通讯,存储管理及进程调度。当要执行一个文件而把该文件装入存储器中时,文件子系统与进程控制子系统交互:进程子系统在执行可执行文件之前,把它们读到内存中。输入输出存储管理模块控制存储分配。在任何时刻,只要系统没有足够的屋里存储供所有进程使用,核心就在内存与二级存储之间对进程进行交换,以便所有的进程都得到公平的执行机会。调度程序模块把CPU 分配给进程。该模块调度各进程依次运行,直到它们因等待资源而自愿放弃CPU,或者知道它们最近一次的运行时间超出一个时间量,从而核心抢占它们。于是调度程序选择最高优先权的合格进程投入运行;当原来的进程成为最高优先权的合格进程时,还会再次投入运行。进程间通信有几种形式,从时间的异步软中断信号到进程间消息的同步传输,等等。本书中主要的讲的网络通信,也是进程间通信的一种。
最后,硬件控制负责处理中断及与及其与机器通信。象磁盘或终端这样的设备可以在一个进程正在执行时中断CPU。如果出现这种情况,在对中断服务完毕之后核心可以恢复被中断了的进程的执行。中断不是由特殊的进程服务的,而是由核心中的特殊函数服务的。这些特殊函数是在当前运行的进程上下文中被调用的。