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. Opencv threshold

    图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果.在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓 ...

  2. 使用 XML-RPC 为 C++ 应用程序启用 Web 服务

    http://www.ibm.com/developerworks/cn/webservices/ws-xml-rpc/ 引言 Internet 现在的受欢迎程度越来越高,由于这个原因及其固有的优势, ...

  3. 14-python登入教务网(python+bs4)

    用request先得到到session对象,用其去放送请求,会自动保存cookie. 模拟有验证码的登入步骤: 1.发送请求登入页面: 2.分析验证码的地址,以及要将登入请求发往的地址(可以先输入错的 ...

  4. c语言的函数可以这样写,你见过吗?

    c语言的函数可以这样写,你见过吗?真的可以编译通过的.

  5. STM32F4库函数里面的RCC_DeInit(void)函数分析

    void RCC_DeInit(void) { /*Set HSION bit,内部高速时钟使能HSI振荡器打开*/ RCC->CR |=(uint32_t)0x00000001; /*Rese ...

  6. maven 引用本地jar

    1.添加lib文件夹在src文件夹中.2.拷贝所需要的test.jar包到lib文件夹.3.在pom文件加入如下依赖 <!--添加本地私有包--><dependency> &l ...

  7. 浅说Java反射机制

    工作中遇到,问题解决: JAVA语言中的反射机制: 在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法? 对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的 ...

  8. 视频分析(MATLAB)——MV分镜头图像分类

    引言:一个MV视频是有很多帧图像组合而成的,而一支MV是有多少个分镜头场景组合而成的呢?由MATLAB如何自动实现? 以<Love You Like A Love Song>的MV为例(这 ...

  9. MongoDB整理笔记の移除Shard Server

    有些时候有于硬件资源有限,所以我们不得不进行一些回收工作,下面我们就要将刚刚启用的Shard Server 回收,系统首先会将在这个即将被移除的Shard Server 上的数据先平均分配到其它的Sh ...

  10. linux安装redis及phpredis环境配置

    下载安装包 cd /home/redis/tar wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz tar zxvf redis-2 ...