TCP使用滑动窗口协议的另一种方式来实现流量控制。该协议允许发送方在停止并等待确认之前可以连续发送多个分组。由于发送方不必每发送一个分组就停下来等确认,因此该协议可以加速数据的传输。

一、滑动窗口

接收方通告的窗口称之为提供的窗口 (offered window) 。
当接收方确认数据以后,这个滑动窗口不时向右移动。

  1. 称窗口左边沿向右边沿靠近为窗口合拢 (close)。发生在发送的数据被确认 (data is sent and acknowedged)。
  2. 窗口右边沿向右移动时,允许发送更多的数据,称之为窗口张开 (open)。发生在另一端的接收进程读取已经确认的数据并释放了TCP的接收缓存。
  3. 右边沿向左移动时,称之为窗口收缩 (shrink)。RFC强烈建议不要使用这种方式,但TCP必须能够在某一段产生这种情况时进行处理。

  1. 发送方不必发送一个全窗口大小的数据
  2. 来自接收方的一个报文段确认数据将窗口向右滑动
  3. 窗口的大小可以减小,但是窗口的右边沿不能向左移动
  4. 接收方在发送一个ACK之前不必等待窗口被填满

窗口大小

由接收方提供的窗口的大小通常可以由接收进程控制,窗口大小将影响TCP的性能。

二、PUSH标志

发送方使用该标志通知接收方将所收到的数据全部交给接收进程。这里的数据包括与PUSH一起传送的数据以及接收方TCP已经为接收进程收到的其他数据
由于源于伯克利的实现一般从不将接收到的数据推迟交付给应用程序,因此他们忽略所接收的PUSH标志。

三、慢启动 (slow start)

如果发送方一开始就向网络发送多个报文段,直至达到接收方通告的窗口大小为止,并且在发送方和接收方之间存在多个路由器和速率较慢的链路时,会出现一些问题。一些中间的路由器必须缓存分组,并有可能耗尽存储器的空间。
慢启动通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
慢启动为发送方的TCP增加了另一个窗口:拥塞窗口 (congestion window),记为cwnd。当与另一个网络的主机建立TCP连接时,拥塞窗口被初始化为1个报文段。每收到一个ACK,拥塞窗口就增加一个报文段。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。
拥塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。
慢启动中拥塞窗口的增长是指数关系 (1->2->4...)。
当达到互联网容量时,中间路由器会丢弃分组,通知发送方它的拥塞窗口开的太大。发送方会调整拥塞窗口。

四、窗口大小的选择

带宽时延积

发送端和接收端之间通道的容量是:
\[capacity(bit) = bandwidth(b/s) \times roundtrip\ time(s)\]
一般称之为带宽时延积。这个值依赖于网络速度和两端的RTT。无论是带宽还是时延,都会影响发送方和接收方之间通路的容量。
一般窗口的大小不应小于带宽时延积,否则会引起拥塞,或不能很好利用带宽。

拥塞

当一个大的管道并向一个较小的管道发送时便会发生拥塞。
当多个输入流导到一个路由器,而路由器的输出流小于这些输入流的总和时,也会发生拥塞。

五、紧急方式

TCP提供了“紧急方式 (urgent mode)”,它使一端可以告诉另一端有些具有某种方式的“紧急数据”已经放置在普通的数据流中。另一端被通知这个紧急数据已被放置在普通普通数据流中,由接收方决定如何处理。

首部中的两个字段被用来通知紧急数据已经被放置在数据流中。

  1. URG比特被置为1
  2. 一个16bit的紧急指针被置为一个正的偏移量。该偏移量和TCP首部中的序号字段相加,得出紧急数据的最后一个字节序号。

