1 概述

  • 重传定时器:使用于当希望收到另一端的确认。
  • 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
  • 保活(keepalive)定时器:用于检测一个空闲连接的另一端何时崩溃或重启。
  • 2MSL定时器:测量一个连接处于TIME_WAIT状态的时间。

2 重传定时器

  • 目的:提高TCP可靠性,确保对方收到,并返回ACK。
  • 作用:重新发送丢失的包
  • 重传时机:超时时间(RTO)
  • RTO值:RTO不能是固定值,需要参考往返时间(RTT)
  • 计算算法:经典算法(SRTT算法)、 Karn / Partridge 算法(SRTT优化算法)、Jacobson / Karels 算法(SRTT改良算法)

3 坚持定时器

  • 目的:滑动窗口为0时,Sender将停止发送数据给Receiver。但是Sender需要知道Receiver何时才可以接受新的消息(窗口探测技术)。
  • 作用:Sender轮询问Receiver的滑动窗口大小(零窗口通知),从而决定发送消息或关闭连接。
  • 补充:Receiver可以不回复Sender自己的滑动窗口大小,这样Sender就会重传该报文。

4 保活定时器

  • 目的:在两个TCP连接间出现长时间的没有传输数据的情况,判断对方是否还活着
  • 作用:一般为每2个小时去询问对方是否还活着
  • 情况
    • 客户主机正常运行且可达:保活定时器复位。
    • 客户主机崩溃:保活探测没有响应,75秒后超时重试,一般重试10次,最后都没有响应则关闭连接。
    • 客户主机崩溃并重新启动:这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。
    • 客户主机正常运行但不可达:同第二种情况

5 2MSL定时器

  • 目的:确保对端有足够的时间收到ACK,并把TCP状态从TIME_WAIT => CLOSED
  • 作用:主动关闭连接时,需要发送完ACK,并对端收到ACK时,才算结束。但是可能网络原因导致,对方没有收到ACK,所以对方需要重新发送FIN报文,这边则发送ACK报文。2 * MSL是为了保证对端能够有足够时间发送两个FIN报文
  • MSL值(TCP段的最大存活时间):需要参考TTL时间(IP数据报的存活时间),大于等于TTL即可。

6 补充

  • RTT(往返时间):采样值,一般实时计算,比较严格
  • TTL(IP报文存活时间):固定值
  • MSL(TCP段的最大存活时间):固定值,MSL >= TTL

7 参考资料

TCP协议探究(四):定时器的更多相关文章

  1. TCP协议探究(一):报文格式与连接建立终止

    一 TCP:传输控制协议报文格式 1 TCP服务 提供面向连接.可靠的字节流服务 面向连接意味着两方通信,不支持多播和广播 可靠性的支持: 应用数据被分割成TCP认为最适合发送的数据块.由TCP传递给 ...

  2. TCP协议探究(二):超时与重试

    1 概述 TCP提供可靠的运输层. 可靠性保证之一:确认从另一端收到的数据. 但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这种问题. 如果当定时器溢出时还没有收到确认,它就重传该 ...

  3. TCP协议探究(三):RTT、滑动窗口和阻塞处理

    1 RTT算法 1.1 概述 上一节说了重传机制需要设置一个重传超时值(RTO,Retransmission TimeOut),RTO设长了,重发太慢:设短了,可能导致包没有丢,就重发了,可能导致雪崩 ...

  4. TCP协议详解7层和4层解析(美团,阿里) 尤其是三次握手,四次挥手 具体发送的报文和状态都要掌握

    如果想了解HTTP的协议结构,原理,post,get的区别(阿里面试题目),请参考:HTTP协议 结构,get post 区别(阿里面试) 这里有个大白话的解说,可以参考:TCP/IP协议三次握手和四 ...

  5. TCP协议的三次握手和四次挥手过程

    TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...

  6. 具体解释TCP协议的服务特点以及连接建立与终止的过程(俗称三次握手四次挥手)

    转载请附本文的链接地址:http://blog.csdn.net/sahadev_/article/details/50780825 ,谢谢. tcp/ip技术经常会在我们面试的时候出现,非常多公司也 ...

  7. TCP协议--TCP三次握手和四次挥手

    TCP三次握手和四次挥手 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 一.TCP三次握手   第一次握手 客户端向服务器发出连 ...

  8. TCP协议的三次握手和四次挥手

    暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...

  9. TCP协议三次握手和四次挥手

    http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...

随机推荐

  1. Python 类中__init__()方法中的形参与如何修改类中属性的值

    一.__init__()方法 如果__init__()方法为 class Cat(): def __init__(self,num) : self.num=num Python中类的__init__( ...

  2. v-if与v-show的区别?

    v-if的显示和隐藏实在dom里创建和消除dom节点 v-show是用css样式的display来控制dom节点的显示和隐藏 相比之下,v-show 就简单得多——不管初始条件是什么,元素总是会被渲染 ...

  3. ubuntu 命令行以及目录的显示改为英文

    在安装ubuntu的时候原本以为把ubuntu改为中文的好理解一些,最后发现命令行的报错一边中文一边英文确实难受,也不宜于学习,所以想把命令行以及目录的显示都改为英文的,我是这样先把命令行的该为英文的 ...

  4. Visual Studio2013的C语言编译器对C99标准的支持情况

    Visual Studio2013终于开始比较良好地支持C99特性了.在此之前,如果用C语言写代码的话,变量名都需要放到函数体的前面部分,代码写起来十分别扭. 而Visual Studio2013中的 ...

  5. epoll简介 与 UDP server的实现

    Abstractepoll是Linux内核为处理大批量句柄而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著减少程序在大量并发连接中只有少量活跃的情况下的系 ...

  6. MySQL中tinytext、text、mediumtext和longtext等各个类型详解

    转: MySQL中tinytext.text.mediumtext和longtext等各个类型详解 2018年06月13日 08:55:24 youcijibi 阅读数 26900更多 个人分类: 每 ...

  7. kettle的用法

    一: 从一个数据库导入表的数据到另一个 数据库的表中(表数据同步) 1:在 主对象树-- DB连接 中新建 连接: 在选项中 设置字符集: 2: 在 核心对象中 先增加一个  表输入: 再增加一个 插 ...

  8. mysql大数据量下优化

    1 优化sql和索引2 增加缓存如:redis3 主从复制或主主复制,读写分离4 利用mysql自带分区表5 先做垂直拆分,将一个大系统分为多个小系统,也就是分布式6 水平切分,要选择一个合理的sha ...

  9. error_reporting函数引起的error_log配置失效的问题

    由于项目代码中大量使用了error_reporting(0);导致php.ini中的error_log失效,不记录错误日志, 导致调试起来非常不便,耗费大量的时间,所以在php.ini的配置中禁止掉e ...

  10. HDU1003 最大连续子序列

    Max Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...