【计算机网络自顶向下方法】深入理解计算机网络分层和封装模型_TakingCoding4Granted的博客-程序员秘密

技术标签: 网络  http  网络协议  计算机网络  

1. 引言

对于计算机网络的学习,很多人会觉得困难,主要是各类协议众多,而且相关知识点较为分散。对此,有人肯定会问是否有任何贯穿始终的主线可以让计算机网络的学习更加容易把握。答案是肯定的,这条主线就是协议的分层模型和数据包的封装模型。

2. 分层

在正式讨论所谓协议的分层或数据包的封装模型前,下面先就一个实际的案例给出一个类比,以便后续针对计算机网络协议的分层或数据包封装进行讨论。

假定你需要向别人描述航空运输系统,做过飞机的读者应该都知道,因为整个过程涉及票务、安检、托运、检票等环节,还涉及飞行员、飞机、交通管控员等参与方,所以想要准确的描述整个过程还是比较困难的。

实际上,描述整个过程的一个方式可能是借由你从起点至终点所采取的一系列行为:

  • 票务中心买票;
  • 安检;
  • 托运行李;
  • 登机口检票登机;
  • 飞机起飞;
  • 飞机根据路线前往目的地;
  • 飞机降落;
  • 出机口下飞机;
  • 提取行李;
  • 票务中心投诉(可能)。

下图描述了上述的一系列行为:

在这里插入图片描述

在上面的类比案例中,航空运输系统将乘客从起点载往终点的过程类似于计算机网络中将数据包从源主机发送至目的主机的过程。

实际上,这还不是我们希望得到的类比。继续回头观察一下上图可以发现:

  • 起点和终点都有票务功能;

  • 起点和终点都为买过票的乘客提供了行李功能;

  • 起点和终点都为既买过票又提供了行李服务的乘客提供了登机或出仓功能;

  • 对于既买过票又托运好行李还完成登机的乘客,其可以随着飞机起飞和降落。

上述分析启发我们可以通过一种横向的视角来看待上图中的一系列行为及相关功能。下图将航空运输系统的功能分成了多层,每一层及其下面的所有层都实现了某种功能或服务。

在这里插入图片描述

例如:

  • 票务层和其下所有层实现了将乘客从出发机场的柜台送往到抵达机场柜台的功能;
  • 行李层和其下所有层实现了乘客将行李从出发机场托运到抵达机场提取的功能1
  • 机口层和其下所有层实现了将乘客及其随身包裹从出发机场登机口送往抵达机场出机口的功能;
  • 跑道层和其下所有层实现了将乘客及其随身包裹从出发机场跑道送往抵达机场跑道的功能。

因此,我们可以说,每一层都通过结合以下两种方式来向上提供服务:

  1. 实现当前层的特有功能(例如:在机口层,该特有功能就是登机和出仓);
  2. 使用和当前层紧邻的下层服务(例如:机口层使用跑道层提供的起飞、降落服务)。

上述这种分层架构使得在讨论一个大型复杂系统的特定部分时有章可循;更重要的是,这种架构分层也天然地引入了模块化,使得修改每一层所提供服务的实现也更为简单。

具体地,只要当前层向上一层始终提供相同的服务,同时当前层始终使用相同的下层服务,那么即使当前层提供的服务所基于的实现2发生了改变,整个系统其他部分都可以保持不变。针对处于不断迭代中的大型复杂系统,这种改变服务的实现方式而不影响系统其他组成部分的能力也是分层架构的一大优势。

协议分层

下面基于上述通过类比引出的分层架构来讨论计算机网络协议的分层模型。实际上,在设计计算机网络之初,设计者们也是采用了分层的方式,即每个协议都属于某一特定层;类似地,每一层都通过结合下面两种方式来提供服务:

  1. 实现当前层的特定功能;
  2. 使用和当前层紧邻的下层服务。

