计算机网络体系结构(一)
概述
两个计算机要想相互通信必须高度协调工作,这种“协调”比较复杂,因此需要分层,也就是分而治之的方法,将庞大而复杂的问题转化为若干个较小的易于研究和解决的局部问题。
最早因为市场上不同公司都使用自己的标准,使用同一个公司生产的设备可以容易的互联成网,但如果购买了其他公司的产品就很难互相连通,为了解决这个问题国际标准化组织ISO于1977年成立了专本的机构研究该问题,不久后便提出了一个试图使各种计算机在世界范围内互联成网的标准框架,即开放系统互连基本参考模型 OSI/RM (Open Systems Interconnection Reference Model)
,简称OSI模型
,此模型是个抽象的概念(排除和互联无关的部分,仅考虑和互联有关的部分),在1983年形成了正式文件即ISO 7498
国际标准,也就是所谓的七层协议的体系结构。
到了20世纪90年代初期,虽然整套的OSI国际标准都已经制定出来了,但由于基于TCP/IP的互联网已抢先在全世界覆盖了相当大的范围,同时却几乎找不到什么厂家生产出符合OSI标准的商用产品。一般来说网络技术和设备只有符合国际标准才能大范围地获得工程上的应用,但现在情况却反过来了。得到最广泛应用的不是法律上的国际标准OSI
,而是非国际标准的因特网 (Internet) 的通信协议TCP/IP
,这样TCP/IP
协议便被称为事实上的国际标准,TCP/IP
协议也就是所谓的四层协议的体系结构。
五层协议的体系结构
关于协议分层的好处这里单独说明下:
- 各层之间相互独立:某一层并不需要知道它的下一层是如何实现的,仅需要知道该层通过层间的接口所提供的服务,由于每层只实现一种相对独立的功能,因而可以将一个复杂问题分解。
- 灵活性好:当任何一层发生变化时只要层间接口关系保持不变,则上下各层均不受影响。
- 结构上可分割:各层都可以采用最合适的技术来实现。
- 易于实现和维护:因为整个的系统已被分解为若干个相对独立的子系统,所以使得实现和调试更容易。
- 促进标准化工作:每一层的功能及其所提供的服务都已有了精确的说明。
我们把计算机网络的各层及其协议的集合称为网络的体系结构(architecture)
,也就是说计算机网络的体系结构就是这个计算机网络及其构件所应完成的功能的精确定义。而这些功能究竟是用什么硬件或软件完成的则是一个实现(implementation)
问题。换句话来说体系结构是抽象的,而实现是具体的,是真正在运行的计算机硬件和软件
。
OSI的七层协议体系结构的概念清楚,理论也较完整,但它既复杂又不实用。已经非常广泛应用的TCP/IP则不同,TCP/IP是一个四层的体系结构,不过从本质上讲它只有最上面三层,因为最下面的网络接口层和一般的通信链路在功能上并没有什么差别,因此在学习计算机网络原理时折中采用一种有五层协议的体系结构。
应用层(application layer)
应用层是体系结构中的最高层直接为用户的应用进程提供服务,应用层的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(process 指主机中正在运行的程序)
间通信和交互的规则。互联网中应用层协议很多,如支持万维网应用的HTTP协议、支持电子邮件的SMTP协议、支持文件传送的FTP协议等等,应用层交互数据的单元称为报文(message)
。
需要说明的是五层协议中的应用层实际包含了OSI标准的应用层、表示层、会话层三层的功能。
- 其中会话层的功能是通信管理,负责建立和断开通信链接(数据的逻辑通路)并管理下其下的层。
- 表示层的功能是将设备固有的数据格式和网络标准数据格式的转换,比如将收到的数据转换成图像、声音格式等。
- 应用层则单独是针对特定应用的协议。
运输层(transport layer)
运输层由操作系统支持,它的任务就是负责向两个主机进程之间的通信提供通用的数据传输服务,确保数据可靠的传送到目标地址。由于一个主机可同时运行多个进程,因此为满足多个进程通信运输层有复用
和分用
的功能(复用就是多个应用层进程同时使用下面运输层的服务,分用则是运输层把收到的信息分别交付上面应用层中相应的进程)。运输层主要使用以下两种协议:
传输控制协议 TCP (Transmission Control Protocol)
提供面向连接的、可靠的数据传输服务,其数据传输的单元是报文段(segment)
。用户数据协议 UDP (User Datagram Protocol)
提供无连接的、尽最大努力(bset-effort)的数据传输服务(不提供数据传输的可靠性),其数据传输的单元是用户数据报
。
一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。 TCP支持的应用协议主要有:Telnet、FTP、SMTP等; UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。
网络层 (network layer)
网络层由操作系统支持,它负责为分组交换网上不同的主机提供通信服务,在发送数据时网络层把运输层产生的报文段(segment)
或用户数据报
封装成分组
或包(packet)
进行传送,在目前用的TCP/IP体系中,由于网络层使用IP协议,因此分组也叫做IP数据报
,或简称为数据报(datagram)
。其传输的数据单元称为数据包
。
网络层的另一个任务就是提供地址管理和路由选择功能,使源主机运输层所传下来的分组能够通过网络中的路由器找到目的主机。
数据链路层(data link layer)
链路层由设备硬件和驱动程序支持常简称为链路层,属于计算机网络的低层,任务是在两个相邻节点间(主机和路由间或路由间)传送和识别数据帧(链路层将网络层交下来的IP数据报组装成数据帧(framing)
发送到链路(到相邻结点的物理线路)
上,以及把收到的帧中的数据取出并上交给网络层,在链路上“透明”地传送帧中的数据),每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。
数据链路层的协议有许多种,这取决于系统选用的硬件设备等,但有三个基本的问题
是共同的。
封装成帧: 就是在一段数据的前后分别添加首部和尾部,接收端在收到物理层上交的比特流后就能根据首部和尾部的标记识别出帧的开始和结束。一个帧的帧长等于数据部分的长度加上帧首部和尾部的长度。首部尾部的一个重要作用就是进行帧定界,此外还包括许多必要的控制信息。为了提高帧的传输效率应当使数据部分的长度尽可能的大于首部和尾部的长度,但是每一种链路层协议都规定了所能传送的数据部分的长度上限——
最大传送单元MTU(maximum Transfer Unit)
。当数据在传输中出现差错时帧的界定符的作用更加明显,假如发送端尚未发送完一个帧时突然出了故障中断了发送,但随后又恢复了正常,重新从头发送刚才未发送完的帧。由于使用了帧界定符,接收端就知道前面收到的数据只有首部开始控制符SOH(Start Of Header)
而没有传输结束符EOT(End Of Transmission)
必须丢弃,而后面收到的数据有明确的帧界定符因此是一个完整的帧应该收下。(这里的SOH EOT都是ASCII码的控制字符,他们的十六进制和二进制编码分别是 SOH:0x01 00000001和EOT: 0x04 00000100)
透明传输: 由于帧的开始和结束的标记是专门指明的控制字符,因此所传输的数据中任何8比特的组合一定不允许和用作帧界定的控制字符的比特编码一样,否则就会出现错误。透明表示实际存在的事物看起来好像不存在,也就是在数据链路层无论什么样的比特组合都可以通过。为了解决透明传输的问题,在传输的的数据部分如果出现控制字符
SOH
或EOT
,发送端都会在前面插入一个转义字符ESC(0x1B 00011011)
,接收端的数据链路层会在把数据送往网络层前删除这个转义字符。如果转义字符也出现在数据当中,那么就在前面再插入一个转义字符,接收端收到两个连续的转义字符时就删除前面一个,这种解决透明传输的方法称为字节填充(byte stuffing)
。差错检测: 通讯链路在传输时不可避免会产生差错,差错控制有两种,分别是位差错和帧差错。如由于信号噪声等情况原本的0变成1或1变为0,这种情况称为
比特(位)差错
。传输错误的比特占总传输比特的比率称为误码率BER(Bit Error Rate)
。所以为了保证数据传输的可靠性会采取各种差错检测措施,目前在链路层广泛使用循环冗余检验CRC(Cyclic Redundancy Check)
的检错技术。帧差错有三种可能分别是帧丢失,帧重复,帧失序,因此还要在CRC检错的基础上加上帧编号、确认和重传机制。
在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束,这样链路层在收到一个帧后就可以从中提取出数据部分上交给网络层。控制信息还使接收端能够检测到所收到的帧中有无差错,如发现差错链路层就简单的丢弃这个帧,以免继续在网络中算传送下去浪费网络资源。还可以采用可靠的传输协议来纠正出现的差错,当然这种方法会使链路层的协议复杂些。
差错控制的原理很简单,就是在被传送的K位信息后附加r位的冗余位,接收方对收到的信息应用同一算法,将结果与发送方的结果进行比较,若不相等则数据出现了差错。如果接收方知道有差错发生,但不知道是怎样的差错,然后向发送方请求重传,这种策略称为检错;如果接收方知道有差错,而且知道是怎样的差错,这种策略称为纠错。对于通信质量良好的有线传输链路数据链路层协议不适用确认和重传机制,即不要求数据链路层向上提供可靠的传输服务。如果在数据链路层传输数据时出现了差错并且需要进行改正,那么改正差错的任务就由上层协议(例如,运输层的TCP协议)来完成。而对于通信质量较差的无线传输链路,数据链路层协议使用确认和重传机制,数据链路层向上提供可靠传输的服务。
物理层(physical layer)
物理层由传输的网络接口支持,在物理层上传输的数据单元是数据位比特(bit),物理层的任务就是透明地传送比特流。它界定了与传输媒体的接口有关(连接器和网线等)的规格,物理层要考虑:
- 机械特性:明确接口所用连接器的尺寸和形状,引脚数目和排列,固定和锁定装置(如我们现在常见的光纤和RJ45接口)等等。
- 电气特性:规定了物理连接上接口电缆的各条导线的电气连接及有关电路特性。例如电压的范围。
- 功能特性:指明物理接口各条信号线的用途等。例如数据信号线、控制信号线和用多大的电压代表”1”或”0”等。
- 过程特性:也就是通信协议,指明利用接口传输比特流的全过程。例如事件可能的出现顺序和执行顺序。
而且一般在数据在传输媒体上都是串行传输,但在计算机中多采用并行方式因此物理层还要完成传输方式的转换。
这里物理层考虑的是怎么样在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体
(如双绞线、同轴电缆、光缆、无线信道等,这些具体的物理媒体可以当作第0层)。物理层尽可能的屏蔽掉这些传输媒体和通信手段的差异,使上面的数据链路层感觉不到这些差异。用于物理层的协议也常被称为物理层规程(procedure)。