前言

对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器、坚持定时器、保活定时器、2MSL定时器。

重传定时器

非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间的确定,这里涉及到一大堆的算法,书上有说,我这里不细谈了)。每发送一个报文段就会启动重传定时器,假设在定时器时间到后还没收到对该报文段的确认,就重传该报文段,并将重传定时器复位,又一次计算;假设在规定时间内收到了对该报文段的确认,则撤销该报文段的重传定时器。

坚持定时器

上篇文章中已经提到了,主要是为了应付零窗体大小通知可能导致的死锁问题。假设接收端在向发送端发送了零窗体报文段后不久,接收端的接收缓存又有了一些存储空间,于是接收端向发送端发送了一个非零窗体大小的报文段,然而这个报文段在传送过程中丢失了,发送端没有收到该报文段,就一直等待接收端发送非零窗体的报文通知,而接收端并不知道报文段丢失了,而是觉得已经告诉发送端了,就会一直等待发送端发送数据,假设没有不论什么措施的话,这话死锁的局面会一直延续下去。

为了解决问题,TCP为每个连接设有一个坚持定时器(也叫持续计数器)。仅仅要TCP连接的一方收到对方的零窗体通知,就启动坚持定时器。若坚持定时器设置的时间到期,就发送一个零窗体控測报文段(该报文段仅仅有一个字节的数据,它有一个序号,但该序号永远不须要确认,因此该序号能够持续重传),之后会出现下面三种情况:

1、对方在收到探測报文段后,在对该报文段的确认中给出如今的窗体值,假设窗体值仍未零,则收到这个报文段的一方将坚持定时器的值加倍并重新启动。坚持计数器最大仅仅能添加到约60秒,在此之后,每次收到零窗体通知,坚持计数器的值就定位60秒。

2、对方在收到探測报文段后,在对该报文段的确认中给出如今的窗体值,假设窗体不为零,那么死锁的僵局就被打破了。

3、该探測报文发出后,会同一时候启动重传定时器,假设重传定时器的时间到期,还没有收到接收到发来的响应,则超时重传探測报文。

保活定时器

保活定时器是为了应对两个TCP连接间出现长时间的没有传输数据的情况。假设客户已与server建立了TCP连接,但后来client主机突然故障,则server就不能再收到client发来的数据了,而server肯定不能这样永久地等下去,保活定时器就是用来解决问题的。server每收到一次client的数据,就又一次设置保活定时器,通常为2小时,假设2小时没有收到client的数据,服务端就发送一个探測报文,以后每隔75秒发送一次,假设连续发送10次探測报文段后仍没有收到client的响应,server就觉得client出现了故障,就能够终止这个连接。

2MSL定时器

2MSL定时器測量一个连接处于TIME—WAIT黄台的时间,通常为2MSL(报文段寿命的两倍)。2MSL定时器的设置主要是为了确保发送的最后一个ACK报文段能够到达对方,并防止之前与本连接有关的因为延迟等原因而导致已失效的报文被误判为有效。

转载于:https://www.cnblogs.com/mfrbuaa/p/3861493.html

