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动态展示遗传算法求解TSP旅行商问题(转载)

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/jiang425776024/articl ...

  2. pip 安装的问题

    安装 pip install   mysql-python 报错: mysql_config: command not found 解决办法: yum install mysql-devel yum ...

  3. Vue UI组件库

    1. iView UI组件库  iView官网:https://www.iviewui.com/ 2.Vux UI组件库   Vux官网:https://vux.li/ 3.Element UI组件库 ...

  4. Qt编写自定义控件35-GIF录屏控件

    一.前言 在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基 ...

  5. Jmeter之分布式部署测试

    在使用Jmeter进行性能测试时,因受单机电脑的配置限制,可能无法支持较大数量的并发,此时就需要使用Jmeter提供的分布式测试的功能. jmeter分布式测试的执行原理是选择一台作为调度机,其他机器 ...

  6. Json_DataMember签名作用

    [DataContract] public class ApiResponse { [DataMember] public string Time { get; set; } } 序列化和反序列,如果 ...

  7. c++后台开发面试常见知识点总结(一)c++基础

    指针和引用的区别 extern,const,static,volatile关键字 #define 和const的区别 关于typedef和#define; C++程序中内存使用情况分析(堆和栈的区别) ...

  8. 实现在线阅读WORD,PDF等文件,JAVA,PHP都可以

    1 <?php 2 //header("Content-type:text/html;charset=utf-8"); 3 //word转html 展示 4 $lj=$_GE ...

  9. 安装flask_mysqldb出现报错问题解析

    安装 mysqldb (pip3 install Flask-MySQLdb)报错 EnvironmentError: mysql_config not found ERROR: Command er ...

  10. 【VS开发】malloc申请内存错误分析

    每个进程会有4G的虚拟地址空间, malloc得到的的地址都是虚拟地址, 并且当malloc的时候, 操作系统并不会将实际的内存分配给进程的, 所以malloc只会占用进程自身的虚拟地址空间.我以前也 ...