窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小。在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节)。若客户端接受数据速度大于客户端程序读取数据速度,那么会导致接收缓冲区充满,窗口大小减少为0,当服务器得知此消息时将不会发送数据。

  TCP发送端发送数据时,并不是直接传输给接收端,而是先将数据复制到发送缓冲区。类似的,TCP接受端从TCP数据段得到数据后,将其放入接受缓冲区。这样可以避免TCP连接滥用内存、CPU、网络带宽,从而阻止其他连接使用这些资源。也就是说,发送端发送数据有两个要求

  1.   发送缓冲区有数据可以发送
  2.   接受缓冲区有空间可以接受

  如何知道接收端是否存在空间接受数据那?

  窗口大小作为TCP头的一部分,每个TCP数据段无论是否为用户数据段都会带有该信息。接收端确认收到数据返回ack时,会更新自己的窗口大小。发送端会根据窗口大小控制发送数据了速率。

  为什么一开始窗口大小不是最大?

  一开始通知一个较小的窗口,用以强制控制发送端数据流速率。当TCP没有感到网络拥塞时,逐渐增大窗口大小,直到达到最大窗口大小。事实上,这就是拥塞控制机制。

  窗口大小为0后,接受缓冲区数据被接受,发送端如何知晓窗口大小不再为0?

  当窗口大小由0变为正数,接收端发送ack通告发送端一个非零窗口。但是为了防止该ack不幸丢失而导致接收端和发送端陷入死锁(接收端通告了不为0窗口等待接受数据,发送端等待不为0窗口),TCP发送端设置了persistent定时器。

  什么是persistent定时器?

  TCP发送端每隔一端时间发送一个零窗口探测器,该探测会利用persistent定时器来发送。persistent定时器发送一个没有数据的序列号,该序列号是小于最后传输数据的序列号,这时接收端会回送ack通告发送端。persistent定时器会按指数回退,也就是说往后的探测器发送频率会越来越慢(1s,2s,4s,8s)。

http://www.cnblogs.com/yuhanghzsd/p/6323527.html

TCP协议滑动窗口(一)——控制数据传输速率的更多相关文章

  1. TCP协议滑动窗口(一)——控制大批量数据传输速率

    窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小.在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节).若客户端接受数 ...

  2. tcp协议头窗口,滑动窗口,流控制,拥塞控制关系

    参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://b ...

  3. 面试连环炮系列(二十):TCP的滑动窗口协议是什么

    TCP的滑动窗口协议是什么 滑动窗口协议,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方不必每发一个分组就停下来等待确认,因此该协议可以 ...

  4. TCP的滑动窗口机制【转】

    原文链接:http://www.cnblogs.com/luoquan/p/4886345.html      TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的 ...

  5. 计算机网络(八),TCP的滑动窗口

    目录 1.RTT和RTO 2.TCP使用滑动窗口做流量控制与乱序重排 3.滑动窗口的基本原理 八.TCP的滑动窗口 TCP头部中的窗口字段:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端 ...

  6. TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议

    前言:在学习tcp三次握手的过程之中,由于一直无法解释tcpdump命令抓的包中seq和ack的含义,就将tcp协议往深入的了解了一下,了解到了几个协议,做一个小结. 先来看看我的问题: 这是用tcp ...

  7. 一篇带你读懂TCP之“滑动窗口”协议

    前言 你现在的努力,是为了以后有更多的选择. 在上一篇文章通过"表白"方式,让我们快速了解网络七层协议了解了网络七层协议. 接下来我们要把重心放在网络传输的可靠性上面.一起来看TC ...

  8. TCP的滑动窗口与拥塞窗口

    一.滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的.   对ACK的再认识,ack ...

  9. [TCP/IP] 滑动窗口

    什么是滑动窗口? 滑动窗口机制是TCP协议的一种流量控制和防拥塞的机制. 滑动窗口的工作原理? 简单来讲,就是接收方和发送方分别保留一块缓冲区,作为接收和发送数据来使用,发送数据过程中,如果发送方发的 ...

随机推荐

  1. Js中数据类型判断的几种方法

    判断js中的数据类型有一下几种方法:typeof.instanceof. constructor. prototype. $.type()/jquery.type(),接下来主要比较一下这几种方法的异 ...

  2. JQuery实现两侧浮动广告

    1.描述 两侧浮动显示广告 2.要点 其实就是一直在变浮动广告距顶部的值. 3.代码 <!DOCTYPE html> <html> <head> <meta ...

  3. sublime text3 Emmet (原zenCoding)安装方法

    1.安装使用Package Control组件安装 (1)打开控制台 (mac)control+`; (win)ctrl+` (2)复制一下代码并回车 import urllib.request,os ...

  4. [iOS]C语言技术视频-09-枚举的定义

    下载地址: 链接: http://pan.baidu.com/s/1o625Ee2 密码: 8kp5

  5. Javascript Jquery 中的数组定义与操作_子木玲_新浪博客

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  6. 照着例子学习 protobuf-lua

    参考文章:cocos2dx使用lua和protobuf 首先得下载protobuf-gen-lua的插件,插件Git地址在此. 下载完之后进入到protoc-gen-lua\plugin这个目录,并在 ...

  7. 从url中提取参数名和参数值(转)

    在已知参数名的情况下,获取参数值,使用正则表达式能很容易做到.js的实现方法如下: function getValue(url, name) { var reg = new RegExp('(\\?| ...

  8. (简单) POJ 2502 Subway,Dijkstra。

    Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...

  9. jquery.mustache.js使用

    作者:zccst jquery.mustache是用jQuery做了一层封装,提供了以下几个方法,让模板使用更便捷. 1,添加模板,使用异步的方式 var viewData = { name: 'Jo ...

  10. linux命令学习-1-less

    less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大.less 的用法比起 more 更加的有弹性.在 more 的时候,我们并没有办法向前面翻 ...