例如:某第 n n n 层协议提供的服务可能包括将报文可靠地从网络的一端传输至另一端。实现该服务可能是通过:

  1. 使用某第 n − 1 n-1 n1 层协议提供的不可靠报文传输服务;
  2. 使用该第 n n n 层协议自身为应对不可靠报文传输而实现的丢包检测和报文重传等功能。

需要说明的是,处于不同层的所有协议被统称为协议栈,如下图所示,一般意义上当今互联网的协议栈共计包含 5 5 5 层:物理层、链路层、网络层、传输层和应用层。

在这里插入图片描述

应用层

网络应用程序及其直接使用的协议处于应用层,互联网的应用层包含(不限于下列协议)多个协议:

  • HTTP 协议:用于 Web 文件的请求和传输;
  • SMTP 协议:用于传输电子邮件报文;
  • FTP 协议:用于两台主机之间传输文件;
  • DNS 协议:用于将域名转换为 IP 地址。

应用层协议通常分布于大多数的互联网终端,一般由某终端上使用某应用层协议的应用程序和另一台使用相同协议的应用程序进行数据包的交换。一般将应用层的数据包称为报文(message)。

传输层

互联网的传输层负责在两个应用之间传输应用层报文,互联网的传输层有两个协议,即 TCP 和 UDP ,其中:

  • TCP 向应用程序提供面向连接的服务,该服务可以确保应用层报文能可靠地传输至互联网的目的位置,TCP 还能实现收发双方的速率匹配即流控;同时,TCP 还可以将长的报文分割成更短的数据段并且提供拥塞控制机制,这意味着发送端可以在网络拥堵时降低向对端的发送速率;
  • UDP 向应用程序提供面向无连接的服务,该协议不保证可靠的数据传输,也不提供流控或拥塞控制等机制。

一般将传输层的数据包称为数据段(segment)。

网络层

一般将网络层的数据包称为数据报(datagram),网络层负责将数据报从一台主机传输至另一台主机。互联网中一台源主机上的传输层协议(TCP 或 UDP)会将传输层的数据段和目的主机 IP 传递给网络层,这就好比现实中你在投递给邮政服务的信件上写上收件人地址,然后网络层会将数据段传输至目的主机上的传输层。

互联网的网络层包括著名的 IP 协议,该协议存在于所有具有网络层互联网终端设备中,该协议除了定义数据报中的各个数据域,还规定了终端和路由器应该如何处理这些数据域。

互联网的网络层还包括各种路由协议,路由协议用于确定数据报从源端发往目的端的路由。

链路层

互联网的网络层用于将数据报经由一系列路由器从源端路由至目的端。为了能将数据包从路由线路上的一个节点(主机或路由器)发送至下一个节点,网络层需要依赖链路层的服务。具体地,在每一个节点处,网络层将数据报向下传递至链路层,链路层会将该数据报沿着路由发送至下一个节点,在下一个节点中,链路层将数据报向上传递至网络层。

链路层提供的服务取决于链路上使用的链路层协议。常见的链路层协议包括以太网、WiFi 等。需要指出的是,由于一个数据报从源端到目的端的路由需要经过多条链路,因此在路由的不同链路上,数据报可能由不同的链路层协议处理,也就是说根据链路层协议的不同,其提供给网络层的服务也不同。

一般将链路层的数据包称为数据帧

物理层

尽管链路层的任务是将整个数据帧从一个节点传输至另一个节点,而物理层则负责将数据帧中的每一位从一个节点传输至另一个节点。

同链路层类似,物理层的协议也和链路有关同时取决于链路的传输介质(例如:双绞线、单模光纤)。

OSI 模型

实际上,互联网协议栈并非唯一的协议栈。早在上世纪 70 70 70 年代,国际标准化组织(ISO)就提出了计算机网络的 7 7 7 层模型,该模型被称为开放系统互连(Open Systems Interconnection:OSI)模型。虽然 OSI 模型成形于互联网协议的萌芽期间,当时也只是众多处于研发阶段的协议簇之一,但是由于 OSI 模型诞生之初就被众多高校等机构采纳用于编写计算机网络相关教程,因此在现今即使互联网协议栈已成既定事实的背景下,OSI 模型仍存在于不少教材和培训课程中。

