计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】

一、以快递网络来引入分层思想

1.1 “分层” 的设计思想【将庞大而复杂的问题,转化为若干较小的局部问题】

      从我们最熟悉的快递网络出发,在你家附近会有一个快递终点站A,在其他的城市,也会有这种快递终点站,比如说快递终点站B,这些终点站会为顾客服务。快递终点站之间会有许多快递中转站组成的快递网络负责转运包裹,这样就组成了完整的快递网络。

      这个快递网络是一个非常复杂的系统,需要完成很多功能,比如说:

  • 货物打包
  • 取件、派件
  • 冷链存储(对于一些特殊的快件)
  • 包裹“路由”(给包裹规划转运路径)
  • 运输包裹的方式(采用飞机运输or火车运输还是汽车运输)
  • .........

      现实中的快递网络,采用了分层的设计思想,将庞大而复杂的问题,转化为若干较小的局部问题。详细请参考1.2小节。

1.2 快递网络的四层体系结构

      比如说我们将这种复杂的快递网络拆分成四层体系结构,快递终点站的最底层是运输部门, 往上是仓库部门,再往上是快递员,再往上是顾客。
      我们可以让不同的层次去承担不同的功能,比如说,第四层的顾客,让他实现货物打包的功能,快递员这一层让他实现取件派件的功能,仓库部门让他去实现冷链存储以及快件路由的功能,最下层的运输部门让他去实现包裹运输的功能。每一个快递终点站都需要具备这四个层次,相比之下,快递中转站只需要两个层次,只需要运输部门和仓库部门这两个功能。快递中转站与快递终点站会有公路铁路的连接。
      在这种体系结构之下,一个包裹的运输过程是这样的,首先,寄件的顾客对货物进行打包,然后快递员进行取件,取件完成后,请求仓库部门进行包裹的路由功能(即包裹准备发往哪个快递中转站),然后交由运输部门将包裹运输至快递中转站,包裹进入中转站之后,一般会入库,然后由仓库部门决定包裹下一站该去哪里,即等待下一次的路由,确定了包裹要发往的位置之后,运输部门开始进行包裹的运输,进而运输至下一个站点,到达快递终点站,然后入库,然后在此请求仓库部门进行包裹的再次路由,这个时候仓库部门将货物交给快递员,快递员进行派件交给顾客。这样,我们就完成了一次货物的运输工作。


可以看到,这个复杂的快递网络被拆分成了四个层次,每个层次会负责实现一个或者多个功能。 

  • 将复杂的快递网络在逻辑上划分为多个层次,并将各种“功能”安排在合适的层次中
  • 不同类型的节点,实现的功能层次可能不一样 

二、计算机网络要完成的功能 

2.1 计算机网络分层设计 

 

计算机网络是一个非常复杂的系统,要完成诸多功能,如:

  • 差错控制:确保数据在传输过程中不出错。
  • 流量控制:发送端的发送速率必须使接收端来得及接收,不要太快。
  • 分段和重装:发送端将要发送的数据块划分为更小的单位,并在接收端将其还原。
  • 复用和分用:发送端几个高层会话复用一条低层的连接,在接收端再进行分用。
  • 连接建立和释放:交换数据前先建立一条逻辑连接,数据传送结束后释放连接。

      那么应如何把这些功能组织起来才能让上面整个计算机网络结构看起来清晰明了呢?这就不得不用到我们在第一大节中学习到的分层设计思想了。
      比如说我们将计算机网络分成五个层次,如下:

注:从主机到路由器的线路是物理传输媒体(0层),一般是光纤或网线。

  • 将复杂的计算机网络在逻辑上划分为多个层次,并将各种“功能”安排在合适的层次中
  • 不同类型的节点,实现的功能层次可能不一样

我们可以发现,数据在计算机网络中的传输过程和货物(包裹)在快递网络中的传输过程类似。 

      我们思考这样一个问题,在第一大节提到的快递网络只能设计四层吗?答案:当然不是的,我们可以再增加一层,请看第2.2小节。

2.2 快递网络的五层体系结构

      我们在1.2小节中的四层快递网络体系结构中引入快递驿站这一层,如下图所示:


总结:

  • 分层结构的设计并不唯一,可以根据实际需求增加或减少层次
  • 同一个功能可以在多个层次中重复出现(比如说:我们可以将货物打包这项功能交由快递驿站来完成,这样一来的话,货物打包既出现在了顾客这一层,又出现在了快递驿站这一层)

