协议与体系结构
网络间的通信需要经历复杂的过程,一段复杂过程中的各项操作可能会出现各种各样的结果,为复杂的过程制定的协议也会非常复杂。因此,人们考虑按照复杂过程中各项工作的性质,将需要实现的工作进行分层,并为每一层中的操作制订协议。对网络间通信过程所划分的层次通常被称为计算机网络的体系结构。
较为常见的体系结构为OSI(Open System Interconnect,简称开放式系统互联模型)和TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/互联网协议模型)。
OSI由国家标准协会ISO制定,共分为七层,由上而下依次为应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,虽然OSI由ISO制定,但其实用性较差,并未得到广泛应用。
在OSI诞生时,因特网已实现了全世界的基本覆盖,因此市面上应用最广泛的体系结构为因特网中使用TCP/IP体系结构,该结构包含四层,分别为应用层、传输层、网际层和网络接口层,网络接口层。
计算机网络中通常采用一种包含五层协议的体系结构来讲解各层之间的功能与联系,该体系结构结合了OSI和TCP/IP的优点,分为应用层、传输层、网络层、数据链路层和物理层。
以上三种体系结构中各层的对应关系如图1所示。
图1 计算机网络体系结构
五层协议体系结构中各层的功能分别如下:
(1)应用层
应用层为应用进程提供服务,定义了应用进程间通信和交互的规则。不同的网络应用会采用不同的应用层协议,最常见的有支持万维网应用的HTTP协议、支持电子邮件的SMTP协议等。
(2)传输层
传输层为应用进程提供连接服务,实现连接两端进程的会话。该层定义了两个端到端的协议:TCP协议和UDP协议,这两个协议都使用端口号区分同一台计算机中的不同进程,使用端点为不同计算机中的进程建立连接。端口号在一台计算机中唯一,它是一个16位整数;端点由主机地址和端口组成,端点能唯一确定计算机网络中某一台计算机上的某个进程。
① TCP协议
TCP协议即传输控制协议(Transmission Control Protocol),使用该协议的传输层会接收由应用层传输而来的、使用8位字节表示的数据流,然后根据协议规则,将数据流分为多个报文段,并为每个报文段添加本层的控制信息,生成传递给网络层的数据单元。
TCP协议是一种面向连接的、可靠的、基于字节流的传输协议,在传递数据之前,收发双方会先通过一种被称为“三次握手”的协商机制使通信双方建立连接,为数据传输做好准备。为了防止报文段丢失,TCP会给每个数据段一个序号,接收端应按序号顺序接收数据,若接收端正常接收到报文段,便会向发送端发送一个确认信息;若发送端在一定的时延后未接收到确认信息,便假设报文段已丢失,并重新向接收端发送对应报文段。此外,TCP协议中还定义了一个校验和函数,用于检测发送和接收的数据,防止产生数据错误。
通信结束后,通信双方经过“四次握手”关闭连接,因为TCP连接是全双工的,因此每个方向必须单独关闭连接,即连接的一端需先发送关闭信息到另一端,当关闭信息发送后,发送关闭信息的一端不会再发送信息,但另一端仍可向该断发送信息。
② UDP协议
UDP协议即用户数据报协议(User Datagram Protocol),使用UDP协议的传输层中传输的数据是按UDP协议封装成的数据报,每个数据报的前8个字节用来存储报头信息,其余字节用来存储需传输的数据。
UDP是一种无连接的传输层协议,因为UDP的收发双方并不存在连接关系,按照UDP协议传输数据时,发送方使用套接字文件发送数据报给接收方,之后可立即使用同一个套接字发送其它数据报给另一个接收方;同样的,接收方也可以通过相同的套接字接收由多个发送方发来的数据。
UDP不对数据报进行编号,它不保证接收方以正确的顺序接收到完整的数据,但UDP会将数据报的长度随数据发送给接收方。虽然UDP面向无连接的通信,不能如TCP般很好地保证数据的完整性和正确性,但UDP处理速度快,耗费资源少,因此在对数据完整性要求低、对传输效率要求高的应用中一般使用UDP协议传输数据。
(3)网络层
网络层为分组交换网上的不同主机提供通信服务,在进行通信时,将从传输层获取的报文段或数据报封装成分组或包,通常将分组或包称为数据报,又因网络层常用协议为IP协议,因此TCP/IP体系结构中通常将网络层中的数据报称为IP数据报。网络层是计算机网络体系结构的核心。
IP协议的两个基本功能为寻址和分段。传输层的数据封装完成后并没有直接发送到接收方,而是先递达网络层,之后网络层再在原数据报前添加IP首部,封装成IP数据报,并解析数据报中的目的地址,为其选择传输路径,将数据报发送到接收方,IP协议中这种选择道路的功能也被称为路由功能。此外,IP协议可重新组装数据报,改变数据报的大小,以适应不同网络对包大小的要求。
IP协议不提供端到端或结点到结点的确认,只检测报头中的校验码,不提供可靠的传输服务。
(4)数据链路层
数据链路层可简称为链路层,该层将从网络层获取的IP数据报组装成帧,在网络结点之间以帧为单位传输数据。基于不同协议的帧有不同的格式。
(5)物理层
物理层以比特为单位传输数据,该层定义了与网络相关的硬件的规范,如表示“0”、“1”电压的电压数值、硬件连接方式等。
虽然各层使用的协议互不相同,但协议通常都由如下3个部分组成:
(1)待交互数据的结构和格式;
(2)进行交互的方式,包括数据的类型、对数据的处理动作等;
(3)事件实现顺序的说明。
一组完整的协议不仅需要考虑通信双方在正常情况下的动作,还应考虑到通信时可能出现的异常,并对异常情况下通信双方的动作做出规定。TCP和IP都是协议,但当出现TCP/IP时,一般不单指这两个协议,而是指因特网所使用的整个TCP/IP协议族,TCP、IP协议是TCP/IP协议族中两个最重要的协议。其实除传输层和网络层外,应用层和数据链路层都会在从上层接收到的数据报中添加控制信息,若接收双方通过同一个路由器连接,那么数据在传输过程中的变化将如图2所示。
图2 数据传输过程
其中第2层链路层不单会为数据报添加头部,还会添加尾部控制信息。由图2可知,当两个应用程序进行通信,发送端进程会发送数据给进程B时,数据在传输过程中将会发生以下变化:
(1)来自应用程序1的数据首先递达应用层,经应用层协议在其头部添加相应的控制信息后,该数据被传向传输层;
(2)传输层接收到来自应用层的信息,经TCP/UDP协议添加TCP首部或UDP首部后,作为数据段或数据报被传送到网络层;
(3)网络层接收到来自传输层的数据段或数据报,为其添加IP首部并封装为IP数据报,传送到链路层;
(4)链路层接收到来自网络层的IP数据报,在其头尾分别添加头、尾控制信息,封装成帧数据,传递到物理层;
(5)物理层接收到来自链路层的帧数据,将其转化为由0、1代码组成比特流,传送到物理传输媒介;
(6)物理传输媒介中的比特流经路由转发,递达应用程序2所在的物理传输媒介中,之后TCP/IP协议族中的协议先将比特流格式的数据转换为数据帧,并依次去除链路层、网络层、传输层和应用层添加的头部控制信息,最后将实际的数据递送给应用程序2,到此两个进程成功通过网络实现数据传递。
由以上数据传输过程可知,体系结构中各层的实现建立在其下一层所提供的服务上,并向其上层提供服务,各层之间的关系如图3所示。
图3 体系结构关系示意图
其中ICMP、IGMP、ARP和RARP分别为网络层和链路层的协议。