TCP管理的4个不同的定时器:

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

2.坚持定时器:使窗口大小信息保持不断流动。

3.保活定时器:检测TCP空闲连接的另一端何时崩溃或重启。

4.2MSL定时器:测量一个连接处于TIME_WAIT状态的时间。MSL(报文段最大生存时间)

重传定时器

规定:第一次发送后所设置的超时时间为1.5秒,之后为3、6、12、24、48、多个64秒,     第一次到最后一次的时间差约为9分                  钟,定义该值的变量名为tcp_ip_abort_interval。

若收到特定报文段的确认之前计时器已经超时,则重传该报文,并把计时器复位。

慢启动并不完全正确,慢启动期间进入网络的分组数增加的速率仍然是在增加的,只有在达到ssthresh拥塞避免算法起作用时,这种增加的速率才会慢下来。

坚持定时器

根本目的是防止接收端回复的ACK报文丢失,导致发送端不能及时发送下一个报文的死锁情况。其作用是使窗口大小信息保持不断流动。

当接收端回复的通告窗口为0,从而使客户端停止发送任何数据时,发送方的坚持定时器开始计时,第一次触发坚持定时器重新发送报文的时间间隔约为5秒,之后的时间间隔约为5、6、12、24、48、多个60秒,这与重传定时器触发的时间间隔类似,值得注意的时,坚持定时器与重传定时器不同的是:坚持定时器的TCP从不放弃发送窗口探查,之后的探查每隔60秒发送一次,一直持续到窗口被打开或者TCP连接被终止。此外,坚持定时器重发的窗口探查为字节数为1的报文,这降低了对网络上带宽的占用。

TCP的保活定时器:(通常用于服务器)

我们之前提到过TCP的半打开(half-open)连接,即一端已经关闭或者异常终止而没有通知另一端所引起。保活功能就是试图在服务器端检测到这种半打开的连接。

但也有人提出异议,如果TCP的两端都没有异常,而是中间路由器因为某种原因down掉而又重新启动,保活功能将会认为TCP的一端出现问题而将一个很好的连接断掉,他们认为保活功能不应该在TCP中提供,而应该由应用程序完成,例如,BGP协议每30秒向对端发送一个应用的探查;osfp协议默认hello消息10秒,dead 40秒,即如果40s没有收到hello消息,就认为邻居down掉了。

规定:如果一个给定的连接在默认的两个小时(tcp_keepidle = 14400 每个代表500ms)之内没有任何动作,则服务器就向客户发送一个探查报文段,客户机一定处于以下四种状态之一:

(1).客户机正常运行,并从服务器可达。这时,服务器将keepalive timer复位。

(2).客户机已经崩溃或者关闭或者重新启动。客户机的TCP没有响应,服务器将在75秒超时后在此向客户机发送探查报文段,总共发送10个,每个间隔75秒(tcp_keepintvl = 150),如果服务器都没有收到响应,则终止TCP连接。

(3).客户机崩溃并已经重新启动。此时如之前提到的半打开连接,客户端不再承认与服务器的tcp连接,它会向服务器发送RST响应,终止该连接。

(4).客户机正常运行,但是服务器不可达。这时,服务器的探查报文超时,接下来的操作与情况(2)相同。

2MSL定时器:

TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间(MSL)。它是任何报文段被丢弃前在网络内的最长时间(默认为2分钟,实现中常设置为30秒,1分钟或2分钟)。正如前文所提2MSL状态,2MSL定时器在TCP终止的四次握手中的第四次握手开始启动,此时发送FIN方处于LAST_ACK状态,而发送ACK方处于TIME_WAIT状态,为了确保它发送的最后一个ACK可以顺利的到达服务器,2MSL定时器启动,直至到达预定的时间才复位结束,双方进入CLOSED状态。如果主动关闭方在被动关闭方的TIME_WAIT状态不等待一段时间就直接释放连接并进入 CLOSED 状态,那么主动关闭方无法收到来自被动关闭方重发的 FIN+ACK 报文段,也就不会再发送一次确认ACK 报文段,因此被动关闭方就无法正常进入CLOSED状态。

