返回顶部
首页 > 资讯 > 精选 >TCP的超时与重传机制是什么
  • 566
分享到

TCP的超时与重传机制是什么

2023-06-27 14:06:56 566人浏览 薄情痞子
摘要

这篇文章主要介绍“tcp的超时与重传机制是什么”,在日常操作中,相信很多人在TCP的超时与重传机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”TCP的超时与重传机制是什么”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“tcp的超时与重传机制是什么”,在日常操作中,相信很多人在TCP的超时与重传机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”TCP的超时与重传机制是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

TCP提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。TCP通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。

TCP的超时与重传机制是什么

超时

超时时间的计算是超时的核心部分,TCP要求这个算法能大致估计出当前的网络状况,虽然这确实很困难。要求精确的原因有两个:

(1)定时长久会造成网络利用率不高。

(2)定时太短会造成多次重传,使得网络阻塞。所以,书中给出了一套经验公式,和其他的保证计时器准确的措施。

递推公式概说

最早的TCP曾经用了一个非常简单的公式来估计当前网络的状况,如下R

RTO的初始化

RTO的初始化是由公式决定的,例如最初的公式,初始的值应该是1。而修正公式,初始RTO应该是A+4D。

RTO的更新

当数据正常传输的情况下,我们就会用上面的公式来更新各个数据,并重开定时器,来保证下一个数据被顺利传输。要注意的是:重传的情况下,RTO不用上面的公式计算,而采用一种叫做“指数退避”的方式。例如:当RTO为1S的情况下,发生了数据重传,我们就用RTO=2S的定时器来重新传输数据,下一次用4S。一直增加到64S为止。

估计器的初始化

在这里,SYN用的估计器初始化似乎和传输用的估计器不一样(我也没有把握)造我的理解,在修正公式中,SYN的情况下,A初始化为0,D初始化为3S。而在得到传输第一个数据的ACK的时候,应该按照下面的公式进行初始化:A=M+0.5D=A/2

估计器的更新6++*9/8

和上面的讨论差不多,就是在正常情况下,用上面的公式计算,在重传的情况下,不更新估计器的各种参数。原因还是因为估计不准确。

Karn算法

这不算是一个算法,这应该是一个策略,说的就是更新RTO和估计器的值的时机选择问题,1.3.和1.5.所说得更新时机就是Karn算法。

计时器的使用

两句话:

\1. 一个连接中,有且仅有一个测量定时器被使用。也就是说,如果TCP连续发出3组数据,只有一组数据会被测量。

\2. ACK数据报不会被测量,原因很简单,没有ACK的ACK回应可以供结束定时器测量。

重传

有了超时就要有重传,但是就算是重传也是有策略的,而不是将数据简单的发送。

重传时发送数据的大小

前面曾经提到过,数据在传输的时候不能只使用一个窗口协议,我们还需要有一个拥塞窗口来控制数据的流量,使得数据不会一下子都跑到网路中引起“拥塞”。也曾经提到过,拥塞窗口最初使用指数增长的速度来增加自身的窗口,直到发生超时重传,再进行一次微调。但是没有提到,如何进行微调,拥塞避免算法和慢启动门限就是为此而生。所谓的慢启动门限就是说,当拥塞窗口超过这个门限的时候,就使用拥塞避免算法,而在门限以内就采用慢启动算法。所以这个标准才叫做门限,通常,拥塞窗口记做cwnd,慢启动门限记做ssthresh。下面我们来看看拥塞避免和慢启动是怎么一起工作的。算法概要(直接从书中拷贝)

对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。

TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用 的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估 计,而后者则与接收方在该连接上的可用缓存大小有关。

当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd 和接收方通告窗口大小的最小值,但最少为2个报文段)。此外,如果是超时引起了拥塞,则 cwnd被设置为1个报文段(这就是慢启动)。

当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启 动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。 慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤2 中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免。

快速重传和快速恢复算法

这是数据丢包的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接受到3个以上的重复ACK的情况下,就应该意识到,数据丢了,需要重新传递。这个机制是不需要等到重传定时器溢出的,所以叫做快速重传,而重新传递以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法。流程如下:

\1. 当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的 报文段。设置cwnd为ssthresh加上3倍的报文段大小。

\2. 每次收到另一个重复的ACK时, cwnd增加1个报文段大小并发送1个分组(如果新的 cwnd允许发送)。

\3. 当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(在第1步中设置的值)。这个 ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该 是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认。这一步采用的是拥 塞避免,因为当分组丢失时我们将当前的速率减半。

ICMP会引起重新传递么?

答案是:不会,TCP会坚持用自己的定时器,但是TCP会保留下ICMP的错误并且通知用户。

重新分组

TCP为了提高自己的效率,允许再重新传输的时候,只要传输包含重传数据报文的报文就可以,而不用只重传需要传输的报文。

到此,关于“TCP的超时与重传机制是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: TCP的超时与重传机制是什么

