iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >TCP中四种定时器的示例分析
  • 414
分享到

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

2023-06-09 16:06:35 414人浏览 安东尼
摘要

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

这篇文章主要介绍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中四种定时器的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: TCP中四种定时器的示例分析

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

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

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • TCP中四种定时器的示例分析
    这篇文章主要介绍TCP中四种定时器的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!详解TCP的四种定时器在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进...
    99+
    2023-06-09
  • Javascript中定时器的示例分析
    小编给大家分享一下Javascript中定时器的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Javascript中有两种定时器,分别是setInterval()、setTimeout(),两者都是定时器,但是二者...
    99+
    2023-06-14
  • CSS定位中四个属性的示例分析
    这篇文章给大家分享的是有关CSS定位中四个属性的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。   CSSposition属性   总共有四个属性:   stati...
    99+
    2024-04-02
  • JS中闭包与定时器的示例分析
    这篇文章主要介绍了JS中闭包与定时器的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是闭包 有什么作用闭包就是能够读取其他函数内...
    99+
    2024-04-02
  • js中递归和定时器的示例分析
    这篇文章将为大家详细讲解有关js中递归和定时器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。递归:是一个函数通过调用自身的情况下构成的;首先上个例子:Funct...
    99+
    2024-04-02
  • PHP Swoole与TCP的示例分析
    小编给大家分享一下PHP Swoole与TCP的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!握手常见问题连接拒绝Operation now in pro...
    99+
    2023-06-15
  • vim中四种模式及模式切换的示例分析
    这篇文章主要为大家展示了“vim中四种模式及模式切换的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vim中四种模式及模式切换的示例分析”这篇文章吧。vim和记事本或WORD不一样,不是...
    99+
    2023-06-09
  • 四种Java脚本语言对比的示例分析
    小编给大家分享一下四种Java脚本语言对比的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在一些Java应用的需求中,集成某种脚本语言的支持能够带来很大的...
    99+
    2023-06-03
  • angular2组件中定时刷新并清除定时器的示例分析
    这篇文章主要为大家展示了“angular2组件中定时刷新并清除定时器的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular2组件中定时刷新并清除...
    99+
    2024-04-02
  • Nodejs中Tcp封包和解包的示例分析
    这篇文章给大家分享的是有关Nodejs中Tcp封包和解包的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、粘包问题解决方案及对比很简单,既然消息没有边界,那我们在消息往...
    99+
    2024-04-02
  • Linux TCP/IP协议栈的示例分析
    这篇文章将为大家详细讲解有关Linux TCP/IP协议栈的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。TCP特点我们都非常清楚TCP协议设计的初衷,就是保证数据传输的快速,有序,...
    99+
    2023-06-05
  • node中IO以及定时器优先级的示例分析
    这篇文章主要介绍node中IO以及定时器优先级的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!事件循环node著名的基于eventloop 的单线程事件循环处理模型,高效的异...
    99+
    2024-04-02
  • Node.js中事件循环、定时器和process.nextTick()的示例分析
    这篇文章主要介绍Node.js中事件循环、定时器和process.nextTick()的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是事件循环尽管JavaScript是...
    99+
    2024-04-02
  • JS中switch的四种写法示例
    目录引言switch一般写法switch简单写法IIFE 封装封成策略引言 JavaScript 的 switch 有四样写法,你知道么?不管你知道不知道,反正我是不知道。 我所知道...
    99+
    2024-04-02
  • MySQL中锁定的示例分析
    这篇文章主要介绍了MySQL中锁定的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1. 伪事务 前面已经介绍了...
    99+
    2024-04-02
  • CSS中定位的示例分析
    这篇文章将为大家详细讲解有关CSS中定位的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。下面主要介绍一下其他三种常见的定位position:relative相对定位:顾名思义,相对定位就是相对于原...
    99+
    2023-06-08
  • docker容器的四种端口映射演示分析
    端口映射 把容器的端口映射为宿主机的一个随机或者特定端口,使用外部用户可以访问容器服务端口映射本是在容器底层做了 iptables 地址转发,出去的流量做 SNAT 源地址转发,进来...
    99+
    2024-04-02
  • SQL Server三种锁定模式的示例分析
    这篇文章主要为大家展示了“SQL Server三种锁定模式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SQL Server三种锁定模式的示例分析”这...
    99+
    2024-04-02
  • Springboot中异步、定时、邮件任务的示例分析
    这篇文章主要介绍Springboot中异步、定时、邮件任务的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、异步任务1、编写一个类AsyncService异步处理还是非常常用的,比如我们在网站上发送邮件,后...
    99+
    2023-06-25
  • Java多线程定时器Timer原理的示例分析
    这篇文章给大家分享的是有关Java多线程定时器Timer原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Timer的schedule(TimeTask task, Date time)的使用该方法的作...
    99+
    2023-05-30
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作