为什么80%的码农都做不了架构师?>>>   

20.3   滑动窗口

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

•    1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。

•    2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发 生在另一端的接收进程读取已经确认的数据并释放了 TCP的接收缓存时。

•    3) 当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使 用这种方式。但 TCP必须能够在某一端产生这种情况时进行处理。

因为窗口的左边 沿受另一端发送的确认序号的控制,因此不可能 向左边移动。如果接收到一个指示窗口左边沿向左移动的 A C K ,则它被认为是一个重复  A C K 并被丢弃。如果左边沿到达右边沿,则称其为一个零窗口,此时发送方不能够发送任何数据。

20.4   窗口大小

由接收方提供的窗口的大小通常可以由接收进程控制,这将影响 TCP的性能。 4.2BSD默认设置发送和接受缓冲区的大小为 2048个字节。在4.3BSD中双方被增加为 4096个字节。正如我们在本书中迄今为止所看到的例子一样,SunOS 4.1.3 、BSD/386和SVR4仍然使用4096字节的默认大小。其他的系统,如Solaris 2.2、4.4BSD和 AIX3.2则使用更大的默认缓存大小,如8192或16384等。插口API允许进程设置发送和接收缓存的大小。接收缓存的大小是该连接上所能够通告的最大窗口大小。有一些应用程序通过修改插口缓存大小来增加性能。

[Mogul 1993]显示了在改变发送和接收缓存大小(在单向数据流的应用中,如文件传输, 只需改变发送方的发送缓存和接收方的接收缓存大小)的情况下,位于以太网上的两个工作 站之间进行文件传输时的一些结果。它表明对以太网而言,默认的 4096字节并不是最理想的大小,将两个缓存增加到 16384 个字节可以增加约40%左右的吞吐量。在 [Papadopoulos和 Parulkar 1993]中也有相似的结果。

20.5   PUSH标志

在每一个 TCP例子中,我们都看到了 PUSH标志,但一直没有介绍它的用途。发送方使用 该标志通知接收方将所收到的数据全部提交给接收进程。这里的数据包括与PUSH一起传送的 数据以及接收方 TCP已经为接收进程收到的其他数据。

在最初的 TCP规范中,一般假定编程接口允许发送进程告诉它的 TCP何时设置 PUSH标志。 例如,在一个交互程序中,当客户发送一个命令给服务器时,它设置 PUSH标志并停下来等待服务器的响应(在习题 19.1中我们假定当发送 12字节的请求时客户设置 PUSH标志)。通过允 许客户应用程序通知其 TCP设置PUSH标志,客户进程通知 TCP在向服务器发送一个报文段时 不要因等待额外数据而使已提交数据在缓存中滞留。类似地,当服务器的  TCP接收到一个设 置了PUSH标志的报文段时,它需要立即将这些数据递交给服务器进程而不能等待判断是否还 会有额外的数据到达。

然而,目前大多数的 API没有向应用程序提供通知其 TCP设置 PUSH标志的方法。的确,许多实现程序认为 PUSH标志已经过时,一个好的TCP实现能够自行决定何时设置这个标志。

20.6   慢启动

