计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
一、以快递网络来引入分层思想
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的概念
四、总结
相关文章:

计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
一、以快递网络来引入分层思想 1.1 “分层” 的设计思想【将庞大而复杂的问题,转化为若干较小的局部问题】 从我们最熟悉的快递网络出发,在你家附近会有一个快递终点站A,在其他的城市,也会有这种快递终点站,比如说快递…...

Vite + Electron 时,Electron 渲染空白,静态资源加载错误等问题解决
问题 如果在 electron 里直接引入 vite 打包后的东西,那么有些资源是请求不到的 这是我的引入方式 根据报错,我们来到 vite 打包后的路径看一看 ,修改一下 dist 里的文件路径试了一试 修改后的样子,发现是可以的了 原因分析 …...
ZAB协议(算法)
一、ZAB(ZooKeeper Atomic Broadcast)介绍 ZAB 即 ZooKeeper Atomic Broadcast,是 ZooKeeper 实现分布式数据一致性的核心算法。它是一种原子广播协议,用于确保在分布式环境中,多个 ZooKeeper 服务器之间的数据一致性。…...

多个音频怎么合并?把多个音频合并在一起的方法推荐
多个音频怎么合并?无论是制作连贯的播客节目还是将音乐片段整合成专辑,音频合并已成为许多创作者的常见需求。通过有效合并音频,可以显著提升项目的整体质量,确保内容的连续性和一致性。然而,合并后的文件通常比原始单…...
【Django】Django Class-Based Views (CBV) 与 DRF APIView 的区别解析
Django Class-Based Views (CBV) 与 DRF APIView 的区别解析 在 Django 开发中,基于类的视图(Class-Based Views, CBV)是实现可重用性和代码结构化的利器。而 Django REST Framework (DRF) 提供的 APIView 是针对 API 开发的扩展。 一、CBV …...

如何增加Google收录量?
想增加Google收录量,首先自然是你的页面数量就要多,但这些页面的内容也绝对不能敷衍,你的网站都没多少页面,谷歌哪怕想收录都没办法,当然,这是一个过程,持续缓慢的增加页面,增加网站…...
leetcode练习 格雷编码
n 位格雷码序列 是一个由 2n 个整数组成的序列,其中: 每个整数都在范围 [0, 2n - 1] 内(含 0 和 2n - 1)第一个整数是 0一个整数在序列中出现 不超过一次每对 相邻 整数的二进制表示 恰好一位不同 ,且第一个 和 最后一…...

【LLM:Gemini】文本摘要、信息提取、验证和纠错、重新排列图表、视频理解、图像理解、模态组合
开始使用Gemini 目录 开始使用Gemini Gemini简介 Gemini实验结果 Gemini的多模态推理能力 文本摘要 信息提取 验证和纠错 重新排列图表 视频理解 图像理解 模态组合 Gemini多面手编程助理 库的使用 引用 本文概述了Gemini模型和如何有效地提示和使用这些模型。本…...

CMS之Wordpress建设
下载 https://cn.wordpress.org/ 宝塔安装Wordpress 创建网站 上传文件、并解压、剪切文件到项目根目录 安装 -> 数据库信息 -> 标题信息 http://wordpress.xxxxx.com 登录 http://wordpress.xxxxxxxxx.com/wp-admin/ 1. 主题(模板) wordpress-基本使用-02-在主题…...
使用Neo4j存储聊天记录的简单教程
引言 在当今的数据驱动世界中,关系型数据库有时难以处理复杂的、相互关联的数据集。Neo4j作为一款开源图数据库,以其高效管理高连接数据的能力而广受欢迎。本篇文章将详细介绍如何使用Neo4j来存储聊天信息历史,引导您在实际项目中利用其强大…...
前端面试常考算法
快速排序 #include<iostream> #include<cstdio> using namespace std; const int N 100005; int a[N];void quick_sort(int a[], int l, int r) {if (l > r) return;int x a[l r >> 1];int i l - 1, j r 1;while (i < j) {while (a[i] < x);…...
【机试准备】常用容器与函数
Vector详解 原文链接:【超详细】C vector 详解 例题,这一篇就够了-CSDN博客 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种…...

Base 社区见面会 | 新加坡站
活动信息 备受期待的 Base 社区见面会将于 Token2049 期间在新加坡举行,为 Base 爱好者和生态系统建设者提供一个独特的交流机会。本次活动由 DAOBase 组织,Base 和 Coinbase 提供支持,并得到了以下合作伙伴的大力支持: The Sand…...
麒麟操作系统搭建Nacos集群
Nacos 集群搭建 2.4.2 环境介绍 操作系统Kylin Linux Advanced Server V10 (Lance)Kylin Linux Advanced Server V10 (Lance)Kylin Linux Advanced Server V10 (Lance)内核版本Linux 4.19.90-52.22.v2207.ky10.aarch64Linux 4.19.90-52.22.v2207.ky10.aarch64Linux 4.19.90-52…...
Imagination推出性能最高且具有高等级功能安全性的汽车GPU IP
Imagination DXS GPU 进一步扩大其在汽车领域的领先地位 产品亮点 : 峰值性能比 Imagination 上一代汽车 GPU 提高了 50%,可扩展至 192GPixel/s、6 TFLOPS 和 24TOPS计算工作负载的性能提升多达十倍引入创新的分布式功能安全机制,以最小的…...
端口大全说明,HTTP,TCP,UDP常见端口对照表
HTTP,TCP,UDP常见端口对照表,下面罗列了包括在Linux 中的服务、守护进程、和程序所使用的最常见的通信端口小贴士:CtrlF 快速查找 Http端口号(点标题可收缩或展开) No1.最常用端口 端口号码/层名称注释1tcpmuxTCP端口服务多路复用5rje远程作…...
dplyr、tidyverse和ggplot2初探
dplyr、tidyverse 和 ggplot2 之间有紧密的联系,它们都是 R 语言中用于数据处理和可视化的工具,且都源于 Hadley Wickham 的工作。它们各自有不同的功能,但可以无缝协作,帮助用户完成从数据处理到数据可视化的工作流。以下是它们之…...
pandas:读取各类文件方法以及爬虫时json数据保存
文件的读取与写入 | 常用读文件方法 | 说明 | | -------------- | ---------------- | | read_csv | 读取CSV文件 | | read_excel | 读取Excel文件 | | read_html | 读取网页HTML文件 | | read_table | 通用读取方法 | | 常用写文…...

二、(JS)JS中常见的键盘事件
一、常见的键盘事件 onkeydown 某个键盘按键被按下onkeypress 某个键盘按键被按下onkeyup 某个键盘按键被松开 二、事件的执行顺序 onkeydown、onkeypress、onkeyup down 事件先发生;press 发生在文本被输入;up …...
【CSS】样式水平垂直居中
行内元素: 如果被设置元素为文本、图片等行内元素时,水平居中是通过给父元素设置 text-align:center <body> <div class"txtCenter">我想要在父容器中水平居中显示。</div> </body>div是文本元素的父元素 因此我们对…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...