窗口大小: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/IP] 滑动窗口

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

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

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

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

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

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

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

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

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

随机推荐

  1. JAVA NIO 之NIO简介

    复习NIO知识,权当做笔记~~ 在NIO之前先复习一下 1.I/O类简图  2.通常我们把网络通信也归到IO行为中,例如网络编程中的scoket通信. 不管是磁盘I/O,还是网络I/O,数据在写入Ou ...

  2. ssh连接断开后 shell进程退出

    问题描述:当SSH远程连接到服务器上,然后运行一个服务 ./catalina.sh start,然后把终端开闭(切断SSH连接)之后,发现该服务中断,导致网页无法访问.   解决方法:使用nohup命 ...

  3. Material-design icon生成插件

    在使用android studio开发android应用的过程.会遇到一些非常不错的插件,当中android-material-design-icon-generator-plugin 是一个Mate ...

  4. ViewPager中View的复用

    代码例如以下: public class MyViewPagerAdapter extends PagerAdapter { //显示的数据 private List<DataBean> ...

  5. 获取SD卡中的音乐文件

    小编近期在搞一个音乐播放器App.练练手: 首先遇到一个问题.怎么获取本地的音乐文件? /** * 获取SD卡中的音乐文件 * * @param context * @return */ public ...

  6. 【Android自己定义View实战】之自己定义超简单SearchView搜索框

    [Android自己定义View实战]之自己定义超简单SearchView搜索框 这篇文章是对之前文章的翻新,至于为什么我要又一次改动这篇文章?原因例如以下 1.有人举报我抄袭,原文链接:http:/ ...

  7. Can JavaScript connect with MySQL? 浏览器控制台的js采集数据结果持久化存储

    浏览器控制台的js采集数据结果持久化存储 how to open a file in javascript https://developer.mozilla.org/en-US/docs/Web/A ...

  8. 洛谷P2303 [SDOi2012]Longge的问题

    题目背景 SDOi2012 题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). ...

  9. JSP-Runoob:JSP XML 处理数据

    ylbtech-JSP-Runoob:JSP XML 处理数据 1.返回顶部 1. JSP XML 数据处理 当通过HTTP发送XML数据时,就有必要使用JSP来处理传入和流出的XML文档了,比如RS ...

  10. oracle查询时间段

    select count(*) tt from crm_cisco_call_detailwhere DateTime between to_date('2016-4-5 00:00:00','yyy ...