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