【网络协议】TCP中的四大定时器相关推荐

  1. 网络协议 TCP 数字编号和重传机制

    网络协议 TCP 数字编号和重发 1. TCP 的数字编号 2. TCP 确认机制的特点 2.1 TCP一次可发送多个数据包 2.2 仅对连续接收的数据段进行确认 2.3 不连续的数据将先缓存 3. ...

  2. 网络协议-TCP和UDP最完整的区别介绍

    网络协议-TCP和UDP最完整的区别介绍 前言:为了方便后期翻看,公众号在慢慢整理所发文章,关于Java网络编程内容的文章,可以在菜单栏-文章整理-进阶篇模块中查看. TCP与UDP基本区别   1. ...

  3. TCP协议-TCP中的定时器/计时器

    1 概述 我们知道,TCP协议是面向连接.提供可靠交付的服务的传输层协议. 为了保证传输的可靠性,TCP 使用了多种定时器,下面我们就来探讨和分析一下 TCP 使用了哪些定时器?分别起什么作用? 超时 ...

  4. 网络协议——TCP/IP协议

    简介: TCP(传输控制协议)和 IP(网际协议)是两个独立且紧密结合的协议,负责管理和引导数据报文在 Internet上的传输.二者使用专门的报文头定义每个报文的内容.TCP 负责和远程主机的连接, ...

  5. 网络协议:TCP/IP协议,你看懂了吗?

    这样的TCP/IP协议,你看懂了吗? 本文章转载自https://blog.csdn.net/yulyu/article/details/69062288 精通 TCP/IP,熟练使用 Socket ...

  6. 网络分层,网络协议TCP/IP模型,OSI模型

    TCP\IP模型是多种协议的综合,4层模型(也有说5层的). 其中最重要的就是分层结构和主要协议. 1.应用层(SMTP,HTTP,FTP) 2.传输层(TCP,UDP) 3.网络互联层(IPv4,I ...

  7. 网络协议-TCP、IP协议和互联网协议群

    目录 TCP/IP协议群简介(互联网协议群)(Internet Protocol Suite) 应用层(Application)(合并简化了展示层,会话层) 传输层(Transport) 网络层(In ...

  8. 网络协议 — TCP协议与HTTP协议

    HTTP HTTP协议是超文本传输协议(默认端口80),服务器传输超文本到本地浏览器的传送协议,HTTP是一个基于TCP/IP通信协议来传送数据的,HTTP就是客户端→服务端的数据传输. 大致工作流程 ...

  9. 网络协议-TCP协议详解

    本文转载自:https://www.pdai.tech/md/develop/protocol/dev-protocol-tcpip.html 重点:TCP滑动窗口,TCP握手,TCP重传机制. 简述 ...

最新文章

  1. Linux安装软件的注意事项,64位Linux下安装软件注意事项
  2. js不停地触发按钮的事件
  3. Kubernetes对象中的PersistentVolume、PersistentVolumeClaim和StorageClass的概念关系
  4. Seaborn(1)图画背景刻度设置
  5. php基础教程 第五步 逻辑控制
  6. java判断题_【Java判断题】请大神们进来看下、这些判断题你都知道多少~
  7. 智能用户增长神器QuickAudience开启公共云公测,助力企业业务增长
  8. hibernate saveorupdate mysql_Mysql数据库 hibernate保存数据时,Mysql主键需设定自增,否则报错_MySQL...
  9. 迅游科技拟作价27亿元收购移动应用开发商狮之吼
  10. 算法 之 栈的简单讲解
  11. <2021SC@SDUSC> 开源游戏引擎 Overload 代码模块分析 之 OvGame (一)—— 概况与 .rc 文件
  12. oc引导win方法_适配自己的OC引导一键生成Opencore Generation X使用指南
  13. 禁忌搜索算法求解TSP问题python实现
  14. After Effect弹性表达式的用法
  15. 魔兽世界服务器 运行状态,服务器状态查询,魔兽怀旧服务器状态查询
  16. linux 下简单安装 pathogen.vim
  17. 微信推出“微信圈子”,玩起来原来这么爽?
  18. php 系统分隔符,php脚本由哪个分隔符包围
  19. oracle gbk ebcdic,文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系...
  20. windows达梦数据库卸载不完全,重新装达梦数据库现有服务失败/该实例名已被其他实例占用

热门文章

  1. 阿里云使用public_key登录ssh
  2. ubuntu每日构建版
  3. 加速repo sync的技巧
  4. python3的flask出现UnicodeDecodeError UnicodeDecodeError
  5. jQuery和Vue的区别(转载)
  6. windows下面sublime无法粘贴复制的问题解决(转)
  7. 机器学习(三十五)——Actor-Critic, Integrating Learning and Planning(1)
  8. Intellij idea requested without authorization请求页面未经授...
  9. linux安装grub界面,系统安装: GRUB安装,配置及使用汇总
  10. ASP.NET 之 MVC框架及搭建