• 滑动窗口协议

    • 流量控制方法
  • PUSH
  • 慢启动
 
隔一个报文段确认”的策略实际就是因为 delayed ack,同时接收到两个待确认的ACK包时,就立即发送确认包。
 
滑动窗口实例

 
解决了快的发送方-》慢的接收方

  • 发送方发送 4个背靠背(back-to-back)的数据报文段去填充接收方的窗口,然后停下来等待一个ACK。
  • 接收方发送 ACK(报文段 8),但通告其窗口大小为 0,这说明接收方已收到所有数据,但这些数据都在接收方的 TCP缓冲区,因为应用程序还没有机会读取这些数据。
  • 另一个ACK,窗口更新 在17.4ms后发送,表明接收方现在可以接收另外的4096个字节的数据。
  • 发送方发送最后4个报文段(10~13),再次填充了接收方的窗口。
    • 注意到报文段13中包括两个比特标志:PUSH和FIN。
  • 随后从接收方传来另外两个 ACK,它们确认了最后的 4096字节的数据(从4097到8192字节)和FIN(标号为8192)
 
滑动窗口协议:
 
 

  • 窗口大小6个字节,覆盖第4-9字节

    • 说明字节1-3 是发送并被确认的
  • 窗口大小起始于确认序号字段。
    • 发送方可以计算它的可用窗口,

      • 比如窗口大小6,已经被确认1-3,发送但未被确认4-6,则可用窗口大小3,起始第7序号
      • 可用窗口表明有多少数据可以立即被发送
  • 当接收方确认数据后,这个滑动窗口不时地向右移动。
  • 窗口左右边沿的运动现象的三个术语
    • 左边沿向右靠近----窗口合拢

      • 现象发生在数据被发送和确认时。
    • 右边沿向右靠近----窗口张开
      • 将允许发送更多的数据
      • 现象发生在接收端进程读取已经确认的数据并释放了TCP的接收缓存时。
    • 右边沿向左靠近----窗口收缩
      • RFC 强烈建议不要使用这种方式
      • 但TCP 有特殊场景会使用到
  • 如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据

对应上图的滑动窗口协议的动态性

窗口大小
由接收方提供的窗口的大小通常可以由接收进程控制,这将影响 TCP的性能
 
PUSH标志
  • 发送方使用该标志通知接收方将所有接收到的数据全部提交给接收进程
  • 包括与PUSH一起传送的数据以及接收方TCP 已经接收到的其他数据
 
慢启动
  • 出现原因
    • 在发送与接收方存在多个路由器和速率较慢的链路时
      • 中间路由器必须缓存分组包,并可能耗尽存储器的空间
      • 严重降低TCP连接的吞吐量
  • 工作原理
    • 观察新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
    • 慢启动为发送方增加另一个窗口:拥塞窗口(congestion window) cwnd.
      • 当建立TCP连接时,拥塞窗口被初始化为1个报文段(即另一端通告的报文段大小)
      • 每收到一个ACK,拥塞窗口就增加一个报文段,拥塞窗口从1增加到2,即可以发送两个报文段。
      • 发送方取拥塞窗口与通告窗口中的最小值作为发送上限。
  • 拥塞窗口是发送方使用的流量控制
  • 通告窗口则是接收方使用的流量控制
 
 
 
capacity(bit) = bandwidth(b/s) * round-trip(s)
            容量  = 带宽 * 延时
 
电话线每193bit 有1个作为 帧同步
因此原始比特率 1544000 b/s --》 实际比特率 1544000/193=8000,1544000-8000=1536000 b/s
 
计算滑动窗口大小:
有人抱怨说美国和日本之间的一个 128 ms时延、速率为256 000 b/s的链
路吞吐量为120 000 b/s(利用率为47 %),而当链路通过卫星时其吞吐量则为33 000 b/s(利用
率为13%)。试问在这两种情况下窗口大小各为多少(假定卫星链路的时延为 500 ms)?卫星
链路的窗口大小应该如何调整?
 
1.吞吐量12000 b/s * 延时128ms =15360 b  / 8 =1920 bit
 
2.链路通过卫星
吞吐量33000 b/s * 延时500ms =16500 b /8 = 2062 bit
 
 

