计算机网络体系结构
从本此开始,我们就要开始介绍有关计算机网络体系结构的知识了。内容包括:
常见的计算机网络体系结构
计算机网络体系结构分层的必要性
计算机网络体系结构的设计思想
举例说明及专用术语
计算机网络体系结构是计算机网络课程中的重点和难点,它的抽象概念较多。建议大家阅读学习时多思考,这些概念的理解对后面的学习帮助会很大。
1、常见的计算机网络体系结构
1.1 OSI体系结构
为了使不同体系结构的计算机网络都能互连,国际标准化组织于1977年成立了专门机构研究该问题。不久,他们就提出了一个试图使各种计算机在世界范围内互连成网的标准框架,也就是著名的开放系统互联参考模型,简称为OSI。该模型是一个七层协议的体系结构,从下往上依次是:物理层、数据链路层、网络层、运输层、会话层、表示层、应用层,如下图所示。
它是法律上的国际标准。
1.2 TCP/IP体系结构
到了20世纪90年代初期,但这时英特网已抢先在全世界覆盖了相当大的范围。英特网从1983年开始使用TCP/IP协议族,并逐步演变成TCP/IP参考模型。该模型是一个四层协议的体系结构,从下往上依次是:网络接口层、网际层、运输层、应用层,如下图所示。
它是事实上的国际标准。
1.3 标准制定与市场关系
在过去制定标准的组织中,往往以专家学者为主,但现在许多公司都纷纷挤进各种各样的标准化组织,使得技术标准有着浓厚的商业气息。一个新标准的出现有时不一定反映出其技术水平是最先进的,而是往往有着一定的市场背景。从这种意义上说,能够占领市场的就是标准。
OSI标准失败的原因可归纳为以下几点:
OSI的专家们缺乏实际经验,他们在完成OSI标准时没有商业驱动力。
OSI的协议实现起来过分复杂,而且运行效率很低。
OSI标准的制定周期太长,因而使得按OSI标准生产的设备无法及时进入市场。
OSI的层次划分也不太合理,有些功能在多个层次中重复出现。
1.4 体系结构对比
对比这两个体系结构可以看出:
TCP/IP体系结构相当于将OSI体系结构的物理层和数据链路层合并为了网络接口层。
并去掉了会话层和表示层。
另外由于TCP/IP在网络层使用的协议是IP协议(IP协议的中文意思是网际协议),因此TCP/IP体系结构的网络层常称为网际层。
大多数用户每天都有接入英特网的需求,这就要求用户的主机必须使用TCP/IP协议。当然了,即使用户的网络不需要接入因特网,也可以使用TCP/IP协议。
在用户主机的操作系统中,通常都带有符合TCP/IP体系结构标准的TCP/IP协议族。而用于网络互联的路由器中,也带有符合TCP/IP体系结构标准的TCP/IP协议族,只不过路由器一般只包含网络接口层和网际层。
1.5 TCP/IP体系结构特点
TCP/IP体系结构的网络接口层并没有规定什么具体的内容,这样做的目的是可以互联全世界各种不同的网络接口。例如:
有线的以太网接口
无线局域网的WiFi接口
而不限定仅使用一种或几种网络接口。因此本质上TCP/IP体系结构只有上面的三层。
IP协议是TCP/IP体系结构网际层的核心协议。TCP和UDP是TCP/IP体系结构运输层的两个重要协议。TCP/IP体系结构的应用层包含了大量的应用层协议,例如HTTP、SMTP、DNS、RTP等,即便大家是计算机网络的初学者,对HTTP这个缩写词也不会陌生,因为每当我们打开浏览器,在地址栏输入网址时,就会看到它。
IP协议可以将不同的网络接口进行互连,并向其上的TCP协议和UDP协议提供网络互联服务。而TCP协议在享受IP协议提供的网络互联服务的基础上,可向应用层的相应协议提供可靠传输的服务。UDP协议在享受IP协议提供的网络互联服务的基础上,可向应用层的相应协议提供不可靠传输的服务。
IP协议作为TCP/IP体系结构中的核心协议,一方面负责互联不同的网络接口,也就是“IP over everything”;另一方面为各种网络应用提供服务,也就是“Everything over IP”。
IP协议和TCP协议是其中非常重要的两个协议,因此用TCP和IP这两个协议来表示整个协议大家族,常称为TCP/IP协议族。
顺便提一下,在嵌入式系统开发领域,TCP/IP协议族常称为TCP/IP协议栈。这是因为TCP/IP协议体系的分层结构与数据结构中的栈在图形画法上是类似的。
1.6 折中方案:五层协议体系结构
由于TCP/IP体系结构为了将不同的网络接口进行互连,因此它的网络接口层并没有规定什么具体的内容。然而,这对我们学习计算机网络完整体系时就会缺少一部分内容。
因此在学习计算机网络原理时,我们往往采取折中的办法,也就是综合OSI和TCP/IP的优点,采用一种五层协议的原理体系结构。
五层协议的原理体系结构从下到上依次为:物理层、数据链路层、网络层、运输层、应用层,如下图所示。
可以看出,五层协议的原理体系结构将TCP/IP体系结构的网络接口层又重新划分为了物理层和数据链路层。
学到这里,我们对计算机网络体系结构有了初步的了解,同时也产生了更多的疑问。例如:
计算机网络体系结构为什么要分层?
各层的主要任务是什么?
下面,我们就来继续介绍计算机网络体系结构分层的必要性,逐步解开这些疑惑。
2、计算机网络体系结构分层的必要性
现在,我们就以前面介绍的五层协议的原理体系结构为例,介绍计算机网络体系结构分层的必要性。
2.1 分层设计的意义
计算机网络是个非常复杂的系统。早在最初的ARPANET设计时,就提出了分层的设计理念。分层可将庞大而复杂的问题转化为若干较小的局部问题,而这些较小的局部问题就比较容易研究和处理。
下面我们按照由简单到复杂的顺序来看看,实现计算机网络要面临哪些主要问题,以及如何将这些问题划分到相应的层次,层层处理。
2.2 两台计算机通过网线连接
首先来看最简单的情况:两台计算机通过一条网线连接起来。对于这种最简单的情况,我们需要考虑以下问题:
采用怎样的传输媒体(介质),例如这是我们常见的双绞线网线。
在计算机上采用怎样的物理接口来连接传输媒体,例如这是RJ45以太网接口。
还有需要考虑的问题是使用怎样的信号来表示比特0和1,例如使用这样的方波信号,低电平表示0,高电平表示1。
解决了这些问题,两台计算机就可以通过信号来传输比特0或1了。我们可以将这些问题划归到物理层。
这里我们需要说明两点:
严格来说,传输媒体并不属于物理层,它并不包含在体系结构之中。
计算机网络中传输的信号并不是我们举例的方波信号。我们之所以举例成方波信号是为了让初学者容易理解,在学习本身就不容易理解的概念——抽象的计算机网络体系结构时,不让其他技术细节再给大家造成学习障碍。
2.3 简单扩展:总线型网络
实用的计算机网络一般都由多台主机构成。例如主机A、B、C、D通过总线互联,构成了一个总线型网络。
假设我们已经解决了物理层的问题,也就是说主机间可以发送信号来传输比特0或者1了。我们来看看在这样一个总线型的网络上,还面临什么需要解决的问题。
如图所示,主机A要给主机C发送数据,但是表示数据的信号会通过总线传播到总线上的每一个主机。
那么问题来了:
主机C如何知道该数据是发给自己的,自己要接受?
而主机B和D又如何知道该数据并不是发送给自己的,自己应该拒绝?
这就很自然地引出了如何标识网络中各主机的问题,也就是主机编址问题,如MAC地址。
大家可能听说过网卡上的MAC地址,其实它就是主机在网络中的地址。主机在发送数据时,应该给数据附加上目的地址。当其他主机收到后,根据目的地址和自身地址来决定是否接收数据。
这就又引出了一个问题:目的主机如何从信号所表示的一连串比特流中区分出地址和数据?也就是需要解决分组的封装格式问题。
另外,对于总线型的网络还会出现下面这种典型的问题:
如上图所示,某个时刻总线是空闲的(也就是没有主机使用总线来发送数据),片刻之后,主机B和D同时向总线发送数据,这必然会造成信号碰撞。因此,如何协调各主机征用总线也是必须要解决的问题。
需要说明的是,这种总线型的网络早已淘汰,现在常用的是使用以太网交换机将多台主机互联形成的交换式以太网,如下图所示。
那么以太网交换机又是如何实现的呢?我们将这些问题全部划归到数据链路层。
到这里大家可能会发现,只要解决了物理层和数据链路层各自所面临的问题,我们就可以实现分组在一个网络上传输了。没错,确实是这样。
但是我们每天都会使用的英特网是由非常多的网络和路由器互连起来的。仅解决物理层和数据链路层的问题还是不能正常工作。
2.4 多网络互连:小型互联网示例
我们来看这个例子:这是一个由三个路由器、四个网络互联起来的小型互联网。我们可以把它看作是英特网中很小的一部分。
在之前的例子中,仅有一个网络,我们不需要对网络进行标识。而在本例中有多个网络,很显然,我们面临着如何标识各网络以及各网络中各主机的问题。换句话说,也就是网络和主机共同编制的问题。
相信大家一定听过IP地址。例如下图标识的网络N1中各设备的IP地址。
该类IP地址的前3个十进制数用来标识网络,第四个十进制数用来标识主机在本地网络中的位置。网络N1的网络号为192.168.1,该网络上的笔记本电脑、服务器以及路由器接口的IP地址的前三个数应该都是192.168.1,因为他们都在网络N1上,而第四个十进制数分别为1、2、254,各不相同,用来标识他们自己。网络N2上各设备的IP地址也是同理。
2.5 路由问题:路径选择与转发
我们再来看另一个问题:源主机与目的主机之间的传输路径往往不止一条。分组从源主机到目的主机可走不同的路径。这样就引出了路由器如何转发分组的问题,以及如何进行路由选择的问题。我们将这些问题全部划归到网络层。
至此我们解决了物理层、数据链路层以及网络层各自的问题,则可以实现分组在网络间传输的问题。
但是对于计算机网络应用而言,这仍然不够。
2.6 应用通信:进程间交互问题
例如,假设这台主机中运行着两个与网络通信相关的应用进程:一个是浏览器进程,另一个是QQ进程;这台服务器中运行着与网络通信相关的服务器进程。某个时刻主机收到了来自服务器的分组,那么这些分组应该交给浏览器进程处理呢?还是应该交给QQ进程处理?
这就引出了我们如何标识与网络通信相关的应用进程,进而解决进程之间基于网络通信的问题。
另外,如果某个分组在传输过程中出现了误码,或者由于路由器繁忙导致路由器丢弃分组,换句话说,若出现传输错误,应该如何处理?这也是需要解决的问题。
我们将这些问题全部划归到运输层。
至此我们解决了物理层、数据链路层、网络层以及运输层各自的问题,则可以实现进程之间基于网络的通信。
2.7 实现网络应用:应用层功能
在此基础上,我们只需制定各种应用层协议,并按协议标准编写相应的应用程序,通过应用进程间的交互,即可完成特定的网络应用。
比如支持万维网应用的HTTP协议、支持电子邮件的SMTP协议、支持文件传送的FTP协议等。
我们将这些问题全部划归到应用层。
2.8 总结各层问题
至此我们将实现计算机网络所需要解决的各种主要问题分别划归到了原理体系结构的五个层次之中:
请大家思考一下这样一个问题:假设你是一名程序员,要编程解决实现计算机网络所面临的所有软件问题,那么你是愿意将这些问题全部放在一个模块中编程实现呢?还是愿意将它们划分到不同的模块中逐模块编程实现?
相信你一定会选择后者。
3、计算机网络体系结构分层思想举例
接下来,我们将通过一个具体的网络通信实例来看看计算机网络体系结构的分层处理方法。
3.1 网络拓扑与通信场景
假设网络拓扑如下图所示:
主机属于网络N1。
Web服务器属于网络N2。
N1和N2通过路由器互联。
我们使用主机中的浏览器来访问Web服务器。当输入网址后,主机会向Web服务器发送请求,Web服务器收到请求后会发回相应的响应。主机的浏览器收到响应后,将其解析为具体的网页内容显示出来。
需要说明的是,我们给出的只是一个简化的示意过程。这是因为本次介绍的重点是计算机网络体系结构分层处理方法,而不是浏览器和Web服务器的实际交互过程。
主机和Web服务器之间基于网络的通信,实际上是主机中的浏览器应用进程与Web服务器中的Web服务器应用进程之间的基于网络的通信。
那么,体系结构的各层在整个过程中起到怎样的作用呢?
3.2 主机端的封装过程
我们从主机端,按体系结构自顶向下的顺序来看:
3.2.1 应用层
应用层按HTTP协议的规定构建一个HTTP请求报文。这是该报文的内容,如下图。应用层将HTTP报文交付给运输层处理。
3.2.2 运输层
运输层给HTTP请求报文添加一个TCP首部,使之成为TCP报文段。下图是TCP报文段的首部格式。该首部的作用主要是为了区分应用进程以及实现可靠传输。运输层将TCP报文段交付给网络层处理。
3.2.3 网络层
网络层给TCP报文段添加一个IP首部,使之成为IP数据报。下图是IP数据报的首部格式。该首部的作用主要是为了使IP数据报可以在互联网上传输,也就是被路由器转发。网络层将IP数据报交付给数据链路层处理。
3.2.4 数据链路层
数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧。
假设网络N1是以太网,IP数据报右边是以太网帧首部的格式。该首部的作用主要是为了让帧能够在一段链路上或一个网络上传输,能够被相应的目的主机接收。IP数据报左边是以太网帧尾部的格式,其作用是为了让目的主机检查所接收到的帧是否有误码。数据链路层将帧交付给物理层。
3.2.5 物理层
物理层将帧看作是比特流。
由于网络N1是以太网,因此物理层还会给该比特流前面添加前导码。这是前导码的内容,其作用是为了让目的主机做好接收帧的准备。
物理层将添加有前导码的比特流变换成相应的信号,发送到传输媒体。然后信号通过传输媒体到达路由器。
3.3 路由器的处理过程
然后我们来看路由器的处理过程:
3.3.1 物理层
物理层将信号变换为比特流。
然后去掉前导码后将其交付给数据链路层。
这实际上交付的是帧数据。
3.3.2 数据链路层
数据链路层将帧的首部和尾部去掉后,将其交付给网络层。
这实际上交付的是IP数据报。
3.3.3 网络层
网络层解析IP数据报的首部,从中提取出目的网络地址,然后查找自身的路由表,确定转发端口以便进行转发。
网络层将IP数据报交付给数据链路层。
3.3.4 数据链路层(再次封装)
数据链路层给IP数据报添加一个首部和一个尾部,使之成为帧。
数据链路层再次将帧交付给物理层。
3.3.5 物理层
物理层将帧看作是比特流。由于网络N2是以太网,因此物理层还会给该比特流前面添加前导码。物理层将添加有前导码的比特流变换成相应的信号,发送到传输媒体。
3.4 Web服务器的处理过程
信号通过传输媒体到达Web服务器,接着以同样类似的方式逐层解封,我们再来简单看外部服务器的处理过程:
物理层 物理层将信号变换为比特流,然后去掉前导码后将其交付给数据链路层。这实际上交付的是帧数据。
数据链路层 数据链路层将帧的首部和尾部去掉后,将其交付给网络层。这实际上交付的是IP数据报。
网络层 网络层将IP数据报的首部去掉后,将其交付给运输层。这实际上交付的是TCP报文段。
运输层 运输层将TCP报文段的首部去掉后,将其交付给应用层。这实际上交付的是HTTP请求报文。
应用层 应用层对HTTP请求报文进行解析,然后给主机发回HTTP响应报文。
与之前的过程类似,HTTP响应报文需要在外部服务器层层封装,然后通过物理层变换成相应的信号,再通过传输媒体传输到路由器。路由器转发该响应报文给主机。
3.6 主机端的接收与解封
主机通过物理层将收到的信号转换为比特流之后,再通过逐层解封,最终取出HTTP响应报文。
到这里,对于计算机网络体系结构的分层处理思想的讲述就结束了。
4、计算机网络体系结构中的专用术语
前面我们通过一个简单的应用实例讲述了计算机网络体系结构的分层思想。相信大家已经对计算机网络体系结构有了初步的认识。
接下来,我们将对计算机网络体系结构中的专用术语进行介绍,以便大家对计算机网络体系结构有更深入的理解。
需要说明的是,这些专用术语来源于OSI的七层协议体系结构,但也适用于TCP/IP的四层体系结构和五层协议原理体系结构。
我们将这些专用术语中最具代表性的三个作为分类名称,它们分别是:
4.1 实体
实体是指任何可发送或接收信息的硬件或软件进程。
例如这是通信双方的五层原理体系结构,我们在他们的各层中用标有字母的小方格来表示实体。
有了实体的概念,我们再来看对等实体。对等实体是指通信双方相同层次中的实体。例如图中实体A与实体F为对等实体,实体B与实体G为对等实体,以此类推。
那么按照对等实体的定义,请大家思考一下:
通信双方的网卡是不是对等实体呢?
通信双方中正在进行通信的应用进程是不是对等实体呢?
回答是肯定的。因为首先根据实体定义可知,双方的网卡都是实体,其次网卡在双方都处于相同层次,因此是对等实体。应用进程同理。
4.2 协议
协议是控制两个对等实体进行逻辑通信的规则的集合。
例如:
应用层对等实体在应用层协议的控制下进行逻辑通信
运输层对等实体在运输层协议的控制下进行逻辑通信
网络层对等实体在网络层协议的控制下进行逻辑通信
以此类推
需要注意的是,之所以称为逻辑通信,是因为这种通信其实并不存在,它只是我们假设出来的一种通信。目的在于方便我们单独研究体系结构某一层,而不用考虑其他层。
例如,当我们研究运输层时,我们可以假设运输层的对等实体在进行逻辑通信,而不用顾及其他层。
计算机网络协议有三个要素,分别是语法、语义以及同步。
4.2.1 协议三要素:语法
定义通信双方所交换信息的格式。
例如下图是IP数据报的格式,其中的小格子称为字段或域,表示字段的长度单位是bit(比特)。
语法就是定义了这些小格子的长度和先后顺序。换句话说,语法定义了所交换信息有哪些字段,以及以何种顺序构成。
需要说明的是,我们没有必要记住每种分组的格式,只要我们能看懂它们的格式说明就可以了。
当然了,如果大家将来会从事计算机网络相关的开发、教学研究等工作,像IP数据报、TCP报文段、HTTP报文等这些常见的分组格式,相信大家在学习和研究过程中自然而然就会记住了。
4.2.2 协议三要素:语义
定义通信双方所要完成的操作。
比如前面举的应用实例:主机要访问远程Web服务器,它会构建一个HTTP的GET请求报文,然后将其发送给Web服务器。Web服务器收到该报文并进行解析,知道这是一个HTTP的GET请求报文,于是就在自身内部查找所请求的内容,并将所找到的内容封装在一个HTTP响应报文中发回给主机。主机收到HTTP响应报文后,对其进行解析,取出所请求的内容,并由浏览器解析显示。
这个例子就可以体现出通信双方收到分组后完成怎样的操作,这是HTTP协议的语义所规定的。
4.2.3 协议三要素:同步
定义通信双方的时序关系(双方同时要相互进行的操作关系?)。请注意并不是指时钟频率同步。
例如TCP采用三报文握手建立连接的过程。要想进行运输层TCP实体间的逻辑通信,首先必须建立连接。从连接建立的过程就可以看出,TCP客户端和TCP服务器之间的时序关系以及各自的状态转换。只有双方建立连接后才能进行TCP数据传输。如下图
这个例子可以充分体现计算机网络协议三要素中的同步。
4.3 服务
有了协议的概念,我们再来介绍服务。
在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务。换句话说,要实现本层协议,还需要使用下面一层所提供的服务。
例如下图所示状态:
物理层对等实体在物理层协议的控制下向数据链路层提供服务;
数据链路层对等实体享受物理层提供的服务,并在数据链路层协议的控制下进行逻辑通信,给网络层提供服务;
网络层对等实体享受数据链路层提供的服务,并在网络层协议的控制下进行逻辑通信,给运输层提供服务;
运输层对等实体享受网络层提供的服务,并在运输层协议的控制下进行逻辑通信,给应用层提供服务;
应用层对等实体享受运输层提供的服务,并在应用层协议的控制下进行逻辑通信,给其上层也就是用户提供服务。
很明显,协议是水平的,而服务是垂直的。
需要特别注意的是:
实体看得见相邻下层所提供的服务,但并不知道实现该服务的具体协议。换句话说,下层的协议对上层的实体是透明的。
这就好比我们肯定看得见手机为我们提供的各种服务,但我们只是享受这些服务,而没有必要弄懂手机的工作原理。
4.4 服务访问点
服务访问点,是指在同一系统中,相邻两层的实体交换信息的逻辑接口,用于区分不同的服务类型。
例如:
数据链路层的服务访问点为帧的类型字段
网络层的服务访问点为IP数据报首部中的协议字段
运输层的服务访问点为端口号
上层要使用下层所提供的服务,必须通过与下层交换一些命令,这些命令称为服务原语。
4.5 PDU和SDU
在计算机网络体系结构中,对通信双方所交互的数据包有专门的术语:
我们把对等层次之间传送的数据包称为该层的协议数据单元(Protocol Data Unit),英文缩写词为PDU。
例如:
物理层对等实体逻辑通信的数据包称为比特流;
数据链路层对等实体逻辑通信的数据包称为帧;
网络层对等实体逻辑通信的数据包称为分组,如果使用IP协议,也称为IP数据报;
运输层对等实体逻辑通信的数据包一般根据协议而定:使用TCP协议则称为TCP报文段;使用UDP协议则称为UDP用户数据报;
应用层对等实体逻辑通信的数据包一般称为应用报文。
上述各层数据包可以统称为协议数据单元(PDU)。
我们把同一系统内层与层之间交换的数据包称为服务数据单元(Service Data Unit),英文缩写词为SDU。如下图红色框出部分。
多个服务数据单元(SDU)可以合成为一个协议数据单元(PDU),一个服务数据单元(SDU)也可以划分为几个协议数据单元(PDU)。
OK,讲到这里,关于计算机网络体系结构的相关专业术语也讲述完毕了。也使我们更深入地了解了计算机网络体系结构以及其中的一些专用术语。
最后,整理一下所讲述的常用专业术语,如下图所示
5、小结
到这里我们计算机网络体系结构的四大板块内容就结束了。相对来说,这些内容比较抽象。
如果大家一时无法完全理解,可以不用钻牛角尖,暂时放过去。随着后续课程的学习,大家会感觉到计算机网络体系结构不再抽象难懂,它的分层思想是多么优美的设计哲学,其中的这些术语又是多么的贴切。
以上便是本次文章的所有内容,欢迎各位朋友在评论区讨论,本人也是一名初学小白,愿大家共同努力,一起进步吧!
鉴于笔者能力有限,难免出现一些纰漏和不足,望大家在评论区批评指正,谢谢!