TCP的坚持定时器
一、简介
TCP不对ACK报文段进行确认,TCP只确认那些包含有数据的ACK字段。
如果一个确认丢失了,双方就有可能因为等待对方而使得链连接终止:
- 接收方等待接受数据,因为已经向发送方通告了一个非0的窗口。
- 发送方在等待允许它继续发送数据的窗口更新。
为了防止这种死锁,发送方使用一个坚持定时器来周期性向接收方查询,以便发现窗口是否已经增大。
坚持定时器使用了普通的TCP指数退避。对于典型局域网连接,间隔为\(1.5s\to 3.0s \to s ...\)
TCP从不放弃发送窗口探查。这些探查每隔60s发送一次,直到窗口被打开或者应用进程使用的连接被终止。
二、糊涂窗口综合征 (Silly Window Syndrome)
指的是少量的数据通过连接交换,而不是满长度的报文段。
例如,接收方通告一个小的窗口,而不是一直等到有大的窗口时才通告。发送方也可以发送少量的数据,而不是等待其他的数据以便发送一个大的报文段。
可以在接收或发送端采取措施避免“糊涂窗口综合征”。
- 接收方不通告小窗口。
接收方不通告一个比当前窗口大的窗口,除非窗口可以增加一个报文段大小或可以增加接收方缓存空间的一半。 - 发送方满足下面条件之一时才发送数据:
- 可以发送一个满长度的报文段
- 可以发送至少是接收方通告窗口大小一半的报文段
- 可以发送任何数据并且不希望接收ACK(我们没有还未被确认的数据)或者改连接上不能使用Nagle算法。
TCP的坚持定时器的更多相关文章
- 14.TCP的坚持定时器和保活定时器
一.坚持定时器 1.坚持定时器的由来 TCP通过让接收方指明希望从发送方接受的窗口大小来进行流量控制.设置窗口大小为0可以组织发送方传送数据,直至窗口变为非0为止. ...
- TCP常见的定时器三次握手与四次挥手
1.TCP常见的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有七种定时器: 建立连接定时器(connecti ...
- TCP常见的定时器及三次握手与四次挥手
1.TCP常见的定时器 在TCP协议中有的时候需要定期或者按照某个算法对某个事件进行触发,那么这个时候,TCP协议是使用定时器进行实现的.在TCP中,会有七种定时器: 建立连接定时器(connecti ...
- 【TCP/IP详解 卷一:协议】第二十二章 TCP的坚持定时器
这两章来到了TCP的定时器部分,在 TCP的超时与重传 和 TCP的三握四挥 我们介绍了 TCP的重传定时器 和 TCP的2MSL定时器. 本随笔介绍 防止返回ACK丢失的死锁情况 的 坚持定时器 和 ...
- 《TCP/IP具体解释》读书笔记(22章)-TCP的坚持定时器
TCP通过让接收方指明希望从发送方接收的数据字节数(即窗体大小)来进行流量控制. 假设窗体大小为0会发生什么情况呢?这将有效阻止发送方传送数据,直到窗体变为非0为止. ACK的传输并不可靠,也就是说, ...
- TCP四种定时器--学习笔记
TCP使用四种定时器: 重传定时器(Retransmission Timer).坚持定时器(Persistent Timer).保活定时器(Keeplive Timer).时间等待定时器(Time_W ...
- 《TCP/IP详细解释》札记(23章)-TCP该保活定时器
可能有这样的备用现实TCP连接:流通过. 也就是说.假设TCP连接的两方都没有向对方发送数据.则在两个TCP模块之间不交换不论什么信息,这意味着我们能够启动一个客户与server建立连接,然后长时间不 ...
- 解读TCP 四种定时器
TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据. ...
- 【TCP/IP详解 卷一:协议】第二十三章 TCP的保活定时器
本章介绍保活定时器. 在 TCP 的三握四挥 章节中,我们介绍了 处在 TIME_WAIT 的 2MSL定时器:在 TCP的超时与重传 章节中,我们介绍了 重传定时器:在上一章节中,我们介绍了 防止死 ...
- TCP 的保活定时器
引言 可以没有任何数据流过一个空闲的 TCP 连接. 这意味着我们可以启动一个客户与服务器建 立一个连接,然后离去数小时.数天.数个星期或者数月,而连接依然保持.中间路由器可以崩溃和重启,电话线可以被 ...
随机推荐
- Crack IDEA
使用破解补丁 Crack IDEA→在http://idea.lanyus.com/上可以找到最新的破解补丁,下载并放到软件的bin目录下 →更改bin目录下的两个文件:Idea.exe.vmopti ...
- linux系统的命令组与函数
一.命令组 许多时候,我们在shell操作上,需要在一定条件下一次执行多个命令,也就是说,要么不执行,要么就全执行,而不是每次依序的判断是否要执行下一个命令.或是,需要从一些命令执行优先次顺中得到豁免 ...
- highchart 曲线图
$(function() { Highcharts.setOptions({ global: { useUTC: false } }); var chart = new Highcharts.Char ...
- catkin_make与gtest出现冲突的问题与解决
gtest是测试时调用的,把测试禁止掉试试 catkin_make --pkg pkgname -DCATKIN_ENABLE_TESTING=0
- 修改字段注释modify
alter table test1 modify 字段名 类型 comment '修改后的字段注释'; ALTER TABLE tc_activity_miaosha MODIFY `validity ...
- ES5、6、7浅析
ECMA Script 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 而我们学的JavaScript是ECMA的实现, 但术语ECMAScript和JavaScript ...
- 白盒测试实践--Day4 12.20
累计完成任务情况: 阶段内容 参与人 完成个人情况说明并提交作业 全体 汇总作业,查漏补缺,完成代码测试总结 小靳.小龙 完成测试小结 小黄.小尹 完成静态代码检查结果报告 小靳 完成JUnit脚本编 ...
- springdata -----操作ES
一:配置springdata-Es elasticseach-JPA.xml <?xml version="1.0" encoding="UTF-8"?& ...
- C#编程之程序集和反射
这里我又唠叨几句,大家在学习的时候,如看书或者看视频时觉得非常爽,因为感觉基本都看得懂也都挺容易的,其实看懂是一回事,你自己会动手做出来是一回事,自己能够说出来又是另一回事了.应该把学到的东西变成自己 ...
- 15 输入三个整数x,y,z,请把这三个数由小到大输出。
题目:输入三个整数x,y,z,请把这三个数由小到大输出. public class _015ThreeNumberSort { public static void main(String[] arg ...