如上图所示,OSI 参考模型的 7 7 7 层分别是:应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层,OSI 参考模型中和互联网协议栈同名的 5 5 5 层功能基本相同,因此这里仅额外说明一下 OSI 参考模型中特有的两层,即表示层和会话层。

  • 表示层提供的服务主要是让通信的两个应用程序可以解译所交换数据的含义;
  • 会话层提供的服务主要用于数据交换的定界和同步,包括设置检查点和建立恢复机制的方法。

有些读者可能会问,既然互联网的协议栈中没有上述两层,这是否意味着 OSI 参考模型中的这两层无关紧要?如果应用程序的确需要这两层提供的服务该怎么办?

实际上,互联网协议栈的设计者对此的态度都是这取决于开发者自身,即如果开发者认为两层所提供的服务重要,或者其应用程序中确需这两层对应的服务,那么开发者自身应该在开发应用程序时将相关服务纳入其中。

3. 封装

下图显示了数据从发送端到接收端的物理路径,即数据先沿着发送端的协议栈一直向下,然后通过先上后下的顺序经过中间的链路层交换机和路由器,最终沿着接收端的协议栈向上到达应用程序。

值得注意的是,路由器和链路层交换机都没有实现协议栈的所有层,而仅仅实现底下的若干层。如下图所示,链路层交换机仅仅实现了协议栈中的第 1 1 1 层和第 2 2 2 层,而路由器还额外实现了第 3 3 3 层,所以链路层交换机一般称为 2 2 2 层交换机,而路由器一般被称为 3 3 3 层交换机。

值得特别注意的是,发送端和接收端的主机都实现了协议栈的所有 5 5 5 层,这实际上体现了互联网这一极度复杂系统的设计哲学,即将复杂性尽可能放在计算机网络的边界。

在这里插入图片描述

实际上,通过上图,这里最想详细介绍的是计算机网络中另一个重要的概念——封装。在发送端,应用层报文 M \text{M} M 会先传递至传输层,然后传输层会在报文前加上额外的信息,即传输层的头部 H t \text{H}_t Ht ,该头部信息后续会被接收端传输层使用。这里应用层的报文和传输层的头部共同组成了传输层数据段。这里就可以说传输层封装了应用层的报文。其中传输层的头部可能包含了能让接收端传输层将报文传递给指定应用程序的信息,或者指示报文传输过程中是否发生误码的信息等。

传输层接着会把数据段传递给网络层,网络层又会加上自身的头部 H n \text{H}_n Hn ,该头部信息中会包含收发两端的地址信息,传输层的数据段和网络层头部共同组成了网络层数据报。

网络层又会把数据报传递给链路层,后者也会在加上自身的头部 H l \text{H}_l Hl 后创建链路层数据帧。

由上述分析可以发现,每一层的数据包都包含两类信息:头部信息和数据信息,而数据信息一般是来自上一层的数据包。

为了让读者更好地理解上述封装的概念,这里通过一个寄快递的例子来说明。快递中装的物品就是报文,快递的包装就是报文头,头部有收件人和发件人的信息。


  1. 需要注意的是,行李层仅为已经购买机票的乘客提供服务。

  2. 需要注意的是,改变当前层的服务和改变服务的实现方式是不同的概念。例如:登机和出仓服务原先是基于性别和年龄的,可以将其改为基于身高,而更改前后航空运输系统的其他部分都可以保持不变。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_37780776/article/details/122795022

智能推荐

php 短信验证码30分钟,php下发短信验证码60秒简单验证_weixin_39854369的博客-程序员秘密

下发短信验证码,除了注册就是验证手机号简单实现原理就是用手机号和一个键作为key存到缓存里,用户请求的时候,验证这个手机号是不是已经申请过key*(即已手机号为缓存的key有没有,)如果有,并且当前时间与当时请求时间在60秒之内,那就不要在请求发送短信接口了。另外,如果发送成功了,要设置一个验证码的时间有效期,一般10分钟。然后在去对应的找回密码或者是注册中调用一下这个对应的memkey就可以。下...

