说明: 本文仅供学习交流。转载请标明出处,欢迎转载!

本文是下面文献相关内容的总结

[1] 《TCP/IP具体解释 卷1:协议》

[2] 《TCP/IP协议族 第4版》

[3] 《计算机网络 第5版》

TCP流量控制的目的是限制发送端的发送速率,使得接收方可以及时接收。

TCP主要是通过滑动窗体来实现流量控制的。实际上,发送窗体的大小不仅受接收窗体rwnd的大小的限制,还受拥塞窗体cwnd窗体的限制,为了实现点到点的流量控制,本文如果拥塞窗体足够大(即网络链路比較流畅),仅考虑发送窗体swnd受接收窗体的限制。

窗体由左臂和右臂组成。左臂右移称为关闭,右臂左移称为收缩,右臂右移称为打开

发送窗体和接收窗体的移动操作

接收窗体:当接收方收到发送方的很多其它的字节时(不包含反复的报文段),接收窗体关闭。当接收缓存中的字节被接收进程pull时,接收窗体打开,通常接收窗体不会发送收缩操作。

发送窗体:发送窗体的关闭、收缩和打开受接收方的控制。当一个有效的确认时,发送窗体关闭;当接收方通告发送方同意的窗体大小能够更大时,发送窗体会打开。当接收方通告发送方同意的窗体大小更小时。发送窗体就收缩,可是TCP强烈不建议发送窗体收缩。

 注意:TCP窗体的单位是字节。不是报文段。所以TCP窗体中,每一格相应1B。

利用滑动窗体进行流量控制过程

上图中,在发送端与接收端建立连接时,接收端告诉发送端当前接收窗体rwnd=400。所以发送端最多可以发送400B,如果每个报文段为100B。

发送端连续发送4个报文段。各自是1-100,101-200,201-300,301-400,401-500。发送后数据段101-200在路上丢失了,其它几个报文都被接收了。并放入到接收缓存中,接收方便向发送方发送1-200报文段的ACK。并期望收到序号为201相应的报文段。同一时候设置接收窗体大小rwnd=300,发送端便重传序号201相应的报文段。当接收端收到该报文段后,并向发送端发送前500个报文的ACK,并期望收到序号为501的报文段,并设置接收窗体rwnd=100。发送端收到该ACK报文段后,便向接收端发送序号为501-600的报文段,接收端收到该报文段后,发送ACK报文段。并设置rwnd=0,意在通知发送端不要临时再发送数据段。

糊涂窗体综合症

当发送应用程序产生数据的速度非常慢,或接收应用程序消耗数据的速度非常慢,或者两者都有,都会使得发送数据的报文段非常小,使得网络效率非常低,这个问题称为糊涂窗体综合症SWS(silly
window syndrome)。

 发送方产生的症状

假设发送方应用程序产生数据的速度非常慢。比如一次仅仅产生1B,那么就有可能产生糊涂窗体综合症。解决办法是防止发送TCP一次仅仅发送1B。必须让发送TCP等待。并把数据收集成较大的数据块后再发送。

发送TCP须要等待多长时间再发送呢?

假设等待时间过长。则会延迟整个过程。

假设等待时间过短,最后非常可能还是发送一个个小报文段。Nagle提出了一种解决办法,我们称之为Nagle算法,过程例如以下

        1.发送TCP把它从应用程序收到的第一块数据发送出去。哪怕仅仅有一个字节;

        2.在发送了第一个报文段后。发送TCP先把发送应用程序兴许到达的数据字节缓存起来。直到收到接收端发来的ACK,或者已积累了足够的数据。发送TCP就能够发送这个报文段了。

        注意:足够的数据指的是数据达到0.5*MSS(最大报文段长度的一半)或者发送窗体大小的一半时。

 
接收方产生的症状

假设接收端应用程序pull速度非常慢,比如一次仅仅消耗1B的数据。若TCP接收方的缓存已满,而应用程序一次仅仅能从接收缓存中读取1B,然后向发送方发送ACK。并把窗体设置为1B(由于从接收缓存中取出了1B),但发送方的缓存中有非常多数据。这样发送方有仅仅能一次发送1B,接收方发回确认,仍然将窗体设置为1B,这样进行下去。网络的效率非常低,此时能够採取两种解决方法:

方法1:採用Clark解决方法。该方法是:接收端仅仅要有数据到达就向发送端发送零值窗体ACK报文段。直到(1)缓存中有足够大的空间能够放入1MSS报文段,或者(2)至少有一半的缓存空间空暇。仅仅要出现这两种情况之中的一个,接收端就向发送端发送非零值窗体ACK报文

方法2:推迟确认。当报文段到达时并不马上发送确认,接收方在对收到的报文段进行确认之前一直等待,直至接收缓存有足够的空间为止。

推迟发送确认防止了发送TCP滑动它的窗体。

