在前面的内容中我们依次介绍了TCP的连接建立和终止过程和TCP的各种重传方式。接着我们在这部分首先关注交互式应用TCP连接相关内容如延迟ACK、Nagle算法、Cork算法等,接着我们引入流控机制(flow control)和关联的窗口管理(window management)过程。在开篇之前我们先介绍几个相关的概念。

交互式TCP连接(interactive TCP connection):交互式TCP连接是指用户输入需要在client和server间传递的这种。用户的输入可能是一次键盘按键或者一个短消息。这种交互式应用一般都是比较短小的消息,如果TCP每次收到应用层提交的交互消息就发送出TCP报文,有可能会大大的降低网络的利用率。原因是一个交互消息可能仅仅带有几个bytes的数据,但是TCP基本头和IP基本头就有40bytes,另外还会有链路层的开销,最终导致网络传输中的数据大部分都是各种头开销,而有用的数据很少。有些头压缩算法也可以处理这种问题,如ROHC头压缩稳定状态下可以把(rtp+udp+ip)头压缩为几个bytes,但是可应用的场景有限。另一方面如果把应用层的小包暂存最终打包成大的数据包的话又会引入比较大的时延,对于时延敏感类应用就会有负面影响,如游戏应用。因此需要在打包发送和时延之间取一个权衡。有资料表明internet上大约10%左右的TCP报文为交互式数据(interactive data),另外90%则为成批数据(bulk data)。

流控机制(flow control):也叫做流量控制,我们所说的流量控制一般是指点对点的控制,也就是TCP的发送端和接收端的交互,这个流量控制不涉及中间的路由器等网络设备,这个是与后面要介绍的拥塞控制的重要区别。但是另一方面后面要介绍的拥塞控制也可以看成是流量控制的一个扩展。当接收端由于缓存大小等原因需要降低发送端的发送速率的时候,我们需要一种方式通告发送端降低数据发送速率,这种方式我们就叫做流量控制(flow control)或者简称为流控。实现流量控制一般有两种方式(TCP采用的基于窗口的流控):

  • 基于速率(rate-based)的流控,接收端直接告诉发送端一个确定的速率,发送端控制发送速率不超过此确定值,该方式在广播和多播中有应用。

  • 基于窗口(window-based)的流控,这是一种比较受欢迎的流控机制,尤其是使用滑窗机制的时候,TCP协议中就是使用这种方式就行的流控。另外LTE通信的RLC层也有类似TCP的滑窗协议,也是通过这种方式进行的流控。

窗口管理(window management):从广义来说,窗口管理主要涉及两个方面,一个是用于流量控制的滑动窗口协议,另一个则是与拥塞控制的交互。但是一般说窗口管理更侧重于描述流量控制的滑窗协议。

TCP系列27—窗口管理&流控—1、概述的更多相关文章

  1. TCP系列31—窗口管理&流控—5、TCP流控与滑窗

    一.TCP流控 之前我们介绍过TCP是基于窗口的流量控制,在TCP的发送端会维持一个发送窗口,我们假设发送窗口的大小为N比特,网络环回时延为RTT,那么在网络状况良好没有发生拥塞的情况下,发送端每个R ...

  2. TCP系列36—窗口管理&流控—10、linux下的异常报文系列接收

    在这篇文章中我们看一下server端在接收到异常数据系列时的处理,主要目的是通过wireshark示例对这些异常数据系列的处理有一个直观的认识,感兴趣的自行阅读相关代码和协议,这里不再进行详细介绍 在 ...

  3. TCP系列35—窗口管理&流控—9、紧急机制

    一.概述 我们在最开始介绍TCP头结构的时候,里面有个URG的标志位,还有一个Urgent Pointer的16bits字段.当URG标志位有效的时候,Urgent Poinert用来指示紧急数据的相 ...

  4. TCP系列33—窗口管理&流控—7、Silly Window Syndrome(SWS)

    一.SWS介绍 前面我们已经通过示例看到如果接收端的应用层一直没有读取数据,那么window size就会慢慢变小最终可能变为0,此时我们假设一种场景,如果应用层读取少量数据(比如十几bytes),接 ...

  5. TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer

    一.简介 我们之前介绍过,TCP报文中的window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块中缓存,最终受 ...

  6. TCP系列34—窗口管理&流控—8、缓存自动调整

    一.概述 我们之前介绍过一种具有大的带宽时延乘积(band-delay product.BDP)的网络,这种网络称为长肥网络(LongFatNetwork,即LFN).我们想象一种简单的场景,假设发送 ...

  7. TCP系列30—窗口管理&流控—4、Cork算法

    一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...

  8. TCP系列29—窗口管理&流控—3、Nagle算法

    一.Nagle算法概述 之前我们介绍过,有一些交互式应用会传递大量的小包(称呼为tinygrams),这些小包的负载可能只有几个bytes,但是TCP和IP的基本头就有40bytes,如果大量传递这种 ...

  9. TCP系列28—窗口管理&流控—2、延迟ACK(Delayed Acknowledgments)

    一.简介 之前的内容中我们多次提到延迟ACK(Delayed Ack),延迟ACK是在RFC1122协议中定义的,协议指出,一个TCP实现应该实现延迟ACK,但是ACK不能被过度延迟,协议给出延迟AC ...

随机推荐

  1. 【blockly教程】第四章 Blockly之选择结构

    今天,我们通过一个游戏来学习选择结构,游戏的地址如下:https://blockly-games.appspot.com/bird?lang=en本游戏分为10关:主要游戏规则如下:①主界面是游戏的运 ...

  2. java入门---对象和类&概念详解&实例

        Java作为一种面向对象语言.支持以下基本概念: 多态 继承 封装 抽象 类 对象 实例 方法 重载     这篇文章,我们主要来看下: 对象:对象是类的一个实例(对象不是找个女朋友),有状态 ...

  3. filebeat5与filebeat6配置index的差异

    filebeat6配置index需要添加setup对应项,不然启动会报错. 6.0以后版本具体设置在filebeat.yml如下: setup.template.name: "myname- ...

  4. IDEA阿里Java规范插件的安装

    本文参考自阿飞博客:http://www.cnblogs.com/aflyun/p/7668306.html 官方使用教程:https://zhuanlan.zhihu.com/p/30191998? ...

  5. 使用OpenLayers发布地图

    OpenLayers是用于制作交互式Web地图的开源客户端JavaScript类库,制作的地图几乎可以在所有的浏览器中查看.因为是客户端类库,它不需要特殊的服务器端软件或配置,甚至不用下载任何东西就可 ...

  6. Codeforces Round #460 (Div. 2) 前三题

    Problem A:题目传送门 题目大意:给你N家店,每家店有不同的价格卖苹果,ai元bi斤,那么这家的苹果就是ai/bi元一斤,你要买M斤,问最少花多少元. 题解:贪心,找最小的ai/bi. #in ...

  7. 优步UBER司机全国各地奖励政策汇总 (3月7日-3月13日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 北京Uber优步司机奖励政策(4月7日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 6 生成器 yield 协程

    1.生成器 ----> 1 b = [x*2 for x in range(100000000000)] MemoryError: 想生成一个存放很多数据的列表,但是又不想内存占用太多 每次用一 ...

  10. 单词 (Play on Words UVA - 10129 )

    题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...