TCP 滑动窗口的更多相关文章

  1. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  2. TCP 滑动窗口和 拥塞窗口

    转http://coolshell.cn/articles/11609.html 滑动窗口 -- 表征发送端和接收端的接收能力 拥塞窗口-- 表征中间设备的传输能力 TCP滑动窗口 需要说明一下,如果 ...

  3. TCP 滑动窗口的简介

    TCP 滑动窗口的简介 POSTED BY ADMIN ON AUG 1, 2012 IN FLOWS34ARTICLES | 0 COMMENTS TCP的滑动窗口主要有两个作用,一是提供TCP的可 ...

  4. TCP滑动窗口控制流量的原理

    TCP的滑动窗口机制       TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的传输协议就需要对数据进行确认.TCP协议里窗口机制有2种:一种是固定的窗口大小 ...

  5. tcp滑动窗口详解(2)

    http://blog.csdn.net/yujun00/article/details/636495 ARQ与滑动窗口概念  滑动窗口协议,是TCP使用的一种流量控制方法.该协议允许发送方在停止并等 ...

  6. [转]TCP滑动窗口详解

    TCP滑动窗口详解  http://lyjdamzwf.blog.163.com/blog/static/75206837201193373226/ TCP滑动窗口(Sliding Window)   ...

  7. TCP滑动窗口与回退N针协议

    [转]TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议 2014-1-5阅读884 评论0 本文转自 http://www.cnblogs.com/ulihj/archive/201 ...

  8. TCP滑动窗口(发送窗口和接受窗口)

    TCP窗口机制 TCP header中有一个Window Size字段,它其实是指接收端的窗口,即接收窗口.用来告知发送端自己所能接收的数据量,从而达到一部分流控的目的. 其实TCP在整个发送过程中, ...

  9. 传输层-Transport Layer(下):UDP与TCP报头解析、TCP滑动窗口、TCP拥塞控制详解

    第六章 传输层-Transport Layer(下) 上一篇文章对传输层的寻址方式.功能.以及流量控制方法做了简短的介绍,这一部分将介绍传输层最重要的两个实例:TCP协议和UDP协议,看一看之前描述的 ...

  10. 彻底搞通TCP滑动窗口

    在我们当初学习网络编程的时候,都接触过TCP,在TCP中,对于数据传输有各种策略,比如滑动窗口.拥塞窗口机制,又比如慢启动.快速恢复.拥塞避免等.通过本文,我们将了解滑动窗口在TCP中是如何使用的. ...

随机推荐

  1. head first python helloword

    如何使用python 打出hello word 在python shell 键入print 'hello word'( python 2) or  print ("hello word&qu ...

  2. Python os模块--路径、文件、系统命令等操作

    os模块包含普遍的操作系统功能. 注意:函数参数path是文件或目录的路径,filename是文件的路径,dirname是目录的路径,路径可以是相对路径,也可绝对路径 常见或重要的函数为加粗字体 os ...

  3. ecshop商品页增加编辑器fckeditor

    最近在做ecshop的项目,需要在商品单页中增加一项FCKEditor的文本编辑器,但在ecshop的论坛和百度里搜出的方法,试了好几个都没有用,终于找到一个可以正确使用的,和大家分享. ecshop ...

  4. Windows下安装Python扩展模块提示Unable to find vcvarsall.bat的问题

    本文内容 Unable to find vcvarsall.bat的问题描述 问题分析 总结 提示: 如果你只是想知道自己需要安装哪个版本的Visual Studio请直接查看本文最后一个小节的内容. ...

  5. [命令行] curl查询公网出口IP

    转载:http://blog.csdn.net/orangleliu/article/details/51994513 不管是在家里还是办公室,或者是公司的主机,很多时候都是在内网中,也就是说很多都是 ...

  6. 如何使用jedis进行发布订阅

    jedis实现发布订阅,是通过让发布者和订阅者同时对某个channel(频道)进行操作,订阅者订阅了某个频道例如channel1,发布者往这个channel1里面publish东西,在pubsubli ...

  7. [故障公告]14:40-15:00博客站点web服务器雪崩似的CPU 100%

    非常抱歉,今天下午14:40-15:00左右,web服务器突然雪崩似的出现CPU 100%问题,造成博客站点无法访问(503).由此给您带来很大的麻烦,请您谅解. 在问题出现之前,博客站点运行着5台w ...

  8. VB6之写注册表

    难免会遇到写注册表的情况,写了个实用点的RegWrite函数.为了减少代码量,用WScript.Shell取代了API来实现. 使用方式就在注释中了,就不再过多解释了.PS:注释比实现代码要丰富多了, ...

  9. CSS命名实践

    前面的话 每次写HTML结构涉及到CSS命名时,都要挣扎一番.关于CSS命名的规范,市面上有不少,如OOCSS.SMACSS.BEM和MVCSS等.在这里面最火的应该算BEM了.本文将详细介绍CSS命 ...

  10. Luogu T7152 细胞(递推,矩阵乘法,快速幂)

    Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每 ...