一.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)定义的连接在这段时间内将不能被再用,这样就可以使下一个新的连接中不会出现这种旧的连接之前延迟的报文段。
相关推荐
在TCP/IP协议栈中,保活定时器(Keepalive Timer)是一种重要的机制,它用于确保连接的双方在长时间无数据交换后仍能确认彼此的活动状态。在Linux系统中,C语言编程时可以利用内核提供的接口来设置和管理TCP保活...
《TCP的重发定时器计算》 传输控制协议(TCP)是互联网协议栈中的关键组件,负责可靠的数据传输。为了确保数据的及时送达,TCP引入了一个重发定时器(Retransmission Timer,简称RTO)。RFC 2988详细阐述了如何计算...
在某些实现中,如快速定时器(tcp_fasttmr)和慢速定时器(tcp_slowtmr),定时器函数会在固定周期内执行,例如快速定时器每250毫秒执行一次,而慢速定时器每500毫秒执行一次。 最后是TCP定时器的实现。在LwIP中,...
TCP的坚持定时器PPT教案.pptx
在标题和描述中提到了几个关键的知识点:定时器、串口、TCP/IP协议以及时基时钟。这些是STM32开发中的基础且重要的模块。 首先,我们来看定时器。STM32内置多种类型的定时器,如通用定时器(TIM)、基本定时器(TIM...
在TCP协议中,使用了四种重要的定时器来处理不同情况下的时间依赖问题,确保连接的稳定性和可靠性。这四种定时器分别是:重传定时器、坚持定时器、保活定时器和时间等待计时器。 1. 重传定时器(Retransmission ...
第25章TCP的定时器 第19章选路请求和选路 第26章TCP输出 第27章TCP的函数 第28章TCP的输入 第29章TCP的输入(续) 第30章TCP的用户需求 第31章BPF:BSD分组过滤程序 第32章原始IP 附录A部分习题的解答 附录B源代码的...
在TCP协议中,有四种重要的定时器:重传定时器、坚持计时器、保活定时器和时间等待计时器,它们各自承担着确保连接稳定和数据可靠传输的关键任务。 1. **重传定时器**: 重传定时器的主要目的是处理可能出现的...
它不仅提供了与TCP控制块(TCP PCB)交互的接口,还实现了TCP定时器机制。通过深入分析此文件及其关键变量和数据结构,我们可以更好地理解LwIP如何处理TCP连接。 #### 二、TCP的超时变量 为了管理连接的不同阶段,...
在TCP协议中,定时器起着至关重要的作用,以确保连接的稳定性和数据的可靠性。TCP主要使用四种定时器:重传计时器、坚持计时器、保活计时器和时间等待计时器。 1. 重传计时器(Retransmission Timer) 重传计时器...
第22章 TCP的坚持定时器 245 第23章 TCP的保活定时器 251 第24章 TCP的未来和性能 256 第25章 SNMP:简单网络管理协议 270 第26章 Telnet和Rlogin:远程登录 293 第27章 FTP:文件传送协议 316 第28章 SMTP:简单...
这通常涉及到错误处理和定时重试机制,例如,当检测到连接断开时,程序可以设置一个定时器,一段时间后重新尝试连接。 5. **不间断通讯**:从压缩包的子文件名来看,"不间断通讯"可能指的是程序设计时特别考虑了...
01TCP-IP基础视频教程概述.wmv 02TCPP基础视频教程 Datalink Layer. wm 03TCPP基础视频教程IPwm...16TCP-P基础视频教程tcp的坚持定时器wm 17TCP-P基础视频教程tcp的保活定时器wmv 18TCPP基础视频教程tcp的未来和性能wmv
- **网络协议**:在网络通信中,定时器用于超时检测,如TCP的重传机制。 - **电源管理**:例如,待机模式或休眠模式的进入和退出常常依赖于定时器中断。 - **延迟操作**:比如延时函数的实现,让CPU在一段时间后...
在IT行业中,网络通信是至关重要的一个领域,TCP(传输控制协议)和MODBUS-TCP则是其中两个常见的通信协议。TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议,而MODBUS-TCP是在TCP/IP协议栈上构建的一种...
《TCP协议中的定时器机制详解》 在计算机网络领域,Transmission Control Protocol(TCP)作为互联网协议栈中的核心组件,以其可靠的数据传输特性被广泛应用。TCP的可靠性体现在它能确保数据的顺序传输、错误检测和...
例如,可以使用定时器来控制数据的发送间隔,或者设置事件驱动机制,当接收到特定数据时触发后续处理。数据采集可能涉及模拟输入、数字输入等硬件接口,LabVIEW提供对应的驱动程序支持。 4. **文件I/O**:为了保存...
8. **中断和定时器**:利用STM32的中断和定时器资源,优化网络接收和发送过程,提高实时性。 9. **调试与测试**:使用如Wireshark这样的网络分析工具,监控TCP/IP通信,确保数据正确无误地发送和接收。 10. **应用...
**TCP端口监听工具——tcptrace** 在IT行业中,网络通信是不可或缺的一部分,而TCP(传输控制协议)作为互联网协议栈中的重要一环,其工作状态直接影响到应用层服务的稳定性和效率。tcptrace是一款强大的TCP端口...