1.5 计算机网络体系结构
1.5.1 常见的三种计算机网络体系结构
为了使不同体系结构的计算机网络都能互连起来,国际标准化组织于1977年成立了专门机构研究该问题,他们提出了一个使全世界各种计算机可以互连成网的标准框架——开放系统互连基本参考模型(
OSI
)
OSI参考模型是一个七层协议的体系结构,自下而上有物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。该体系结构是法律上的国际标准 。
到了20世纪90年代初期,尽管整套的OSI国际标准都已经制定出来,但这时因特网已抢先在全世界覆盖了相当大的范围。
因特网从1983年开始使用TCP/IP协议族,并逐渐演变成TCP/IP参考模型,该模型为四层协议的体系结构,自下而上依次是网络接口层、网际层、运输层、应用层。该模型是事实上的国际标准。
在过去,制定标准的组织中往往以专家、学者为主,但现在许多公司都纷纷挤进各种各样的标准化组织,使得技术标准有着浓厚的商业气息,例如我国的华为公司。
OSI标准失败的原因:
对比这两个体系结构可以看出:将OSI体系结构的物理层和数据链路层合并为了网络接口层,将会话层和表示层合并到了应用层。
由于TCP/IP在网络层使用的协议是IP协议,IP协议的中文意思是网际协议,因此TCP/IP体系结构的网络层常称为网际层。
大多数网络用户每天都有使用因特网的需求,这就要求用户的主机必须使用TCP/IP体系结构,在用户主机的操作系统中,通常都带有完整的TCP/IP协议族。而因特网中用于网络互连的路由器,就其所需完成的网络互连这一基本任务而言,只包含TCP/IP的网络接口层和网际层即可。
因此,我们一般认为路由器的网络体系结构的最高层为网际层,网络接口层并没有规定什么具体内容,这样做的目的是可以互连全世界各种不同的网络接口。例如有线的以太网接口,无线局域网的Wi-Fi接口,而不限定只使用一种或几种网络接口。
因此,TCP/IP体系结构在本质上只有上面的三层,网际协议IP是网际层的核心协议。
传输控制协议TCP和用户数据报协议UDP是运输层的两个重要协议。
应用层包含了大量的应用层协议,例如超文本传送协议HTTP、简单邮件传送协议SMTP、域名系统DNS以及实时运输协议RTP等。
IP
协议可以将不同的网络接口进行互连,并向其上的TCP
协议和UDP
协议提供网络互连服务。
TCP
协议在享受IP协议提供的网络互连服务的基础上,可向应用层的某些协议提供可靠传输的服务。
UDP
协议在享受IP协议提供的网络互连服务的基础上,可向应用层的某些协议提供不可靠传输协议的服务。
IP
协议作为TCP/IP
体系结构中的核心协议,一方面负责互连不同的网络接口,也就是IP over everything
,另一方面为各种网络应用提供服务,也就是everything over IP
。
由于TCP/IP体系结构中包含有大量的协议,而IP协议和TCP协议是其中非常重要的两个协议,因此用这两个协议来表示整个协议大家族,常称为TCP/IP协议族。
TCP/IP体系结构为了将不同的网络接口进行互连,其网络接口层并没有规定什么具体内容。然而,这对于我们学习计算机网络的完整体系结构而言,就会缺少一部分内容,因此,在学习计算机网络原理时,采取折中办法,也就是综合OSI模型和TCP/IP参考模型的优点,采用一种原理参考模型。
原理参考模型是一个五层协议的体系结构,将TCP/IP参考模型的网络接口层重新划分为了数据链路层和物理层。
1.5.2 计算机网络体系结构分层的必要性
下面按照由简单到复杂的顺序来看看实现计算机网络要面临哪些主要问题,以及如何将这些问题划分到五层原理体系结构的相应层次。
物理层问题
首先来看最简单的情况:两台计算机通过一条链路连接起来。
考虑以下问题:
-
采用什么传输媒体(介质),可以采用多种传输媒体作为传输链路
-
用户主机、交换机以及路由器等网络设备需要采用什么物理接口来连接传输媒体
这是计算机主板上常见的RJ45以太网接口
-
确定采用什么信号来表示比特0和1,进而在传输媒体上进行传送
例如使用这样的数字基带信号,高电平代表比特1,低电平代表比特0
解决了上述这些问题,两台计算机之间就可以通过信号来传输比特0和1了。
我们可以将上述这些问题划归到物理层,注意传输媒体并不属于物理层范畴,并不包含在计算机网络体系结构之中。另外,计算机网络中传输的信号并不是我们举例的简单的数字基带信号。
数据链路层问题
实用的计算机网络往往由多台计算机互连而成,例如主机A、B和C通过总线互连成了一个总线型网络。假设我们已经解决了物理层的问题,即主机间可以通过信号来传送比特0和1了,来看看在这样一台总线型网络中还面临什么需要解决的问题:
假设主机A要给主机B发送数据,表示数据的信号会通过总线传播到总线上的每一台主机,那么主机B如何知道这是主机A发送给它的数据,进而接收该数据。而主机C又如何知道该数据并不是发送给它的,应该丢弃该数据呢?
这就很自然的引出了如何标识网络中各主机的问题,也就是主机编址问题。
例如网卡上固化的
MAC
地址,它就是主机在网络中的地址。
主机在发送数据时,应该给数据附加上源地址和目的地址。当其他主机收到后,根据目的地址和自身地址是否匹配来决定是否接收该数据,还可以通过源地址知道这是哪个主机发来的数据。这就又引出了一个问题:
目的主机如何从信号所表示的一连串比特流中区分出地址和数据?
也就是需要解决数据包的封装格式问题。
另外,对于总线型的网络,还会出现多个主机争用总线时产生碰撞的问题。例如某个时刻总线式空闲的,也就是没有主机使用总线来发送数据。片刻之后,主机A和主机C同时使用总线来发送数据,这必然会造成信号碰撞。
因此如何协调各主机争用总线也是必须要解决的问题。
需要说明的是,上述这种总线型网络早已淘汰,现在常用的是使用以太网交换机将多台主机互连而成的交换式以太网。在交换式以太网中,多对主机之间可以同时进行通信,而不会产生碰撞。
那么,以太网交换机是如何实现的呢?
具体来说,就是以太网交换机自学习和转发帧的原理,对于交换式以太网这种有线网络很少出现数据误码的情况。而对于无线网络,比较容易出现数据误码。
这就引出了如何检测数据在传输过程中是否出现了误码的问题,也就是差错检验。
当检测到数据包有误码时,是直接丢弃,然后什么也不做,又或是想办法让发送方重传有误码的数据包,这就引出了出现传输差错如何处理的问题。根据应用需求,可分为可靠传输服务和不可靠传输服务。
来看一种情况:主机A给主机B连续发送数据,主机B正处理很多其他任务,来不及取走缓存中的数据。于是主机B给主机A发送通知,通知主机A停止发送。
这就引出了接收方控制发送方注入网络数据量的问题,即流量控制。
我们可以将上述这些问题划归到数据链路层:
只要解决了物理层和数据链路层各自所面临的问题,就可以实现数据包在一个网络上传输了。
网络层问题
然而,我们的网络应用往往不局限于在一个单独的网络上。例如,我们几乎每天都会使用的因特网是由非常多的网络和路由器互连起来的,仅解决物理层和数据链路层的问题还是不能正常工作。
我们可以把这样一个小型互联网看成是因特网中很小的一部分,来看在该小型互联网中需要考虑的主要问题有哪些
由于互联网是由多个网络通过多个路由器互连起来的,因此还需要对互联网中的各网络进行标识。
这就引出了网络和主机共同编址的问题。
例如分配给网络N1中各设备接口的IP地址,由于网络N1中的主机H1、主机H2以及路由器R1连接网络N1的接口都处于同一个网络,因此它们的IP地址的网络号相同。它们的主机号分别为1、2以及254,用于在网络N1中唯一标识自己。
再来看另一个问题,在互联网中,源主机与目的主机之间的传输路径往往不止一条,数据包从源主机到目的主机可走不同的路径。
这就引出了路由器如何转发数据包、以及进行路由选择的问题。
我们可以将上述这些问题划归到网络层:
至此,如果我们解决了物理层、数据链路层、网络层各自的问题,就可以实现数据包在多个网络之间的传送了。
运输层问题
然而仍然有一些重要问题需要考虑,例如假设主机H3中运行着两个与网络通信相关的应用进程,一个是浏览器进程,一个是QQ
进程,H2
这台web
服务器中运行着与网络通信相关的web
服务器进程,例如Nignx
。当主机H3
收到web
服务器中Nginx
进程发来的数据包后,应将数据包交付给浏览器进程,还是QQ
进程呢?
很显然。如果数据包中含有与进程相关的标志信息,主机H3就可以根据标志信息将数据包交付给相应的应用进程.
这就引出了如何标识与网络相关的应用进程,进而解决进程之间基于网络通信的问题,例如使用端口号来区分不同的应用进程。
同时,数据包会由于误码被路由器或用户主机丢弃,又或是由于路由器繁忙,而主动丢弃正常数据包,这些都属于传输差错,如何处理传输差错也是需要考虑的问题。
我们可以将上述这些问题划归到运输层:
至此,如果我们解决了这四层各自的问题,则可以解决进程之间基于网络的通信。
应用层问题
在此基础上,可以制定各种应用协议,并按协议标准编写相应的应用程序。通过应用进程之间的交互来实现特定的网络应用,例如支持万维网的HTTP协议,支持电子邮件的SMTP协议,以及支持文件传送的FTP协议等。
另外,在制定应用协议时,还需要考虑应用进程基于网络通信时的会话管理问题和数据表示问题。我们可以将上述这些问题划归到应用层:
总结
1.5.3 计算机网络体系结构分层思想举例
如图所示。主机属于网络N1,web服务器属于网络N2,N1和N2通过路由器互连。
用户在主机中使用浏览器访问web服务器,当用户在浏览器地址栏中输入web服务器的域名后,主机会向web服务器发送一个请求报文。
web服务器收到请求报文后,执行相应的操作,然后给主机发送响应报文。主机收到响应报文后,由浏览器负责解析和渲染显示。
主机和web服务器之间基于网络的通信,实际上是主机中的浏览器应用进程与web服务器应用进程之间基于网络的通信。我们从五层原理体系结构的角度来看看其具体过程。
主机中的应用层根据HTTP协议的规定构建一个HTTP请求报文,用来请求web服务器执行相应操作。应用层将构建好的HTTP请求报文向下交付给运输层。
运输层给HTTP请求报文添加一个TCP首部,将其封装成TCP报文段。TCP首部的主要作用是区分应用进程和实现可靠传输。运输层将封装好的TCP报文段向下交付给网络层。
网络层给TCP报文段添加一个IP首部,将其封装成IP数据报。IP首部的主要作用是IP寻址和路由。网络层将封装好的IP数据报向下交付给数据链路层。
数据链路层给IP数据报添加一个首部和一个尾部,将其封装成为帧。帧首部和尾部的作用是MAC寻址和帧校验。数据链路层将封装好的帧向下交付给物理层。
物理层并不认识帧的结构,仅仅将其看作比特流,以便将比特流转换成相应的电信号进行发送。对于以太网,物理层还会在比特流前添加前导码,目的是使接收方的时钟同步,并做好接收准备。
主机将电信号发送出去,路由器收到后,其物理层将电信号转换成比特流。
物理层将前导码去掉后,将帧向上交付给数据链路层
数据链路层将帧首部和尾部去掉后,将IP数据报向上交付给网络层
网络层从IP数据报的首部中提取出目的IP地址,根据目的IP地址查找自己的转发表,以便决定从哪个接口转发该IP数据报。与此同时,还要对首部中的某些字段值,例如生存时间TTL字段的值进行相应的修改,然后将该IP数据包向下交付给数据链路层,之后的过程与前面类似。
…
web服务器的应用层收到HTTP请求报文后,执行相应的操作,然后给主机发送包含由浏览器请求内容的HTTP响应报文,与浏览器发送HTTP请求报文的过程类似,HTTP响应报文需要在web服务器层层封装后才能发送。
1.5.4 计算机网络体系结构中的专用术语
将专用术语中最具代表性的三个作为分类名称,分别是实体、协议和服务,这些专用术语来源于OSI的七层体系结构,但也适用于TCP/IP的四层体系结构和五层原理体系结构。
实体
实体是指任何可发送或接收信息的硬件或软件进程。
如图所示,这是通信双方的五层原理体系结构:
我们在它们的各层中用标有字母的小方格来表示实体,从而引出对等实体的概念。
对等实体是指通信双方相同层次中的实体。
属于通信双方物理层和数据链路层的网卡、属于通信双方应用层的浏览器进程和web服务器进程也属于对等实体。
因为网卡是可以发送或接收信息的硬件,它包括物理层和数据链路层。位于收发双方应用层的浏览器进程和web服务器进程是可以发送或接收信息的软件进程。
有了对等实体的概念,我们再来介绍协议
协议是控制两个对等实体在**“水平方向”进行“逻辑通信”的规则**的集合
将两个对等实体间的通信称为逻辑通信,是因为这种通信并不存在,只是假设出来的一种通信。这样做的目的是方便我们单独研究网络体系结构某一层时不用考虑其他层。
例如,当我们研究运输层时,可以假设只有运输层的对等实体在进行逻辑通信,而不用顾及其他各层
协议
计算机网络协议有三个要素,分别是语法、语义、同步
语法是用来定义通信双方所交换信息的格式。
例如:IPv4数据报的首部格式:
其中的小格子称为字段或域
语法就是定义了这些小格子的长度和先后顺序
语义是用来定义通信双方所要完成的操作
例如:主机给web服务器发送一个HTTP的GET请求报文,web服务器收到GET请求报文后对其进行解析,就知道了这是一个HTTP的GET请求报文,web服务器就在自身内部查找主机所请求的内容,并将所找到的内容封装在HTTP的响应报文中发送给主机,主机收到HTTP响应报文后对其进行解析和渲染显示。
这个例子就可以显示通信双方收到数据包后应完成怎样的操作。对于本例,这是HTTP协议的语义所定义的。
同步用来定义通信双方的时序关系。在上例中,必须由主机首先发送HTTP的GET请求报文给web服务器,web服务器收到主机发来的GET请求报文后,才可能给主机发送相应的HTTP响应报文,这是HTTP协议的同步所定义的。
服务
有了协议的概念,再来介绍服务
在协议的控制下,两个对等实体在水平方向的逻辑通信使得本层能够向上一层提供服务。
要实现本层协议,还需要使用下一层所提供的服务
很显然,协议是“水平”的,而服务是“垂直”的。
实体看得见下层提供的服务,但并不知道实现该服务的具体协议。下层的协议对上层的实体是“透明”的。
好比我们看得见手机为我们提供的各种服务,但我们只享受这些服务,而没有必要每个人都弄懂手机的工作原理。
在同一系统中相邻两层的实体交换信息的逻辑接口称为服务访问点SPA,它被用于区分不同的服务类型。
例如帧的“类型”字段、IP数据报的“协议”字段,TCP报文段或UDP用户数据报的“端口号”字段都是SPA。
上层要使用下层所提供的服务,必须通过与下一层交换一些命令,这些命令称为服务原语。
在计算机网络体系结构中,通信双方交互的数据包也有专门的术语,对等层次之间传送的数据包称为该层的协议数据单元PDU(Protocol Data Unit
)。
同一系统内层与层之间交换的数据包称为服务数据单元SDU(Service Data Unit
)
有问题欢迎评论或私信