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

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

[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. 使用X264编码yuv格式的视频帧使用ffmpeg解码h264视频帧

    前面一篇博客介绍在centos上搭建点击打开链接ffmpeg及x264开发环境.以下就来问个样例: 1.利用x264库将YUV格式视频文件编码为h264格式视频文件 2.利用ffmpeh库将h264格 ...

  2. Linux下一个OTL 采用long long类型数据库支持BIGINT

    码如下面: #define OTL_BIGINT long long #define OTL_STR_TO_BIGINT(str,n) \ { \ n=atoll(str); \ } #define ...

  3. Java NIO框架Netty课程(一) – Hello Netty

    首先啰嗦2,假如你不知道Netty怎么办怎么办.它可以是一个简单的搜索,找出.我只能说Netty是NIO该框架,它可用于开发分布式Java计划.详细情况可以做,我们可以尝试用你的想象力. 技术,它是服 ...

  4. 认识Underscore

    Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它弥补了部分jQuery没有实现的功能,同时又是Backbone.j ...

  5. JSON小结

    在 JSON 中,“Object” 是什么呢? json.org 有很好的解释: 1 .An object is an unordered set of name/value pairs. 2.An ...

  6. android得知----overridePendingTransition

    1 Activity动画是指从一个切换activity跳到另一个activity随着电影. 它由两部分组成:第一部分是一个activity动画出口:中的第二个另一部分activity动画被访问: 于A ...

  7. 2014百度之星预赛(第二场)——Best Financing

    2014百度之星预赛(第二场)--Best Financing Problem Description 小A想通过合理投资银行理財产品达到收益最大化.已知小A在未来一段时间中的收入情况,描写叙述为两个 ...

  8. 【剑指offer学习】求和为定值的两个数(拓展)

    接着上面一篇文章: http://blog.csdn.net/u013476464/article/details/40651451 接下来我们拓展一下题目,如果数组是乱序的,并且规定数组中的元素所有 ...

  9. unix &amp; linux oralce用户 内存使用情况分析

    Linux*********************************************************************************************** ...

  10. outlook 当关闭时最小化到任务栏完美的解决方案

    近期使用Outlook,但很发现easy退出关闭.不能达到最小化封. 在网上找了很长时间也用outlook on the desktop插件,但该插件安装后的执行错误和被遗弃. 最后,我发现了一个叫k ...