计算机网络自顶向下技巧22——运输层 可靠资料运输原理 构造可靠数据传输协议
可靠数据传输原理(一):从零构建可靠数据传输协议
可靠数据传输是许多网络协议(尤其是TCP)的基石。其核心目标就一句话:确保数据能够正确、有序地从发送方交付到接收方。
一、可靠数据传输:疑问与挑战
1. 核心目标
构建一个在不可靠的底层信道(如下层网络可能会发生比特差错、丢包、乱序)之上,实现可靠的数据传输服务。
2. 需要解决的根本障碍
比特差错:数据在链路上传输时,0可能变成1,1可能变成0。
数据包丢失:整个数据包在网络中丢失,无法到达接收方。
数据包乱序:数据包未能按照发送顺序到达接收方。
3. 核心工具
为了消除以上问题,协议设计者主要依赖两种底层应用:
差错检测:接收方需要能够检测到比特差错(如使用检验和)。
反馈:接收方向发送方提供“肯定确认” 或 “否定确认” 。
重传:发送方在收到否定确认或超时未收到任何确认时,重新发送数据包。
二、逐步构造可靠数据传输协议
我们将通过一个演进模型,展示协议是如何一步步变得复杂和健壮的。
1. 经停等待协议
这是最方便的情况,我们假设底层信道是无比特差错的,但可能丢失数据包。
核心机制:
发送方发送一个数据包,之后等待接收方的确认(ACK)。
接收方正确收到数据包后,回送一个ACK。
发送方收到ACK后,才发送下一个数据包。
如果发送方长时间未收到ACK,则超时重传。
致命缺陷:重复数据包。如果ACK本身延迟或丢失,发送方会超时重传,导致接收方收到两个一模一样的数据包。因此,接收方必须能够去重。
2. 经停等待协议 + 序列号
为了解决重复数据包的挑战,我们引入了序列号。
工作机制:
每个数据包都有一个序列号(例如,0, 1, 0, 1, ... 交替)。
接收方检查序列号。如果收到一个它已经确认过的序列号的数据包,它就简单地再次发送ACK,并丢弃这个重复的数据包。
这样,接收方就能辨别出是新的数据包还是重传的旧数据包。
此时协议的局限性:性能极低。发送方在任何一个时刻只能有一个已发送但未被确认的数据包在信道中。信道利用率极低。
3. 回退N步
为了提高性能,大家允许多个数据包“在飞”,即流水线。
核心机制:
发送方维护一个发送窗口,窗口大小(N)代表了允许在外的、未被确认的数据包的最大数量。
接收方的处理相对简单:它只按序确认。如果收到一个失序的数据包(比如期望序列号为3,但收到了4),它会丢弃它,并重复发送最终一个按序包(序列号2)的ACK。
发送方的定时器只针对最早的那个已发送但未确认的包。如果该包的ACK超时,发送方将回退N步,即重传该包及其之后的所有已发送包。
优缺点:
优点:相比经停等待,显著提高了信道利用率。
缺点:不够高效。一个包的丢失可能导致大量正确传输的包被重传(即使接收方已经收到了它们)。
4. 选择重传
为了克服GBN的缺点,选择重传协议采用了更精细的策略。
核心机制:
接收方缓存所有正确接收但失序的数据包。
接收方单独确认每一个正确接收的数据包(无论是按序还是失序)。
发送方只为每个未确认的数据包维护一个独立的定时器。当某个数据包超时,只重传那一个超时的数据包所有后续包。就是,而不
关键挑战:窗口大小与序列号空间。
序列号空间必须足够大,以避免新旧数据包的序列号混淆。
窗口大小必须小于或等于序列号空间的一半,这是为了防止在窗口移动时,接收方无法区分是“新”数据包还是“旧”的重传数据包。
三、可靠数据传输原理总结
| 协议机制 | 解决的核心挑战 | 关键技术与代价 |
|---|---|---|
| 经停等待 | 包丢失 | 超时重传。代价:极低的信道利用率。 |
| + 序列号 | 重复包 | 为数据包编号。代价:极小的头部开销。 |
| 回退N步 | 低效率 | 流水线、发送窗口。代价:一个丢包可能导致大量不必要重传。 |
| 选择重传 | 不必要重传 | 接收方缓存、单个包重传。代价:更复杂的接收方逻辑和定时器管理。 |
四、与实际协议(TCP)的关联
现实世界中的TCP协议,其可靠数据传输机制是这些原理的混合与优化:
TCP使用累积确认“期望收到的下一个字节的序号”。就是,类似于GBN。但它的确认号指的
会就是TCP不会像纯GBN那样丢弃所有失序报文段,而将其缓存起来,这借鉴了SR的思想。
TCP的快速重传机制(收到3个重复ACK就立即重传,而不必等待超时)是对基础超时机制的重大优化。
结论:可靠数据传输并非魔法,而是通过检验和、序列号、确认、重传和定时器这些基本构件,并经过精妙的协议设计组合而成的。理解这些基础的构造过程,是彻底掌握TCP等复杂协议的关键。
让我尝试用图表的方式,为您重现这些核心协议的运行过程。
可靠数据传输协议示意图解
一、经停等待协议
这是最方便的情况,发送方每发送一个数据包,都必须停下来等待确认(ACK),然后再发送下一个。

核心特点:
简单:每次只允许一个数据包在传输中。
低效:信道大部分时间处于空闲状态,利用率极低。
二、回退N步
为了提高效率,允许发送方连续发送多个数据包,即采用“流水线”机制。但当发生丢包时,发送方要求从丢包处开始回退并重传所有资料。

核心特点:
高效:允许管道化,提高了信道利用率。
不精确:一个数据包的丢失,可能导致其后续多个已正确到达的数据包被不必要的重传。
三、选择重传
为了克服GBN“不精确重传”的缺点,SR协议允许接收方缓存失序但正确到达的数据包,发送方只重传真正丢失的那个数据包。

核心特点:
精确:只重传丢失的包,效率最高。
复杂:接收方需要更大的缓存空间,并能为每个数据包单独确认;发送方也需要为每个数据包维护一个定时器。
希望这些示意图能够援助直观地理解这些协议的核心差异和工作流程。

浙公网安备 33010602011771号