【TCP/IP详解 卷一:协议】TCP定时器 小结
前言
在有关TCP的章节中,介绍了四种定时器,它们体现了TCP的可靠性,其中最重要的 就是重传定时器了,剩下的定时器都是为了解决TCP的理解上的一些问题而设置的。
四种定时器:
- 2MSL定时器,出现在 TCP连接的建立与终止。
- 重传定时器,出现在 TCP的超时与重传。
- 坚持定时器。
- 保活定时器。
相关随笔:
2MSL定时器
出现:TCP连接的建立与终止 教材P183
四次挥手客户端一共有三次状态:应用程序关闭,发送完第一个FIN之后进入 FIN_WAIT1,之后接收到来自服务器的ACK进入 FIN_WAIT2。接收到来自服务器的FIN进入 TIME_WAIT 状态(又称2MSL等待状态),使用2MSL定时器进行计时。
MSL:TCP实现选择的 一个报文段最大生存时间MSL。与IP的TTL类似。
RFC 793 指出MSL为2分钟,但是实际中常用值一般为 30s,1min,或者2min。
主要作用:在 TIME_WAIT状态 停留的时间为2倍的MSL。这样如果最后的ACK丢失 -> 另外一端(被动关闭)超时 重新发送FIN -> 可以让TCP重发最后一个ACK。
重传定时器
出现:TCP的超时与重传 教材P226-232
它对RTT和RTO的计算是整个 TCP超时与重传 中最重要的部分。
重传定时器,以RTO(Retransmission Timeout 重传超时时间)的时间来计时,一旦溢出超时即重发数据报。
这时就涉及到了RTT和RTO的计算了,这里有不同的策略:
正常接收到数据报:使用公式法计算RTT和RTO。
超时:采用指数退避策略。
公式法需要注意的是:采用了 被平滑的RTT估计器 和 均值偏差,降低了计算的误差。
主要作用:是TCP可靠性的体现,超时之后重传数据报,从而保证接收方能够接收到完整的数据。
坚持定时器
出现:TCP的坚持定时器 教材P245-250
当通知窗口为0的时候,发送方停止发送数据,等待接收方发送的非0的窗口更新。但是,如果这个非0的窗口更新丢失,会造成一种死锁的现象:发送方等待这个窗口更新的出现,而接收方等待发送方发送的数据。
为了防止这种死锁现象的发生,发送方使用一个 坚持定时器 来周期性地向接收方询问,以便发现窗口是否增大。这些发送的报文段称为 窗口探查。
在通告窗口设置为0之后,客户设置了 坚持定时器,在该定时器时间到时客户还没有接收到一个窗口更新,它就探查这个空的窗口以决定这个窗口更新是否丢弃。
计算坚持定时器使用了TCP指数退避策略。TCP从不放弃发送窗口探查,这些探查每隔60s发送一次。
主要作用:防止窗口更新造成的死锁现象。
保活定时器
出现:TCP的保活定时器 教材P251-255
一个比较让人惊讶的事实是:可以没有任何数据通过一个空闲的TCP连接,如果TCP连接的双方都没有向对方发送数据,那么在两个TCP模块之间不交换任何信息。
两个应用进程 -客户进程 和 服务器进程 都没有使用应用级的定时器来检测 非活动状态:这种非活动状态 可以导致应用程序中的任何一个 终止其活动。
许多时候,一个服务器希望知道客户主机是否 崩溃并关机,或者 崩溃又重新启动。许多实现提供的保活定时器可以提供这个能力。
优点:
(1)激活应用程序中的保活选项 通常比 编写应用程序探查报文 更简单。
(2)通过探查可以使服务器知道客户主机是否崩溃又重新启动。
(3)探查报文 比 应用程序探查报文 耗费更少的带宽。
缺点:
(1)在出现短暂错误的情况下,这可能会使一个非常好的连接释放掉。
(2)它们耗费不必要的带宽。
(3)在按分组计费的情况下,会在互联网花掉更多的钱。
主要作用:通过探查,使服务器知道另外一端的客户主机的运行状况。
具体实现参阅我之前的笔记。
2016/8/19
【TCP/IP详解 卷一:协议】TCP定时器 小结的更多相关文章
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 【TCP/IP详解 卷一:协议】第二章:链路层
2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...
- TCP/IP详解 卷一(第一章 概述)
很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...
- 【TCP/IP详解 卷一:协议】第二十二章 TCP的坚持定时器
这两章来到了TCP的定时器部分,在 TCP的超时与重传 和 TCP的三握四挥 我们介绍了 TCP的重传定时器 和 TCP的2MSL定时器. 本随笔介绍 防止返回ACK丢失的死锁情况 的 坚持定时器 和 ...
- 【TCP/IP详解 卷一:协议】TCP的小结
前言:TCP学习的综述 在学习TCP/IP协议的大头:TCP协议 的过程中,遇到了很多机制和知识点,详解中更是用了足足8章的内容介绍它. TCP协议作为 应用层 和 网络层 中间的 传输层协议,既要为 ...
- 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议
11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...
- 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置
简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...
- 『TCP/IP详解——卷一:协议』读书笔记——13
2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...
随机推荐
- appstore加速审核通道
申请入口:https://developer.apple.com/contact/app-store/?topic=expedite
- 超级详细的RedGateSqlServer工具教程,效率提高的不止一点点之SQLPrompt
距离上次SQLDoc教程贴过去2个月了,时间真快,好了,废话不多说,继续 http://pan.baidu.com/share/link?shareid=177401896&uk=330822 ...
- [svc]sublime text3设置py环境最佳姿势
搞个py虚拟环境 待sublim调用 - for windows pip install virtualenv pip install virtualenvwrapper pip install vi ...
- 支持向量机(SVM)、支持向量回归(SVR)
1.支持向量机( SVM )是一种比较好的实现了结构风险最小化思想的方法.它的机器学习策略是结构风险最小化原则 为了最小化期望风险,应同时最小化经验风险和置信范围) 支持向量机方法的基本思想: ( 1 ...
- BCB ERROR:[Linker Error] 'XXX.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
今天C++builder 导入 gts .lib (gts.dll)库文件 编译报错: [Linker Error] 'D:\...\V4.05.007.1000-20161028\GTS.LIB' ...
- 【调优】Nginx性能调优
一.Nginx优化配置 1.主配置文件优化:# vi /usr/local/nginx/conf/nginx.conf----------------------------------------- ...
- redis windows版本下载
https://github.com/dmajkic/redis/downloads http://windows.php.net/downloads/pecl/snaps/redis/3.1.4rc ...
- python excel操作 练习-#操作单列 #操作A到C列 #操作1到3行 #指定一个范围遍历所有行和列 #获取所有行 #获取所有列
##操作单列#操作A到C列#操作1到3行#指定一个范围遍历所有行和列#获取所有行#获取所有列 #coding=utf-8 from openpyxl import Workbook wb=Workbo ...
- 在windows上构建LLVM 7.0.1
关于在windows上构建LLVM,网上有不少文章,但都是互相抄来的,写作时极不认真,不是少这个,就是少那个,没有一篇是可以完整照着做下来的,实在气人. 本文的安装和配置过程,我亲自操作过好几遍,不惜 ...
- mysql 从数据库中获取多条记录,二维展示数据
展示要求: 客户/日期 2017-10-16 1017-10-17 2017-10-18 客户1 客户2 数据库中数据: 解决办法: 1.新建一个实体类:客户名称.客户数据(A ...