(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. Cleaning Robot (bfs+dfs)

    Cleaning Robot (bfs+dfs) Here, we want to solve path planning for a mobile robot cleaning a rectangu ...

  2. 切入点表达式execution()

    用于描述方法 [掌握] 语法:execution(修饰符 返回值 包.类.方法名(参数) throws异常) 修饰符,一般省略 public                公共方法 *         ...

  3. Spring基础14——Bean的生命周期

    1.IOC容器中的Bean的生命周期方法 SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务.SpringIOC容器对Bean的生命周期进行管理 ...

  4. Windows及Android倍速播放视频软件下载

    目录 1. 更多推荐 2. 关键字 3. 按 4. 软件下载 4.1. IOS应用商店 4.2. 网盘下载 5. 软件介绍 5.1. PotPlayer(Windows) 5.2. MoboPlaye ...

  5. make_smbcodepage - 为Samba创建代码页文件

    总览 make_smbcodepage c|d 代码页 输入文件 输出文件 描述 这个工具是是Samba组件的一部分. 针对Samba 2.2的国际化功能,使用make_smbcodepage可以编译 ...

  6. CentOS7升级gcc

    CentOS7.5升级gcc到8.3.0版本 1.下载源码包 cd /usr/local/src wget http://ftp.tsukuba.wide.ad.jp/software/gcc/rel ...

  7. GUI学习之十九——QFontComboBox学习总结

    我们上一章学习了QComboBox的用法,这一章我们来看一下它的一个比较常用的子类:QFontComboBox(). 一.描述: QFontComboBox()是QComboBox()的一个子类,但是 ...

  8. 表达式,数据类型和变量(Expressions,Data Types & Variables)

    (一)表达式: 1)4+4就是表达式,它是程序中最基本的编程指令:表达式包含一个值(4)和操作符号(+),然后就会计算出一个单独的值; 2)一个单独的值没有包含操作符号也可以叫表达式,尽管它只计算它本 ...

  9. MyEclipse XML & XML架构教程:XML Schema (XSD)编辑器

    [MyEclipse CI 2019.4.0安装包下载] 1. MyEclipse中的XSD编辑 本文档介绍MyEclipse XML Schema(XSD)编辑器中的一些可用函数.XML Schem ...

  10. 开学JAVA第一次测试

    定义 ScoreInformation 类,其中包括七个私有变量(stunumber,name, mathematicsscore, englishiscore,networkscore, datab ...