WDA ALV组件复用自定义button,单元格修改_Gong JX的博客-程序员秘密

WDA ALV组件中的TOOLBAR是ON_FUNCTION事件在ALV中添加自定义按钮* table toolbar DATA: LO_FUN_CALL TYPE REF TO CL_SALV_WD_FUNCTION, LO_BTN_CALL TYPE REF TO CL_SALV_WD_FE_BUTTON. LO_FUN_CALL = WD_THIS->ALV_CONFIG_TABLE->IF_SALV_WD_FUNCTION_SETTINGS~.

数据分析EDA及代码实现_eda代码_zhangxiaolinxin的博客-程序员秘密

EDA目标(1)EDA的价值主要在于熟悉数据集,了解数据集,对数据集进行验证来确定所获得数据集可以用于接下来的机器学习或者深度学习使用。(2)当了解了数据集之后我们下一步就是要去了解变量间的相互关系以及变量与预测值之间的存在关系。(3)引导数据科学从业者进行数据处理以及特征工程的步骤,使数据集的结构和特征集让接下来的预测问题更加可靠。(4)完成对于数据的探索性分析,并对于数据进行一些图表或...

java开发经典文章_dsj188的博客-程序员秘密

2006-02-25缩略显示换个角度思考:div+css布局入门换个角度思考:div+css布局入门 (转载)你正在学习CSS布局吗?是不是还不能完全掌握纯CSS布局?通常有两种情况阻碍你的学习:  第一种可能是你还没有理解CSS处理页面的原理。在你考虑你的页面整体表现效果前,你应当先考虑内容的语义和结构,然后再针对语义、结构添加CSS。这篇文章将告诉你应该怎样

技术开贴_neauzmc的博客-程序员秘密

终于鼓起勇气自己申请了一个博客,作为一个危急shu

随便推点

黑马程序员_Java学习日记23_高新技术2_cdestiny的博客-程序员秘密

----------------------android培训、java培训、期待与您交流! ---------------------1.反射概述Class类代表Java类,它的各个实例对象又分别对应什么?a.对应各个类在内存中的字节码。b.一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容是

从蚂蚁金服的BI和大数据团队建设,看透BI发展,再不懂就落伍了_bi团队_Leo.yuan的博客-程序员秘密

hello,大家好,我是BI,是的,我就是那个经常被大家提到的BI······下面我将正式、隆重地向各位做下自我介绍。BI是什么江湖上关于“BI是什么”的传说挺多的:BI(商业分析师);BI(可视化分析软件);BI······大家说的都有道理,不过大家提到那个可能并不是全部的BI……众所周知,BI的全称是Bussiness Intelligent(商业智能),也就是说:BI致力于实现商业智能:作为将数据转化为信息所需的流程、技术和工具,将信息转换为知识,将知识转化为计划,从而驱动有.

剑指offer -- 二维数组的查找_涵sue的博客-程序员秘密

题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。package array;public class Find { public boolean Find(int target, int [][] array) { /* *...

SML-Babblelab_Numlogn的博客-程序员秘密

Babblelab实验背景“图灵测试”是指测试者在与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。本实验设计了一个算法,使得机器能够通过图灵测试。即通过对所提供的文本进行分析,根据每个词之后的一定词数范围内的词出现的频率决定机器所

MapReduce的数据去重功能_不自律的自律_input的博客-程序员秘密

实验材料及说明现有某电商网站用户对商品的收藏数据,记录了用户收藏的商品id以及收藏日期,文件名为buyer_favorite。buyer_favorite包含:买家id,商品id,收藏日期这三个字段,数据以“\t”分割,样本数据及格式如下:买家ID 商品ID 收藏日期10181 1000481 2010-04-04 16:54:3120001 1001597 2010-04-07 15:07:5220001 1001560 2010-04-07 15:08:272

推荐文章

热门文章

相关标签