我是靠谱客的博主 风趣学姐,最近开发中收集的这篇文章主要介绍TCP 超时重传机制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        目录

一、如何应对两种情况

1、Client发的数据丢了

2、Server发的应答丢了

二、如何处理重复的数据?

三、如何确定超时的时间?


超时重传其实可以看作是一种网络异常时的补救措施。假设Client端发送数据,等了一段时间没有收到Server的回复,这样的话,就存在两种情况,第一种,Client发送的数据丢了;第二种,Server发送的应答丢了。

一、如何应对两种情况

1、Client发的数据丢了

这里所谓丢了,并不是说凭空消失,而是可能因为网络拥堵的缘故,导致数据没有及时送达,对此的策略就是,如果Client端在一定时间间隔内没有收到Server发来的应答,此时Client会重新发送一份数据。

2、Server发的应答丢了

同理,如果Server发送的应答丢了,Client在一定时间间隔内没有收到Server的应答,同样是Client重新发送一份数据,而不是Server重新发送一份应答。其实我们可以通过某种途径知道是Client的数据丢了还是应答丢了,但是这么做特别麻烦,就算知道了Client的数据丢了,最后的结果无非是重新发送一份,与其如此,不如简单粗暴一点,只要Client没收到应答,那就重发

二、如何处理重复的数据?

如果因为网络拥堵问题,导致Client的数据没有及时送达,Client隔一段时间以后就会重发一份报文,等网络恢复以后,Server端可能会收到多份重复的报文。接下来就要用到报文首部的“16位序号”字段了,因为重传发送的报文的序号,跟前一份丢失报文的序号是一样的,因此,Server只要根据序号来进行去重即可。

三、如何确定超时的时间?

既然是超时重传,在多长的时间间隔内没有收到应答,Client就判定为超时呢??

这个需要考虑多方面的因素,网络是时时都在变化的;超时的时间设置的太长,会影响到重传的效率;超时的时间设置的太短,有可能会频繁发送重复的包。TCP为了保证较高效率的通信,一般会动态计算这个时间。

  • 超时以500ms为单位进行控制,超时时间都是500ms的整数倍。
  • 第一次发送,等待500 ms以后没有收到ACK,重发。
  • 第二次重发,等待500*2 ms以后没有收到ACK,重发。
  • 第三次重发,等待500*4 ms以后没有收到ACK,重发。
  • 重发累计到一定的次数,TCP判定网络或者对方主机异常,强制关闭连接。

四、总结

上面只是举的例子是,Client主动发送,但是最后没有收到ACK,超过一定时间就会自动重发。这种情况同样适用于Server。总结一句话就是,谁主动发出报文,但是过了一段时间没有收到ACK,那该方就要重新发送报文

最后

以上就是风趣学姐为你收集整理的TCP 超时重传机制的全部内容,希望文章能够帮你解决TCP 超时重传机制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部