说明:  本文仅供学习交流。转载请标明出处,欢迎转载!

本文是下面文献相关内容的总结

[1] 《TCP/IP具体解释 卷1:协议》

[2] 《TCP/IP协议族 第4版》

[3] 《计算机网络 第5版》

TCP协议通常包含4种计时器:重传计时器、持续计时器、保活计时器和时间等待计时器。

重传计时器:Retransmission Timer,该计时器用于整个连接期间,用于处理RTO(重传超时)。

当一个报文从发送队列发出去后。就启动该计时器。若在RTO之内收到了该报文的ACK,则停止该重传计时器;若t>=RTO都还没有收到报文的ACK,则重传该报文,并重置该重传计时器。

    注意:若ACK报文捎带其它信息,则不会为该报文设置重传计时器。

持续计时器:Persistent Timer。用于处理零窗体值的通过。

若接收端的TCP要命令发送端的TCP停止发送报文段时,就向发送TCP发送一个报文段。该报文的窗体大小字段为0,称为零值窗体。发送端的TCP收到该零值窗体值报文后,就会停止向接收端的TCP发送报文,直到接收端的TCP发送一个窗体大小非0的ACK报文。

若接收端TCP向发送TCP发送ACK报文,以通知其发送窗体的大小(非0)后。接收端的TCP便等待发送端发送数据,若该ACK回去的路上丢失了。则发送端的TCP并没收到ACK报文,便不会向接收端发送报文,而接收却以为自己的ACK报文发成功了,便傻乎乎的瞎等待(别忘了,ACK报文是永远不会被设置重传计时器的)。这样两个人便陷入了“死锁状态”。

为了防止该死锁状态的出现,TCP为发送TCP设置了一个持续计时器。一旦发送TCP收到了“零值窗体报文”,该计时器便启动。

启动后,在为超时期间,若收到了接收端的非0窗体的通知,则停止该计时器;若该持续计时器超时了,则发送TCP就发送一个特殊的探測报文段,该报文段仅包括1B的新数据。该报文不须要确认。探測报文的作用在于提醒对方(目的能够记录在数据部分),重传下上次发送发送的那个ACK报文(即那个非0值窗体的报文)。

   注意:TCP规定,接收窗体的rwnd=0,也必须接收这三种报文段:零窗体探測报文段、确认报文段和携带紧急数据的报文段。

保活计时器:Keeplive Timer,防止两端的TCP在连接期间长时间处于空暇状态。

能够为server设置一个保活计时器。

每当server收到客户的信息。就把该计时器复位。表示该通话还活着,超时通常设置为2小时。当server超过了2H还没有收到客户的不论什么信息时,server就向客户发送过一个探測报文段。若连续发送了10个探測报文段(没个75s一个)还没有响应,就觉得客户出了故障,并终止这个连接。

时间等待计时器:Time-Wait timer。(超时时间=2MSL,max segment lifetime),该计时器为client设置。该计时器是为还记得4次挥手中的第三次挥手吗?在第三次挥手中。client收到server发送的FIN报文后,client就启动Timer-Wait计时器,时间设置为2MSL,并发送最后一个ACK。两个作用:(1)保证在2MSL时间内,server端可以收到最后一个ACK;(2)可以保证之前某些在网络中滞留非常久的发给server的报文不会在本次连接连接关闭后再去骚扰server。值得注意的是:最后两次挥手期间。启动了两种计时器。server向client发送FIN后启动重传计时器,client收到FIN后。向server发送ACK,同一时候启动Time-Wait计时器(时间长度为2MSL)。

TCP协议中的计时器的更多相关文章

  1. TCP协议中的三次握手和四次挥手(图解)【转】

    建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删 ...

  2. python中TCP协议中的粘包问题

    TCP协议中的粘包问题 1.粘包现象 基于TCP实现一个简易远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() s ...

  3. 客户端验证、tcp协议中多个客户端的同时在线

    一.客户端验证 当在一个局域网内需要验证是否为合法的客户端连接时,我们需要写代码进行验证. Server端 import os import hmac import socket def auth(c ...

  4. 从TCP三次握手说起–浅析TCP协议中的疑难杂症(2)

    版权声明:本文由黄日成原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/108 来源:腾云阁 https://www.qclo ...

  5. TCP协议中的SO_LINGER选项

    TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工 ...

  6. TCP 协议中的 Window Size与吞吐量

    原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.html TCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响. ​TCP窗口目的 ...

  7. TCP协议中是如何保证报文可靠传输的

    1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用 ...

  8. TCP协议中的序列号

    TCP 协议工作在OSI的传输层,是一种可靠的面向连接的数据流协议,TCP之所以可靠,是因为它保证了传送数据包的顺序.顺序是用一个序列号来保证的.响应包内也包括一个序列号,表示接收方准备好这个序列号的 ...

  9. TCP 协议中MSS的理解

    在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE ...

随机推荐

  1. A. Liserious战队

    Liserious战队是一支活跃在京沪地区的著名密室逃脱战队,在优秀的队长Liserious和芳姐的带领下,打遍天下大大小小的密室逃脱,攻无不克,战无不胜,上天入地无所不能. 世界密室逃脱委员会以IS ...

  2. Robot Framework学习路线

    0. 官方网站  http://robotframework.org/ 所有资料都来自这里,从这里找到必要的链接,从而深入其中的细节. 1.  Quick Start Guide https://co ...

  3. HtmlAgilityPack 抓取页面的乱码处理

    HtmlAgilityPack 抓取页面的乱码处理 用来解析 HTML 确实方便.不过直接读取网页时会出现乱码. 实际上,它是能正确读到有关字符集的信息,怎么会在输出时,没有取到正确内容. 因此,读两 ...

  4. Lucene 实例教程(二)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ...

  5. POJ 3276 Face The Right Way 翻转(开关问题)

    题目:Click here 题意:n头牛排成一列,F表示牛面朝前方,B表示面朝后方,每次转向K头连续的牛的朝向,求让所有的牛都能面向前方需要的最少的操作次数M和对应的最小的K. 分析:一个区间反转偶数 ...

  6. ThinkPHP快捷函数

    16个快捷函数用法 1.A() 实例化控制器  格式:[资源://][模块/]控制器A($name,$layer='',$level='')@param string $name 资源地址   @pa ...

  7. USACO Subset 整数划分01背包

    又是去理解了一次01背包. 这道题目的意思就是给你一个N (N < 40)表示有一个集合{1,2,3,... n} 你要将它划分成相等的两个子集合,求有几种划分方式 如果N是奇数,那么显然不能由 ...

  8. QTableWidget的用法总结

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  9. jquery删除动态增加的li

    <script type="text/jscript"> //楼主帮你修改调整了下 $(document).ready(function () { $('.zuo li ...

  10. 带符号的char类型取值范围为什么是-128——127

    以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以011111 ...