王道书上的讲解不清楚,包括王道网课(2020)讲得也不清楚。
自己试着讲一下为什么窗口最大值 ≤ 2 (e^n) - 1
设用2个比特给帧编号:00、01、10、11
则帧序列为 [ 0,1,2,3 ],[ 0,1,2,3 ]... ...以此循环
那么按照公式,滑动窗口最大值为:3
假设发送窗口的大小为 4
如果第一个窗口发送的 0 1 2 3 号的确认帧全部丢失(即接收方收到数据帧,但是接收方的ACK全部丢失)
此时,计时器发送信号,指示发送方重新发送 发送方第一个窗口 的 0 1 2 3 号数据帧
对接收方而言,第一个窗口的 0 1 2 3 号数据帧实际上已被接收
接收方等待的0号帧是 接收方第二个窗口 的0号帧
此时,接收方就会把发送方第一个窗口的数据帧作为接收方第二个窗口的数据帧重新接收一遍
而发送方第一个窗口的数据之前已经接收过了
接收方相当于重复劳动了
(书中的说法:“接收方分不清到底数据帧是来自发送方第一窗口还是发送方第二窗口”。我觉得不是很恰当)
假设发送窗口的大小为 3
如果第一个窗口发送的 0 1 2 号的确认帧全部丢失
此时,计时器发送信号,指示发送方重新发送 发送方第一个窗口 的 0 1 2 号数据帧
对接收方而言,第一个窗口的 0 1 2 号数据帧实际上已被接收
发送方窗口的数据帧序号与接收方窗口的数据帧序号一一对应
接收方再次发送对 0 1 2 数据帧的ACK
收到 [ ACK3 ] 后,发送方发出序号为 3 0 1 的数据帧 ......