01-概述

计算机网络的体系结构

体系结构的形成

  计算机网络是一个非常复杂的系统,尽管我们实际在使用过程中体会不到这一点,但是哪怕只考虑一种最简单的情况:互相传送文件,具体的实现也复杂的惊人:

  • 1.两台计算机之间必须有一条传送数据的通路
  • 2.发起通信的计算机必须将数据通信的通路激活,所谓激活就是要发出一些信令,保证要传送的计算机数据能够在这条通路上正确发送与接收。
  • 3.告诉网络如何识别接收数据的计算机(总不能把发给A的信息发送给B对吧)
  • 4.发起通信的计算机必须查明对方计算机是否已经开机,并且与网络连接正常(联系不到还发个什么)
  • 5.发起通信的计算机中的应用程序必须弄清楚,在对方计算机中的文件管理程序是否已经做好接收文件和存储文件的准备工作。
  • 6.若计算机的文件格式不兼容,则至少其中一台计算机完成格式转换功能
  • 7.对出现的各种差错和意外事故,如数据传送错误、重复或者丢失等等,应当有可靠的措施保证对方计算机最终能够收到正确的文件。

  从上面不难看出这真的是太复杂了,要解决这样的复杂问题,一个很好的解决措施便是将大问题拆解为好几个较小的问题,每个小问题都致力于解决某一部分的复杂性。实际上我们也确实是这么做的,将复杂的计算机网络划分为几个不同的层次,来分别解决。

  但是随着不同的科技公司提出不同的分层结构,市场逐渐变得混乱起来,同一个公司生产的设备很容易互联,但是不同公司的产品互联起来就没那么简单,这显然阻碍了计算机网络的发展,于是,国际标准化组织便成立专门机构提出了开放系统互连基本参考模型OSI/RM,并希望借助这个模型来一统计算机网络的体系结构。但是在它被正式制定出来之前,基于TCP/IP的互联网已经抢先在全球相当大的范围内成功运行了,所以OSI/RM只是获得了理论胜利,成为了法律上的国际标准,而TCP/IP成为了事实上的国际标准。

协议与划分层次

  我们在上一节提到过要对复杂的计算机网络进行层次的划分,那到底该如何划分呢?怎么样划分才能高效呢?我们还是以在两台主机之间传送文件为例:
  要传送文件肯定得有能够传送文件的应用程序,既然两台主机上都有传送文件的应用程序,那么发送端的该应用程序就可以确认接收端是否做好了接受和存储文件的准备,还可以确认文件格式是否是一致的,不一致的话也可以使其中一台完成文件格式的转换,这两项功能就可以使用一个模块(分层)来完成,不妨就叫它文件传送模块。
  但是我们知道这还不够,我们需要把文件拆分成一组一组的传输过去,可是文件传送层已经很复杂了,不能再继续向其中添加什么,所以我们再加一层,用来把数据拆分成组啊什么的,不妨就叫它通信服务层,但是这还是不够,信息毕竟是要通过物理媒介传输过去的,我们还需要一层来连接上网络的入口,做一些硬件能干的事,干脆就叫它网络接入层。
  这样,我们便把相当复杂的过程拆分为了三个层次,而且,倘若仔细考虑,分层的好处是很多的:

  • 1.各层之间是独立的,每一层只需要实现部分功能,而且不需要考虑其他层是如何实现的(为什么要考虑呢?它只需要完成它分内的工作),只需要知道它下一层提供的接口就可以了(这样才能把数据正确地传输给下一层)
  • 2.灵活性好,任何一层发生变化时,只要保持层间接口不变,它以上各层与以下各层就都不会受到影响。
  • 3.结构上可分割开,这是最显然的了,各层都可以使用最合适的技术来实现,而无需考虑其他层。
  • 4.易于实现和维护
  • 5.能促进标准化工作,每一层的功能以及所提供的服务都已经有了精确地说明。