TCP的成块数据流的更多相关文章

  1. 【TCP/IP详解 卷一:协议】第二十章 TCP的成块数据流

    本章节主要内容: ACK的累积 滑动窗口协议(即 接收方TCP数据报缓存的大小) 流量控制(慢启动 -发送方TCP的 拥塞窗口(cwnd) 以及接受方的 通告窗口) 20.1 引言 在教材的之前章节中 ...

  2. TCP/IP详解 卷1 第二十章 TCP的成块数据流

    先补充一个知识: 1.停止等待协议:是tcp保证传输可靠的重要途径,"停止等待"就是指发送完一个分组就停止发送,等待对方确认之后,才能继续发送下一个分组 停止等待协议的优点是简单, ...

  3. 12.TCP的成块数据流

    1.滑动窗口协议             TCP滑动窗口的可视化表示       我们将字节从1到11进行标号,接收方通告的窗口称为提供的窗口,它覆盖了第4字节到第9字节的数据,且通告窗口大小为6.发 ...

  4. TCP/IP详解 卷一(第二十章 TCP的成块数据流)

    本章将介绍TCP所使用的被称为滑动窗口协议的一种流量控制方法. 该协议允许发送方在停止并等待确认前可以连续发送多个分组,这样就可以加速数据的传输. 滑动窗口 下图用可视化的方法显示了滑动窗口协议 我们 ...

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

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

  6. TCP/IP之TCP交互数据流、成块数据流

    建立在TCP协议上的网络协议有telnet,ssh,ftp,http等等.这些协议根据数据吞吐量来分成两大类: (1)交互数据类型,例如telnet,ssh,这种类型的协议在大多数情况下只是做小流量的 ...

  7. TCP/IP协议--TCP的交互数据流和成块数据流

    前边讲了TCP连接的建立和终止,分别要三次握手和四次通信.这些报文段都只包含首部,没有数据部分.    这里就讲讲数据传送的一些细节.一个TCP连接建立成功以后,就可以开始传送数据了~ 一般TCP数据 ...

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

    前言 建立在TCP协议上的应用层协议有非常多,如FTP.HTTP.Telnet等,这些协议依据数据传输的多少能够分为两类:交互数据类型和成块数据类型. 交互数据类型,如:Telnet,这类协议一般仅仅 ...

  9. 使用float和display:block将内联元素转换成块元素的不同点

    使用float和display:block将内联元素转换成块元素的不同点 使用float和display:block将内联元素转换成块元素的不同点:内联元素可以转换成块级元素,常用的方法比如可以为内联 ...

随机推荐

  1. Composer切换到Laravel-China 镜像

    全局 composer config -g repo.packagist composer https://packagist.laravel-china.org 该项目 composer confi ...

  2. java-tip-HashMap

    HashMap的基本查找过程: 先使用key.hashCode()生成哈希值,根据哈希值来确定key存放的位置 找到key在数组中的位置后,再使用key.equals()方法来找到指定的key. 1. ...

  3. Maven01 环境准备、maven项目结构、编译/测试/打包/清除、安装、

    0 前提准备 0.1 安装java开发环境 0.2 安装maven工具 1 maven项目基本结构 如图所示,整个maven项目有业务文件.测试文件.POM依赖管理文件:其实还有一个资源文件resou ...

  4. Listview getItemViewType的使用

    ListView中有两个可以用来让ListView可以在视图中显示多种布局的方法,分别是getItemType和getViewTypeCount 其中 getItemViewType返回的是有参数po ...

  5. 启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not found这个日志

    今天在做一个dubbo服务端的时候,启动成功,dubbo也注册成功,但是启动日志中就出现[java:comp/env/spring.liveBeansView.mbeanDomain] not fou ...

  6. style多次设置行内样式

    语法 style="font-size:32px;background-color:#aaa"

  7. 572. Subtree of Another Tree 大树里包括小树

    [抄题]: Given two non-empty binary trees s and t, check whether tree t has exactly the same structure ...

  8. 冲刺NOIP2015提高组复赛模拟试题(五)2.道路修建

    2.道路修建 描述 Description liouzhou_101最悲痛的回忆就是NOI2011的道路修建,当时开了系统堆栈,结果无限RE… 出于某种报复心理,就把那题神奇了一下: 在 Z星球上有N ...

  9. [Jenkins] 全局变量

    http://www.360doc.com/content/14/1110/10/7811581_423993429.shtml https://wiki.jenkins.io/display/JEN ...

  10. 工作流系统webservice服务

    http://blog.csdn.net/zhengzhb/article/details/7477616