推迟确认的另外一个长处:降低了网络的通信量;相应的缺点是:假设推迟的时间比較长,会使得发送方以为发送的报文丢失,而产生不必要的重传。

总之。发送方和接收方能够配合解决该问题。整体的思想是:发送方不发送非常小的报文段的同一时候,接收方也不要在缓存刚刚有了一点小空间就急慌忙这个非常小的窗体大小的信息通知发件人。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

TCP流量控制协议的更多相关文章

  1. OSI七层模型详解 TCP/IP协议

      总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转 ...

  2. TCP/IP协议(一)网络基础知识

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  3. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  4. 计算机网络中的TCP/UDP协议到底是怎么回事(二)

    上一篇博客阐述了TCP/IP五层网络结构模型以及一些关于TCP.UDP的基础知识,这篇博客会接着写一些关于TCP拥塞控制的算法以及对TCP中常有的疑问进行解答. TCP拥塞控制 首先了解几个概念,为下 ...

  5. OSI 七层模型和 TCP/IP 协议比较

      OSI (Open System Interconnection), 开放式系统互联参考模型.从下到上七层模型功能及其代表协议: 物理层(Physical) :规定了激活.维持.关闭通信端点之间的 ...

  6. TCP/IP 协议理解

    TCP/IP 协议(Transmission Control Protocol / internet Protocol),因特网互联协议,又名网络通讯协议.通俗而言:TCP负责发现传输的问题,一有问题 ...

  7. ISO/OSI网络体系结构和TCP/IP协议模型

    1. ISO/OSI的参考模型共有7层,由低层至高层分别为:物理层.数据链路层.网络层.传输层.会话层.表示层.     应用层.各层功能分别为: (1)物理层          提供建立.维护和拆除 ...

  8. 15、TCP/IP协议

    15.TCP/IP协议       几台孤立计算机系统组在一起形成网络,几个孤立网络连在一起形成一个网络的网络,即互连网.一个互连网就是一组通过相同协议族互连在一起的网络. 互联网的目的之一是在应用程 ...

  9. 浅析TCP/IP 协议

    TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族. TCP/IP协议模块关系 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层.网络层.传输层.应用层 ...

随机推荐

  1. Android SDK 和 Eclipse ADT 离线安装 教程

    因为google 被限制,就是FQ后,下载的速度依旧非常慢,让人非常崩溃啊,所以这里就分享一下离线安装android SDK 和eclipse ADT 离线安装方法. 安装之前首先已经确保java s ...

  2. 解决apache+tomcatserver环境中文乱码的问题

    在使用apache做转发服务器时,碰到了中文乱码的问题. 说说解决思路: 1.通常乱码是由于编码不统一造成的.所以要先推断是不是由于编码问题造成的,假设是的话,那统一编码就能够去解决. 2.tomca ...

  3. 采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址

    采用truelicense进行Java规划license控制 扩展可以验证后,license 开始结束日期,验证绑定一个给定的mac住址. Truelicense 它是一个开源java license ...

  4. newinstance()和new有什么区别?(转)

    在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有 ...

  5. 全新E:网站不是之前排名浮动 相比于竞争对手究竟缺少了什么?

    这几天有非常多朋友问新辰,为什么站点排名掉了?为什么被人家逆袭反超了?当然,这无疑与你站点的内容.外链和用户体验有非常大关系,只是.新辰在此觉得,还须要多研究一下竞争对手的站点,做到:人无我有.人有我 ...

  6. 新秀系列C/C++经典问题(六)

    类包含一个指向成员复制 称号:下面是类和执行的阵列的声明.题.并针对存在的问题提出几种解决方式. template<typename T> class Array { public: Ar ...

  7. JVM内存结构、垃圾回收那点事(转)

    翻看电脑的文件夹,无意看到了9月份在公司做的一次分享,浏览了一下"婆婆特",发现自己在ppt上的写的引导性问题自己也不能确切的回答出来,哎,知识这东西,平时不常用的没些日子就生疏了 ...

  8. 《学习opencv》笔记——矩阵和图像处理——cvGEMM,cvGetCol,cvGetCols and cvGetDiag

    矩阵和图像操作 (1)cvGEMM函数 其结构 double cvGEMM(//矩阵的广义乘法运算 const CvArr* src1,//乘数矩阵 const CvArr* src2,//乘数矩阵 ...

  9. 基于OpenCV性别识别

    叙述性说明 所谓的性别识别推断检测到的面部是男性还是女性.它是一个二值分类问题. 识别算法可以用于SVM,BP神经网络.LDA,PCA,PCA+LDA等等.OpenCV官网给出的文档是基于Fisher ...

  10. 什么场景Hbase

    Hbase不太复杂,但适合于存储大量的数据资料.因为是商城系统:用户.商品.订单,店,卖家,这些数据是不适合复杂的关系Hbase. 有一个非常大的数据量订购,并经常来计算.只考虑存款订单Hbase. ...