【计算机网络 | 概述4:分组交换与电路交换:互联网为什么选择了前者?】

前面我们已经知道,应用层的报文会被封装成一个个分组,并在网络中不断向前传输。

那么问题来了:网络中的数据到底是怎样从一台主机到达另一台主机的?中间的通信资源应该提前预留,还是谁有数据谁就先用?

这就是交换方式要解决的问题。

在网络核心部分,路由器会对收到的分组进行存储转发,这就是互联网采用分组交换的基本方式。为了理解它,我们先看看电路交换和报文交换。

什么是交换?

从通信资源分配的角度看,所谓交换 ,就是用某种方式动态分配传输线路的资源,让通信双方能够完成数据传输。

可以把网络中的链路理解成道路,数据理解成车辆:

  • 是不是先为某辆车预留一条专属车道?
  • 还是所有车辆共享道路,到路口后再决定往哪里走?

不同的回答,对应着不同的交换方式。

电路交换:先修一条专用通道

电路交换(Circuit Switching)最早广泛应用于传统电话网。

当两部电话要通话时,网络需要先经过多个电话交换机,在通信双方之间建立一条端到端的专用通信路径。路径建立完成后,沿途链路上的带宽、交换设备中的相关资源都会为这次通信预留。

整个过程可以分为三个阶段:

  1. 建立连接:确定通信路径,并开始占用通信资源。
  2. 传输数据:通信双方持续使用已经建立好的专用通道。
  3. 释放连接:通信结束后,归还占用的资源。
text 复制代码
建立连接  ->  传输数据  ->  释放连接
占用资源      持续占用        归还资源

看一幅图理解:

电路交换的特点

电路建立完成后,数据可以沿着固定路径连续传输。中间的交换节点不需要把每一段数据都完整接收、缓存、查表再转发,而是像已经接好的电话线一样,让比特流持续通过。

它的主要优点是:

  • 传输速率稳定:资源已经预留,通信过程中不需要和其他用户争抢带宽。
  • 时延和抖动较小:适合对实时性要求高的业务。
  • 通信质量可预测:建立连接时就已经确定了可用资源。

例如传统语音电话,双方通话期间需要持续、稳定地传递声音数据,电路交换就很合适。

电路交换的问题

电路交换最大的特点是"独占",但这也是它最大的限制。

假设为一次通信预留了 100 kbps 带宽。即使用户此刻正在思考、停顿,没有发送任何数据,这 100 kbps 也不能临时交给其他用户使用。

而计算机网络中的流量往往是突发式的:

  • 打开网页时,短时间内下载 HTML、图片和脚本;
  • 阅读页面时,网络可能长时间没有明显数据传输;
  • 点击下一页后,又会突然出现一批新的请求。

如果每个用户都为这种"时有时无"的流量预留专属线路,大部分时间线路都会闲置,资源利用率很低。

另外,电路交换在发送数据前还要先建立连接。对于一次很短的请求来说,建立连接的开销可能并不划算。

在电路交换网络中,为了 在一条物理链路上同时传输多路信号,提高资源利用率 ,通常采用频分复用(FDM)时分复用(TDM)技术。这两种技术分别通过划分频率或时间资源,实现多路信号的并发传输。

报文交换:先完整收下,再转发

为了避免通信期间长期独占资源,出现了报文交换(Message Switching)。

报文交换中,发送方把用户数据和源地址、目的地址等控制信息组合成一个完整的报文。中间节点收到报文后,先把整个报文存储下来,再根据目的地址查找转发表,选择合适的下一跳进行转发。

这就是存储转发

text 复制代码
源主机 -> 完整报文 -> 交换节点缓存 -> 查表转发 -> 下一跳

报文交换不需要预先建立专用连接,报文只在某一段链路上传输时才占用这段链路的资源,因此链路可以被多个用户共享。

它的优点是:

  • 无建立连接时延:通信前无须建立连接,没有建立连接时延,用户可随时发送报文。
  • 灵活分配线路:交换节点存储整个报文后,选择一条合适的空闲线路,转发报文。若某条传输路径发生故障,则可重新选择另一条路径传输数据。
  • 线路利用率高:报文在一段链路上传送时才占用这段链路的通信资源。
  • 支持差错控制:交换节点可对缓存下来的报文进行差错检验。

