计算机网络-传输层-go-back-N and selective repeat

Go-back-N

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190524215353481.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDAyNzg5Nw==,size_16,color_FFFFFF,t_70)
上图可以清楚的看出 go-back-n的 动作 特点。pkg2 丢失,即使 pkg 3,pkg 4 在 sender 端 收到 ACK,但是 等pkg2 超时, pkg 2,3,4,5,还是需要重传。这个例子中 window size 是4,所以一次传输4个 package。
很明显 go-back-n的一个缺点 *是单个分组端差错能够引起大量分组端重传,许多分组其实没必要重传。*为了解决这个缺点, selective repeat来了。

selective repeat:

计算机网络-传输层-go-back-N and selective repeat_第1张图片
**sender 端:**接收上层端数据,为 分组 assign 序号,如果 在 window 范围内,则发送,同时为每一个分组起一个逻辑定时器,哪个分组端定时器超时,重传哪个分组。上图中, pkt 2 timeout,只重传 pkt2,对其他 package没有影响。
pkt3 发送完会有一个wait的动作,因为现在窗口满了,在收到回复之前不会发送下一个分组。
**receiver 端:**确认每一个正确接收的分组,而不管是否乱序,乱序端分组被缓存,直到丢失分组(即序号更小的分组)全部接收,将这一批分组按序交付给上层。上图中,收到 pkt1,交付,收到 pkt2,交付,收到pkt3,缓存
需要注意的是,为什么sender 端在收到ack0 时会立即发送pk4,但是收到ack3时没有继续往外发送数据呢,原因是receiver端发送ACK3时,已经知道pkt2还未到到,所以在ACK3中带端 nextsequence 是pkt2,而此时发送端正在等待pkt2的超时(或者ACK2),所以在pkt2超时之前不会有新端package发出。

你可能感兴趣的:(计算机网络)