`
gaojingsong
  • 浏览: 1153272 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【tcp 四大定时器】

阅读更多

一.TCP的四种定时器

TCP使用四种定时器(Timer,也称为“计时器”):

重传计时器:Retransmission Timer

坚持计时器:Persistent Timer

保活计时器:Keeplive Timer

时间等待计时器:Time_Wait Timer。

 

(1)重传计时器:

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

重传时间=2*RTT;

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

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

(2)坚持计时器:persistent timer

专门为对付零窗口通知而设立的。

当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端TCP就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端TCP,确认已丢失,必须重传。

坚持计时器的截止期设置为重传时间的值,但若没有收到从接收端来的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,知道这个值增大到阈值为止(通常为60秒)。之后,发送端每隔60s就发送一个报文段,直到窗口重新打开为止;

(3)保活计时器:keeplive timer

每当服务器收到客户的信息,就将keeplive timer复位,超时通常设置2小时,若服务器超过2小时还没有收到来自客户的信息,就发送探测报文段,若发送了10个探测报文段(没75秒发送一个)还没收到响应,则终止连接。

(4)时间等待计时器:Time_Wait Timer

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

参考文献:《TCP/IP协议族》 Forouzan著,谢希仁译;

 

二.TCP的4个定时器

对每个连接,TCP管理4个不同的定时器。

重传定时器使用于当希望收到另一端的确认。

TCP在发送一份数据后,启动重传定时器,在经过若干时间后如果没有收到ACK,则重传该数据,这个时间间隔通常如下:1s, 3s, 6s, 12s, 24, 48s, 和多个64s。这个指数关系被称为指数退避。TCP会一直尝试重传该数据,在9分钟以后放弃。

坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。

假定有如下情况:接收方接收到一定量的数据,发现本地缓存满了,于是发送一个窗口大小为0的ACK给发送方,发送方在接收到该ACK后停止发送。一段时间后,接收方有空余的窗口,于是发送一个窗口大小非0的ACK以更新窗口,不幸的是该ACK丢失了,于是整个连接被停止。坚持定时器正是为了解决这个问题,它在接收到一个窗口大小为0的ACK以后,启动一个定时器,定时去查询是否窗口已经更新(同样采用指针退避)。

保活定时器可检测到一个空闲连接的另一端何时崩溃或重启。

有如下情况,连接建立好以后,发送方不发送任何数据,这样一直下去(有可能是发送方系统崩溃,或者网络被意外切断),这就导致服务端一直占用该连接,浪费资源。保活定时器通常每两小时发送一个探测请求以查看对方是否存活。

2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

2MSL时间是为了让TCP有时间发送最后一个ACK,防止该ACK丢失。

 

 

三.解读TCP四种定时器

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

对于每个连接,TCP 管理着四个不同的定时器:重传定时器、坚持定时器、保活定时器 以及 2MSL 定时器。

 

重传定时器

 

为了防止丢失数据报文段或确认报文段,当 TCP 发送报文段时,启动了特定报文段的重传计时器,若在计时器超时之前收到对报文段的确认,则撤销计时器。若收到特定报文段的确认之前计时器已经超时,则重传该报文,并把计时器复位。这里最重要的是超时的时间计算,有关该时间的请查阅具体的算法,这里不再进行记录。

 

坚持定时器

 

坚持定时器主要是解决零窗口大小通知可能导致的死锁问题。刚开始接收端向发送端发送了一个零窗口报文段。在不久之后,如果接收端的缓存区有一定的空间可以接收数据,此时接收端就会向发送端发送了一个非零窗口大小的报文段(即窗口更新),但是这个非零窗口大小的报文段在传输过程中丢失,导致发送端无法接收到该非零窗口大小的报文段。因此,发送端就会一直处于等待非零窗口大小的报文端通知,由于接收端已经发送了非零窗口大小的报文段,而且并不知道该报文段在传输过程中丢失,则接收端会一直处于等待接收数据状态,如果没有任何措施的话,这个死锁的局面会一直延续下去。

 

为了解决上面这个问题,TCP 为每一个连接设有一个坚持定时器(也叫持续计数器)。当发送端收到零窗口的确认时,就启动坚持计时器,当坚持计时器截止期到时,发送端就发送一个特殊的报文段,叫探测报文段,这个报文段只有一个字节的数据。探测报文段有序号,但序号永远不需要确认,甚至在计算对其他部分数据的确认时这个序号也被忽略。探测报文段提醒接收端,确认已丢失,必须重传。

 

坚持计时器的截止期设置为重传时间的值,但若没有收到来自接收端的响应,则发送另一个探测报文段,并将坚持计时器的值加倍和并复位,发送端继续发送探测报文段,将坚持计时器的值加倍和复位,直到这个值增大到阈值为止(通常为 60 秒)。在此之后,发送端每隔 60s 就发送一个报文段,直到窗口重新打开为止。

 

坚持定时器的原理:当 TCP 服务器收到了客户端的 0 滑动窗口报文时,启动一个定时器来计时,并在定时器溢出的时向客户端查询窗口是否已经增大,如果得到非零的窗口就重新开始发送数据,如果得到零窗口就再开一个新的定时器准备下一次查询。

 

保活定时器

 

保活定时器是为了应对 TCP 连接双方出现长时间的没有数据传输的情况。如果客户端与服务器建立了 TCP 连接之后,客户端由于某种原因导致主机故障,则服务器就不能收到来自客户端的数据,而服务器不可能一直处于等待状态,保活定时器就是用来解决这个问题的。服务器每收到一次客户端的数据,就重新设置保活定时器,通常为 2 小时,如果 2 小时没有收到客户端的数据,服务端就发送一个探测报文,以后每隔75秒发送一次,如果连续发送10次探测报文段后仍没有收到客户端的响应,服务器就认为客户端出现了故障,就可以终止这个连接。

 

2MSL 定时器

 

2MSL 定时器主要是解决以下两种情况:

 

TIME_WAIT 确保有足够的时间让对端收到了ACK,如果被动关闭的那方没有收到 ACK,就会触发被动端重发 FIN。因为最后一次确认应答 ACK 报文段很有可能丢失,因而使被动关闭方处于在LIST_ACK 状态的,此时被动关闭方会重发这个 FIN+ACK 报文段,在这等待的 2MSL 时间内主动关闭方重新收到这个被动关闭方重发的 FIN+ACK 报文段,因此,主动关闭方会重新发送确认应答信息,从而重新启动 2MSL 计时器,直到通信双方都进入 CLOSED 状态。如果主动关闭方在 TIME_WAIT 状态不等待一段时间就直接释放连接并进入 CLOSED 状态,那么主动关闭方无法收到来自被动关闭方重发的 FIN+ACK 报文段,也就不会再发送一次确认 ACK 报文段,因此被动关闭方就无法正常进入CLOSED 状态。

 

有足够的时间让这个连接不会跟后面的连接混在一起。防止已失效的请求连接出现在本连接中。在连接处于 2MSL 等待时,任何迟到的报文段将被丢弃,因为处于 2MSL等待的、由该插口(插口是IP和端口对的意思,socket)定义的连接在这段时间内将不能被再用,这样就可以使下一个新的连接中不会出现这种旧的连接之前延迟的报文段。

0
0
分享到:
评论

相关推荐

    TCP的定时器机制

    TCP的定时器机制,TCP设置多个定时器帮助其完成所承担的服务。

    TCP保活定时器的使用

    linux c 在tcp服务端或客户端设置保活定时器、ip选项域等。

    TCP-IP卷2-25_TCP定时器

    TCP-IP:TCP-IP卷2-25_TCP定时器

    TCP的坚持定时器PPT教案.pptx

    TCP的坚持定时器PPT教案.pptx

    RFC2988 计算TCP的重发定时器

    传输控制协议(TCP)[Pos81]使用一个重发定时器,在缺乏任何远端的数据接收方反馈的情况下来保障数据的传递。该定时器的时间间隔被称为RTO(重发超时)。RFC 1122 [Bra89]指明,RTO应该按照[Jac88]的描述进行计算。 ...

    LwIP之定时器的实现

    我们在学习LwIP时,总会看到关于TCP定时器的描述,但大多数资料都是从功能的角度来介绍TCP定时器。而LwIP中,TCP定时功能到底是如何实现的?网上能找到的资料却比较少。 本文从LwIP的源代码入手,详细分析了定时过程...

    详解TCP的四种定时器

    主要介绍了详解TCP的四种定时器的相关资料,需要的朋友可以参考下

    stm32定时器、串口、TCP/IP协议,时基时钟等

    此资源包括stm32的点灯程序,定时器、串口、中断、flash的读写、I2C等例程。 循序渐进。

    tcp四种定时器详解

    主要为大家介绍了tcp四种定时器,定时器在TCP可靠传输的过程中起着举足轻重的作用。TCP在建立连接之后可能(保活keep-alive定时器是可选的)会启动四个定时器

    TCP 四种定时器(重传定时器,坚持计时器,保活定时器,时间等待计时器)

    主要介绍了TCP 四种定时器,重传定时器,坚持计时器,保活定时器,时间等待计时器的相关资料,需要的朋友可以参考下

    《TCP/IP详解,卷1:协议》

    第22章 TCP的坚持定时器 245 第23章 TCP的保活定时器 251 第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单...

    TCP-IP详解卷二 TCP-IP详解卷二 TCP-IP详解卷二

    第25章TCP的定时器 第19章选路请求和选路 第26章TCP输出 第27章TCP的函数 第28章TCP的输入 第29章TCP的输入(续) 第30章TCP的用户需求 第31章BPF:BSD分组过滤程序 第32章原始IP 附录A部分习题的解答 附录B源代码的...

    TCPIP入门教程视频(全套共18集).rar

    01TCP-IP基础视频教程概述.wmv 02TCPP基础视频教程 Datalink Layer. wm 03TCPP基础视频教程IPwm...16TCP-P基础视频教程tcp的坚持定时器wm 17TCP-P基础视频教程tcp的保活定时器wmv 18TCPP基础视频教程tcp的未来和性能wmv

    tcp/ip 卷1

    第22章 TCP的坚持定时器 245 第23章 TCP的保活定时器 251 第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单...

    tcp,tcp,tcp

    tcp,tcp,ttcp,tcp,tcpctcp,tcp,tcpp,tcp,tcptcptcptcptcp,tcp,tcp,tcp,tcp,tcp,tcp

    TCP2ComV1.1.5.1免费好用的串口转TCP工具

    一个串口转TCP的程序,能很好的满足远程串口传输、调试需求,基本特征如下: 1、支持打开物理串口和虚拟串口(不创建虚拟串口,但能打开其他工具创建的虚拟串口)。 2、支持通过TCP客户端连接到远程TCP服务器。 3、...

    TCP/IP协议详解卷二:实现

    第二十五章 TCP的定时器 第二十六章 TCP输出 第二十七章 TCP的函数 第二十八章 TCP的输入 第二十九章 TCP的输入(续) 第三十章 TCP的用户需求 第三十一章 BPF:BSD分组过滤程序 第三十二章 原始IP 结束语 附录A ...

    TCP服务端和TCP客户端工具软件

    TCP服务端和TCP客户端工具软件 .exe直接执行

    微信小程序 TCP,IP长连接 (源码)

    微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长连接 (源码)微信小程序 TCP,IP长...

    TCP和MODBUS-TCP通讯调试软件

    日常调试TCP通讯或MODBUS-TCP通讯使用,亲测可用

Global site tag (gtag.js) - Google Analytics