慢启动定义

慢启动,是传输控制协议使用的一种阻塞控制机制。慢启动也叫做指数增长期。慢启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。这种情况一直保持到要么没有收到一些段,要么窗口大小到达预先定义的阈值。如果发生丢失事件,TCP就认为这是网络阻塞,就会采取措施减轻网络拥挤。一旦发生丢失事件或者到达阈值,TCP就会进入线性增长阶段。这时,每经过一个RTT窗口增长一个段。

慢启动解析

发送方一开始便向网络发送多个报文段,直至达到接收方通告的窗口大小为止。当发送方和接收方处于同一个局域网时,这种方式是可以的。但是如果在发送方和接收方之间存在多个路由器和速率较慢的链路时,就有可能出现一些问题。
一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。
现在,TCP需要支持一种被称为“慢启动(slow start)”的算法。该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作。
慢启动为发送方的TCP增加了另一个窗口:拥塞窗口(congestion window),记为cwnd。当与另一个网络的主机建立T C P连接时,拥塞窗口被初始化为 1个报文段(即另一端通告的报文
段大小)。每收到一个ACK,拥塞窗口就增加一个报文段( c w n d以字节为单位,但是慢启动以报文段大小为单位进行增加)。发送方取拥塞窗口与通告窗口中的最小值作为发送上限。拥
塞窗口是发送方使用的流量控制,而通告窗口则是接收方使用的流量控制。发送方开始时发送一个报文段,然后等待 A C K。当收到该A C K时,拥塞窗口从1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为4。这是一种指数增加的关系。

在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。这就通知发送方它的拥塞窗口开得过大。当我们在下一章讨论 T C P的超时和重传机制时,将会看到它们是怎样对拥塞窗口起作用的。现在,我们来观察一个实际中的慢启动。

慢速网络例子

下图表示的是将从主机sun发送到主机vangogh.cs.berkeley.edu的数据。这些数据将通过一个慢的SLIP链路,该链路是TCP连接上的瓶颈(我们已经在时间系列上去掉了连接建立的过程)。

我们观察到发送方发送一个长度为5 1 2字节的报文段,然后等待ACK。该ACK在716 ms后收到。这个时间是一个往返时间的指示。于是拥塞窗口增加了 2个报文段,且又发送了两个报
文段。当收到报文段5的ACK后,拥塞窗口增加为3。此时尽管可发送多达3个报文段,可是在下一个ACK收到之前,只发送了2个报文段。

正常网络例子

在一个正常的网络,服务端在公网,客户端是一台虚拟机,通过客户端223.226.200.34,每次发送大小为102400大小数据到服务端223.226.200.200,循环次数是1000次。双方的网络良好,最开始的时候可以达到客户端每发送一个数据,服务端就发送一次ack,如下:

17:11:42.437707 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 1:1025, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961746], length 1024
17:11:42.437721 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 1025, win 33, options [nop,nop,TS val 972961748 ecr 2003558], length 0
17:11:42.437805 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 1025:2485, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961746], length 1460
17:11:42.437816 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 2485, win 38, options [nop,nop,TS val 972961748 ecr 2003558], length 0
....
17:11:42.468767 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 24025:25461, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961753], length 1436
17:11:42.468780 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 25461, win 83, options [nop,nop,TS val 972961756 ecr 2003558], length 0

大家可以看到两个报文之间的时间差不超过50ms左右,一般是20ms。

但是后来,可能是由于一些中间路由器必须缓存分组,并有可能耗尽存储器的空间。导致服务端不能及时响应,确认数据,如下:

17:11:42.468965 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [.], seq 25461:26897, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961753], length 1436
17:11:42.469200 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 26897:28333, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961753], length 1436
......
17:11:42.478755 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 52745:54181, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961756], length 1436
17:11:42.507104 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 54181, win 27, options [nop,nop,TS val 972961766 ecr 2003558], length 0
17:11:42.516476 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 54181:55617, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961766], length 1436
17:11:42.516597 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 55617:57053, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961766], length 1436
......
17:11:42.517263 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 64233:65669, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961766], length 1436
17:11:42.517437 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 65669:67105, ack 1, win 64240, options [nop,nop,TS val 2003558 ecr 972961766], length 1436
17:11:42.555104 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 67105, win 2, options [nop,nop,TS val 972961778 ecr 2003558], length 0
17:11:47.457101 IP 223.226.200.34.42567 > 223.226.200.200.6888: Flags [P.], seq 67105:68129, ack 1, win 64240, options [nop,nop,TS val 2003608 ecr 972961778], length 1024
17:11:47.457116 IP 223.226.200.200.6888 > 223.226.200.34.42567: Flags [.], ack 68129, win 0, options [nop,nop,TS val 972963003 ecr 2003608], length 0

可以看到这里客户端连续发送数据到服务端的这些报文里,每两个报文之间的时间差比较大,基本都达到100ms以上的差距,所以可以确定是由于服务器发送ack报文过迟,发送方才会根据拥塞窗口大小,连续发送多个报文段。

另外,这里的服务端代码中是自己的程序,并没有read数据,所以会见到win越来越小。直到最后win为0,无法接收任何数据。

