• 滑动窗口协议

    • 流量控制方法
  • 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. ecshop循环计数

    循环依次递增+1 <!-- {foreach from=$comments item=comment name=comment} --> {$smarty.foreach.comment. ...

  2. IBM的人工智能“沃森”首次确诊罕见白血病,只用了10分钟!

    患者为一名60岁的女性,最初根据诊断结果,显示她患了急髓白血病.但在经历各种疗法后,效果并不明显. 根据东大医学院研究人员Arinobu Tojo的说法,他们利用Watson系统来对此病人进行诊断.系 ...

  3. 【LeetCode】2. Two Sum

    题目: Given an array of integers, find two numbers such that they add up to a specific target number. ...

  4. 关于 静态页面布局 中的一些BUG

    作为一枚初级程序猿,难免在制作静态页面时会遇到一些BUG,在此,我从网上找了一些资料并且结合自己的项目开发经验,总结了一些在静态页面布局时可能会遇到的问题,希望能对初级程序猿有一定的帮助(资料请参考: ...

  5. 搭建ES6运行环境

    当ES5还没有完全普及时,ES6就接踵而来了,2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015,我们也简称它为ES6或ES2015.在发布之后的将近一年内, ...

  6. eclipse 小方法

  7. 网络请求工具类WebServiceUtils

    如果对WebService一无所知的话,建议先看看这两篇博客,对你WebService很有帮助. http://blog.csdn.NET/eyu8874521/article/details/912 ...

  8. MySQL 'localhost' (10061)解决方法

    今天启动mysql 出现10061错误,处理:修改hosts文件中localhost指向127.0.0.1. 参看:http://www.cnblogs.com/ljian/archive/2011/ ...

  9. JPush简单Java服务端案例实现

    一.激光推送准备工作 1.注册极光推送开发者账号,创建应用: 2.完成推送设置,填写应用名提交生成安装包: 3.扫码安装简单的测试apk,查看应用信息会有AppKey和Master Secret用于推 ...

  10. Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序

    Android系统--输入系统(十五)实战_使用GlobalKey一键启动程序 1. 一键启动的过程 1.1 对于global key, 系统会根据global_keys.xml发送消息给某个组件 & ...