此外,还有一点要说明,即使主动关闭方顺利收到ACK并且进入CLOSED状态,被动关闭方仍然要等待2MSL时间,并且,这段时间内,被动关闭方的端口不可以被其他应用程序使用,要等到2MSL时间结束才可继续使用。当连接处于2MSL等待阶段时任何迟到的报文段都将被丢弃。不过在实际应用中可以通过设置SO_REUSEADDR选项达到不必等待2MSL时间结束再使用此端口。

TCP的四种定时器简单记录的更多相关文章

  1. TCP四种定时器--学习笔记

    TCP使用四种定时器: 重传定时器(Retransmission Timer).坚持定时器(Persistent Timer).保活定时器(Keeplive Timer).时间等待定时器(Time_W ...

  2. wpf中应该使用c#四种定时器中的DispatcherTimer

    c#中有四种定时器 1:System.Threading.Timer 使用: private System.Threading.Timer timerClose; timerClose = new S ...

  3. 动手学习TCP:4种定时器

    上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用 ...

  4. 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。

    laviewpbt  2014.8.4 编辑 Email:laviewpbt@sina.com   QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...

  5. 解读TCP 四种定时器

    TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据. ...

  6. TCP交换数据流——Nagle算法简单记录

    Nagle算法: 该算法提出的目的是想解决网络中大量的小的TCP数据包造成网络拥塞的问题,举个例子,当客户端要发送一个字节的TCP数据包到服务器时,我们实际上产生了41字节长的分组:包括20字节的IP ...

  7. Tomcat,Weblogic,WebSphere,JBoss四种服务器简单对比

    1,tomcat是Servlet容器,支持JSP.Servlet.JDBC等J2EE关键技术,常用于tomcat开发基于数据库.Servlet和JSP页面的Web应用.2,tomcat不是EJB容器, ...

  8. Jquery调用webService的四种方法 转载-记录

    我总结几个关键点 1. 服务必须声明为ScriptService(否则会出现下面的问题) 2.服务的方法不需要任何更改,保持原状 3.客户端用jquery的.ajax方法来调用 3.1 type必须是 ...

  9. RabbitMQ简单实现,exchange四种模式,持久化

    RabbitMQ目录 一.简介,简单实现二.Exchange四种类型简单介绍三.消息确认,交换机.队列及消息持久化一.简介及简单实现RabbitMQ是一个消息代理:它接受并转发消息.你可以把它当成一个 ...

随机推荐

  1. .NET下XML文件的读写

    一.前言: XML是微软.Net战略的一个重要组成部分,而且它可谓是XML Web服务的基石,所以掌握.Net框架下的XML技术自然显得非常重要了.本文将指导大家如何运用C#语言完成.Net框架下的X ...

  2. bjtu 1846. Infinity的装备[状压dp+dfs/bfs]

    https://citel.bjtu.edu.cn/acm/oj/problem/1846 1846. Infinity的装备 时间限制 1000 ms 内存限制 64 MB 题目描述 “测试服终于下 ...

  3. apache2.4+tomcat8+jk1.2.40集群配置

    由于目前很多apache+tomcat集群都是在apache2.2上配置的,Apache2.4的教程几乎没有,这里写一篇记录下来. 环境:apache2.4.12(Apache Haus编译版本).t ...

  4. 串口调试利器--Minicom配置及使用详解

    因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择.目前知道的,PL2303的驱动是有的,在dev下的名称是ttyUSB*. Minicom,是Linux下应用比较广泛的串口软 ...

  5. Mac OS X上使用Wireshark抓包

    Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的X ...

  6. mac 配置pylucene

    1 . 安装python 2  安装ant 3  下载pylucene 4  cd jcc , vim setup.py , 查看java路径和python路径是否正确 5 python setup. ...

  7. VS2010 MFC中 Date Time Picker控件的使用

    1. 在工具箱中找到Date Time Picker控件,然后拖放到对话框上. 2. 在其属性中按自己的需求做一些设置. Format 属性:Long Date (长日期):****年**月**日 S ...

  8. HTML5 Canvas 绘制新西兰国旗

    代码: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Type ...

  9. java -jar xxx.jar

    之前用MyEclipse做了一个可执行jar,点击就可运行的. 今天突然不好用了,错误是: could not find the main class C:\123\abc.jar.Program w ...

  10. Linux Unix shell 编程指南学习笔记(第四部分)

    第十六章  shell脚本介绍 此章节内容较为简单,跳过. 第十七章   条件測试 test命令 expr命令 test  格式  test  condition     或者  [ conditio ...