运输层rdt3.0协议的自动机

首先盛赞一下这位大佬的相关资料整理,有原书英文和中文版的答案
相关前置内容可以看这位的纹章

正在学习《计算机网络——自顶向下方法(第六版)》,书好是挺好,但是能感受到一个明显的问题:教材正文部分不一定放的是最完美的答案。

可能是鼓励学生自己动脑,这本书正文的一些内容有一些令人疑惑的地方。更蛋疼的是,作者其实知道这些地方,然而并不直接提到,而是在随后的习题中才明确指出。


比如在P.144页的一个图:
运输层rdt3.0协议的自动机_第1张图片
这是考虑差错和丢包的可靠运输协议的数据发送方有限状态机
书中称之为rdt 3.0(reliable data transfer protocol)

这里有一个令人显然疑惑的地方,为什么在等待确认时,如果:

  1. 收到了出错的反馈【corrupt(rcvpkt)】
  2. 或者收到了上一个包的ack信号【 isACK(rcvpkt,1)】

发送方不重发报文,而是选择Λ,忽略(即不采取动作)?

作者在正文没有提到我的这个疑问,而是在本章习题P12中留作练习。

答案是:反馈出错时可以重发,ACK序号错误时不能重发。


PART 1

首先看假如收到错误ACK(即序号错误)时重发报文会发生什么:

我们知道,当传输链路突然改变的时候,RTT也会随之改变,因而TCP的重传时间需要动态更新。
那么当传输链路突然变得很长时,发送方将无法按时收到ACK,那么它将超时重传这个数据报。

为了具体分析,假设发送方发送了数据1,此时提前超时,于是它重传了数据1

模拟一下就能看出来发生了啥
运输层rdt3.0协议的自动机_第2张图片

简单想一下其实很好理解:
当接收方接受到一个数据报时必然要返回一个ACK报文,而如果发送方也对每一个ACK报文都发送一个数据报,那信道里面的数据报数量就不会减少。

因此,我们不能对每一个ACK都重发。


PART 2

然后再看:假如发送方对每一个出错的反馈报文都重发会发生什么

不会发生什么

根据我浅薄的英语知识来看,作者在P12中给出的答案好像就是这个意思。有比特差错时重传,协议如常。

你可能感兴趣的:(计算机网络,有限状态机,tcp)