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. LeetCode OJ--Combinations *

    https://oj.leetcode.com/problems/combinations/ 给一个集合,求个数为k的所有子集 递归调用,深搜 class Solution { public: vec ...

  2. 使用Nginx+FFMPEG搭建HLS直播转码服务器

    目的:使Nginx支持Rtmp协议推流,并支持hls分发功能及FFMPEG转码多码率功能. 一.准备工作 模块:nginx-rtmp-module-master(支持rtmp协议) 下载地址: htt ...

  3. usaco-Subset Sums

    题意: 给出一个1-n的数列,求把它分为两组数使得两组数的和相等的方案数. 分析: 如果可能分成两组,那么(n+1)n/2一定为偶数,且n%4=2或3.可以设dp[i][j]表示从1-i中的数拼出的方 ...

  4. luogu P1592 互质

    题目描述 输入两个正整数n和k,求与n互质的第k个正整数. 输入输出格式 输入格式: 仅一行,为两个正整数n(≤10^6)和k(≤10^8). 输出格式: 一个正整数,表示与n互质的第k个正整数. 输 ...

  5. 设计模式(1)---Factory Pattern

    针对的问题:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行. 第一步:创建接口 //创建一个接口 public interface Shape { pu ...

  6. Confluence JIRA快速入门

    Confluence JIRA快速入门 http://www.confluence.cn/pages/viewpage.action?pageId=2916470

  7. Flak快速上手

    本文介绍如何上手 Flask . 这里假定你已经安装好了 Flask ,否则请先阅读< 安装>. 如果已安装好Flask,通过以下命令查看 一个简单的例子: from flask impo ...

  8. Sublime3破解教程[转载]

    sublime text 3 这个IDE相信很多人认识,尤其是python的.相对pycharm ide而言,速度快.界面清爽等优点,下面就分享下各个版本的破解方法 用UltraEdit等编辑器打开s ...

  9. Neural Turing Machines-NTM系列(一)简述

    Neural Turing Machines-NTM系列(一)简述 NTM是一种使用Neural Network为基础来实现传统图灵机的理论计算模型.利用该模型.能够通过训练的方式让系统"学 ...

  10. 【Excle数据透视表】如何显示/隐藏数据透视表字段列表

    在创建完毕的数据透视表中,若单击数据透视表中任意单元格,即可显示数据透视表字段列表窗格,用户就可以通过弹出的窗格进行字段调整 两种情况需要隐藏数据数据透视表窗格 ①数据透视表已经完成 ②失误关闭窗格 ...