天天看点

计算机网络的体系结构及其分层,以及服务的概念

一个关于计算机网络的有趣的知乎问答  https://www.zhihu.com/question/19718686

该文摘自 百度百科的“计算机网络”专题

要想让两台计算机进行通信,必须使它们采用相同的信息交换规则。我们把在计算机网络中用于规定信息的格式以及如何发送和接收信息的一套规则称为网络协议(network protocol)或通信协议(communication protocol)。

为了减少网络协议设计的复杂性,网络设计者并不是设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而是采用把通信问题划分为许多个小问题,然后为每个小问题设计一个单独的协议的方法。这样做使得每个协议的设计、分析、编码和测试都比较容易。分层模型(layering model)是一种用于开发网络协议的设计方法。本质上,分层模型描述了把通信问题分为几个小问题(称为层次)的方法,每个小问题对应于一层。

在计算机网络中要做到有条不紊地交换数据,就必须遵守一些事先约定好的规则。这些规则明确规定了所交换的数据格式以及有关的同步问题。这里所说的同步不是狭义的(即同频或同频同相)而是广义的,即在一定的条件下应当发生什么事件(如发送一个应答信息),因而同步含有时序的意思。这些为进行网络中的数据交换而建立的规则、标准或约定称为网络协议,网络协议也可简称为协议。网络协议主要由以下三个要素组成。

① 语法,即数据与控制信息的结构或格式。

② 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应。

③ 同步,即事件实现顺序的详细说明。

网络协议是计算机网络的不可缺少的组成部分。

协议通常有两种不同的形式。一种是使用便于人来阅读和理解的文字描述,另一种是使用计算机能够理解的程序代码。

对于非常复杂的计算机网络协议,其结构应该是层次式的。分层可以带来许多好处。

① 各层之间是独立的。某一层并不需要知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口(即界面)所提供的服务。由于每一层只实现一种相对独立的功能,因而可将一个难以处理的复杂问题分解为若干个较容易处理的更小一些的问题。这样,整个问题的复杂程度就下降了。

② 灵活性好。当任何一层发生变化时(例如由于技术的变化),只要层间接口关系保持不变,则在这层以上或以下各层均不受影响。此外,对某一层提供的服务还可进行修改。当某层提供的服务不再需要时,甚至可以将这层取消。

③ 结构上可分割开。各层都可以采用最合适的技术来实现。

④ 易于实现和维护。这种结构使得实现和调试一个庞大而又复杂的系统变得易于处理,因为整个的系统已被分解为若干个相对独立的子系统。

⑤ 能促进标准化工作。因为每一层的功能及其所提供的服务都已有了精确的说明。

分层时应注意使每一层的功能非常明确。若层数太少,就会使每一层的协议太复杂。但层数太多又会在描述和综合各层功能的系统工程任务时遇到较多的困难。

我们把计算机网络的各层及其协议的集合,称为网络的体系结构。换种说法,计算机网络的体系结构就是这个计算机网络及其构件所应完成的功能的精确定义。需要强调的是:这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现的问题。体系结构的英文名词architecture的原意是建筑学或建筑的设计和风格。但是它和一个具体的建筑物的概念很不相同。我们也不能把一个具体的计算机网络说成是一个抽象的网络体系结构。总之,体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。

图5.8所示是计算机网络体系结构示意图。

  图5.8 计算机网络体系结构表示图

其中图5.8(a)是OSI的七层协议体系结构图、图5.8(b)是TCP/IP四层体系结构、图5.8(c)是五层协议的体系结构。五层协议的体系结构综合了前两种体系结构的优点,既简洁又能将概念阐述清楚。

计算机网络的体系结构及其分层,以及服务的概念

为了减少网络设计的复杂性,绝大多数网络采用分层设计方法。所谓分层设计方法,就是按照信息的流动过

计算机网络的体系结构及其分层,以及服务的概念

网络协议分层示意图