但报文交换也有明显的问题:报文可能很大。 一个很长的报文必须先被完整接收,才能开始转发。

这就导致了它的两个显著的缺点

  • 转发时延高
  • 缓存开销大,错误处理低效。假如报文最后一部分出错,可能需要重传很大一块数据。

分组交换:把大报文拆小再转发

分组交换(Packet Switching)同样采用存储转发 技术,但它不再把整个长报文作为转发单位,而是先把报文拆分成多个较小的分组

待发送的整块数据通常被称为报文(Message)将较长的报文划分成若干个较小的等长数据段 ,在每个数据段前面添加一些由必要的控制信息(例如源地址和目的地址等)组成的首部(Header) ,这样就构造出了一个个的分组(Packet)

分组是在分组交换网上传送的数据单元。

text 复制代码
较长的报文
   -> 拆分为多个数据部分
   -> 每部分添加首部
   -> 分组 1、分组 2、分组 3 ......

这样做的好处是,路由器不必等一个很大的报文全部到齐,只要收到一个完整分组,就可以开始处理和转发它。

分组交换的基本流程

一次分组传输大致会经历下面三个角色:

  1. 发送方:将较长的报文划分为多个分组,并依次发送。
  2. 交换节点:缓存收到的分组,从首部取出目的地址,查询转发表,选择接口并转发。
  3. 接收方:接收所有分组,按需要排序、重组,还原出原来的报文。
text 复制代码
发送方:构造分组、发送分组
路由器:缓存分组、查表、转发分组
接收方:接收分组、重组报文

具体过程:源主机将分组发送到分组交换网中,分组交换网中的分组交换机收到一个分组后,先将其缓存下来,然后从其首部中提取出目的地址,按照目的地址查找自己的转发表,找到相应的转发接口后将分组转发出去,把分组交给下一个分组交换机。经过多个分组交换机的存储转发后,分组最终被转发到目的主机。

路由器 就是分组交换网中的核心设备。一个分组到达路由器后,路由器会根据分组首部 中的目的 IP 地址查找转发表,决定从哪个接口将它发送到下一跳。

特点

分组交换解决了很多关键的问题,主要体现在(优点):

  • 故障容错能力:比如某条路径故障时,数据包可自动选择备用路径。2019年某运营商海底光缆中断时,全球互联网流量自动绕开故障链路,正是分组交换的路由重选功能发挥了作用。
  • 高效资源利用:传统电路交换需独占通信资源,而分组交换允许多个数据流共享同一条链路。不同数据包可共享链路,如同高速公路的多车道设计,大大提高了网络资源的使用效率。
  • 按需分配带宽:突发大流量时,可动态调整各数据包的传输优先级。

存储转发到底在做什么?

可以把路由器想象成快递中转站。

快递员不能只收到包裹的一半,就判断它该送往哪里。路由器也需要先接收一个完整分组,确认分组边界和必要的首部信息后,才能决定如何转发。

一个分组在路由器中通常会经历:

  1. 接收分组并暂存在缓存中;
  2. 检查首部,读取目的地址;
  3. 查询转发表,找到对应的输出接口;
  4. 如果输出链路正忙,进入输出队列等待;
  5. 链路空闲后,把分组发送给下一跳。

这就是"先存储,后转发"。

传输时延与传播时延

分组在网络中传输时,经常会遇到两个概念。

  • 传输时延:把一个分组的所有比特推入链路所需要的时间。
  • 传播时延:信号在物理介质中从链路一端传播到另一端所需要的时间。

若分组长度为 L bit,链路传输速率为 R bit/s,那么传输时延为:

text 复制代码
传输时延 = L / R

例如,一个分组大小为 1500 字节,也就是 12000 bit;链路速率为 2 Mbps:

text 复制代码
传输时延 = 12000 / (2 × 10^6) 秒 = 0.006 秒 = 6 ms