2.3 三种常见的计算机网络体系结构

      根据2.2小节的思想,同样的道理,我们也可以将计算机网络设计成四层的结构以及七层的结构,如下图所示:

三、网络体系结构的概念

3.1 定义 

      计算机网络的体系结构(Network Architecture)是计算机网络的各层及其协议的集合,换种说法,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)。即:当我们设计一个计算机网络体系结构的时候, 我们只需要精确的定义出,分为几层,每一层需要实现哪些功能,每个功能需要由什么协议来实现。
      实现(implementation)是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题。

注意:
      这些功能究竟是用何种硬件或软件完成的,则是一个遵循这种体系结构的实现(implementation)的问题。体系结构的英文名词architecture的原意是建筑学或建筑的设计和风格。它和一个具体的建筑物的概念很不相同。例如,我们可以走进一个明代的建筑物中,但却不能走进一个明代的建筑风格之中。同理,我们也不能把一个具体的计算机网络说成是一个抽象的网络体系结构。总之,体系结构是抽象的,而实现则是具体的,是真正在运行的计算机硬件和软件。

3.2 具有五层协议的体系结构各层之间的关系

3.2.1 从水平来看各层之间的关系 

  • 实体:在计算机网络的分层结构中,第n层中的活动元素(软件+硬件)通常称为第n层实体。【比如说,我们要实现第五层的这些功能,那么会有一些对应的软件硬件模块工作在第五层,那么我们把涉及到第五层的软件硬件模块看作是第五层的活动元素,这些东西就是第五层的实体】不同机器上的同一层称为对等层,同一层的实体称为对等实体。
  • 协议:即网络协议(Network Protocol),是控制对等实体之间进行通信的规则的集合,是水平的。

百度百科解释网络协议:网络协议指的是计算机网络中互相通信的对等实体之间交换信息时所必须遵守的规则的集合。

网络协议是由三个要素组成:
(1)语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。(例如:协议中需要明确规定:发送方发送完数据后,接收方是否需要应答,以及应答的种类有哪些(如:传输成功、传输失败))
(2)语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。例如:协议控制信息(首部)部分占几个字节、每个字节是什么含义、协议的数据部分最多有多少字节。
(3)时序。时序是对事件发生顺序的详细说明。(也可称为“同步”)。
      人们形象地把这三个要素描述为︰语义表示要做什么,语法表示要怎么做,时序表示做的顺序。

 3.2.2 从垂直来看各层之间的关系

  • 接口:即同一节点内相邻两层的实体交换信息的逻辑接口,又称为服务访问点(Service AccessPoint,SAP) 。
  • 服务:服务是指下层为紧邻的上层提供的功能调用,它是垂直的。

3.3 数据的传输过程(水平视角、垂直视角)

3.3.1 水平视角

 我们不妨假设应用层分别实现L、M、N这几个功能,其中功能N是将数据压缩传输,以节省流量,基于这样的设计,发送方的第五层实体需要把数据进行压缩,压缩完成之后再交给下面的层次进行处理和传输。而接收方的第五层实体,它需要将传输过来的数据进行解压缩,解压之后,再把数据交给接收方。
因此,从水平视角来看,这两个用户感受不到数据被压缩和解压的过程。在他们俩看来,数据似乎是被原模原样的传输,但事实上,发送方、接收方的第五层实体分别做了压缩和解压缩的过程。

那么为了支持数据压缩这样的功能,我们不妨制定一个协议,这个协议叫做YSCS协议,即压缩传输协议,如下图所示:

      我们知道,一个协议它是规定水平方向上的两个对等实体之间的通信规则,为了实现压缩传输这个功能,我们需要在协议当中规定,发送方采用了何种数据压缩算法,并将使用的何种压缩算法记录在首部中,这是为了方便接收方根据首部来选择解压缩算法。
      从上面这个例子来看,从水平视角来看,对等实体之间,他们的通信需要遵循某种协议,而遵循这个协议的目的是为了实现某种功能。

相信理解了上面这个例子之后,我们便可以知道: 计算机网络为什么要分层?为什么要制定协议?
答案:计算机网络功能复杂→采用分层结构,将诸多功能合理地划分在不同层次→对等层之间制定协议,以实现功能。

 

