(1)超时重传定时器
tcp的靠谱特性,通过确认机制,保证每一个包都被对方收到,那么什么时候需要重传呢?就是靠这个超时重传定时器,每次发送报文前都启动这个定时器,如果定时器超时之前收到了应答则关闭定时器,如果没收到就重发该报文,并重置定时器。
 
(2)建连定时器
和重传定时器类似,发送syn时,为了防止被丢弃,一段时间不回复ack也会重传。
 
 
(3)TIME_WAIT(2MSL)定时器
主动发送fin的一端,在接收到对端的ack报文后会进入TIME_WAIT等待自状态,一方面是防止自己回复对方fin的ack被丢掉了,对方无法释放资源,给对方一次重新发送fin的机会(对方等1MSL发现没回+又发送fin(最多耗时1MSL收到)),另一方面是防止刚释放的端口被新建立的连接用上,刚好又有老连接的报文迟到被新连接误用。tcp是一群讲究公平的生物,他们总是期望两边的资源尽量对等,一端释放的时候尽量确保对方也释放,但有时候对端死活没响应,那也不能死等。通常的做法是,我想释放资源了,那么我告诉你一声,等收到你回复了,我就知道你已经释放了,那么我也释放资源。但是有时候,等了一段时间还没收到回复,那就认为是中间传话的系统出问题了,那我再通知一次,再过一段时间,还不回复,那就认为你自己偷偷释放资源了,所以我也不等了,释放资源。TIME_WAIT为了确定对方能释放资源,多等一会儿自己再释放。
 
(4)坚持定时器
如果发送方数据发送的比较快,接收方处理的比较慢,那么接收方的缓存队列可能会满,这时没法接收新数据了,会将窗口值为0通知给发送方,而发送方将不再发送数据。过一段时间接收方处理完了,队列有了空闲,又把窗口调大,通知给发送方,但这个报文可能被不可靠的链路丢掉,而这个是不会确认和重传的,这样发送方就一直认为接收方的窗口为0,一直等待下去了。为此有了坚持定时器,发送方接收到0窗口就会启动该定时器,定期的询问窗口值变为多少了。
 
(5)保活定时器
不懂为什么起名叫保活定时器,其实是起的探测作用,定时发送探测报文,探测对端是否还活着,防止资源被白白占用。如客户端和服务器建立连接,客户端直接断电,那么如果没有这个探测,那么服务器会认为这个客户端还在,对应连接的资源就不会释放。有了这个探测,如果客户端已经重启了,会直接回复复位报文给服务器,服务器就会释放原来的资源,新建立连接,如果客户端关机不重启,服务器探测几次之后也知道对方挂了,会释放资源。
 
(6)延迟确认定时器
为了提高利用率,接收到报文,不立即回复ack,而是延时一段时间,将ack捎带在其他报文里。
 
 

