1.滑动窗口协议

            TCP滑动窗口的可视化表示

 
    我们将字节从1到11进行标号,接收方通告的窗口称为提供的窗口,它覆盖了第4字节到第9字节的数据,且通告窗口大小为6。发送方计算接收者的可用窗口,以便确定有多少数据可以被立即发送。当接收方确认数据后,这个滑动窗口向右移动。窗口两个边沿的相向运动有以下3种情况:
    (1)在数据被发送和确认时,窗口左边沿向右边沿靠近,称为窗口合拢。
    (2)在另一端接收进程读取已经确认的数据并释放了TCP接收缓存时,窗口右边沿向右移动,称为窗口张开,此时允许发送更多的数据。
    (3)当右边沿向左移动时,称为窗口收缩。这种方式不被建议。
3种情况如下图所示:
 
如果左边沿到达右边沿,则称为0窗口,此时发送方不能发送任何数据。
 

2.窗口大小

 
    接收方的窗口大小通常可以由接收进程控制,这将影响TCP的性能。对于以太网来说,默认的4096字节并不是最理想的大小,提高窗口的大小 有时 可以提高网络的吞吐量。
 

3.PUSH标志

 
    发送方使用该标志通知接收方将所收到的数据全部提交给接收进程,这里的数据包括与PUSH一起传送的数据 以及 接收方TCP已经为接收进程收到的其他数据。
特点:
(1)通过设置PUSH标志,客户进程通知TCP在向服务器发送一个报文段时不要因等待额外数据而使已提交数据在缓存中滞留。
(2)当服务器接收到设置了PUSH标志的报文段时,它需要立即将这些数据提交给服务器进程而不能等待判断是否还会有额外数据到达。
(3)如果待发送数据将清空发送缓存,则自动设置PUSH标志(大多数源自伯克利的实现)。
 

4.慢启动算法

 
过程:
①当连接建立的时候,发送者用当前使用的最大数据段长度初始化拥塞窗口,然后发送一个最大的数据段
②如果在定时器超期之前收到确认,则将拥塞窗口翻倍, 然后发送两个数据段。。。。。。直至超时(或达到接收方窗口的大小)
③确定出拥塞窗口的大小
cwn--拥塞窗口
除了使用接收者窗口和拥塞窗口,TCP拥塞控制还使用第三个参数,阈值(threshold),初始化为64K。
<1>当一个超时发生时,阈值降为当前拥塞窗口的一半,同时将拥塞窗口设为一个最大数据段长度。
<2>然后使用慢启动算法来决定网络的容量,拥塞窗口增长到阈值时停止指数增长。
<3>从这个点开始,每次成功的传输都会让拥塞窗口线性增长(每次只增长一个最大数据段长度)。
例题:
如果:TCP慢启动中,初始阈值是8,当拥塞窗口升到 12的时候,发生了超时,开始新的慢启动,拥塞窗口 从头起CWND= 1。问:第14次传输时的拥塞窗口是多大?     答案:8  
 

5.带宽延时乘积

 
    可以参考带宽延时乘积设置窗口大小,它代表网络通道的容量大小。
    capacity(bit)=bandwidth(b/s)×round-trip time(s)
 

6.紧急方式

 
    TCP提供了紧急方式,它使一端可以告诉另一端有些具有某些方式的"紧急数据"已经被放置在普通的数据流种。另一端被通知这个紧急数据已被放置在普通数据流中,由接收方决定如何处理。
    通过设置TCP首部的两个字段来发出紧急数据。即将URG比特置1,将一个16bit的紧急指针置为一个正的偏移量。该偏移量与TCP首部的序号字段相加,得出紧急数据最后一个字节的序号<--Host Requirements RFC规定(然而大多数伯克利实现中,紧急指针被解释为紧急数据最后一个字节的下一字节)。
举例:
    (Telnet和Rlogin)客户端通告服务器窗口为0,就在此时服务器进入紧急方式,尽管它不能发送任何数据,服务器TCP也会立即发送紧急指针和URG标志。当客户TCP接收到这个通知就会通知客户进程读取TCP缓存,打开窗口,和服务器继续通信。
 

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

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

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

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

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

  3. TCP的成块数据流

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

  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. HDU 5875 st+二分区间

    题目大意:给你n个数,q次询问,每次询问区间[l, r],问a[i]%a[i + 1] % a[i + 2]...%a[j](j <= r)的值 思路:st预处理维护,再二分区间,复杂度n*(l ...

  2. C#编写Windows服务程序图文教程

    安装服务程序C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\InstallUtil.exe  要安装的服务程序路径(如F:\***.exe)卸载服务程序C: ...

  3. 饥饿的牛(hunger)

    饥饿的牛(hunger) 题目描述 牛在饲料槽前排好了队.饲料槽依次用1到n(1≤n≤2000)编号.每天晚上,一头幸运的牛根据约翰的规则,吃其中一些槽里的饲料.约翰提供B个区间的清单.一个区间是一对 ...

  4. Android----ListView入门知识--各种Adapter配合使用

    引自:http://www.cnblogs.com/playing/archive/2011/03/21/1990555.html 在android开发中ListView是比较常用的组件,它以列表的形 ...

  5. apache2.2.25+mod_jk-apache-2.2.2.so+apache-tomcat-7.0.56集群

    1.安装httpd-2.2.25-win32-x86-no_ssl.msi 按默认安装路径,我电脑如果自定义的话安装不了 2.下载mod_jk-apache-2.2.2.so 3.下载tomcat 我 ...

  6. 我的第一个Android项目之环境搭建

    开发IDE Android Studio2.0 + Genymotion + JDK1.8 网盘地址:http://pan.baidu.com/s/1kUSVqaN Android Studio 我的 ...

  7. 有关sqlitedrop数据库重建比delete方式来清空数据库更加有效率

    今天浏览stackoverflow 发现一个有趣的问题: which was more preferable as performance wise and without error cause t ...

  8. foreach的2个细节!

    人生不应该在同第一个地方摔第三次.... 1. foreach的时候一定要对要遍历的元素进行null判定. 2. foreach中不要对遍历的元素进行增删改操作(问题严重) 还有一个细节: 使用了的流 ...

  9. 继续几道经典的js题(局部和全局变量,对象等)

    1. //现有代码如下:var foo = 1;function main(){alert(foo);var foo = 2;alert(this.foo)this.foo = 3;}//1.请给出以 ...

  10. Kafka 在行动:7步实现从RDBMS到Hadoop的实时流传输

    原文:https://coyee.com/article/11095-kafka-in-action-7-steps-to-real-time-streaming-from-rdbms-to-hado ...