一、以快递网络来引入分层思想
1.1 "分层" 的设计思想【将庞大而复杂的问题,转化为若干较小的局部问题】
从我们最熟悉的快递网络出发,在你家附近会有一个快递终点站A,在其他的城市,也会有这种快递终点站,比如说快递终点站B,这些终点站会为顾客服务。快递终点站之间会有许多快递中转站组成的快递网络负责转运包裹,这样就组成了完整的快递网络。
这个快递网络是一个非常复杂的系统,需要完成很多功能,比如说:
- 货物打包
- 取件、派件
- 冷链存储(对于一些特殊的快件)
- 包裹"路由"(给包裹规划转运路径)
- 运输包裹的方式(采用飞机运输or火车运输还是汽车运输)
- .........
现实中的快递网络,采用了分层的设计思想,将庞大而复杂的问题,转化为若干较小的局部问题。详细请参考1.2小节。
1.2 快递网络的四层体系结构
比如说我们将这种复杂的快递网络拆分成四层体系结构,快递终点站的最底层是运输部门, 往上是仓库部门,再往上是快递员,再往上是顾客。
我们可以让不同的层次去承担不同的功能,比如说,第四层的顾客,让他实现货物打包的功能,快递员这一层让他实现取件派件的功能,仓库部门让他去实现冷链存储以及快件路由的功能,最下层的运输部门让他去实现包裹运输的功能。每一个快递终点站都需要具备这四个层次,相比之下,快递中转站只需要两个层次,只需要运输部门和仓库部门这两个功能。快递中转站与快递终点站会有公路铁路的连接。
在这种体系结构之下,一个包裹的运输过程是这样的,首先,寄件的顾客对货物进行打包,然后快递员进行取件,取件完成后,请求仓库部门进行包裹的路由功能(即包裹准备发往哪个快递中转站),然后交由运输部门将包裹运输至快递中转站,包裹进入中转站之后,一般会入库,然后由仓库部门决定包裹下一站该去哪里,即等待下一次的路由,确定了包裹要发往的位置之后,运输部门开始进行包裹的运输,进而运输至下一个站点,到达快递终点站,然后入库,然后在此请求仓库部门进行包裹的再次路由,这个时候仓库部门将货物交给快递员,快递员进行派件交给顾客。这样,我们就完成了一次货物的运输工作。
可以看到,这个复杂的快递网络被拆分成了四个层次,每个层次会负责实现一个或者多个功能。
- 将复杂的快递网络在逻辑上划分为多个层次,并将各种"功能"安排在合适的层次中
- 不同类型的节点,实现的功能层次可能不一样
二、计算机网络要完成的功能
2.1 计算机网络分层设计
计算机网络是一个非常复杂的系统,要完成诸多功能,如:
- 差错控制:确保数据在传输过程中不出错。
- 流量控制:发送端的发送速率必须使接收端来得及接收,不要太快。
- 分段和重装:发送端将要发送的数据块划分为更小的单位,并在接收端将其还原。
- 复用和分用:发送端几个高层会话复用一条低层的连接,在接收端再进行分用。
- 连接建立和释放:交换数据前先建立一条逻辑连接,数据传送结束后释放连接。
那么应如何把这些功能组织起来才能让上面整个计算机网络结构看起来清晰明了呢?这就不得不用到我们在第一大节中学习到的分层设计思想了。
比如说我们将计算机网络分成五个层次,如下:
注:从主机到路由器的线路是物理传输媒体(0层),一般是光纤或网线。
- 将复杂的计算机网络在逻辑上划分为多个层次,并将各种"功能"安排在合适的层次中
- 不同类型的节点,实现的功能层次可能不一样
我们可以发现,数据在计算机网络中的传输过程和货物(包裹)在快递网络中的传输过程类似。
我们思考这样一个问题,在第一大节提到的快递网络只能设计四层吗?答案:当然不是的,我们可以再增加一层,请看第2.2小节。
2.2 快递网络的五层体系结构
我们在1.2小节中的四层快递网络体系结构中引入快递驿站这一层,如下图所示:
总结:
- 分层结构的设计并不唯一,可以根据实际需求增加或减少层次
- 同一个功能可以在多个层次中重复出现(比如说:我们可以将货物打包这项功能交由快递驿站来完成,这样一来的话,货物打包既出现在了顾客这一层,又出现在了快递驿站这一层)
2.3 三种常见的计算机网络体系结构
根据2.2小节的思想,同样的道理,我们也可以将计算机网络设计成四层的结构以及七层的结构,如下图所示:
三、网络体系结构的概念
3.1 定义
计算机网络的体系结构(Network Architecture)是计算机网络的各层及其协议的集合,换种说法,就是这个计算机网络及其构件所应完成的功能的精确定义 (不涉及实现)。即:当我们设计一个计算机网络体系结构的时候, 我们只需要精确的定义出,分为几层,每一层需要实现哪些功能,每个功能需要由什么协议来实现。
实现(implementation)是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题。
注意:
这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现(implementation)的问题。体系结构的英文名词architecture的原意是建筑学或建筑的设计和风格。它和一个具体的建筑物的概念很不相同。例如,我们可以走进一个明代的建筑物中,但却不能走进一个明代的建筑风格之中。同理,我们也不能把一个具体的计算机网络说成是一个抽象的网络体系结构。总之,体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。
3.2 具有五层协议的体系结构各层之间的关系
3.2.1 从水平来看各层之间的关系
- 实体: 在计算机网络的分层结构中,第n层中的活动元素(软件+硬件)通常称为第n层实体。【比如说,我们要实现第五层的这些功能,那么会有一些对应的软件硬件模块工作在第五层,那么我们把涉及到第五层的软件硬件模块看作是第五层的活动元素,这些东西就是第五层的实体】不同机器上的同一层称为对等层,同一层的实体称为对等实体。
- **协议:**即网络协议(Network Protocol),是控制对等实体之间进行通信的规则的集合,是水平的。
百度百科解释网络协议: 网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。
网络协议是由三个要素组成:
(1)语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。(例如: 协议中需要明确规定:发送方发送完数据后,接收方是否需要应答,以及应答的种类有哪些(如:传输成功、传输失败))
(2)语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。例如: 协议控制信息(首部)部分占几个字节、每个字节是什么含义、协议的数据部分最多有多少字节。
(3)时序。时序是对事件发生顺序的详细说明。(也可称为"同步")。
人们形象地把这三个要素描述为︰语义表示要做什么,语法表示要怎么做,时序表示做的顺序。
3.2.2 从垂直来看各层之间的关系
- 接口:即同一节点内相邻两层的实体交换信息的逻辑接口,又称为服务访问点(Service AccessPoint,SAP) 。
- 服务:服务是指下层为紧邻的上层提供的功能调用,它是垂直的。
3.3 数据的传输过程(水平视角、垂直视角)
3.3.1 水平视角
我们不妨假设应用层分别实现L、M、N这几个功能,其中功能N是将数据压缩传输,以节省流量,基于这样的设计,发送方的第五层实体需要把数据进行压缩,压缩完成之后再交给下面的层次进行处理和传输。而接收方的第五层实体,它需要将传输过来的数据进行解压缩,解压之后,再把数据交给接收方。
因此,从水平视角来看,这两个用户感受不到数据被压缩和解压的过程。在他们俩看来,数据似乎是被原模原样的传输,但事实上,发送方、接收方的第五层实体分别做了压缩和解压缩的过程。
那么为了支持数据压缩这样的功能,我们不妨制定一个协议,这个协议叫做YSCS协议,即压缩传输协议,如下图所示:
我们知道,一个协议它是规定水平方向上的两个对等实体之间的通信规则,为了实现压缩传输这个功能,我们需要在协议当中规定,发送方采用了何种数据压缩算法,并将使用的何种压缩算法记录在首部中,这是为了方便接收方根据首部来选择解压缩算法。
从上面这个例子来看,从水平视角来看,对等实体之间,他们的通信需要遵循某种协议,而遵循这个协议的目的是为了实现某种功能。
相信理解了上面这个例子之后,我们便可以知道: 计算机网络为什么要分层?为什么要制定协议?
答案:计算机网络功能复杂→采用分层结构,将诸多功能合理地划分在不同层次→对等层之间制定协议,以实现功能。
3.3.2 垂直视角
假设左边这个用户要给右边这个用户发送一些数据,那这些数据首先会交给应用层进行处理,应 用层会实现某些功能,为了实现某些功能,应用层和应用层之间通信需要遵循某种协议,因此就需要给这些数据增加协议的首部,我们不妨把它称为应用层的首部。
应用层按照协议的规定做了相应地处理之后,又会把带有应用层首部的数据交给传输层,传输层和传输层之间同样也要遵循某种协议,因此数据到达传输层后也会增加首部。
同理,数据在网络层和数据链路层时也会添加对应的首部,紧接着,数据链路层将带有四层(应用层、传输层、网络层、数据链路层)首部或尾部信息的数据交给物理层,在这种五层体系结构当中,物理层不会对这些数据进行处理,他只负责将这些二进制数据原模原样的传输到传输媒体上,这样就可以让数据到达下一个节点。
数据到达下一个节点(路由器)之后,首先交给物理层,紧接着物理层再交给数据链路层,该层的实体,会根据本层的协议规定,检查首部以及尾部的这些控制信息,然后根据这些控制信息,完成数据链路层需要完成的功能。
接下来数据链路层会将数据会交给网络层进行处理,网络层通过本层的协议控制信息去实现本层需要完成的功能,具体来说,这层要实现的功能是路由,也就是数据分组的存储转发功能,所以第三层的控制信息会包含发送方以及接收方的IP地址,路由器的第三层实体就会根据这些控制信息去决定下一跳应该将数据分组转发到什么位置。
路由器的第三层实体会对H3的控制信息做简单的处理【目前先不展开讨论】,处理完成之后,会将数据分组交给数据链路层,数据链路层会根据对等实体之间的协议去增加首部或尾部的控制信息,然后再把这些数据交给物理层,物理层再把这些数据通过传输媒体传给下一个节点。
接收方主机物理层接收到这些数据之后,会将其交给数据链路层,后面的过程与前面的类似,逐层往上处理,逐层拆掉首部或尾部控制信息,每一层的实体只关注本层的控制信息,最终交给用户的是一个干净的、没有首部信息的数据。