TCP慢启动的更多相关文章

  1. TCP慢启动,拥塞控制,ECN 笔记

    TCP慢启动,拥塞控制,ECN 笔记 1,TCP慢启动 TCP在连接过程的三次握手完成后,开始传数据,并不是一开始向网络通道中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞:而 ...

  2. 【转载】TCP慢启动、拥塞避免、快速重传、快速回复

    转载自:TCP慢启动.拥塞避免.快速重传.快速回复 转自:http://blog.csdn.net/itmacar/article/details/12278769 感谢博主的辛勤成果! 为了防止网络 ...

  3. tcp slowstart (TCP 慢启动)

    tcp slowstart (TCP 慢启动) 慢启动定义 慢启动,是传输控制协议使用的一种拥塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段 ...

  4. TCP慢启动算法

    慢启动定义 慢启动,是传输控制协议使用的一种阻塞控制机制.慢启动也叫做指数增长期.慢启动是指每次TCP接收窗口收到确认时都会增长.增加的大小就是已确认段的数目.这种情况一直保持到要么没有收到一些段,要 ...

  5. TCP系列40—拥塞控制—3、慢启动和拥塞避免概述

    本篇中先介绍一下慢启动和拥塞避免的大概过程,下一篇中将会给出多个linux下reno拥塞控制算法的wireshark示例,并详细解释慢启动和拥塞避免的过程. 一.慢启动(slow start) 一个T ...

  6. TCP的阻塞和重传机制

    TCP的阻塞和重传机制 网络拥堵 现在网络上大部分的网络请求都是以TCP的方式进行传输的了.网络链路是固定的,各种链路情况也是不一样的.网络拥堵一直是TCP协议设计和使用的时候尽力要避免的.比如,从T ...

  7. [转载] HTTP请求的TCP瓶颈分析

    原文: http://bhsc881114.github.io/2015/06/23/HTTP%E8%AF%B7%E6%B1%82%E7%9A%84TCP%E7%93%B6%E9%A2%88%E5%8 ...

  8. HTTP请求的TCP瓶颈分析

    这篇文章基本是对<Web性能权威指南>第一章和第二章的读书笔记,另外加一些扩展内容,这本书确实赞,推荐 针对三次握手.流量控制(接收窗口).慢启动(cwnd,拥塞窗口).队首阻塞等方面看下 ...

  9. 简述tcp协议对http性能的影响及优化

    当网站服务器并发连接达到一定程度时,你可能需要考虑服务器系统中tcp协议设置对http服务器的影响. tcp相关延时主要包括: 1.tcp连接时建立握手: 2.tcp慢启动拥塞控制: 3.数据聚集的N ...

随机推荐

  1. 比反射更快!使用ASM获取class信息(ClassReader)

    比反射更快!使用ASM获取class信息(ClassReader) 通常我们想要在java运行时获取class的信息时,通常使用反射的方式来获取其中的属性,方法,注解等信息.通常是这样的: Class ...

  2. json与String的转化

    String转成jsonObject    JsonObject   json = JsonObject.fromObject(String str) String转成JsonArray      J ...

  3. HDU-5238 Calculator

    题目描述 给定一个关于 \(x\) 的表达式,形如下例:\(×4+2^3+8×6\) 按如下方法计算:\((((x×4)+2)^3+8)×6\) 运算符只有 加号,乘号,幂运算三种,给定的式子中有 \ ...

  4. TP5使用phpoffice phpexcel包操作excel(导出)

    安装composer(window版本) 安装composer(MAC版本) 安装composer(Linux版本) 在PhpStorm配置 导出excel 1.使用composer安装phpoffi ...

  5. MySQL创表--分页--自关联--

    创建表book create table t_book( id int unsigned auto_increment primary key, bookName varchar(255) defau ...

  6. Linux-2.1vim简单使用

    1.用vim打开文件,文件内容显示在终端,命令模式无法编辑 vim 1.txt vi 1.txt 2.使用a,i,o,shift+o编辑文件,按Esc退出编辑模式 i 插入在光标前 a 插入在光标后 ...

  7. 2016 计蒜之道 初赛 第一场 D 青云的机房组网方案 (虚树)

    大意: 给定树, 点$i$的点权为$a_i$, 求$\sum\limits_{a_i \perp a_j}dis(i,j)$ 中等难度可以枚举每条边的贡献, 维护子树内每个数出现次数$a$, 转化为求 ...

  8. 机器学习-SVM-核函数

    SVM-核函数 在研究了一天的SVM核函数后,我顿悟了一个道理: 研究和使用核函数的人,从一开始的目的就是把data分开而已.高维和映射,都是原来解释操作合理性的,但根本不是进行这一操作的原因 我为什 ...

  9. mysql中case when then end的含义和用法

    参见这篇博客:https://blog.csdn.net/rongtaoup/article/details/82183743 case when then else end 语句用于查询满足多种条件 ...

  10. 应对Hadoop集群数据疯长,这里祭出了4个治理对策!

    一.背景 在目前规模比较大的互联网公司中,总数据量能达到10PB甚至几十PB数据量的公司,我认为中国已经有超过了20家了.而在这些公司中,也有很多家公司的 日数据增长达到100TB+ 了. 所以我们每 ...