TCP协议中的四种定时器

TCP四种定时器

重传计时器、坚持计时器、保活计时器、时间等待计时器

重传计时器:

在TCP发送报文时创建,用来确认报文是否成功发送,超过预定时间,则重新发送,设置重传计时器之后,通常有两种情况:

1、在计时器截止时间到达之前收到了对以发送报文的确认信号,则撤销此计数器;

2、计时器时间到达仍未收到确认信号,则重新发送该报文,并将计时器复位。

坚持计时器:

这种计时器通常是和窗口大小有关的。

先考虑这样一种场景:发送端由于发送速度太快,接收端的窗口大小为零,这是接收段就会发送信号告诉发送端,我现在窗口大小为零,先不要发送数据了,接收端接收到之后,暂停发送数据;一段时间之后,接收端有了新的窗口大小,这时会再向发送段发送确认信号,我现在缓冲区有空间了,并告诉了自己的窗口大小【在前面三次握手和四次挥手中可以看到,我们是不需要对确认信号再次进行确认的】。但是这里可能会出现问题的是,接收端发送的这个确认数据包可能会丢失,一旦丢失,接收端在等待着发送端发送数据,发送端在等待着接收段发来确认信号,以继续发送数据,这就造成了死锁。

很明显,这种情况是由于接收端窗口大小为零之后可能导致的问题。为了避免这种情况,就有了坚持计数器的产生。当发送端收到窗口大小为0的确认信号时,就启动了坚持计数器,如果坚持计数器的时间到达之后,还没有收到接收端发来的确认信号,就会主动发送一个特殊的报文端,叫做探测报文。探测报文只有一个字节的数据,它有一个序号,和普通报文不同,它的序号不需要被确认。探测报文是为了提醒接收端,刚刚给我发送的窗口大小已经丢了,要重新想我发送ACK确认信号,如果接收端没有回应,则需要重新发送一个探测报文,并将坚持计数器的时间加倍,直到增大到60s。在这之后,每隔60s就发送一个探测报文,直到窗口重新打开。

     TCP规定,即使窗口大小为0,也必须接收的三种报文: 零窗口探测报文段、确认报文段和携带紧急数据的报文段。

保活计时器:


用来防止两个TCP之间的连接出现长时期的空闲。

当client打开了server的连接,传送了很短时间的数据之后,就保持静默,可能会因为各种原因导致,但现在它确实处于了空闲状态。如果由于client出现故障,那么这个连接就一直处于打开状态。

为了避免这种情况,引入了保活计时器。每当server收到了client发来的信息,就将计时器清零。如果server超过了保活计时器的时间仍没有收到任何消息,就会向client发送探测报文段,若发送了10个探测报文段之后仍没有反应,则认为client故障,server主动断开连接。

时间等待计时器:

连接终止期间使用【TIME_WAIT】。

首先认识一个概念,MSL,报文最大生存时间。任何报文在网络上超过MSL之后,将被直接丢弃。

在TCP第三次挥手期间,客户端收到了服务器发来的FIN报文,之后客户端启动了TIME_WAIT计时器,时间设置为2MSL,并发送最后一个ACK。保证了2MSL时间内server可以收到最后一个ACK确认信号,同时保证了在之前发送的报文不会在连接关闭之后再次骚扰server,因为网络中的数据包到达目的地的时间是不确定的。

重传计时器 通常设置为 60s

坚持计时器 门限值60s

保活计时器 通常设置为2小时

时间等待计时器 通常设置为2MSL

时间: 2024-08-26 15:06:36

TCP协议中的四种定时器的相关文章

《网络协议》TCP 四种定时器

TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据.关键在于超时和重传策略,即怎样决定超时的时间间隔和如何确定重传的频率. 对于每个连接,TCP 管理着四个不同的定时器:重传定时器.坚持定时器.保活定时器 以及  2MSL 定时器. 重传定时器 为了防止丢失数据报文段或确认报文段,当 TCP 发送报文段时,启动了特定报文段的重传计时器,若在计时器超时

TCP协议中的三次握手和四次挥手(图解)【转】

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好.这么久才来更新,抱歉!! 错误配图如下: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?

TCP 协议中的 Window Size与吞吐量

原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.html TCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响. ?TCP窗口目的 为了获得最优的连接速率,使用TCP窗口来控制流速率(flow control),滑动窗口就是一种主要的机制.这个窗口允许源端在给定连接传送数据分段而不用等待目标端返回ACK,一句话描述:窗口的大小决定在不需要对端响应(acknowledgement)情况下传送数据的数量.?官方定义:"The am

TCP协议中的计时器

说明:  本文仅供学习交流,转载请标明出处,欢迎转载! 本文是以下文献相关内容的总结 [1] <TCP/IP详解 卷1:协议> [2] <TCP/IP协议族 第4版> [3] <计算机网络 第5版> TCP协议通常包括4种计时器:重传计时器.持续计时器.保活计时器和时间等待计时器. 重传计时器:Retransmission Timer,该计时器用于整个连接期间,用于处理RTO(重传超时).当一个报文从发送队列发出去后,就启动该计时器.若在RTO之内收到了该报文的ACK,

Activity中的四种启动模式

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Android总Activity的启动模式分为四种: [html] view plaincopy Activity启动模式设置: <activity android:name=".MainActivity" android:launchMode="standard" 

C++中的四种转型操作符

在详细介绍C++中的四种转型操作符之前,我们先来说说旧式转型的缺点: ①它几乎允许将任何类型转换为任何其他类型,这是十分拙劣的.如果每次转型都能够更精确地指明意图,则更好. ②旧式转型难以辨识.旧式转型的语法结构是由一对小括号加上一个对象名称组成,而小括号和对象名称在C++的任何地方都有可能被使用. 为解决C旧式转型的缺点,C++导入了4个新的转型操作符:static_cast.const_cast.dynamic_cast.reinterpret_cast.下面我来一一分析这四种转型操作符.

JAVA中的四种引用以及ReferenceQueue和WeakHashMap的使用示例

简介: 本文主要介绍JAVA中的四种引用: StrongReference(强引用).SoftReferenc(软引用).WeakReferenc(弱引用).PhantomReference(虚引用)的作用.同时我们还将介绍ReferenceQueue和WeakHashMap的功能和使用示例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. JAVA中的四种引用 四种引用中,软引用.若引用.虚引用都需要相关类来创建.创建的时候

TCP协议中的SO_LINGER选项

TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回.如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间. 以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态.如果没有延迟关闭(即设置SO_LINGER选项),在调用tcp_send_fin()发送FIN后会立即调用sock_or

TCP协议中RTO的计算

说明:  本文仅供学习交流,转载请标明出处,欢迎转载! 本文是以下文献相关内容的总结 [1] <TCP/IP详解 卷1:协议> [2] <TCP/IP协议族 第4版> [3] <计算机网络 第5版> TCP协议中经常会发生超时重传的情况,我们知道超时重传中的"时"是即RTO.RTO是Retransmission Time-OutD的缩写,该时间决定了发送方在发送数据后,在多长时间内如果没有收到ACK,就重置重传计时器,并重传上次发送失败的报文.那么R