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. mvc ChildActionOnly + ActionName的用法

    ChildActionOnly的目的主要就是让这个Action不通过直接在地址栏输入地址来访问,而是需要通过RenderAction来调用它. <a href="javascript: ...

  2. HTML的TextArea标记跟随文本内容自动设置高度

    js <textarea name="textarea" id="textarea" style='overflow-y: hidden;height:2 ...

  3. android脚步--Relativelayout设置

    引自http://blog.csdn.net/lamp_zy/article/details/8035161 http://my.oschina.net/honeyming/blog/130761 以 ...

  4. bLock 回调 就是这么简单!

    转载自:http://blog.csdn.net/mobanchengshuang/article/details/11751671 我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数 ...

  5. Java调用本地接口

    先从一个经典例子说起,Java如何调用本地接口. 步骤如下: 1.创建HelloWorld.java class HelloWorld { static{ System.loadLibrary(&qu ...

  6. docker 1.12 版本 docker swarm 集群

    博客已经迁移到 个人博客中 个人博客 更新地址: http://www.xf80.com/2016/10/25/docker-swarm-1.12/ docker 1.12 版本 的新特性 (1)do ...

  7. MySQL中文乱码修改

    一.从服务端进行修改 show variables like "%char%"; 然后可能显示如下信息,注意红色部分,不同的用户可能实际情况不同,但是需要保证除了 filesyst ...

  8. 转载--使用image-set来优化在retian屏幕下的背景图片

    mage-set对我来说,我也很陌生,于是借助G爸和度娘海量的搜索image-set,才知道Webkit内核"safari6"和“chrome21”支持CSS4的backgroun ...

  9. 初始化时查看combox的文本内容

    string sql = string.Format("select field_name from pt_temp_field where pt_name = '{0}' and temp ...

  10. highcharts第一篇---简介和使用

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...