3.3.2 垂直视角

      假设左边这个用户要给右边这个用户发送一些数据,那这些数据首先会交给应用层进行处理,应  用层会实现某些功能,为了实现某些功能,应用层和应用层之间通信需要遵循某种协议,因此就需要给这些数据增加协议的首部,我们不妨把它称为应用层的首部。
      应用层按照协议的规定做了相应地处理之后,又会把带有应用层首部的数据交给传输层,传输层和传输层之间同样也要遵循某种协议,因此数据到达传输层后也会增加首部。
      同理,数据在网络层和数据链路层时也会添加对应的首部,紧接着,数据链路层将带有四层(应用层、传输层、网络层、数据链路层)首部或尾部信息的数据交给物理层,在这种五层体系结构当中,物理层不会对这些数据进行处理,他只负责将这些二进制数据原模原样的传输到传输媒体上,这样就可以让数据到达下一个节点。
      数据到达下一个节点(路由器)之后,首先交给物理层,紧接着物理层再交给数据链路层,该层的实体,会根据本层的协议规定,检查首部以及尾部的这些控制信息,然后根据这些控制信息,完成数据链路层需要完成的功能。
      接下来数据链路层会将数据会交给网络层进行处理,网络层通过本层的协议控制信息去实现本层需要完成的功能,具体来说,这层要实现的功能是路由,也就是数据分组的存储转发功能,所以第三层的控制信息会包含发送方以及接收方的IP地址,路由器的第三层实体就会根据这些控制信息去决定下一跳应该将数据分组转发到什么位置。

      路由器的第三层实体会对H3的控制信息做简单的处理【目前先不展开讨论】,处理完成之后,会将数据分组交给数据链路层,数据链路层会根据对等实体之间的协议去增加首部或尾部的控制信息,然后再把这些数据交给物理层,物理层再把这些数据通过传输媒体传给下一个节点。

      接收方主机物理层接收到这些数据之后,会将其交给数据链路层,后面的过程与前面的类似,逐层往上处理,逐层拆掉首部或尾部控制信息,每一层的实体只关注本层的控制信息,最终交给用户的是一个干净的、没有首部信息的数据。

3.4 PDU、SDU、PCI的概念 

 

四、总结

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/876192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Mac虚拟机Parallels Desktop 20 for Mac破解版发布 完整支持 Windows 11

Parallels Desktop 20 for Mac 破解版是一款虚拟化软件,允许用户在 Mac 设备上运行 Windows 和其他操作系统。Parallels Desktop 20 for Mac 特别适合需要同时使用 macOS 和 Windows 应用的用户,常用于开发、设计、办公等场景。 自从OpenAI推出ChatGPT之…

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一:效果图 二:添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三:下载,保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…

利士策分享,情商:解锁成功与幸福的隐形钥匙

利士策分享,情商:解锁成功与幸福的隐形钥匙 在这个快节奏、高压力的时代,我们每天都在与形色色的人打交道, 无论是职场上的合作伙伴、生活中的亲朋好友,还是网络上的虚拟社群, 人际关系的质量直接影响着…

尚品汇-订单拆单、支付宝关闭交易、关闭过期订单整合(五十)

目录: (1)拆单接口 (2)取消订单业务补充关闭支付记录 (3)支付宝关闭交易 (4)查询支付交易记录 (5)PaymentFeignClient 远程接口 &#xff08…

CrossOver24.0.5破解版免费下载和永久激活图文教程,苹果电脑怎么玩《黑神话:悟空》

CrossOver24可以玩《黑神话:悟空》么?答案是可以的。 1、首先我们需要下载CrossOver24软件。 CrossOver24安装包夸克网盘链接:https://pan.quark.cn/s/35e64d746778 2、下载完成后,我们双击CrossOver.pkg开始安装,然…

Uniapp + Vue3 + Vite +Uview + Pinia 实现购物车功能(最新附源码保姆级)

Uniapp Vue3 Vite Uview Pinia 实现购物车功能(最新附源码保姆级) 1、效果展示2、安装 Pinia 和 Uview3、配置 Pinia4、页面展示 1、效果展示 2、安装 Pinia 和 Uview 官网 https://pinia.vuejs.org/zh/getting-started.html安装命令 cnpm install pi…

搭建Windows下的Rust开发环境

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 2.1.1 安装vs_buildtools 在Windows系列操作系统中,Rust开发环境需要依…

机器学习课程学习周报十二

