• 滑动窗口协议

    • 流量控制方法
  • 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. jquery让页面滚动到底部

    function scrollToEnd(){//滚动到底部 var h = $(document).height()-$(window).height(); $(document).scrollTo ...

  2. Struts2 Action接收POST请求JSON数据及其实现解析

    一.认识JSON JSON是一种轻量级.基于文本.与语言无关的数据交换格式,可以用文本格式的形式来存储或表示结构化的数据. 二.POST请求与Content-Type: application/jso ...

  3. loadrunner 手工参数拼接与l oadrunner的url编码

    Acction() { //演示需要的一些变量,提前声明 char *name = "yezi_zh"; "; char *work = "engin" ...

  4. Java 基础 变量介绍

    变量的声明和使用 概念: 变量是指内存中的一个存储区域,该区域要有自己的名称(变量名).类型(数据类型),该区域的数据可以在同一数据类型的范围内不断变化值: 变量的使用注意事项: Java中的变量必须 ...

  5. Android 4.0以后正确的获取外部sd卡存储目录

    刚解决这个棘手的问题 找了很久,随笔记下. 网上搜索 android 获取外部sd卡存储目录 普遍都是: 1) Environment.getExternalStorageDirectory() 这个 ...

  6. 15套java架构师大型分布式综合项目实战、千万高并发-视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  7. juggle添加c#版本

    此前做过一个c++版的网络层dsl:http://www.cnblogs.com/qianqians/p/4255034.html 现在给这个dsl加入c#的支持,并且对代码的结构做了优化,将语法解析 ...

  8. 富文本编辑器嵌入指定html代码

    先把内容放入一个input中 <input id="detail" type="hidden" value="${sysCarousel.det ...

  9. 图论基础之Dijkstra算法的初探

         图论,顾名思义就是有图有论.        图:由点"Vertex"和边"Edge "组成,且图分为有向图和无向图(本文讨论有向图),之前做毕业设计的 ...

  10. Java异常体系简析

    最近在阅读<Java编程思想>的时候看到了书中对异常的描述,结合自己阅读源码经历,谈谈自己对异常的理解.首先记住下面两句话: 除非你能解决这个异常,否则不要捕获它,如果打算记录错误消息,那 ...