程将网络的整体功能分解为一个个的功能层,不同机器上的同等功能层之间采用相同的协议,同一机器上的相邻功能层之间通过接口进行信息传递。为了便于理解接口和协议的概念,我们首先以邮政通信系统为例进行说明。人们平常写信时,都有个约定,这就是信件的格式和内容。首先,我们写信时必须采用双方都懂的语言文字和文体,开头是对方称谓,最后是落款等。这样,对方收到信后,才可以看懂信中的内容,知道是谁写的,什么时候写的等。当然还可以有其他的一些特殊约定,如书信的编号、间谍的密写等。信写好之后,必须将信封装并交由邮局寄发,这样寄信人和邮局之间也要有约定,这就是规定信封写法并贴邮票。在中国寄信必须先写收信人地址、姓名,然后才写寄信人的地址和姓名。邮局收到信后,首先进行信件的分拣和分类,然后交付有关运输部门进行运输,如航空信交民航,平信交铁路或公路运输部门等。这时,邮局和运输部门也有约定,如到站地点、时间、包裹形式等等。信件运送到目的地后进行相反的过程,最终将信件送到收信人手中,收信人依照约定的格式才能读懂信件。如图所示,在整个过程中,主要涉及到了三个子系统、即用户子系统,邮政子系统和运输子系统。各种约定都是为了达到将信件从一个源点送到某一个目的点这个目标而设计的,这就是说,它们是因信息的流动而产生的。可以将这些约定分为同等机构间的约定,如用户之间的约定、邮政局之间的约定和运输部门之间的约定,以及不同机构间的约定,如用户与邮政局之间的约定、邮政局与运输部门之间的约定。虽然两个用户、两个邮政局、两个运输部门分处甲、乙两地,但它们都分别对应同等机构,同属一个子系统;而同处一地的不同机构则不在一个子系统内,而且它们之间的关系是服务与被服务的关系。很显然,这两种约定是不同的,前者为部门内部的约定,而后者是不同部门之间的约定。

