计算机网络:数据交换方式
计算机网络:数据交换方式
- 电路交换
- 分组交换
- 报文交换
- 传输对比
本博客介绍计算机之间数据交换的三种方式,分别是电路交换、分组交换以及报文交换。
电路交换
我们首先来看电路交换,在电话问世后不久,人们就发现要让所有的电话机都两两相连接是不现实的。例如两部电话只需要用一对电线就能够互相连接起来,但若有 5 部电话要两两相连,则需要 10 对电线。
当电话机的数量很大时,这种连接方法需要的电线数量就太大了。例如,如果有 n 部电话机需要两两相连,那么一共需要多少对电线呢?答案是(n - 1) * n / 2。
于是人们认识到要使得每一部电话能够很方便地和另一部电话进行通信,就应当使用一个中间设备将这些电话连接起来。这个中间设备就是电话交换机,每一部电话都连接到电话交换机上:
可以把电话交换机简单的看成是一个有多个开关的开关器,可以将需要通信的任意两部电话的电话线路按需接通,从而大大减少了连接的电话线数量。
当电话机的数量增多时,就需要使用很多彼此连接起来的电话交换机来完成全网的交换任务。用这样的方法就构成了覆盖全世界的电信网,电话交换机接通电话线的方式称为电路交换。
从通信资源的分配角度来看,交换就是按照某种方式动态的分配传输线路的资源。我们来看下面这个电路交换的示意图:
应当注意的是用户线归电话用户专用,而电话交换机之间拥有的大量中继线则是许多用户共享的。
电路交换有以下三个步骤:
-
建立连接,也就是分配通信资源。例如在使用电路交换打电话之前,必须先拨号请求建立连接。当被叫用户听到电话交换机送来的拨号音并接通,从主叫端到被叫端就建立了一条连接,也就是一条专用的物理通路,这条连接保证了双方通话时所需的通信资源,而这些资源在双方通信时不会被其他用户占用。
-
通话,也就是主叫和被叫双方互相通电话。在整个通话期间,之前建立连接所分配的通信资源始终被占用。
-
释放连接,也就是通话完毕挂机后,电话交换机释放刚才使用的这条专用的物理通路。换句话说是把刚才占用的所有通信资源归还给电信网,
这种必须通过建立连接(占用通信资源),通话(一直占用通信资源),释放连接(归还通信资源)三个步骤的交换方式,称为电路交换
那么如果使用电路交换来传送计算机数据是否可行?
应该说,尽管采用电路交换可以实现计算机之间的数据传送,但是线路的传输效率往往很低,这是因为计算机数据是突发式的出现在传输线路上的。
突发性:
计算机在传输数据时,不会一直在信道中传输数据,而是间歇性的传输数据
计算机数据具有突发性,这导致使用电路交换传送数据时通信线路的利用率很低,真正用来传送数据的时间往往不到10%,甚至不到 1%。已被用户占用的通信线路资源在绝大部分时间里都是空闲的。
试想一下,这种情况,当用户正在输入和编辑一份带传输的文件时,用户所占用的通信资源暂时未被利用,该通信资源也不能被其他用户利用,宝贵的通信线路资源白白被浪费了。因此,计算机网络通常采用分组交换而不是电路交换。
分组交换
假设这是因特网的一部分,在因特网中最重要的分组交换机就是路由器,他负责将各种网络互联起来,并对接收到的分组进行转发,也就是进行分组交换。
我们来看这样一个例子,假设主机 H6 的用户要给主机 H2 的用户发送一条消息,通常我们把表示该消息的整块数据称为一个报文。
在发送报文之前,先把较长的报文划分成为一个更小的等长数据段,在每一个数据段前面加上一些由必要的控制信息组成的手部后,就构成了一个分组,也可简称为包,相应的手部也可称为包头。
那么添加手部的作用是什么?这不是额外加大了带传输的数据量吗?
实际上手部起着非常关键的作用,相信大家至少能想到手部中肯定包含了分组的目的地址,否则分组传输路径中的各分组交换机,也就是各路由器就不知道如何转发分组了。分组交换机收到一个分组后,先将分组暂时存储下来,再检查其手部,按照手部中的目的地址进行查表转发,找到合适的转发接口,通过该接口将分组转发给下一个分组。
主机 H6 将所构造出的各分组依次发送出去,各分组经过途中各分组交换机的存储、转发,最终到达主机H2。
主机 H2 收到这些分组后,去掉他们的手部,将各数据段组合还原出原始报文:
需要说明的是,为了初学者容易理解,在本例中我们只演示出了分组传输过程中的两种情况。一种是各分组从源站到达目的站可以走不同的路径,也就是不同的路由。另一种是分组乱序,也就是分组到达目的站的顺序不一定与分组在源站的发送顺序相同。对于可能出现的分组丢失、误码重复等问题并没有演示,这些内容将在以后详细介绍。
在上述的分组交换过程中,发送方所要完成的任务是构造分组和发送分组。
路由器,也就是分组交换机,所要完成的任务是缓存分组和转发分组,简称为存储转发。
接收方所要完成的任务是接收分组和还原报文。
报文交换
与分组交换类似,报文交换中的交换节点也采用存储转发方式,但报文交换对报文的大小没有限制,这就要求交换节点需要有较大的缓存空间。需要注意的是,报文交换主要用于早期的电报通信网,现在较少使用,通常被较先进的分组交换方式所取代。因此我们不再详细介绍报文交换了。
传输对比
接下来我们对电路交换、报文交换、分组交换这三种交换方式进行一下对比。
假设a、b、c、 d 是分组传输路径上所要经过的四个节点,纵坐标为时间。
电路交换:
对于电路交换通信之前首先要建立连接。连接建立好之后就可以使用已建立好的连接进行数据传送。数据传送结束后需要释放连接以归还之前建立连接所占用的通信线路资源。
报文交换:
对于报文交换,可以随时发送报文,而不需要事先建立连接,整个报文先传送到相邻节点,交换机全部存储下来后进行查表转发到下一个节点交换机。
分组交换:
对于分组交换,可以随时发送分组,而不需要事先建立连接。构成原始报文的一个分组,依次在各节点交换机上存储、转发。各节点交换机在发送分组的同时还缓存接收到的分组。
-
电路交换:一旦建立连接,中间的各节点交换机就是直通形式的比特流,可以直达终点。
-
报文交换:整个报文需要在各节点交换机上进行存储转发,由于不限制报文的大小,因此需要各节点交换机都具有较大的缓存空间。
-
分组交换:构成原始报文的一个个分组,在各节点交换机上进行存储转发。相比报文交换减少了转发时延,还可以避免过长的报文,长时间占用链路,同时也有利于进行差错控制。
最后我们总结一下这三种交换方式各自的优缺点:
电路交换:
优点 | 缺点 |
---|---|
通信时延小 | 建立连接时间长 |
有序传输 | 独占线路,使用率低 |
没有冲突 | 灵活性差 |
适用范围广 | 难以规格化 |
实时性强 | |
控制简单 |
电路交换的优点:
- 通信时延小:这是因为通信线路为通信双方用户专用数据直达,因此通信时延非常小。当连续传输大量数据时,这一优点非常明显。
- 有序传输:这是因为通信双方之间只有一条专用的通信线路,数据只在这一条线路上传输,因此不存在失序问题。
- 没有冲突:不同的通信双方拥有不同的信道,不会出现征用物理信道的问题。
- 适用范围广:电路交换既适用于传输模拟信号,也适用于传输数字信号。
- 实时性强:这主要得益于其通信时延小的优点。
- 控制简单:电路交换的节点。交换机及其控制都比较简单。
电路交换的缺点:
- 建立连接时间长:电路交换的平均连接建立时间对计算机通信来说太长了,
- 线路独占使用效率低:电路交换一旦建立连接物理通路就被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因而信道利用率很低。
- 灵活性差:只要连接所建立的物理通路中的任何一点出现了故障,就必须重新拨号,建立新的连接,这对十分紧急和重要的通信是很不利的。
- 难以规格化:电路交换时,数据直达不同类型、不同规格、不同速率的终端,很难相互进行通信,也难以在通信过程中进行差错控制。
报文交换:
优点 | 缺点 |
---|---|
无需建立连接 | 引起了转发时延 |
动态分配链路 | 需要较大存储缓存空间 |
提高线路可靠性 | 需要传输额外信息量 |
提高线路利用率 | |
提供多目标服务 |
报文交换的优点:
- 无需建立连接:报文交换不需要为通信双方预先建立一条专用的通信线路,不存在建立连接的时延,用户可以随时发送报文。
- 动态分配线路:当发送方把报文传送给节点交换机时,节点交换机先存储整个报文,然后选择一条合适的空闲线路将报文发送出去。
- 提高线路可靠性:如果某条传输路径发生故障,会重新选择另一条路径传输数据,因此提高了传输的可靠性。
- 提高线路利用率:通信双方不是固定占用一条通信线路,而是在不同的时间分段部分占用物理线路,因而大大提高了通信线路的利用率。
- 提供多目标服务:一个报文可以同时发送给多个目的地址,这在电路交换中是很难实现的。
报文交换的缺点:
- 引起了转发时延:这是因为报文在节点交换机上要经历存储、转发的过程。
- 需要较大的存储缓存空间:这是因为报文交换对报文的大小没有限制。
- 需要传输额外的信息量:这是因为报文需要携带目标地址、原地址等信息。
分组交换:
优点 | 缺点 |
---|---|
无需建立连接 | 引起了转发时延 |
提高线路利用率 | 需要较大存储缓存空间 |
简化了存储管理 | 对于数据报服务,存在失序,丢失或重复分组的问题 |
加速传输 | 对于虚电路服务,存在呼叫建立,数据传输和虚电路释放三个过程 |
减少出错概率和重发数据量 |
分组交换的优点如下,
- 无需建立连接:分组交换不需要为通信双方预先建立一条专用的通信线路,不存在建立连接的时延,用户可以随时发送分组
- 线路利用率高:通信双方不是固定占用一条通信线路,而是在不同的时间分段部分占用物理线路,因而大大提高了通信线路的利用率。
- 简化了存储管理:这是相对于报文交换而言的,因为分组的长度固定,相应的缓冲区的大小也固定,管理起来相对容易。
- 加速传输:由于分组是逐个传输的,这就使得后一个分组的存储操作与前一个分组的转发操作可以同时进行。
- 减少出错概率和重发数据量:因为分组比报文小,因此出错概率必然减小。即便分组出错,也只需重传出错的部分,这比重传整个报文的数据量小很多,这样不仅提高了可靠性,也减少了传输时延。
分组交换的缺点如下,
- 引起了转发时延:这是因为分组在节点交换机上要经历存储、转发的过程。
- 需要传输额外的信息量:将原始报文分割成等长的数据块,每个数据块都要加上原地址、目的地址等控制信息,从而构成分组,因此使得传送的信息量增大了。
- 采用数据报服务进行分组交换:可能会出现失序、丢失或重复分组**:分组到达目的节点时,需要重新还原成原始报文比较麻烦。
- 采用虚电路服务进行分组交换:虽然没有分组失序问题,但由呼叫建立、数据传输和虚电路释放三个过程。
相关文章:

计算机网络:数据交换方式
计算机网络:数据交换方式 电路交换分组交换报文交换传输对比 本博客介绍计算机之间数据交换的三种方式,分别是电路交换、分组交换以及报文交换。 电路交换 我们首先来看电路交换,在电话问世后不久,人们就发现要让所有的电话机都…...

万用表革新升级,WT588F02BP-14S语音芯片助力智能测量新体验v
万能表功能: 万能表是一款集多功能于一体的电子测量工具,能够精准测量电压、电流、电阻等参数,广泛应用于电气、电子、通信等领域。其操作简便、测量准确,是工程师们进行电路调试、故障排查的得力助手,为提升工作效率…...

Day61:WEB攻防-PHP反序列化原生类TIPSCVE绕过漏洞属性类型特征
知识点: 1、PHP-反序列化-属性类型&显示特征 2、PHP-反序列化-CVE绕过&字符串逃逸 3、PHP-反序列化-原生类生成&利用&配合 补充:如果在 PHP 类中没有实现某个魔术方法,那么该魔术方法在相应的情况下不会被自动触发。PHP 的魔…...

【开源】SpringBoot框架开发不良邮件过滤系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统用户模块2.2 收件箱模块2.3 发件箱模块2.4 垃圾箱模块2.5 回收站模块2.6 邮箱过滤设置模块 三、实体类设计3.1 系统用户3.2 邮件3.3 其他实体 四、系统展示五、核心代码5.1 查询收件箱档案5.2 查询回收站档案5.3 新…...