现在,TCP需要支持一种被称为“慢启动  (slow start)”的算法。该算法通过观察到新分组 进入网络的速率应该与另一端返回确认的速率相同而进行工作。慢启动为发送方的 TCP增加了另一个窗口:拥塞窗口 (congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文 段大小)。每收到一个 ACK,拥塞窗口就增加一个报文段( cwnd以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。

发送方开始时发送一个报文段,然后等待 ACK。当收到该 ACK时,拥塞窗口从 1增加为2,即可以发送两个报文段。当收到这两个报文段的 ACK时,拥塞窗口就增加为 4。这是一种指数增加的关系。

20.7.1   带宽时延乘积

在我们的例子中,作为最大的吞吐量,发送方 在任何时候有 8个已发送的报文段未被确认。接收方的通告窗口必须不小于这个数目,因为通 告窗口限制了发送方能够发送的段的数目。

可以计算通道的容量为:

capacity (bit) = bandwidth (b/s) × round-trip time (s) 一般称之为带宽时延乘积。这个值依赖于网络速度和两端的 RTT,可以有很大的变动。例如, 一条穿越美国( RTT约为60 ms)的T1的电话线路(1 544 000 b/s)的带宽时延乘积为 11 580字 节。对于 20.4节中讨论的缓存大小而言,这个结果是合理的。但是一条穿越美国的 T3电话线路(45 000 000 b/s)的带宽时延乘积则为 337 500字节,这个数值超过了最大所允许的 TCP通告窗 口的大小(65535字节)。

转载于:https://my.oschina.net/bjyb/blog/389158

第20章 TCP的成块数据流相关推荐

  1. 《网络协议》TCP 的成块数据流

    在前面的文章中<TCP 的交互数据流>我们可以知道,TCP 的成块数据流是在要求传输效率较高的情况下使用,例如 FTP.对于这些要求传输 TCP 最长报文段的应用,TCP 协议采用了滑动窗 ...

  2. TCP/IP详解--学习笔记(11)-TCP交互数据流,成块数据流

    目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...

  3. TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流

    2019独角兽企业重金招聘Python工程师标准>>> 目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分 ...

  4. 【网络协议】TCP的交互数据流和成块数据流

    TCP协议简介 传输控制协议,位于传输层,提供一种可靠的,面向连接的数据传输服务 TCP通过以下方式保证可靠性: 应用程序被分割为适合传输的数据块,UDP不会,UDP只有与IP首部组成IP数据报时才会 ...

  5. 【TCP/IP详解 卷一:协议】第十九章 TCP的交互数据流

    19.1 引言 前一章我们介绍了TCP连接的建立与释放:三握四挥,以及状态转移图. TCP报文段分为:交互数据,以及成块数据(下一章介绍). 交互数据:例如telnet,ssh,这种类型的协议在大多数 ...

  6. 《TCP/IP网络编程》第20章

    <TCP/IP网络编程>第20章 同步方法分类及CRITICAL_SECTION同步 用户模式(User mode)和内核模式(Kernal mode) 用户模式同步 内核模式同步 基于C ...

  7. 第20章 JavaScript通信

    第20章 JavaScript通信 在传统Web开发中,客户端与服务器端通信主要通过同步请求(页面刷新)来实现,当客户端向服务器端发出HTTP请求之后,服务器端接收并处理这个请求,然后响应完整的Web ...

  8. 第20章,运维自动化之ansible

    更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) https://blog.51cto.com/13683480/2095439 第20章,运维自 ...

  9. 第 20章 定义数据库对象

    第 20章  定义数据库对象 本节涵盖了Greenplum的数据库以及如何创建和管理数据库对象的数据定义语言(DDL). 在Greenplum数据库中创建对象包括一些前期选择例如数据分布,存储选项,数 ...

最新文章

  1. CentOS 6.5 下Vim 配置图解
  2. 路由器简介一:路由器概念、基本结构及分类
  3. java slfj教程_SLF4J入门程序
  4. 几道 BAT 算法面试中经常问的「字符串」问题
  5. CentOS 初体验十:文件权限查看和修改
  6. oracle长连接超时设置
  7. el-tooltip位置不灵活_美团研究院:超五成生活服务业商户有灵活用工需求
  8. 易语言下载别人的源码编译出来用不了_我是如何阅读源码的
  9. keras实例学习-双向LSTM进行imdb情感分类
  10. 更深入的理解动态代理——一个真正让我理解动态代理应用价值的示例
  11. 析构函数定义为虚函数原因
  12. java集合大家族之Map
  13. php bi系统,bi系统是什么系统
  14. c51汇编语言位操作,51单片机汇编语言教程之单片机位操作指令的详细资料说明...
  15. 开课吧java广告,开课吧Java面试题:虚引用与软引用和弱引用的区别
  16. 华为手机连电脑当摄像头用_今天才知道,华为手机摄像头还能这样用!还不会用你买什么华为?...
  17. C# NPOI 批量导出Excel 打包下载
  18. (Java生产者消费者问题)http://blog.csdn.net/jhj735412/article/details/6931135
  19. FineBI 将聚合之后的结果,再求平均值
  20. 高中数学怎么学好怎样才能学好高一数学

热门文章

  1. MySQL的replace方法
  2. java获取redis中各种数据类型key对应的value代码简单封装
  3. myid文件缺失导致zookeeper无法启动(myid file is missing)
  4. Texlive source
  5. jvm程序执行慢诊断手册
  6. C#中获取路径的几种方法
  7. 物联网形势大好,传感器前景可观
  8. linux之at,crontab
  9. Linux 命令(49)—— export 命令(builtin)
  10. 数值优化:计算基本理论