在计算机网络环境中,两台计算机中两个进程之间进行通信的过程与邮政通信的过程十分相似。用户进程对应于用户,计算机中进行通信的进程(也可以是专门的通信处理机〕对应于邮局,通信设施对应于运输部门。为了减少计算机网络设计的复杂性,人们往往按功能将计算机网络划分为多个不同的功能层。网络中同等层之间的通信规则就是该层使用的协议,如有关第N层的通信规则的集合,就是第N层的协议。而同一计算机的不同功能层之间的通信规则称为接口( i n t e r f a c e),在第N层和第(N+ 1)层之间的接口称为N /(N+ 1)层接口。总的来说,协议是不同机器同等层之间的通信约定,而接口是同一机器相邻层之间的通信约定。不同的网络,分层数量、各层的名称和功能以及协议都各不相同。然而,在所有的网络中,每一层的目的都是向它的上一层提供一定的服务。协议层次化不同于程序设计中模块化的概念。在程序设计中,各模块可以相互独立,任意拼装或者并行,而层次则一定有上下之分,它是依数据流的流动而产生的。组成不同计算机同等层的实体称为对等进程( peer process)。对等进程不一定非是相同的程序,但其功能必须完全一致,且采用相同的协议。分层设计方法将整个网络通信功能划分为垂直的层次集合后,在通信过程中下层将向上层隐蔽下层的实现细节。但层次的划分应首先确定层次的集合及每层应完成的任务。划分时应按逻辑组合功能,并具有足够的层次,以使每层小到易于处理。同时层次也不能太多,以免产生难以负担的处理开销。计算机网络体系结构是网络中分层模型以及各层功能的精确定义。对网络体系结构的描述必须包括足够的信息,使实现者可以为每一功能层进行硬件设计或编写程序,并使之符合相关协议。但我们要注意的是,网络协议实现的细节不属于网络体系结构的内容,因为它们隐含在机器内部,对外部说来是不可见的。现在我们来考查一个具体的例子:在图1 - 11所示的5层网络中如何向其最上层提供通信。在第5层运行的某应用进程产生了消息M,并把它交给第4层进行发送。第4层在消息M前加上一个信息头(h e a d e r),信息头主要包括控制信息(如序号)以便目标机器上的第4层在低层不能保持消息顺序时,把乱序的消息按原序装配好。在有些层中,信息头还包括长度、时间和其他控制字段。在很多网络中,第4层对接收的消息长度没有限制,但在第3层通常存在一个限度。因此,第3层必须将接收的入境消息分成较小的单元如报文分组( p a c k e t),并在每个报文分组前加上一个报头。在本实例中,消息M被分成两部分:M 1和M 2。第3层确定使用哪一条输出线路,并将报文传给第2层。第2层不仅给每段消息加上头部信息,而且还要加上尾部信息,构成新的数据单元,通常称为帧( f r a m e),然后将其传给第1层进行物理传输。在接收方,报文每向上递交一层,该层的报头就被剥掉,决不可能出现带有N层以下报头的报文交给接收方第N层实体的情况。要理解图1 - 11示意图,关键要理解虚拟通信与物理通信之间的关系,以及协议与接口之间的区别。比如,第4层的对等进程,在概念上认为它们的通信是水平方向地应用第四层协议。每一方都好像有一个叫做“发送到另一方去”的过程和一个叫做“从另一方接收”的过程,尽管实际上这些过程是跨过3 / 4层接口与下层通信而不是直接同另一方通信。抽象出对等进程这一概念,对网络设计是至关重要的。有了这种抽象技术,网络设计者就可以把设计完整的网络这种难以处理的大问题,划分成设计几个较小的且易于处理的问题,即分别设计各层。

计算机网络的体系结构及其分层,以及服务的概念

服务(s e r v i c e)这个极普通的术语在计算机网络中无疑是一个极重要的概念。在网络体系结构中,服务就是网络中各层向其相邻上层提供的一组操作,是相邻两层之间的界面。由于网络分层结构中的单向依赖关系,使得网络中相邻层之间的界面也是单向性的:下层是服务提供者,上层是服务用户。而服务的表现形式是原语( p r i m i t i v e),比如库函数或系统调用。为了更好地讨论网络服务,我们先解释几个术语。在网络中,每一层中至少有一个实体( e n t i t y)。实体既可是软件实体(比如一个进程),也可以是硬件实体(比如一块网卡)。在不同机器上同一层内的实体叫做对等实体(peerentity)。N层实体实现的服务为N+ 1层所利用,而N层则要利用N-1层所提供的服务。N层实体可能向N+1层提供几类服务,如快速而昂贵的通信或慢速而便宜的通信。N+1层实体是通过N层的服务访问点(Service Access Point,SAP)来使用N层所提供的服务。N层SAP就是N+ 1层可以访问N层服务的地方。每一个SAP都有一个唯一地址。为了使读者更清楚,我们可以把电话系统中的SAP看成标准电话插孔,而SAP地址是这些插孔的电话号码。要想和他人通话,必须知道他的SAP地址(电话号码)。在伯克利版本的U n i x系统中,SAP是“S o c k e t”,SAP地址是S o c k e t号。邻层间通过接口要交换信息。N+1层实体通过S A P把一个接口数据单元(Interface Data Unit,IDU)传递给N层实体,如图1 - 1 2所示。I D U由服务数据单元(Service Data Unit,SDU)和一些控制信息组成。为了传送S D U,N层实体可以将S D U分成几段,每一段加上一个报头后作为独立的协议数据单元(Protocol Data Unit,PDU)送出,如“分组”就是P D U。P D U报头被同层实体用来执行它们的同层协议,用于辨别哪些P D U包含数据,哪些包含控制信息,并提供序号和计数值等。在网络中,下层向上层提供的服务分为两大类:面向连接服务( connection-oriented service)和无连接服务(connectionless service)。面向连接服务是电话系统服务模式的抽象。每一次完整的数据传输都必须经过建立连接、数据传输和终止连接三个过程。在数据传输过程中,各数据包地址不需要携带目的地址,而是使用连接号。连接本质上类似于一个管道,发送者在管道的一端放入数据,接收者在另一端取出数据。其特点是接收到的数据与发送方发出的数据在内容和顺序上是一致的。无连接服务是邮政系统服务模式的抽象。其中每个报文带有完整的目的地址,每个报文在系统中独立传送。无连接服务不能保证报文到达的先后顺序,原因是不同的报文可能经不同的路径去往目的地,所以先发送的报文不一定先到。无连接服务一般也不对出错报文进行恢复和重传。换句话说,无连接服务不保证报文传输的可靠性。在计算机网络中,可靠性一般通过确认和重传(acknowledgement and retransmission)机制实现。大多数面向连接服务都支持确认重传机制,但确认和重传将带来额外的延迟。有些对可靠性要求不高的面向连接服务(如数字电话网)不支持重传;因为电话用户宁可听到带有杂音的通话,也不喜欢等待确认所造成的延迟。大多数无连接服务不支持确认重传机制,所以无连接传输服务往往可靠性不高。