- 为什么我们需要计算机网络体系结构呢?
事实上计算机网络是一个非常复杂的系统,主要涉及两大技术,计算机技术和通信技术。从物理构成上也涉及到很多组成部分,比如主机(hosts
)、路由器(routers
)、各种链路(links
)、应用(applications
)、协议(protocols
)、硬件、软件这些。我们很容易就会想到:是否存在一种系统结构有效描述网络?–分层结构,一种描述一个复杂系统的一种比较有效的结构。
核心知识点理解:
- 通常所说的计算机网络体系结构是从功能上描述计算机网络结构的,并不是物理从物理的构成上。
- 计算机网络体系结构(简称网络体系结构(
network architecture
))是分层结构。每一层完成特定功能。 - 每层遵循某个或者某些网络协议完成本层功能。
- 因此计算机网络体系结构是计算机网络的各层及其协议的集合(各个层完成什么功能,这些层遵循哪些协议)。
- 体系结构是一个计算机网络的功能层次及其关系的定义。
- 因为计算机网络体系结构完全是抽象在功能层面上,并不涉及这个功能怎么实现,因此说它是一个抽象的描述。
- 为什么要采用一个分层结构来描述计算机体系结构?
为什么我们要采用分层结构来描述计算机网络体系结构呢?事实上分层结构具有很多优点。
- 分层结构很清晰,层和层之间的关系很明确,这样就有利于识别复杂系统的部件及其关系。在计算机网络中按照分层结构所提出的体系结构通常来说也被称作参考模型(
reference model
)。 - 分层结构也体现了模块化的思想,模块化的分层易于系统更新、维护。如果某一层内部发生改变,只要它对上层或者其他层提供的服务,或使用其他层的方式和方法或者接口不发生改变,对其他层来说这种改变都是透明的。
- 分层结构有利于标准化,容易被大家接受。
但是分层太多可能会使得系统的效率变低。
分层网络体系结构基本概念
上图涉及到几个概念:
- 实体(
entity
)表示任何可发送或接收信息的硬件或软件进程。可以是软件也可以是硬件,实现发送和接收信息的功能。 - 相同层次之间的实体要交换信息需要遵循协议,换句话说,协议就是在同层之间定义了两个对等实体之间如何交换信息。规定了要交换的信息,什么样的结构,按照什么顺序交换,出现问题如何处理等等。由于协议是控制两个对等实体进行通信的规则的集合,协议是“水平的”。
- 两个相邻层次之间,比如n + 1 n+1n+1层和n nn层之间,上层实体会使用下层实体所提供的服务。也就是说作为每一个层的实体,在遵循某个协议交换信息的过程中实际上在完成某种功能,这种功能在同一个系统中的上一个层次来说表现出来的就是某种服务。用官方话来说就是:任一层实体需要使用下层服务,遵循本层协议,实现本层功能,向上层提供服务,服务是“垂直的”。
- 每一层协议的具体实现对于上层来说是透明的。也就是说:下层协议的实现对上层的服务用户是透明的(这里的透明指的是你不用知道它内部是怎么实现的。)。
- 上一层使用下一层的服务是通过接口来实现的,每一层实现的服务都向上开放一个服务访问点
SAP
(Service Access Point),具体在通过某个服务访问点使用下层服务的时候,是通过交换原语实现(指定请求的特定服务)。
OSI参考模型(1)
OSI
参考模型是1984
年由国际标准化组织(ISO
)提出的一种开放系统互连的这样一个参考模型,这是一个非常具有代表性的分层网络模型。
这个模型的提出就是期望支持异构网络系统的互联互通。因此OSI
参考模型其实是我们网络参考模型的一个国际标准。这个标准只是我们学习和理解网络通讯的一个非常好的学习工具,但是从市场上来说,这个模型并没有最终指导某一个网络最终市场接受的一个非常流行的网络产品,所以只是一个理论模型。OSI
参考模型不仅成为计算机网络这样的一个重要的体系结构或者模型,在数据通信或者其它领域我们也经常使用这个模型来讨论问题。
OSI
参考模型将网络从功能上划分为七个层次:
有了OSI
参考模型这七个层次,就可以去解释网络通信的这样一个过程。以下图这样一个典型的网络连接为例,来说明:
有两个主机,通过中间的一个设备(路由器)互联。这些设备是如何按照OSI
参考模型完成相应的功能的呢?
从OSI
参考模型来看,主机要完成所有的七层功能。作为中间系统只需要完成三层的功能(物理层、链路层、网络层)。按照层次来看,所有对等层次之间都会遵循着相关的协议,进行数据的交换。也就是说对等层次之间的协议规定了这个层次如何去构造数据,或者说如何去交换数据,但是这个交换最终都是在物理介质上进行的。
假设A
主机要给B
主机发送数据,那么A
主机最先处理数据的是应用层,应用层处理完的数据交给表示层,表示层交给会话层,依次类推。最终是物理层,物理层把信号传输,按照上图中的连接情况,物理层会把信号传输给中间系统,中间系统把物理层从这个数据中接收,接收以后将数据还原,还原之后该处理的处理,最后通过传输介质再还原到主机上。相邻层之间通过接口把数据从上一层传入下一层。可以看到上面四层(应用层、表示层、会话层、传输层)是不需要中间系统处理数据的,因此我们把这四层称为端到端的层。上图中的实线是真正的通信,也称为物理通信。协议规定的是数据在每一层应该怎么处理,看起来就像是数据从层和层之间传输一样。
- OSI参考模型数据封装与通信过程:
从上图来看,源主机和目的主机都需要实现上述七层网络模型。在通信的时候数据一层一层地进行处理。撇开中间系统,看源主机到目的主机之间的通信,从最顶层来看是期望把源主机的数据传输到目的主机。
用户数据首先发送给应用层,应用层根据网络应用的不同,用户协议的不同可能会加上一些控制信息,被称作应用层头,这样就构成了这样一个协议的数据包,在OSI
参考模型里面将其称之为协议数据单元。一层一层下来到物理层都是比特数据。
- 为什么我们需要数据加”头“或者称之为增加控制信息,也就是为什么需要数据封装?
这就需要看一下里面都增加了什么样的信息。增加控制信息主要包括:地址信息,保证正确的接收方接收它,如何让接收一方知道是谁发的数据。除此之外还会加上一些差错检测编码(Error-detecting code
)信息,用于差错检测或者纠正,但是并不是所有的协议都要被加上差错信息。在很多协议里面还会加上很多其它的信息,比如期望某些数据包优先被处理等等,这类信息被称之为协议控制(Protocol control
): 实现协议功能的附加信息,如: 优先级(priority
)、服务质量(QoS
)、 和安全控制等
OSI参考模型(2)
- 链路层(设备驱动程序及接口卡):处理与电缆(或其他任何传输媒介)的物理接口细节。
- 网络层(
IP
、ICMP
、IGMP
):处理分组在网络中的活动,例如分组选路。 - 传输层(
TCP
、IP
):为两台主机上的应用程序提供端到端的通讯。 - 应用层(
Telnet
、FTP
、e-mail
shi):处理特定的应用程序细节。
大多数的网路应用程序都被设计成客户-服务器模式。双方都有一个或多个协议进行通讯。应用程序通常是用户进程,而下三层一般在内核执行。这样分层能够为上层应用层隐藏通讯细节。
物理层
物理层所实现的功能就是实现每一个比特的传输。具体来讲就是以下功能:
- 接口特性:需要定义、规范一些接口特性,作为物理层,主机和发送设备之间的接口是什么样子的,发送设备和物理介质之间的接口是什么样子的。一般来讲在物理层规范的一些接口特性主要包括以下四个方面:机械特性、电气特性、功能特性、规程特性。机械特性是接口的几何形状;电气特性表示电流电压等特性;功能特性定义接口的引脚,每个引脚到底什么功能;规程特性定义接口在工作过程中遵循什么样的一个过程。
- 比特编码:物理层要实现每一个比特的传输的话,就还需要解决每一个比特的编码问题。换句话说就是用什么样的特征来表示比特,什么表示
0
什么表示1
,如何表示0
,如何表示1
等等。 - 数据率:另外一个功能就是定义数据传输速率。也就是说在物理层上以多块的速率发送数据。
- 比特同步:比特同步说的是发送端发送一个比特,接收端也能接收一个比特。实际上要解决的是时钟同步问题。
- 传输模式:在物理层还要定义的一个功能就是传输模式,也就是数据按照一个什么样的方式来传输。主要有单工模式(
Simplex
)、半双工(half-duplex
)、全双工(full-duplex
)这三种模式。
传统的电视只能接收电视台的信号,只能单向传输。半双工是交替双向的,对讲机就是这种。
数据链路层
物理层解决了一个单一比特的传输问题,但是数据如何接收,以及数据出现了错误如何来解决并没有定义,这些由数据链路层来解决。
数据链路层主要解决的是结点到结点的数据传输,数据以帧作为单位来传输的。既然以帧为单位来进行数据传输的话,就必须要解决一个问题:组帧,通常就是加头加尾,头部加地址信息,尾部加差错检测的一些信息。
物理层只发送一个一个比特,但是比特由谁来接受是不清楚的,如果很多用户都能从物理链路上接受到比特的话,就不清楚谁来接收了。因此在数据链路层要增加一个地址,通常将其称之为物理寻址。注意:这个物理寻址并不在物理层,而是在数据链路层。也就是在数据链路层中,在帧头中增加发送端和/或接收端的物理地址标识数据帧的发送端和/或接收端。
增加这个物理地址是为了解决上图这种广播通信的问题。
除此之外还要有流量控制(Flow control
),也就是匹配发送端和接收端的速度;差错控制(Error control
),把数据采用一种特殊的编码,用于检测并重传损坏或丢失帧,避免重复帧;除此之外数据链路层还可以实现访问(接入)控制(Access control
),依据协议决定哪个设备拥有链路(物理介质)控制使用权。
网络层
网络层的主要功能如下图所示:
网络层主要负责源主机到目的主机数据分组(packet
)交付。由于网络层把数据传输到目的主机的时候可能会跨越多个网络,这个时候链路层使用的物理寻址可能就不能使用了,也就是需要一个全局唯一的地址。也就是需要一个逻辑寻址(Logical addressing),网络层的寻址,保证这个逻辑寻址不管跨越多少个网络都是全局唯一的,确保数据分组被送达目的主机。
网络层的功能除此之外还需要有路由的功能,帮助数据分组选路径,这样才能帮助数据从源到达目的。作为路由器这样的网络层设备在真正传输的过程中要完成分组转发,收到一个分组,根据提供的路由转发到下一个接口,再转发下去:
注意这里的S
和D
并不会发生改变。
- 网卡是属于七层模型中的吗?
网卡是将数据链路层的数字信号转化为物理层的光电信号,因此它不属于这七层模型中的任何一层。
OSI参考模型(3)、TCP/IP参考模型
传输层功能
传输层所完成的功能是从会话层接收数据单元,构造传输层的数据单元,一般将其称之为段。将会话层的完整报文分割成段,然后再交给网络层进行传输。
也就是说传输层完成的功能是端到端的(进程间)完整报文的传输。
基于上述大体描述过程,传输层的功能包括:
- 分段与重组:报文的分段和重组。
- SAP寻址:传输层要解决进程到进程之间的通信,所以需要寻址,在OSI参考模型里面,将其称之为SAP寻址,在Internet网络里面相当于端口号。
看上图的一个例子:在传输层有个源主机S
和目的主机D
。在接收完来自会话层的数据之后,传输层对其进行分割,分割之后会构造一个个传输层的段,这里的x
,y
就相当于SAP
地址。这样的传输层的段之后进一步交给网络层,之后交给网络层的单元。之后一步一步往下传。
- 连接控制:传输层作为从下到上的第一个端到端连接层次,还可以实现端到端的连接控制。包括端到端的连接、建立和拆除。这里的连接是一种逻辑连接,与之前所说的电路连接不一样。
- 流量控制:有些传输层协议还会解决端到端的流量控制。用于匹配流量的控制。
- 差错控制:从端系统角度考虑差错控制问题。但是并不一定所有传输层协议都这么做,比如
UDP
协议就不实现这样一种差错控制。
会话层功能
会话层接收表示层的数据单元,然后构造会话层的数据单元后发给传输层,会话层并不会对数据进行分割,但是会往里面插入一些控制信息。
会话层的功能主要就是进行对话管理,两个进程之间的一次通信就是对话。主要控制建立、维护、拆除等操作。同时还可以实现对话的同步,在数据里插入同步控制点,一旦数据传输在某个控制点的附近,中断了,那下次恢复只需要恢复到最近的一个控制点即可。
事实上OSI
参考模型中,会话层的功能是非常单薄的,最薄的一层。
表示层功能
表示层从应用层得到数据单元,处理端到端的两个系统间交换信息的语法与语义(syntax and semantics
)问题。具体来说就是数据的表示转化。
在发送数据一端,表示层将数据转化为主机独立的编码。到了目的主机之后,再转化为主机相关的编码。
除此之外,表示层还可以对数据进行加密解密,以及压缩和解压缩。
表示层的功能也不多,实际应用过程中,这一层也不是独立存在的,这一层应用层也可以去做。
应用层功能
应用层是最丰富的一层,在计算机网络里面可能会有很多应用,这些应用的通信功能都是对应的应用层,也就有了不同的协议。比如文件传输协议FTP
、电子邮件协议SMTP
、Web
协议HTTP
等。数据在这一层都会去遵循这样的协议去处理数据。
对用户来说,应用层提供给用户一些网络接口、用户代理(浏览器)使用网络(服务)。
TCP/IP参考模型
TCP/IP
参考模型有四个层:网络接口层、网际层、运输层、应用层。在网络接口层并没有去定义相关的协议,它只有一个要求,只要能够封装IP
分组即可(从一个主机传到另外一个主机,从一个路由器传到另外一个路由器),网际层上层定义两个协议TCP
协议和UDP
协议,再向上一系列的网络应用都基于TCP
和UDP
。
TCP/IP
的特点就是所有的应用都是架构在IP
之上,IP
之上是TCP
和UDP
。TCP/IP
的这样一个特点恰恰是网络得以发展的一个因素。
把最后一层打开,可以分为五层参考模型:
这五个参考模型综合了OSI
和TCP/IP
的优点。
- 应用层:支持各种网络应用。FTP, SMTP, HTTP
- 传输层:进程-进程的数据传输。TCP, UDP
- 网络层:源主机到目的主机的数据分组路由与转发。IP协议、路由协议等
- 链路层:相邻网络元素(主机、交换机、路由器等)的数据传输。以太网(Ethernet)、802.11 (WiFi)、PPP
- 物理层:比特传输
5层模型的数据封装