【JavaEE初阶】网络原理——TCP核心机制2 超时重传
超时重传是针对丢包问题的情况做出处理的机制
丢包的两种情况
丢包的两种情况示意图
在右边第二种情况中,B收到了两份一样的数据,怎么处理?
- 如果TCP不处理,可能会使应用层读到两次一样的数据
- 如果是扣款数据呢?扣两次?
- 当然不行!
- TCP会在接收缓冲区内部进行去重操作
- 即收到一个新数据包后,去接收缓冲区里找一下
- 如果存在,就丢弃
- 如果不存在,才放进去
为啥会丢包呢?
- 因为网络结构非常复杂
- 数据报经过某个路由器/交换机转发的时候,
- 该路由器/交换机已经非常繁忙了,
- 导致当前需要转发的数据量超出路由器/交换机转发能力的上限了(这种情况经常发生)
- 数据报会出现两种情况:
- 一个是数据报会消耗更多时间才能到达对方
- 一个是路由器/交换机的接收缓冲区都满了,只能把数据包丢弃了(因为网络上的数据报的都是有时效性的)
丢包是不可避免的客观现象
重传是对抗丢包的有效手段:
- 假设当前网络的丢包率是10%(很严重的丢包率->打LOL会卡成PPT的程度)
- 也就是有90%的概率能达到对方
- 连续发两个包(独立事件),两个包都丢的概率是1%->至少有一个到达对方的概率是99%
- 随着重传的次数增加,数据报到达对方的概率增加
- 更高的丢包率,一般就是出现严重的网络故障了
怎么判断丢包
- 引入超时时间,来判定是否丢包
- TCP中,判断超时的时间阈值,不是固定数值,而是动态改变的
- 假设当前A->B发送数据包,丢包的超时时间阈值为T
- 当A给B传输发生超时之后
- 就会延长这个时间阈值
- 如果继续超时
- 还是会继续延长这个超时时间
- 但不是无休止的延长,超时次数达到一定程度或者等待时间达到一定程度
- 就会认为网络出现严重故障,于是放弃本次传输
随着重传
使数据到达对方的概率越来越高
这样重传还不成功,说明即使我们增加了概率,还是不能成功
意味着网络上大概率已经出现了严重的网络故障
此时,重传的频率没必要那么高
小结
TCP协议最核心的两个机制->保证了TCP的可靠传输
- 确认应答
- 超时重传
网上有些资料说:保证TCP可靠传输的关键机制是“三次握手”(X 这个说法是错的!)
正确的是:确认应答+超时重传
看到这里的童鞋都是棒棒哒!
祝给我点赞的宝宝身体健康,暴富暴帅!
不点赞也有效!
END✿✿ヽ(°▽°)ノ✿


