TCP系列27—窗口管理&流控—1、概述
在前面的内容中我们依次介绍了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、概述的更多相关文章
- TCP系列31—窗口管理&流控—5、TCP流控与滑窗
一.TCP流控 之前我们介绍过TCP是基于窗口的流量控制,在TCP的发送端会维持一个发送窗口,我们假设发送窗口的大小为N比特,网络环回时延为RTT,那么在网络状况良好没有发生拥塞的情况下,发送端每个R ...
- TCP系列36—窗口管理&流控—10、linux下的异常报文系列接收
在这篇文章中我们看一下server端在接收到异常数据系列时的处理,主要目的是通过wireshark示例对这些异常数据系列的处理有一个直观的认识,感兴趣的自行阅读相关代码和协议,这里不再进行详细介绍 在 ...
- TCP系列35—窗口管理&流控—9、紧急机制
一.概述 我们在最开始介绍TCP头结构的时候,里面有个URG的标志位,还有一个Urgent Pointer的16bits字段.当URG标志位有效的时候,Urgent Poinert用来指示紧急数据的相 ...
- TCP系列33—窗口管理&流控—7、Silly Window Syndrome(SWS)
一.SWS介绍 前面我们已经通过示例看到如果接收端的应用层一直没有读取数据,那么window size就会慢慢变小最终可能变为0,此时我们假设一种场景,如果应用层读取少量数据(比如十几bytes),接 ...
- TCP系列32—窗口管理&流控—6、TCP zero windows和persist timer
一.简介 我们之前介绍过,TCP报文中的window size表示发出这个报文的一端准备多少bytes的数据,当TCP的一端一直接收数据,但是应用层没有及时读取的话,数据一直在TCP模块中缓存,最终受 ...
- TCP系列34—窗口管理&流控—8、缓存自动调整
一.概述 我们之前介绍过一种具有大的带宽时延乘积(band-delay product.BDP)的网络,这种网络称为长肥网络(LongFatNetwork,即LFN).我们想象一种简单的场景,假设发送 ...
- TCP系列30—窗口管理&流控—4、Cork算法
一.Cork算法概述 Cork算法与Nagle算法类似,也有人把Cork算法称呼为super-Nagle.Nagle算法提出的背景是网络因为大量小包小包而导致利用率低下产生网络拥塞,网络发生拥塞的时候 ...
- TCP系列29—窗口管理&流控—3、Nagle算法
一.Nagle算法概述 之前我们介绍过,有一些交互式应用会传递大量的小包(称呼为tinygrams),这些小包的负载可能只有几个bytes,但是TCP和IP的基本头就有40bytes,如果大量传递这种 ...
- TCP系列28—窗口管理&流控—2、延迟ACK(Delayed Acknowledgments)
一.简介 之前的内容中我们多次提到延迟ACK(Delayed Ack),延迟ACK是在RFC1122协议中定义的,协议指出,一个TCP实现应该实现延迟ACK,但是ACK不能被过度延迟,协议给出延迟AC ...
随机推荐
- 剑指Offer-迭代
1.大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) 备注:斐波那契数列指的是这样一个数列从第3项开始,每一项都等于前两项之和. public st ...
- 用Head方法获得百度搜索结果的真实地址
用Head方法获得百度搜索结果的真实地址 在百度中搜索"Java",第一条结果的链接为: https://www.baidu.com/link?url=HBOOMbhPKH4SfI ...
- TImage保存图片到Stream及从Stream中取图片
因为一个项目,不得不将图片保存到数据库中,需要的时候再从数据库中读取.初时,以为很简单,不就是一个Stream.事实上,也很简单.度娘一下,代码也很多,但,都是坑! 看一下TImage的源,Pictu ...
- transform Vs Udf
在鞋厂的第一个任务,拆表.需要把订单表按照开始日期和结束日期拆分成多条记录,挺新鲜的~ transform方式,使用到了python. (1)把hive表的数据传入,通过python按照日期循环处理, ...
- python3 练习题100例 (九)
题目九:题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?程序分析:兔子的规律为数列1,1,2,3,5 ...
- 数据结构之 AVL个人笔记
从这位前辈的博客园中学习的数据结构:https://www.cnblogs.com/skywang12345/ 非常感谢这位前辈. 以下文章摘录于 :skywang12345的博客园:转载请注明出处: ...
- lambda方法的引用与构造方法引用
方法的引用 /** * @auther hhh * @date 2018/12/29 22:37 * @description */ public class ObjectMethodUse { /* ...
- php7+apache2.4+mysql 环境配置(window环境)
最近,小主从事PHP开发.特将最近如何搭建php7的过程记录在此!希望有需要,可以借鉴!( 电脑必须win7 sp1以上, .netframework4 ) Windows7安装php7,Win7+p ...
- 2018南京网络赛L题:Magical Girl Haze(最短路分层图)
题目链接:https://nanti.jisuanke.com/t/31001 解题心得: 一个BZOJ的原题,之前就写过博客了. 原题地址:https://www.lydsy.com/JudgeOn ...
- 给无符号数赋值负数(有符号数)的理解(unsigned\signedf)
无符号数赋负数(有符号数)就类似于给字符型变量赋数值(char word=0x56),对相同的值不同的类型解析 //s16:signed short; u16:unsigned short s16 t ...