解决网络传输中的问题:丢包和重复包,包出错,包传输乱序
实现:维护一个发送方和接收方的缓冲区
正常情况下:
窗口中的数据已发送的在等待回应,一旦有回应窗口就会前进,待发送的会发出去
当 4 号数据包得到回应后如下图,8、9 号包被发送了出去,并把 11 号包读了进来
丢包(Ack,确认字符)情况下:
窗口中的数据已经全部发送,但是没有拿到 5 号包的回应(Ack)就一直等待,对方如果收到了 5 号后的包是不会发 Ack 的,要保证数据包的传输顺序
如果一直没有收到 Ack,TCP 协议有超时重传机制,会重新从 5 号包开始发,下图就是重发后对方收到了 5 号包,并把之前确认过的包的 Ack 一起发送了过来