详细教---用Django封装写好的模型
本次我们要用自己写好的热销词条爬虫代码来演示如何用Django把我们写好的模型封装。 第一步:代码准备 热搜词条搜集代码: import requests from lxml import etreeurl "https://tophub.today/n/KqndgxeLl9" headers{User-Agent: Mozilla/5.…...
设计模式 抽象工厂
01.人类接口 public interface Human { //首先定义什么是人类//人是愉快的,会笑的,本来是想用smile表示,想了一下laugh更合适,好长时间没有大笑了; public void laugh(); //人类还会哭,代表痛苦 public v…...

OPTIONS请求(跨域预检查)
目录 一、什么是OPTIONS请求?二、简单请求、复杂请求三、特定的请求头、响应头 一、什么是OPTIONS请求? OPTIONS 请求方式是 HTTP 协议中的一种,主要用于 从响应头中获取服务器支持的HTTP请求方式。 OPTIONS 请求方式是 浏览级行为…...

游戏反云手机检测方案
游戏风险环境,是指独立于原有设备或破坏设备原有系统的环境。常见的游戏风险环境有:云手机、虚拟机、虚拟框架、iOS越狱、安卓设备root等。 这类风险环境可以为游戏外挂、破解提供所需的高级别设备权限,当游戏处于这些风险环境下,…...

HarmonyOS NEXT应用开发之动态路由
介绍 本示例将介绍如何使用动态路由跳转到模块中的页面,以及如何使用动态import的方式加载模块 使用说明 通过动态import的方式,在需要进入页面时加载对应的模块。配置动态路由,通过WrapBuilder接口,动态创建页面并跳转。动态i…...

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载带光照信息的材质文件Mtl 实现光照贴图的最简实例(十七)
文章目录 前言一、3d 立方体 model 属性相关文件1. cube1.obj2. cube1.Mtl3. 纹理图片 cordeBouee4.jpg二、实现光照贴图的效果1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube1.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell…...

【NLP笔记】Transformer
文章目录 基本架构EmbeddingEncoderself-attentionMulti-Attention残差连接LayerNorm DecoderMask&Cross Attention线性层&softmax损失函数 论文链接: Attention Is All You Need 参考文章: 【NLP】《Attention Is All You Need》的阅读笔记 一…...

【Unity】程序创建Mesh(二)MeshRenderer、光照、Probes探针、UV信息、法线信息
文章目录 接上文MeshRenderer(网格渲染器)Materials(材质)Material和Mesh对应Lighting光照Lightmapping材质中的光照 光源类型阴影全局光照Probes(探针)Ray Tracing(光线追踪)Additi…...

每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 < index1 < index2 < numbers.…...

性能优化(CPU优化技术)-NEON指令详解
原文来自ARM SIMD 指令集:NEON 简介 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能(HPC)开发基础教程 🎀CSDN主页 发狂的小花 🌄人生秘诀…...

服务器硬件基础知识和云服务器的选购技巧
概述 服务器硬件基础知识涵盖了构成服务器的关键硬件组件和技术,这些组件和技术对于服务器的性能、稳定性和可用性起着至关重要的作用。其中包括中央处理器(CPU)作为服务器的计算引擎,内存(RAM)用于数据临…...
深度学习PyTorch 之 transformer-中文多分类
transformer的原理部分在前面基本已经介绍完了,接下来就是代码部分,因为transformer可以做的任务有很多,文本的分类、时序预测、NER、文本生成、翻译等,其相关代码也会有些不同,所以会分别进行介绍 但是对于不同的任务…...

STC 51单片机烧录程序遇到一直检测单片机的问题
准备工作 一,需要一个USB-TTL的下载器 ,并安装好对应的驱动程序 二、对应的下载软件,stc软件需要官方的软件(最好是最新的,个人遇到旧的下载软件出现问题) 几种出现一直检测的原因 下载软件图标…...

后端系统开发之——接口参数校验
今天难得双更,大家点个关注捧个场 原文地址:后端系统开发之——接口参数校验 - Pleasure的博客 下面是正文内容: 前言 在上一篇文章中提到了接口的开发,虽然是完成了,但还是缺少一些细节——传入参数的校验。 即用户…...

IDEA 配置阿里规范检测
IDEA中安装插件 配置代码风格检查规范 使用代码风格检测 在代码类中,右键 然后会给出一些不符合规范的修改建议: 保存代码时自动格式化代码 安装插件: 配置插件:...

数据仓库系列总结
一、数据仓库架构 1、数据仓库的概念 数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。 数据仓库通常包含多个来源的数据,这些数据按照主题进行组织和存储&#x…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

若依登录用户名和密码加密
/*** 获取公钥:前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...