超时重传解决的问题:
在确认应答中描述了一种理想情况,也就是说在这种情况下没有考虑丢包的过程,但是如果在数据的传输过程中“丢包”了,那么就需要用到超时重传
假设再一下传输过程中丢包了,有两种情况:
情况一:主机A发送的请求丢了
情况二:主机B回复的ACK丢了
但是以上两种情况并没有办法区分开,那怎么办呢?解决方法如下:
既然区分不了那就等待一个规定的时间也就是定时器,到了这个时间还没有收到ACK那主机A就再次发送数据,假设第一次发送数据后等待的时间为t1,第二次发送数据后等待时间为t2,那么就会有t2>t1,也就是第二次等待 的时间会更长一点,其实也是TCP的一种很聪明的手段,在第一次丢包之后就不指望能成功了,也就隔了更长的时间,节省带宽。
当然,如果接收者发现读到的数据存在重复的现象,就会自动去重。
确认应答和超时重传就是TCP可靠性的两个最基本核心机制