但是这么做也是有风险的,层数太少,那么每一层所实现的功能就会太复杂,层数太多,那么把各层综合起来时又会遇到些困难,而且各层的功能也可能会重复。通常各层所要完成的功能主要有以下这些(可以包括一种,也可以包括多种):

  • 1.差错控制 使相应层次对等方的通信更加可靠
  • 2.流量控制 发送端的发送速率必须使接收端来得及接受,不能太快
  • 3.分段和重装:发送端将要发送的数据块划分为更小的单位,在接收端将其还原
  • 4.复用和分用:发送端的高层会话复用一条低层的连接,在接收端再进行分用。
  • 5.连接建立和释放 交换数据前先建立一条逻辑连接,数据传送结束后再释放连接。

  但是只进行分层还是不够的,要想正确有序的交换数据,相同层必须有一些规定,得一起合作,不能各干各的,这些规定其实就是所交换的数据格式以及有关的同步问题,这里的同步并不是简单的同时同频等等,而是在一定的条件下应当发生什么样的事情(比如说某些条件下应当发送一个确认信息),这些为进行网络中的数据交换而建立的规则、标准或约定统称为网络协议,网络协议主要由三个要素组成:

  • 1.语法,即数据与控制信息的结构或格式
  • 2.语义,即需要发出何种的控制信息,完成何种动作以及做出何种响应
  • 3.同步,即事件实现顺序的详细说明

    非常好笑的是,我学到后面不明白为什么到处都有协议,为什么明明不同层却都叫协议,直到我重新回过头来看这里,我才发现原来相关的规定都叫协议……很生动形象地说明了开学两三个星期的精神状态……

  有了分层有了协议,我们现在就有了完整的体系结构,准确来说,计算机网络的各层及其协议的集合就是网络的体系结构,但是,体系结构毕竟是一种抽象的东西,究竟是用何种硬件还是软件完成的,才是遵循这种结构的实现,实现才是具体的,是真正在运行着的。

具有五层协议的体系结构

  我们前面提到过法律上的国际标准OSI/RM,这是一个具有七层协议的体系结构,包括(从上到下)应用层、表示层、会话层、运输层、网络层、数据链路层和物理层,理论完整但是功能复杂不实用,而已经被广泛使用的TCP/IP,则只有四层,是应用层、运输层、网际层和链路层(但是实质上只有最上面的三层,因为最下面的链路层并没有属于TCP/IP体系的具体协议)。我们综合二者的有点,采用具有五层协议的体系结构来进行阐述,分别是应用层、运输层、网络层、数据链路层和物理层。我们下面简要地介绍一下各层的功能,实际上在后面的章节中我们还会具体展开。

  应用层
  作为体系结构最高层,它的任务是通过应用进程间的交互来完成特定的网络应用,其协议定义的是应用进程间通信和交互的规则,举个例子,比如说我电脑上的微信同别人电脑上的微信互发消息,便是应用层负责的内容,显然,不同的网络应用需要不同的应用层协议,不能乱用,这里的协议有很多,比如DNS,HTTP等等,我们把应用层交互的数据单元称为报文
  运输层
  运输层的任务是负责向两台主机中进程之间的通信提供通用的数据传输服务,应用层中的进程利用该服务传送应用层报文。所谓通用的,意思是它并不针对某个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个进程,因此运输层有复用和分用功能,复用就是多个应用层进程可同时使用下面的运输层服务,分用就是运输层把收到的信息分别交付给上面应用层中的相应进程。运输层主要有两种协议,为TCP和UDP,其数据传输的基本单位分别是报文段和用户数据报。
  网络层
  网络层负责为分组交换网上的不同主机提供通信服务,啥意思呢,我们刚才提到的运输层解决的是进程到进程的问题,网络层解决的是主机到主机的问题,在发送数据时,网络层会把运输层产生的报文段或者用户数据报封装成分组或者包来进行传送。在TCP/IP体系中,由于网络层使用IP协议,因此这里的分组也被叫做IP数据报,或简称为数据报(和分组是同义词)。

实际上,不论是在哪一层传送的数据单元,都可笼统地用“分组”来表示。

  网络层的具体任务有些复杂,这里不再说明。
  数据链路层
  由于两台主机之间的数据传输总是在一段一段的链路上进行传送的,那么就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来IP数据报组装成帧,在两个相邻节点的链路上传送帧。每一帧包括数据和必要的控制信息。那么在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束,这样,数据链路层在收到一个帧之后,就可以从中提取出数据部分,上交给网络层,而且控制信息还可以使接收端能够检测所收到的帧有无差错,有差错就丢掉此帧,以免它继续传输下去白白占用网络资源。
  物理层
  物理层的作用比另外几层显然的多,它要考虑的便是用多大的电压来代表1和0,接收方如何识别发送方所发送出去的比特,连接电缆的插头应当有多少根引脚以及各引脚应该如何连接,但是,一些物理传输媒介,比如电缆光缆等,不在物理层协议之内,而是在物理层下面(也有人愿意将其当作第0层)。