
前面我们已经知道,应用层的报文会被封装成一个个分组,并在网络中不断向前传输。
那么问题来了:网络中的数据到底是怎样从一台主机到达另一台主机的?中间的通信资源应该提前预留,还是谁有数据谁就先用?
这就是交换方式要解决的问题。
在网络核心部分,路由器会对收到的分组进行存储转发,这就是互联网采用分组交换的基本方式。为了理解它,我们先看看电路交换和报文交换。
什么是交换?
从通信资源分配的角度看,所谓交换 ,就是用某种方式动态分配传输线路的资源,让通信双方能够完成数据传输。
可以把网络中的链路理解成道路,数据理解成车辆:
- 是不是先为某辆车预留一条专属车道?
- 还是所有车辆共享道路,到路口后再决定往哪里走?
不同的回答,对应着不同的交换方式。
电路交换:先修一条专用通道
电路交换(Circuit Switching)最早广泛应用于传统电话网。
当两部电话要通话时,网络需要先经过多个电话交换机,在通信双方之间建立一条端到端的专用通信路径。路径建立完成后,沿途链路上的带宽、交换设备中的相关资源都会为这次通信预留。
整个过程可以分为三个阶段:
- 建立连接:确定通信路径,并开始占用通信资源。
- 传输数据:通信双方持续使用已经建立好的专用通道。
- 释放连接:通信结束后,归还占用的资源。
text
建立连接 -> 传输数据 -> 释放连接
占用资源 持续占用 归还资源
看一幅图理解:

电路交换的特点
电路建立完成后,数据可以沿着固定路径连续传输。中间的交换节点不需要把每一段数据都完整接收、缓存、查表再转发,而是像已经接好的电话线一样,让比特流持续通过。
它的主要优点是:
- 传输速率稳定:资源已经预留,通信过程中不需要和其他用户争抢带宽。
- 时延和抖动较小:适合对实时性要求高的业务。
- 通信质量可预测:建立连接时就已经确定了可用资源。
例如传统语音电话,双方通话期间需要持续、稳定地传递声音数据,电路交换就很合适。
电路交换的问题
电路交换最大的特点是"独占",但这也是它最大的限制。
假设为一次通信预留了 100 kbps 带宽。即使用户此刻正在思考、停顿,没有发送任何数据,这 100 kbps 也不能临时交给其他用户使用。
而计算机网络中的流量往往是突发式的:
- 打开网页时,短时间内下载 HTML、图片和脚本;
- 阅读页面时,网络可能长时间没有明显数据传输;
- 点击下一页后,又会突然出现一批新的请求。
如果每个用户都为这种"时有时无"的流量预留专属线路,大部分时间线路都会闲置,资源利用率很低。
另外,电路交换在发送数据前还要先建立连接。对于一次很短的请求来说,建立连接的开销可能并不划算。
在电路交换网络中,为了 在一条物理链路上同时传输多路信号,提高资源利用率 ,通常采用频分复用(FDM)或时分复用(TDM)技术。这两种技术分别通过划分频率或时间资源,实现多路信号的并发传输。
报文交换:先完整收下,再转发
为了避免通信期间长期独占资源,出现了报文交换(Message Switching)。
报文交换中,发送方把用户数据和源地址、目的地址等控制信息组合成一个完整的报文。中间节点收到报文后,先把整个报文存储下来,再根据目的地址查找转发表,选择合适的下一跳进行转发。
这就是存储转发。
text
源主机 -> 完整报文 -> 交换节点缓存 -> 查表转发 -> 下一跳
报文交换不需要预先建立专用连接,报文只在某一段链路上传输时才占用这段链路的资源,因此链路可以被多个用户共享。
它的优点是:
- 无建立连接时延:通信前无须建立连接,没有建立连接时延,用户可随时发送报文。
- 灵活分配线路:交换节点存储整个报文后,选择一条合适的空闲线路,转发报文。若某条传输路径发生故障,则可重新选择另一条路径传输数据。
- 线路利用率高:报文在一段链路上传送时才占用这段链路的通信资源。
- 支持差错控制:交换节点可对缓存下来的报文进行差错检验。
但报文交换也有明显的问题:报文可能很大。 一个很长的报文必须先被完整接收,才能开始转发。
这就导致了它的两个显著的缺点:
- 转发时延高
- 缓存开销大,错误处理低效。假如报文最后一部分出错,可能需要重传很大一块数据。
分组交换:把大报文拆小再转发
分组交换(Packet Switching)同样采用存储转发 技术,但它不再把整个长报文作为转发单位,而是先把报文拆分成多个较小的分组。
待发送的整块数据通常被称为报文(Message) 。将较长的报文划分成若干个较小的等长数据段 ,在每个数据段前面添加一些由必要的控制信息(例如源地址和目的地址等)组成的首部(Header) ,这样就构造出了一个个的分组(Packet)。
分组是在分组交换网上传送的数据单元。

