专栏首页cwl_Java速读原著-TCP/IP(TCP滑动窗口)

速读原著-TCP/IP(TCP滑动窗口)

第20章 TCP的成块数据流

20.3 滑动窗口

图2 0 - 4用可视化的方法显示了我们在前一节观察到的滑动窗口协议。

在这个图中,我们将字节从 1至11进行标号。接收方通告的窗口称为提出的窗口( o ff e r e d w i n d o w),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第 3字节在内的数据,且通告窗口大小为 6。回顾第1 7章,我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。

当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运动:

  1. 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
  2. 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了 T C P的接收缓存时。
  3. 当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使用这种方式。但T C P必须能够在某一端产生这种情况时进行处理。第 2 2 . 3节给出了这样的一个

例子,一端希望向左移动右边沿来收缩窗口,但没能够这样做。图2 0 - 5表示了这三种情况。因为窗口的左边沿受另一端发送的确认序号的控制,因此不可能向左边移动。如果接收到一个指示窗口左边沿向左移动的 A C K,则它被认为是一个重复 A C K, 并被丢弃。

如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。

一个例子

图2 0 - 6显示了在图2 0 - 1所示的数据传输过程中滑动窗口协议的动态性。

以该图为例可以总结如下几点:

  1. 发送方不必发送一个全窗口大小的数据。
  2. 来自接收方的一个报文段确认数据并把窗口向右边滑动。这是因为窗口的大小是相对于确认序号的。
  3. 正如从报文段7到报文段8中变化的那样,窗口的大小可以减小,但是窗口的右边沿却不能够向左移动。
  4. 接收方在发送一个 A C K前不必等待窗口被填满。在前面我们看到许多实现每收到两个报文段就会发送一个A C K。

下面我们可以看到更多的滑动窗口协议动态变化的例子。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 速读原著-TCP/IP(其他的TCP/IP应用程序)

    本章中我们描述了另外一些很多实现都支持的 T C P / I P应用程序。有些很简单,易于全面了解(F i n g e r和W h o i s),而另一个则相当...

    cwl_java
  • 速读原著-TCP/IP(TCP的坚持定时器)

    我们已经看到 T C P通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为 0会发生什么情况呢?这将有效地阻止发送方传送数...

    cwl_java
  • 速读原著-TCP/IP(TCP定时器示例)

    为了观察到实际中的坚持定时器,我们启动一个接收进程。它监听来自客户的连接请求,接受该连接请求,然后在从网上读取数据前休眠很长一段时间。

    cwl_java
  • Windows窗口类

    Windows编程中,对所有的GUI组件和控件进行了分类,每种类型的实例对象都具有不同的特性,这些特性包括UI外观以及事件的处理和响应的方法。就和面向对象技术中...

    欧阳大哥2013
  • Windows窗口对象的附加数据

    Windows编程中,每一个窗口对象(HWND)都是一个窗口类(WNDCLASSEX)的实例。每个窗口类实例出来的窗口对象都按同样的方式进行处理,共享相同的回调...

    欧阳大哥2013
  • Windows程序设计笔记(二) 关于编写简单窗口程序中的几点疑惑

    在编写窗口程序时主要是5个步骤,创建窗口类、注册窗口类、创建窗口、显示窗口、消息环的编写。对于这5个步骤为何要这样写,当初我不是太理解,学习到现在有些问题我基本...

    Masimaro
  • 《Streaming Systems》第四章-窗口

    《Streaming Systems》第四章相较于前三个章节更为复杂,倘若不是作者给出了大量的动图,恐怕大部分读者都会晕乎乎的了吧(所以强烈建议这一章观看Saf...

    哒呵呵
  • 不建议复用窗口管理对象

    窗口管理对象是应用程序通过调用它的接口可操作控制窗口资源的显示,比如MFC提供的CWindow、CDialog,开源界面库duilib提供的WindowImpl...

    gaigai
  • Android窗口管理分析(1):View如何绘制到屏幕上的主观理解

    看书的小蜗牛
  • 浅析 Android 的窗口

    一、窗口的概念 在开发过程中,我们经常会遇到,各种跟窗口相关的类,或者方法。但是,在 Android 的框架设计中,到底什么是窗口?窗口跟 Android Fr...

    腾讯Bugly

扫码关注云+社区

领取腾讯云代金券