• 滑动窗口协议

    • 流量控制方法
  • 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. 有关ArrayList常用方法的源码解析

    我相信几乎所有的同学在大大小小的笔试.面试过程中都会被问及ArrayList与LinkedList之间的异同点.稍有准备的人这些问题早已烂熟于心,前者基于数组实现,后者基于链表实现:前者随机方法速度快 ...

  2. java 得到uuid并处理

    java 得到uuid String s = UUID.randomUUID().toString(); //去掉“-”符号 return s.substring(0,8)+s.substring(9 ...

  3. Spring Web 配置文件加载路径问题

    Spring:   定位   载入   注册 我们常用的加载context文件的方法有如下三个: 1.FileSystemXmlApplicationContext 这个方法是从文件绝对路径加载配置文 ...

  4. Spring Boot 构建 WAR和JAR 文件

    原文:https://github.com/x113773/testall/issues/3 ## JAR文件方式一:1. 修改[pom.xml](https://github.com/x113773 ...

  5. 实现excel导入导出功能,excel导入数据到页面中,页面数据导出生成excel文件

    今天接到项目中的一个功能,要实现excel的导入,导出功能.这个看起来思路比较清楚,但是做起了就遇到了不少问题. 不过核心的问题,大家也不会遇到了.每个项目前台页面,以及数据填充方式都不一样,不过大多 ...

  6. 7.java的请求转发和请求重定向

    1.请求重定向:是客户端的行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变,一次新的转发. 2.请求转发:是服务器的行 ...

  7. Linux内核的基本概念

    Linux内核学习,推荐的书籍: <linux设备驱动开发详解第二版>.<Linux内核设计与实现第三版>.<嵌入式Linux应用开发完全手册> 第一篇:讲解Lin ...

  8. 没有在xml中引入 相关的配置文件

    错误信息如下   严重: Servlet.service() for servlet AutoReplyServlet threw exception org.apache.ibatis.except ...

  9. Educational Codeforces Round 20.C

    C. Maximal GCD time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  10. Java编程练习(四)——集合框架应用

    Java集合框架小应用之扑克牌小游戏 学习了Java集合框架之后,我写了一个扑克牌小游戏来巩固知识.学习之余的练习之作,有不足之处还得多多指教了~(*/ω\*) 扑克牌小游戏背景: 1. 创建一副扑克 ...