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的更多相关文章

  1. 《TCP/IP详解》读书笔记

    本书以UNIX为背景,紧贴实际介绍了数据链层.网络层.运输层   一.整体概念   1.各层协议的关系,只讨论四层 各层常见的协议:   网络层协议:IP协议.ICMP协议.ARP协议.RARP协议. ...

  2. TCP/IP详解 卷一学习笔记(转载)

    https://blog.csdn.net/cpcpcp123/article/details/51259498

  3. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  4. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  5. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——02

    2013-08-16 20:07:11 1.3 TCP/IP的分层 这是一个很好的图,要多看!!图上有些细节会在今后的笔记中提到,看不懂不必深究. IP是网络层上的主要协议,同时被TCP和UDP(这两 ...

  7. 『TCP/IP详解——卷一:协议』读书笔记——18

    2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...

  8. 『TCP/IP详解——卷一:协议』读书笔记——15

    2013-08-25 13:39:40 第6章 ICMP:Internet控制报文协议 6.1 引言 ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息.ICMP报文同通常 ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  10. 『TCP/IP详解——卷一:协议』读书笔记——13

    2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...

随机推荐

  1. 继续寻找app开发的技术方案

    大概12年下半年开始,才有app开发已经来到身边的感觉. 但也一直只是感觉,没想到自己得亲身上阵. 由于要一个人做(帮朋友倒腾倒腾),而且要跨平台,而且前后台都要弄,而且时间有限. 最终选了web方式 ...

  2. 百度FIS入门

    1.fis作为nodejs的模块来管理的,所以首先得安装nodejs,看我前面的安装nodejs的文章. 2.官方的案例下载包https://github.com/hefangshi/fis-quic ...

  3. (旧)子数涵数·C语言——指针

    一.什么是指针? 指针在百度的解释:是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值. 也就是说,指针是用于指向某一内存单元. 简而化之,指针便是地 ...

  4. IIS减少工作线程阻塞的方法

    IIS的工作进程(w3wp.exe)只提供了有限的工作线程(Work Thread)来处理请求.如果这些线程都因为要等待长时间运行的任务而阻塞,则运行时会将新来的请求排队,而不是立即执行,Web服务器 ...

  5. API的非向后兼容性无论如何通常代表着一种比较差的设计

    不管一个类库或者工具方法实现多么的好,如果无法做到向后兼容性,通常会给用户带来很大的升级成本,很多对此的依赖如果希望在后续的升级和维护期间使用该类库的其他新增特性或者好处,将不得不推迟升级亦或是被迫接 ...

  6. Dom4j 锁竞争性能低下解决

    在最近的项目中使用 Dom4j 解析 xml 发现性能低下,有锁竞争的情况,解决如下: SAXParserFactory factory = new org.apache.xerces.jaxp.SA ...

  7. winform 属性

    WinForm为客户端程序必须在.NET Framework框架上运行 一.常用属性: 布局: AutoScroll:当控件内容超出可见区域是否显示滚动条: Autosize:当控件内容有超出时是否自 ...

  8. ElasticSearch文档-简单介绍

    ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引 ...

  9. elasticseach multi-field的实际用途

    下面是multi-field的介绍: multi_field 多域类型允许你对同一个值以映射的方式定义成多个基本类型 core_types . 这个非常有用,比如,如果你定义一个 string 类型的 ...

  10. centOS 安装 svnserve

    安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 ? 1 2 3 4 5 6 7 8 9 1 ...