机器学习课程学习周报十二 文章目录 机器学习课程学习周报十二摘要Abstract一、机器学习部分1.1 fGAN: General Framework of GAN1.2 CycleGAN1.3 Auto-Encoder1.4 概率论复习(一) 总结 摘要 本周的学习内容涵盖了fGAN框架、CycleGAN、自编码器以及概率…

Linux | 探索 Linux 信号机制:信号的产生和自定义捕捉

信号是 Linux 操作系统中非常重要的进程控制机制,用来异步通知进程发生某种事件。理解信号的产生、阻塞、递达、捕捉等概念,可以帮助开发者更好地编写健壮的应用程序,避免由于未处理的信号导致程序异常退出。本文将带你从基础概念开始&#x…

数据结构基础详解:哈希表【C语言代码实践篇】开放地址法__拉链法_哈希表的创建_增删查操作详解

文章目录 1.哈希表代码实现之开放地址法1.1 开放地址法创建哈希表1.2 开放地址法之查找1.3 开放地址法之插入1.4 开放地址法之删除 2.哈希表代码实现之链地址法(拉链法)2.1 链地址法之创建哈希表2.2 链地址法之查找2.3 链地址法之插入2.4 链地址法之删除 1.哈希表代码实现之开放…

Mac电脑剪切板在哪里找 苹果电脑剪切板打开教程【详解】

Windows 和 Mac 电脑在使用方式上存在一些差异,许多习惯了 Windows 系统的用户初次接触 Mac 时可能会对某些操作感到困惑。比如,很多人会问:Mac 上的剪贴板在哪里?如果你也有这样的疑问,不妨看看下面这篇关于如何在 Ma…

MySQL查询执行(四):查一行也很慢

假设存在表t,这个表有两个字段id和c,并且我在里面插入了10万行记录。 -- 创建表t CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB;-- 通过存储过程向t写入10w行数据 delimiter ;; create procedure idat…

Android Studio新建工程(Java语言环境)

一、新建工程流程(java语言环境) 1、File->New->New Project 2、选择“Empty Views Activity” -> Next 3、创建项目名称/项目路径/语言环境 1)项目名称:使用默认Name 或 修改Name 2) Package name:每个项目的这个名称唯一&…

饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

摘要:本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online(Paimon x StarRocks,共话实时湖仓架构)上的分享。主要分为以下三个内容: 饿了么实时数仓演进之…

self-play RL学习笔记

让AI用随机的路径尝试新的任务,如果效果超预期,那就更新神经网络的权重,使得AI记住多使用这个成功的事件,再开始下一次的尝试。——llya Sutskever 这两天炸裂朋友圈的OpenAI草莓大模型o1和此前代码能力大幅升级的Claude 3.5&…

手机玩机常识____展讯芯片刷机平台ResearchDownload的一些基本常识与问题解决

展讯ResearchDownload工具 展讯芯片的刷机工具--ResearchDownload下载工具"是一款专为用户设计的高效、便捷的下载管理软件,它能够帮助用户快速、稳定地从互联网上获取各种文件。这款工具以其强大的功能和良好的用户体验,在众多展讯芯片下载工具中脱…

Python [ GUI编程自学 ],虽然但是,还是想出一个系列

Python [ GUI编程自学 ],虽然但是,还是想出一个系列。 目前跟着哔站自学完毕,皮毛了解了,本文GUI一系列文章请查看Python_GUI编程专栏! 本篇主要介绍了事件处理机制:事件处理原理(感觉和之前学的…

解决win11 使用wsl工具,不能使用systemctl

使用systemctl命令出现报错: System has not been booted with systemd as init system (PID 1). Can‘t operate. 默认情况下并不启用 systemd,而是使用了其他轻量级的初始化系统(SysV init初始化系统)。这导致一些需要 system…

利用未标记数据的半监督学习在模型训练中的效果评估

数据科学家在实践中经常面临的一个关键挑战是缺乏足够的标记数据来训练可靠且准确的模型。标记数据对于监督学习任务(如分类或回归)至关重要。但是在许多领域,获取标记数据往往成本高昂、耗时或不切实际。相比之下,未标记数据通常…

Java获取随机数

在Java中获取随机数通常会使用java.util.Random类或者Math.random()方法 1.java.util.Random java.util.Random类用于生成伪随机数。 // 使用无参构造方法创建Random对象Random rand new Random();// 生成一个[0, 100)范围内的随机整数int randomInt rand.nextInt(100);Sys…