多路数据同时通过同一链路时,就会发生网络拥塞。这就像高速公路高峰时段的车流拥堵。此时路由器会进行缓冲,导致分组排队等待传输,从而增加整体延迟。这种现象在视频会议中可能表现为画面卡顿。

传播时延则主要取决于链路距离和信号传播速度。网线很长、光纤跨越很远时,传播时延就会比较明显。

这个两个概念很重要!!!!!!

分组为什么能流水线传输?

分组交换还有一个重要优势:流水线传输

假设主机要发送多个分组,分组 1 被路由器转发到下一条链路时,发送方已经可以继续发送分组 2。这样,多个分组可以同时处在不同的链路上,而不用等待前一个分组走完整条路径。

text 复制代码
时刻 1:源主机发送分组 1
时刻 2:路由器转发分组 1,源主机发送分组 2
时刻 3:目的主机接收分组 1,路由器转发分组 2,源主机发送分组 3

在忽略传播时延和处理时延、所有链路速率相同的理想情况下:

  • 一个分组经过 N 条链路,传输时延约为 N × L/R
  • P 个分组连续传输,总时间约为 (P + N - 1) × L/R

后一个公式中的 N - 1,正是流水线填满网络所需要的额外时间。

从最后一个分组的视角理解(P + N - 1) × L/R这个公式

假设有 PPP 个分组,需要跨越 NNN 条链路。每一条链路的传输时延是 T=L/RT = L/RT=L/R。

  • 源主机发送所有分组的时间: 源主机只负责把 PPP 个分组推到第 1 条链路 上,这需要花费 P×TP \times TP×T 的时间。
  • 当源主机刚刚把第 PPP 个分组(最后一个分组)发送完毕时,这个分组才刚刚走完第 1 条链路,抵达第 1 个路由器。
  • 这最后一个分组,还需要继续走完剩下的 N−1N - 1N−1 条链路,才能到达最终的目的主机。这需要花费 (N−1)×T(N - 1) \times T(N−1)×T 的时间。
  • 把这两部分加起来,总时间就是:P×T+(N−1)×T=(P+N−1)×TP \times T + (N - 1) \times T = (P + N - 1) \times TP×T+(N−1)×T=(P+N−1)×T

举一个具体的例子,假设:

  • 分组数P=4
  • 链路数N=4
  • 每条链路的传输时间是T


如图:

  • 分组4发送之前经过了 (P-1) \\times T

  • 分组4发送之后经过了 N \\times T

  • 一共是**P×T+(N−1)×T=(P+N−1)×TP \times T + (N - 1) \times T = (P + N - 1) \times TP×T+(N−1)×T=(P+N−1)×T**。

分组交换也会拥塞

分组交换并不是没有代价。

在分组交换网络中,每台路由器都扮演着"交通枢纽"的角色。当分组到达路由器时,需要经历以下关键步骤:

  1. 输入处理:检查分组目的地址并确定输出链路
  2. 排队等待:若目标链路正在传输其他分组,新到达分组必须进入输出缓存(OutputBuffer)排队
  3. 传输转发:链路空闲时从队列头部取出分组进行传输

这种因链路繁忙导致的等待时间称为排队时延,与固定存在的存储转发时延不同,排队时延具有高度动态性,取决于网络拥塞程度。

text 复制代码
分组到达路由器
   -> 输出链路忙
   -> 进入输出缓存排队
   -> 等待发送

输出缓存的基本作用

  • 在分组交换网络中,每台路由器(或交换机)都会为连接的每条链路配置输出缓存(也称为输出队列 )。这个缓存的作用类似于银行柜台前的等待队伍:当客户(分组)到达时,如果柜台(链路)正在服务其他客户(传输其他分组),新客户必须先排队等待。排队通常采用先进先出(FIFO)原则 ,即先到达的分组优先传输。而路由器在完成当前分组的转发后,才会从缓存中取出下一个分组继续处理。(即存储转发)既然要排队,那就会产生排队时延。排队时延就是指分组在输出缓存中等待传输的时间。