tcp中的常见定时器的更多相关文章

  1. 【网络协议】TCP中的四大定时器

    前言 对于每个TCP连接,TCP一般要管理4个不同的定时器:重传定时器.坚持定时器.保活定时器.2MSL定时器. 重传定时器 非常明显重传定时器是用来计算TCP报文段的超时重传时间的(至于超时重传时间 ...

  2. TCP中的RST复位信号

    TCP中的RST复位信号 在TCP协议中RST表示复位,用来关闭异常的连接,在TCP的设计中它是不可或缺的. 发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓存区的包发送RST包.而接收 ...

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

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

  4. TCP/IP之坚持定时器、报活定时器

    TCP中的四个定时器: 1.超时定时器(最复杂的一个) 2.坚持定时器 3.保活定时器 4.2MSL定时器 坚持定时器用于防止通告窗口为0以后c/s双方相互等待死锁的情况:而保活定时器则用于处理半开发 ...

  5. TCP中ECN的工作原理分析二(摘自:RFC3168)

    英文源:http://www.icir.org/floyd/ecn.html 发送端和接收端处理: The TCP Sender For a TCP connection using ECN, new ...

  6. 三十天学不会TCP,UDP/IP网络编程 -- TCP中的智慧之连续ARQ

    突然发现上一篇文章贴图有问题,关键我怎么调也调不好,为了表达歉意,我再贴一篇gitbook上的吧,虽然违背了我自己的隔一篇在这里发一次的潜规则~其余完整版可以去gitbook(https://www. ...

  7. 监听器(Listener)学习(二)在开发中的常见应用

    监听器在JavaWeb开发中用得比较多,下面说一下监听器(Listener)在开发中的常见应用: 统计当前在线人数 自定义Session扫描器 一.统计当前在线人数 在JavaWeb应用开发中,有时候 ...

  8. TCP的四种定时器简单记录

    TCP管理的4个不同的定时器: 1.重传定时器:用于当希望收到另一端的确认. 2.坚持定时器:使窗口大小信息保持不断流动. 3.保活定时器:检测TCP空闲连接的另一端何时崩溃或重启. 4.2MSL定时 ...

  9. TCP 中的三次握手和四次挥手

    Table of Contents 前言 数据报头部 三次握手 SYN 攻击 四次挥手 半连接 TIME_WAIT 结语 参考链接 前言 TCP 中的三次握手和四次挥手应该是非常著名的两个问题了,一方 ...

随机推荐

  1. WNMP环境搭建步骤 nginx1.4.3+php-5.3.27+mysql-5.5+RunHiddenConsole

    安装目录:D:/webServer/所需软件:     mysql-installer-community-5.5.34.0.msi         下载:http://cdn.mysql.com/D ...

  2. RocksDB Rate Limiter源码解析

    这次的项目我们重点关注RocksDB中的一个环节:Rate Limiter.其实Rate Limiter的思想在很多其他系统中也很常用. 在RocksDB中,后台会实时运行compaction和flu ...

  3. HeidiSQL

    相关链接 https://www.heidisql.com/ - 官网 https://github.com/HeidiSQL/HeidiSQL - 源码 参考 ...

  4. 利用localStorage实现浏览器中多个标签页之间的通信

    原理: localStorage是浏览器存储数据的容器,而且它是多页面共享的,利用localStorage多页面共享的特性,可以实现多个标签页的通信. 比如: 一个标签页发送消息(将发送的消息设置到l ...

  5. JavaEE高级-MyBatisPlus学习笔记

    第 1 章 简介 1.1 MyBatisPlus 介绍 -MyBatis-Plus(简称 MP),是一个 MyBatis 的增强工具包,只做增强不做改变. 为简化开发工作.提高生产率而生我们的愿景是成 ...

  6. [HTTP知识体系]前端常用的一些参数

    1.http常见状态码(status code) 200(成功) 服务器已成功处理了请求.通常,这表示服务器提供了请求的网页. 301 (永久移动) 请求的网页已永久移动到新位置. 服务器返回此响应( ...

  7. Python核心技术与实战——九|面向对象

    在搞清了各种数据类型.赋值判断.循环以后如果是从C++.Java语言入手的,就会有一个深坑要过:OOP(object oriented programming):公私有保护.多重继承.多态派生.纯函数 ...

  8. java 通过反射获取数组

    1.创建数组.设置数组元素.访问数组 一维数组: 多维数组: public Class<?> getComponentType() 返回表示数组组件类型的 Class.如果此类不表示数组类 ...

  9. 在 LaTeX 中同步缩放 TikZ 与其中的 node

    PGF/TikZ 是 Till Tantau 开发的基于 TeX 的绘图引擎.因其可以直接在 LaTeX 文稿中通过代码绘制向量图,所以是目前流行的 LaTeX 绘图解决方案之一. 在 tikzpic ...

  10. 【GDOI2014模拟】服务器

    前言 直到比赛最后几分钟,才发现60%数据居然是一个水dp,结果没打完. 题目 我们需要将一个文件复制到n个服务器上,这些服务器的编号为S1, S2, -, Sn. 首先,我们可以选择一些服务器,直接 ...