博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP中有哪些定时器?
阅读量:7232 次
发布时间:2019-06-29

本文共 1059 字,大约阅读时间需要 3 分钟。

把书读薄(TCP/IP详解 卷一 第二十二章 第二十三章)

TCP中有哪些定时器?

每个连接。TCP管理4个不用的定时器

  1. 重传定时器,使用于当希望收到另一端的确认。
  2. 坚持定时器,使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口
  3. 保活定时器,检测到一个空闲连接的另一端何时崩溃或重启
  4. 2MSL定时器,测量一个连接处于TIME_WAIT状态的时间

如何处理TCP连接中打开窗口的ACK丢失的情况?

关闭窗口的场景:接收方通告发送方接收的数据窗口为0,这个时候发送方不再发送数据;

打开窗口ACK丢失的危害:当接收方通告了一个窗口为非0的ACK,此ACK由于某种原因丢失,此时发送方在永远的等窗口打开的通知,接收方则永远的在等新数据的到来,这样有可能因为等待而造成连接关闭。

解决策略:使用坚持定时器,周期性的向接收方查询,以便发现窗口的变化

这种周期性的查询的,从发送方发出的报文段称为窗口探查,窗口探查包含一个字节的数据,但是返回窗口为0的ACK并不对这个字节进行确认

什么是糊涂窗口综合症?

对于服务器来讲,如果处理的速度过于缓慢,他会将通告窗口的值设置的越来越小,甚至是小于报文头,这种情况下,通信的效率极其低下,这种情况称作糊涂窗口综合症。

如何避免糊涂窗口综合症?

  1. 接收方:当窗口增加一个报文段大小(MSS)或者可以增加接收方缓存空间一半时,才通告窗口大小
  2. 发送方:当可以发送一个满长度的报文、发送至少是接收方通告窗口大小的一半的报文或者是可以发送任何数据并且不希望接收ACK(这种情况,数据都已经确认了)
Nagle算法中,当报文太小的时候就不发送,这里的小,可以看出发送方发送的报文小于报文段大小

保活定时器是做什么用的?

服务器应用程序用来探知客户主机是否崩溃并启动,或者崩溃关机等场景。

具体来说客户主机必定处于以下4中状态之一:

  1. 正常运行。TCP响应正常,服务端知道客户端工作正常,服务器在两小时后将保活定时器复位,如果这两小时之间有应用程序通过这个连接通信,保活定时器在交换数据后的未来两小时再复位;此时的服务器应用程序不需要感知保活定时器
  2. 客户主机崩溃,并且关闭或者正在重启。服务器总共发送10个探查,每个间隔75秒,如果没有任何响应,认为客户主机关闭并终止连接;
  3. 客户主机崩溃但已经重启。服务器收到保活探查的响应,但响应回会是个复位,使得服务器终止连接;
  4. 客户主机正常,但是服务不可达。与2类似,只能得到没有探查响应
缺点在于:1短暂差错可能使得一个好的连接被释放;2保活浪费不必要的带宽;

转载地址:http://szvfm.baihongyu.com/

你可能感兴趣的文章
[LeetCode]460.LFU缓存机制
查看>>
NaviSoft31.源码开发完成
查看>>
Maven: Cannot run program "protoc"
查看>>
英特尔® Software Guard Extensions 教程系列:第一部分,英特尔® SGX 基础
查看>>
ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
查看>>
Docker基本使用命令
查看>>
surfaceview组件的surfaceCreated()不被调用的解决方案
查看>>
2018 eclipse安装反编译插件
查看>>
Swift - AnyClass,元类型和 .self
查看>>
Swift实时画箭头的实现
查看>>
maven报错
查看>>
为什么我没有在Paragon NTFS上找到卸载的地方
查看>>
2018.7.13vue知识小结
查看>>
使用git工具上传自己的程序到github上
查看>>
(转)git checkout 撤销修改
查看>>
Android Retrofit2 数据解析
查看>>
如何实现‘请在微信客户端打开链接’
查看>>
解决Jira和Confluence访问打开越来越缓慢问题
查看>>
000 Security的计划
查看>>
html+css+js实现科学计算器
查看>>