本文链接: https://www.lsjlt.com/news/311378.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • TCP的超时与重传机制是什么
    这篇文章主要介绍“TCP的超时与重传机制是什么”,在日常操作中,相信很多人在TCP的超时与重传机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”TCP的超时与重传机制是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-27
  • TCP的重传机制
            我们都知道基于TCP协议的传输都是相对稳定和安全的,那么它是通过何种方法保证数据的正确性以及安全性呢,其中之一就是因为TCP具有重传机制。由于TCP是基于双方连接的,因此需要接收端和发送端保证连接之后才会发送有效信息,所...
    99+
    2023-09-22
    tcp/ip 服务器 网络
  • JS面试之异步模拟超时重传机制详解
    目录引言题目分析代码设计核心讲解引言 前面我讲解了两篇有关异步的逻辑思维题目,一个是红绿灯转换,还有一个是异步并发限制。有小伙伴私信我说不过瘾,希望还能再出一篇异步超时重传的讲解。为...
    99+
    2024-04-02
  • Dubbo retries超时重试机制的问题怎么解决
    本篇内容主要讲解“Dubbo retries超时重试机制的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Dubbo retries超时重试机制的问题怎么解决”吧!...
    99+
    2023-06-30
  • ASP.NET传输机制是什么
    这篇文章主要介绍“ASP.NET传输机制是什么”,在日常操作中,相信很多人在ASP.NET传输机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ASP.NET传输机制是什么”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-18
  • kafka的重试机制和ack机制是什么
    Kafka的重试机制是指在消息发送过程中,如果发送失败或者出现异常,Kafka会自动尝试重新发送消息。重试机制的目的是确保消息能够成...
    99+
    2023-10-26
    kafka
  • 什么是Python重试机制
    这篇文章主要讲解了“什么是Python重试机制”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“什么是Python重试机制”吧!为了避免由于一些网络或等其他不可控因素,而引起的功能性问题。比如在...
    99+
    2023-06-16
  • Android重建机制是什么
    一、Android重建机制 在Android中,当Activity被销毁时,系统会根据情况来保存Activity的状态,以便在需要时恢复它们。这个过程被称为重建机制。当由系统发起而非人为手动关闭Activity的时候,Activity有可能...
    99+
    2023-10-29
    机制 Android
  • Android BroadcastReceiver传输机制是什么
    Android BroadcastReceiver传输机制是一种Android系统中的一种组件间通信机制,用于在不同组件之间传递消息...
    99+
    2024-03-02
    Android
  • MongoDB的并发控制与锁机制是什么
    MongoDB使用乐观并发控制(Optimistic Concurrency Control)来处理并发操作。在MongoDB中,并...
    99+
    2024-05-07
    MongoDB
  • HTTP与HTTPS超文本传输协议的区别是什么
    目录HTTP和HTTPS的基本概念HTTP 与 HTTPS 区别HTTPS 的工作原理总结随着越来越多的网站使用HTTPS加密,现在HTTPS的使用已经成了硬性要求了。虽然说http...
    99+
    2022-12-23
    http和https的区别 http https http和https
  • Java参数传递机制的原理是什么
    这篇文章主要介绍“Java参数传递机制的原理是什么”,在日常操作中,相信很多人在Java参数传递机制的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java参数传递机制的原理是什么”的疑惑有所帮助!...
    99+
    2023-06-18
  • Spark中的任务重试机制是指什么
    在Spark中,任务重试机制是指当某个任务由于某种原因(例如节点故障、资源不足、网络问题等)失败时,Spark会自动尝试重新执行该任...
    99+
    2024-03-05
    Spark
  • android点击事件传递机制是什么
    Android中的点击事件传递机制是基于View的层次结构进行的。当用户触摸屏幕时,Android系统会将触摸事件传递给最上层的Vi...
    99+
    2023-08-18
    android
  • Golang自带的HttpClient超时机制怎么实现
    本篇内容主要讲解“Golang自带的HttpClient超时机制怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Golang自带的HttpClient超时机制怎么实现”吧!Java Htt...
    99+
    2023-07-04
  • Java Socket的超时浅析是什么
    这篇文章将为大家详细讲解有关Java Socket的超时浅析是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的...
    99+
    2023-06-17
  • HttpClient连接池及重试机制是什么
    本篇内容介绍了“HttpClient连接池及重试机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、HttpClient简介Http...
    99+
    2023-06-29
  • Java的传值与传引用是什么
    本篇内容介绍了“Java的传值与传引用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通常的说法是:对于基本数据类型(整型、浮点型、字符...
    99+
    2023-06-17
  • Redis主从复制与哨兵机制是什么
    这篇文章主要介绍了Redis主从复制与哨兵机制是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis主从复制与哨兵机制是什么文章都会有所收获,下面我们一起来看看吧。一、Redis复制是什么?Redis复...
    99+
    2023-07-05
  • Android线程间消息传递机制是什么
    本篇内容介绍了“Android线程间消息传递机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、消息是怎么发送的?这个问题还可以进行...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作