Go-back-N为什么是pessimistic:if one packet is lost,all of them are lost in the window,必须要从新发送整个batch的packet
而Selective repeat可以只发送那个lost的packet
Go-back-N
第一个 window发送1,2,3,4,只返回ack1,那么当timeout之后,sender需要重新发送1-5.(5是因为收到了ack1,n=4,因此它可以继续发送下一个到5)
Selective Repeat
同样是传输1-4,当2lost并没有收到ack2时,sender会在5之后retransmit packet2,之后就更新传输到6,7...
但是
如果传输过程途中lost的几率很大(即需要多次一个一个重新传输),加上传递时的timeout/round-trip time,selective repeat可能会比go back n慢不少
Examples
当 RWS = 1时,receiver没有buffer来接受同一个window中除了第一个的其他packet,因此当中间有一个lost时,这个lost packet顺序后面的所有packet都需要重新传输一遍来获得ack
因此在这种情况下,go back n更好
当RWS = n时,receiver可以有buffer储存一部分来自同一个window处在lost part后面的packet,例如图示中,当2 was lost,3,4,5都进入到buffer中,因此当sender retransmit 2后,receiver会直接送回ack5
在这种情况下 selective repeat会更好