text
较长的报文
-> 拆分为多个数据部分
-> 每部分添加首部
-> 分组 1、分组 2、分组 3 ......
这样做的好处是,路由器不必等一个很大的报文全部到齐,只要收到一个完整分组,就可以开始处理和转发它。
分组交换的基本流程
一次分组传输大致会经历下面三个角色:
- 发送方:将较长的报文划分为多个分组,并依次发送。
- 交换节点:缓存收到的分组,从首部取出目的地址,查询转发表,选择接口并转发。
- 接收方:接收所有分组,按需要排序、重组,还原出原来的报文。
text
发送方:构造分组、发送分组
路由器:缓存分组、查表、转发分组
接收方:接收分组、重组报文
具体过程:源主机将分组发送到分组交换网中,分组交换网中的分组交换机收到一个分组后,先将其缓存下来,然后从其首部中提取出目的地址,按照目的地址查找自己的转发表,找到相应的转发接口后将分组转发出去,把分组交给下一个分组交换机。经过多个分组交换机的存储转发后,分组最终被转发到目的主机。
路由器 就是分组交换网中的核心设备。一个分组到达路由器后,路由器会根据分组首部 中的目的 IP 地址查找转发表,决定从哪个接口将它发送到下一跳。
特点
分组交换解决了很多关键的问题,主要体现在(优点):
- 故障容错能力:比如某条路径故障时,数据包可自动选择备用路径。2019年某运营商海底光缆中断时,全球互联网流量自动绕开故障链路,正是分组交换的路由重选功能发挥了作用。
- 高效资源利用:传统电路交换需独占通信资源,而分组交换允许多个数据流共享同一条链路。不同数据包可共享链路,如同高速公路的多车道设计,大大提高了网络资源的使用效率。
- 按需分配带宽:突发大流量时,可动态调整各数据包的传输优先级。
存储转发到底在做什么?
可以把路由器想象成快递中转站。
快递员不能只收到包裹的一半,就判断它该送往哪里。路由器也需要先接收一个完整分组,确认分组边界和必要的首部信息后,才能决定如何转发。
一个分组在路由器中通常会经历:
- 接收分组并暂存在缓存中;
- 检查首部,读取目的地址;
- 查询转发表,找到对应的输出接口;
- 如果输出链路正忙,进入输出队列等待;
- 链路空闲后,把分组发送给下一跳。
这就是"先存储,后转发"。
传输时延与传播时延
分组在网络中传输时,经常会遇到两个概念。
- 传输时延:把一个分组的所有比特推入链路所需要的时间。
- 传播时延:信号在物理介质中从链路一端传播到另一端所需要的时间。
若分组长度为 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**。
分组交换也会拥塞
分组交换并不是没有代价。
在分组交换网络中,每台路由器都扮演着"交通枢纽"的角色。当分组到达路由器时,需要经历以下关键步骤:
- 输入处理:检查分组目的地址并确定输出链路
- 排队等待:若目标链路正在传输其他分组,新到达分组必须进入输出缓存(OutputBuffer)排队
- 传输转发:链路空闲时从队列头部取出分组进行传输
这种因链路繁忙导致的等待时间称为排队时延,与固定存在的存储转发时延不同,排队时延具有高度动态性,取决于网络拥塞程度。
text
分组到达路由器
-> 输出链路忙
-> 进入输出缓存排队
-> 等待发送
输出缓存的基本作用
- 在分组交换网络中,每台路由器(或交换机)都会为连接的每条链路配置输出缓存(也称为输出队列 )。这个缓存的作用类似于银行柜台前的等待队伍:当客户(分组)到达时,如果柜台(链路)正在服务其他客户(传输其他分组),新客户必须先排队等待。排队通常采用先进先出(FIFO)原则 ,即先到达的分组优先传输。而路由器在完成当前分组的转发后,才会从缓存中取出下一个分组继续处理。(即存储转发)既然要排队,那就会产生排队时延。排队时延就是指分组在输出缓存中等待传输的时间。
当网络负载持续过高时,缓存会被占满。后续到来的分组无法进入缓存,就会被丢弃,这就是分组丢失。
所以,分组交换提升了资源利用率,但也带来了时延波动、排队和丢包等问题。后面学习 TCP 拥塞控制时,会继续解决这一部分问题。
电路交换与分组交换对比
| 对比项 | 电路交换 | 分组交换 |
|---|---|---|
| 通信前是否建立连接 | 需要 | 通常不需要预留专用路径 |
| 资源分配方式 | 预留、独占 | 按需、共享 |
| 数据传输方式 | 连续比特流 | 一个个分组存储转发 |
| 线路利用率 | 静默时可能较低 | 一般较高 |
| 时延特征 | 较稳定、可预测 | 可能出现排队,时延会波动 |
| 故障适应能力 | 路径固定,调整成本较高 | 可根据路由重新选择路径 |
| 典型适用场景 | 传统电话、强实时专用通信 | 网页、文件、邮件等计算机数据通信 |
互联网为什么选择分组交换?
互联网面对的是海量用户和突发式流量。
如果采用电路交换,假设每个用户都要预留固定带宽,那么大量资源会在用户没有发送数据时处于闲置状态。为了满足峰值需求,网络就必须建设更多长期空闲的线路,成本很高。
分组交换采用统计复用的思想:多个用户共享同一条链路,大多数用户并不会在同一时刻以最大速率发送数据。
例如一条 1 Mbps 的链路,每个用户活跃时需要 100 kbps。如果采用电路交换,为了保证每个人都有固定带宽,最多只能同时为 10 个用户预留资源。
但在实际情况中,用户往往只有少量时间处于活跃状态。分组交换允许更多用户共享这条链路:平时谁有数据谁就发;只有很多用户恰好同时活跃时,才可能产生排队。
这就是互联网选择分组交换的核心原因:
- 更适合突发式的数据通信;
- 更充分地共享昂贵的链路资源;
- 网络出现故障时更容易绕路转发;
- 可以逐步扩展到全球范围,而不必为每次通信建立一条专用电路。
当然,这不代表电路交换完全被淘汰。对于时延、抖动和带宽保障要求极高的场景,仍然会使用资源预留、服务质量保障等思想。现代网络经常会将两者的优点结合起来。
小结
电路交换的核心是:**先建立连接,再独占资源传输数据。**它的传输质量稳定,但容易浪费空闲资源。
报文交换的核心是:**完整接收一个报文后,再存储转发。**它避免了专用线路的长期占用,但大报文会带来较大的缓存和时延问题。
分组交换则把长报文拆成多个较小的分组,通过路由器的存储转发和按需共享链路完成传输。它可能出现排队和丢包,但在突发流量、资源利用率和网络扩展性方面更有优势,因此成为互联网的基础。
下一篇我们继续看:计算机网络中的时延、带宽和吞吐量分别是什么,它们之间有什么关系。
如果这篇文章对你有帮助,欢迎点赞、评论、关注、收藏。你们的支持是我前进的动力!