当网络负载持续过高时,缓存会被占满。后续到来的分组无法进入缓存,就会被丢弃,这就是分组丢失

所以,分组交换提升了资源利用率,但也带来了时延波动、排队和丢包等问题。后面学习 TCP 拥塞控制时,会继续解决这一部分问题。

电路交换与分组交换对比

对比项 电路交换 分组交换
通信前是否建立连接 需要 通常不需要预留专用路径
资源分配方式 预留、独占 按需、共享
数据传输方式 连续比特流 一个个分组存储转发
线路利用率 静默时可能较低 一般较高
时延特征 较稳定、可预测 可能出现排队,时延会波动
故障适应能力 路径固定,调整成本较高 可根据路由重新选择路径
典型适用场景 传统电话、强实时专用通信 网页、文件、邮件等计算机数据通信

互联网为什么选择分组交换?

互联网面对的是海量用户和突发式流量。

如果采用电路交换,假设每个用户都要预留固定带宽,那么大量资源会在用户没有发送数据时处于闲置状态。为了满足峰值需求,网络就必须建设更多长期空闲的线路,成本很高。

分组交换采用统计复用的思想:多个用户共享同一条链路,大多数用户并不会在同一时刻以最大速率发送数据。

例如一条 1 Mbps 的链路,每个用户活跃时需要 100 kbps。如果采用电路交换,为了保证每个人都有固定带宽,最多只能同时为 10 个用户预留资源。

但在实际情况中,用户往往只有少量时间处于活跃状态。分组交换允许更多用户共享这条链路:平时谁有数据谁就发;只有很多用户恰好同时活跃时,才可能产生排队。

这就是互联网选择分组交换的核心原因:

  • 更适合突发式的数据通信
  • 更充分地共享昂贵的链路资源
  • 网络出现故障时更容易绕路转发
  • 可以逐步扩展到全球范围,而不必为每次通信建立一条专用电路

当然,这不代表电路交换完全被淘汰。对于时延、抖动和带宽保障要求极高的场景,仍然会使用资源预留、服务质量保障等思想。现代网络经常会将两者的优点结合起来。

小结

电路交换的核心是:**先建立连接,再独占资源传输数据。**它的传输质量稳定,但容易浪费空闲资源。

报文交换的核心是:**完整接收一个报文后,再存储转发。**它避免了专用线路的长期占用,但大报文会带来较大的缓存和时延问题。

分组交换则把长报文拆成多个较小的分组,通过路由器的存储转发和按需共享链路完成传输。它可能出现排队和丢包,但在突发流量、资源利用率和网络扩展性方面更有优势,因此成为互联网的基础。

下一篇我们继续看:计算机网络中的时延、带宽和吞吐量分别是什么,它们之间有什么关系。

如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!

相关推荐
似水এ᭄往昔2 小时前
【Linux网络编程】--UDP__SCOKE
linux·计算机网络
10WTW0121 小时前
NTP协议
网络协议·计算机网络·ntp·ntp协议
多巴胺梦想家3 天前
计算机系统概述
计算机网络
AI人工智能+电脑小能手3 天前
【大白话说Java面试题 第210题】【10_网络协议篇】第1题:说说 TCP/IP 网络五层模型
java·网络协议·tcp/ip·计算机网络·网络五层模型
一条泥憨鱼3 天前
【从0开始学习计算机网络】| HTTP方法疑点解析
开发语言·计算机网络·http
一条泥憨鱼3 天前
【从0开始学习计算机网络】| RESTful API 设计原则
计算机网络·http·restful api
纵有疾風起4 天前
计算机网络的性能指标体系:带宽、时延、吞吐量
计算机网络·rtt·408·带宽·性能指标·吞吐量·时延
纵有疾風起4 天前
从OSI到TCP/IP——分层架构的思想根源与模型之争
tcp/ip·计算机网络·架构·osi·408·体系结构·分层
游戏开发爱好者84 天前
TraceEagle 代理抓包详解,无感代理、去证书绑定与 HTTP/3 解密能力解析
网络协议·计算机网络·网络安全·ios·adb·https·udp