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

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

[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. boost库学习随记六:使用同步定时器、异步定时器、bind、成员函数回调处理、多线程的同步处理示例等

    一.使用同步定时器 这个示例程序通过展示如何在一个定时器执行一个阻塞等待. //makefile #-------------------------------------------------- ...

  2. 数据解析之XML和JSON

    1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...

  3. CentOS6.4关闭触控板

    1. 检查是否安装xorg-x11-app; rpm -qa xorg-x11-apps 如果没有安装使用下面命令安装xorg-x11-app yum install xorg-x11-apps 2. ...

  4. FragmentPagerAdapter刷新fragment最完美解决方案

    FragmentPagerAdapter刷新fragment最完美解决方案   先感谢kingjxl2006的博客文章<Android FragmentPagerAdapter数据刷新notif ...

  5. mvc请求过程总结

    前言 最近在思考一个问题,我的学习方法一般主要是看博客来学习新东西,但是光看,基本也没总结过,所以经常会出现这样的问题,某个知识点我知道,但是就是不能很好的表达出来,很简单的东西往往都不知道如何简短精 ...

  6. ulipad双击无反应

    所有的东西都配好后,执行ulipad需要注意的是: 1,必须以管理员身份运行ulipad. 2,当运行有道词典的时候,双击ulipad是没有反应, 至于为什么会出现这种情况,我也不太清除,等我查到 原 ...

  7. Content Providers的步骤,来自官网文档

    Content Providers In this document Content provider basics Querying a content provider Modifying dat ...

  8. python子进程模块subprocess调用shell命令

    http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html

  9. 一致性算法--Paxos

    分布式一致性算法--Paxos Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议) ...

  10. STRUTS2获得session和request

    在struts1中,获得到系统的request或者session对象非常方便,都是按照形参传递的,但是在struts2中,request和session都被隐藏了struts提供两种方式访问sessi ...