我的编程空间,编程开发者的网络收藏夹
学习永远不晚

详解TCP的四种定时器

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

详解TCP的四种定时器

详解TCP的四种定时器

在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的。在TCP中,会有四种定时器:

(1)重传定时器
(2)坚持定时器
(3)保活定时器
(4) 时间等待计时器

这四个定时器都有各自的具体作用。

一:重传定时器

重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定报文段的重传计时器,可能发生两种情况:若在计时器超时之前收到对报文段的确认,则撤销计时器;若在收到对特定报文段的确认之前计时器超时,则重传该报文,并把计时器复位;
重传时间=2*RTT;

RTT的值应该动态计算。常用的公式是:RTT=previous RTT*i + (1-i)*current RTT。i的值通常取90%,即新的RTT是以前的RTT值的90%加上当前RTT值的10%.

Karn算法:对重传报文,在计算新的RTT时,不考虑重传报文的RTT。因为无法推理出:发送端所收到的确认是对上一次报文段的确认还是对重传报文段的确认。干脆不计入。

二:坚持定时器

坚持定时器是使用在一方滑动窗口为0之后,另外一方停止传输数据,进入坚持定时器的轮询,直到滑动窗口不再为0了。
说说术语,首先是滑动窗口,可以简单理解为缓冲区剩余空间大小。不管是写缓冲还是读缓冲,一旦一方通告了自己的滑动窗口大小,另外一方就会根据滑动窗口大小传递窗口大小的数据了。但是,当被通告,一方的滑动窗口大小为0的时候,另外一方就会启动坚持定时器,基本也是使用TCP指数退避方法,第一次1.5秒,第二次1.5x2秒,第三次1.5x4…
其次是糊涂窗口综合症。这个症状是滑动窗口引起的。病因是发送方和接收方在一个很小的滑动窗口的时候就开始数据传输,传输结束之后,读写的消费速度也并没有那么快,导致下次传输的时候,滑动窗口还是那么小。然后现象就是每次传输的数据都非常小。就好比每次开出去的火车载货量只有一节车厢,其实我们是希望能攒够n节车厢才开始传输。
糊涂窗口综合症有解决办法,还不止一种,在接收方或者发送方都可以解决。大致就是如果接收方解决,那么接收方在接收窗口小于一定大小的时候,对所有的接收请求都返回窗口为0的包,来触发另外一方的坚持定时器。同样发送方也是,在可以发送的数据大于一定窗口的时候才发送。

三:保活定时器

这个就是我们经常说的tcp的keepalive了。实际使用场景是在应用层没有数据进行传输的时候,一定时间(tcp_keepalive_time,默认每2个小时)发送一次保持心跳的包,如果发送成功,则继续保持端口活跃,如果没有正常返回,则在指定次数内(tcp_keepalive_probes,默认是9次),指定间隔(tcp_keepalive_intvl,默认是17s)发送心跳包。如果最后都没有获得正常的ACK,那么才算连接失败。

当然,tcp是否需要提供keepalive机制,是有争议的,我们可以为每个tcp连接设置是否启用keepalive和启用keepalive的各个指标设置。

四:时间等待定时器

在连接终止期使用,当TCP关闭连接时,并不认为这个连接就真正关闭了,在时间等待期间,连接还处于一种中间过度状态。这样就可以时重复的fin报文段在到达终点后被丢弃,这个计时器的值通常设置为一格报文段寿命期望值的两倍。

补充:

2MSL定时器:MSL是报文段做大生存时间(Maximum Segment Lifetime),设置这个定时器有两个目的:

其一是为了测量连接处于TIME_WAIT状态的时间.这样可以让TCP再次发送最后的ACK以防止这个ACK丢失(如果丢失,另一端会重传FIN)。

其二,为允许老的重复分节在网络中消逝。具体可以解释为,如果一个TCP连接在断开之前有迷途分节尚未消逝,在断开该TCP连接之后立刻重启一个同样的连接(双方的IP地址和端口port相同),这时之前的迷途的老分节可能对新的新的TCP连接接收,从而造成未定义的错误。为了避免这种情况,TCP规定在TIME_WAIT状态,不能启动一个连接的化身。既然TIME_WAIT状态维持2MSL,这就保证了一个连接上的分组及其应该在 2MSL内都会消失。

以上就是关于 TCP 的四种定时器的讲解,如果大家有疑问可以留言或者到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

详解TCP的四种定时器

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

详解TCP的四种定时器

详解TCP的四种定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的。在TCP中,会有四种定时器: (1)重传定时器 (2)坚持定时器 (3)保活定时器 (4) 时间
2022-06-04

TCP中四种定时器的示例分析

这篇文章主要介绍TCP中四种定时器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!详解TCP的四种定时器在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进
2023-06-09

Springboot项目中定时任务的四种实现方式详解

Springboot中定时任务可通过四种方式实现:@Scheduled注解:简单易用,但灵活性低。TaskScheduler接口:灵活性高,需编写更多代码。ScheduledThreadPoolExecutor:性能好,但缺乏高级功能。Quartz:功能强大,但配置复杂。每种方法各有优缺点,选择具体实现方式需根据需求。
Springboot项目中定时任务的四种实现方式详解
2024-04-02

.NET中6种定时器的用法与特点详解

.NET时间器用法与特点.NET中提供6种定时器,用于安排任务执行。System.Timers.Timer:简单、基于WindowsAPI,精度不高。自动重置,指定时间间隔后重新开始计时。System.Threading.Timer:基于线程,精度较高。提供对任务执行的更多控制。System.Windows.Forms.Timer:专用于更新GUI元素。与Windows窗体集成。System.Diagnostics.Stopwatch:用于测量代码执行时间。可用于分析程序性能。System.Reactiv
.NET中6种定时器的用法与特点详解
2024-04-02

Android实现定时器的五种方法实例详解

一、Timer Timer是Android直接启动定时器的类,TimerTask是一个子线程,方便处理一些比较复杂耗时的功能逻辑,经常与handler结合使用。 跟handler自身实现的定时器相比,Timer可以做一些复杂的处理,例如,需
2022-06-06

Go定时器的三种实现方式示例详解

这篇文章主要为大家介绍了Go定时器的三种实现方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-20

详解java中的四种代码块

在java中用{}括起来的称为代码块,代码块可分为以下四种:一.简介1.普通代码块:类中方法的方法体2.构造代码块:构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。3.静态代码块:用static{}包裹起来的代码片段
2023-05-30

C#中多种高效定时器方法的使用详解

本文主要介绍了C#中多种高效定时器方法的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-14

Android更新UI的四种方法详解

前言 相信每位Android开发者们都知道更新UI只能在主线程中进行,若是在子线程执行任务后需要更新UI,则需要借助handler跳转到主线程中。以下介绍几种操作UI的方法。 一、使用Handler的handleMessage()Handl
2022-06-06

详解Android开发中Activity的四种launchMode

Activity栈主要用于管理Activity的切换。当使用Intent跳转至某个目标Activity,需要根据目标Activity的加载模式来加载。 Activity一共有以下四种launchMode: 1.standard:默认,每次使
2022-06-06

详解C++中四种类型的转换

这篇文章主要是想和大家一起聊聊来C++中的四种类型转换 :const_cast、static_cast、reinterpret_cast和dynamic_cast,感兴趣的可以了解一下
2022-12-08

springboot实现定时任务的四种方式小结

本文主要介绍了springboot实现定时任务的四种方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-13

Android 三种实现定时器详解及实现方法

方法一:Handler+Threadpackage com.xunfang.handerDemo; import android.app.Activity; import android.os.Bundle; import andro
2022-06-06

编程热搜

目录