《TCP/IP详解 卷一》读书笔记-----TCP persist &Keeplive timer
1、persist timer:当接收方建议的窗口大小为0时,发送方就会停止发送,直到接收方有缓存空间时再用一个窗口值非零的ACK提示发送方可以继续发送。但是这个称为window update的ACK报文段很可能会发生丢失,这个时候就不可避免地发送了死锁。因此,发送方需要设置一个persist timer,每隔一段时间就向接收方发送一个询问报文window probes,当接收方可以接收数据时就重新开始发送
2、通常发送方都会包含一个字节数据的报文段作为window probes,该字节的数据其实就是它真实要发送的下一个字节数据。并且与重传不同的是,window probes会一直进行下去,不会超过一定次数就停止重传
3、Silly Window Syndrome:为了避免大量的小数据包在网络上传输,通常接收方会等到缓冲已经满足一定大小时才重新将advertised window置为非零。如上图所示,第8个报文段其实是一个window probe,我们从接收方返回的ack来看,这个探测报文中的一个数据字节其实是被接受的,但是返回的建议窗口大小仍然为0,这时其实就是在避免小的建议窗口的出现。至于为什么最后一个ack报文段中建议的窗口大小只有509这么小呢?其实是因为之前已经建议了一个1533的窗口大小,发送方其实只发送了1024个字节的数据,如果这里突然将其变为0,那么发送方的窗口的右侧就可能向左移动(会导致已发送的数据变到窗口外去了),这是不允许的。
4、Keepalive timer:当我们在客户端和服务端建立一条TCP连接之后,如果两者直接不发送数据,那么不论过多久,不管连接中间路由器崩溃了多少次,只要两端的主机不重启,那么连接依旧是建立的。但是这会带来一些问题,例如很多客户机与同一台服务器之间建立了连接,并且这些客户机都被切断电源了,这时服务器不知道客户机都已经崩溃了,所以依然建立着连接,这样其实造成了资源的极大的浪费。因此keepalive timer就是一个定时询问机制,从而判断对方主机是否已经崩溃。
5、对于keepalive timer的设置一直有反对的声音,只要原因在于它们的存在可能导致原本良好的连接因为中间网络一些暂时的问题而导致连接关闭,不过即使是这样,大多数实现仍然保留了keepalive timer
6、通常,如果server与client之间超过两个小时没有活动,那么server就会向client发送一个探测,这时可能遇到以下四种情况:
1)client正常运行,这时server就会得到相应的返回报文,并且重置keepalive timer
2)client已经崩溃了,这样server就收不到返回报文了,于是server会每隔75s重发一次探测,发满十次后断开连接
3)client崩溃之后又重启了,这时server会得到返回报文要求reset,于是server会断开连接
4)最后,client依然在运行,但是网络不可达了,这时的结果和2)其实是相同的
一般来说,keepalive探测报的发送对应用程序是透明的,只有在2,3,4三种情况出现时,TCP才会告诉它
《TCP/IP详解 卷一》读书笔记-----TCP persist &Keeplive timer的更多相关文章
- 《TCP/IP详解》读书笔记
本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层 一.整体概念 1.各层协议的关系,只讨论四层 各层常见的协议: 网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...
- TCP/IP详解 卷一学习笔记(转载)
https://blog.csdn.net/cpcpcp123/article/details/51259498
- 『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详解——卷一:协议』读书笔记——02
2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...
- 『TCP/IP详解——卷一:协议』读书笔记——18
2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...
- 『TCP/IP详解——卷一:协议』读书笔记——15
2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...
- 『TCP/IP详解——卷一:协议』读书笔记——14
2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...
- 『TCP/IP详解——卷一:协议』读书笔记——13
2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...
随机推荐
- Windows nexus 启动失败
现象: nexus Windows系统服务安装成功,但启动失败 D:\nexus-2.10.0-02-bundle\nexus-2.10.0-02\bin>nexus.bat Usage: ne ...
- [moka同学笔记]Yii2.0 dropDownList的使用(二)
方法一: <?php $psObjs = Poststatus::find()->all(); $allStatus = ArrayHelper::map($psObjs,'id','na ...
- 如何使用mybatis《一》
mybatis作为ORM轻量级框架一出现就吸引了无数人的眼球,比hibernate要简单且入门较容易,下面开始我的第一个mybatis程序. 一.下载mybatis的包 我们知道任何一个框架都会有其包 ...
- 七年IT生涯的经验教训
七年IT生涯的经验教训[转]我在IT界也拼打了有好几年了,但是现在和别人比较起来不是很如意.从天分上来说,我在属于智商不低的人:从技术上说,几乎没有我拿不下的:从见解上看,我是很有点子看法的人. ...
- js 操作ASP.NET服务器控件
js 操作ASP.NET服务器控件 在ASP.NET中使用js时,js获取DOM元素时,经常获取不到,这是因为获取的方法有误,现在介绍一方法,解决如何使用js获取ASP.NET控件在浏览器端生成htm ...
- 移动端调试工具-Debuggap
随着移动互联网的迅速崛起,开发移动应用程序越来越多,但如果在移动端开发应用程序需要调试时,额- 仿佛又回到了IE时代,最方便也只能到处 alert 来调试.目前已经有一款产品可以做到这一点,比如pho ...
- touch触摸事件
事件对象 事件对象是用来记录一些事件发生时的相关信息的对象.事件对象只有事件发生时才会产生,并且只能是事件处理函数内部访问,在所有事件处理函数运行结束后,事件对象就被销毁! W3C DOM把事件对象作 ...
- ArcGIS制图之Sub Points点抽稀
简介 Sub Points工具是 Esri 中国自主开发的一个插件,该工具优先考虑点在空间分布上的均匀合理性,并结合点数据中包含的 "优先级" 属性进行筛选.通过获取每个点在一定范 ...
- Windows2008系统忘记密码的解决方法
网上转载的,忘记密码不用发愁了. windows2008系统忘记密码的解决方法: 利用放大镜的漏洞来重设密码 首先用系统盘来引导 选择修复计算机 然后打开命令提示符:先备份放大镜,然后用CMD替换 ...
- 安卓开发_浅谈SubMenu(子菜单)
子菜单,即点击菜单后出现一个菜单栏供选择 创建子菜单的步骤: (1) 覆盖Activity的onCreateOptionsMenu()方法,调用Menu的addSubMenu()方法来添加子菜单 (2 ...