69.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

慢速启动是传输控制协议使用的一种阻塞控制机制。慢速启动也叫做指数增长期。慢速启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。

技术介绍

大家都有过这个经历吧,在双11时网购,需要好久才能收到,为什么呢?在考虑卖家的发货能力,以及买家的收货能力后,我们还需要考虑快递的传输能力。

同理,当主机开始发送数据时,我们需要考虑网络承载能力,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞。如何防止这个问题的发生呢?我们今天来讲一下TCP慢启动。

技术图解

慢速启动:

69-1.jpg?x-oss-process=image/auto-orient,1/quality,q_90/watermark,image_bG9nby5wbmc_eC1vc3MtcHJvY2Vzcz1pbWFnZS9yZXNpemUsUF8yMA,g_center,t_50,x_10,y_10

看图说话

通常在刚开始发送报文段时,先把拥塞窗口cwnd设置为一个最大报文段的数值。而在每收到一个对新报文段的确认后,把拥塞窗口增加至多一个MSS数值。

也就是说,第一次时发送1个报文,在收到接收端确认之后,第二次时发送2个报文,同样都确认后,第三次时发送4个报文,2倍指数增长。

它的名字虽然叫慢启动,但实际上一点不慢,因为指数增长是很快的,所以它需要一个上限值,默认为64K。

慢启动的作用就是最大限度使用网络资源。

技术扩展

最大报文段长度选项MSS,MSS选项用于在TCP连接建立时,收发双发协商通信时每一个报文段所能承载的最大数据长度。MSS选项只能在初始化连接请求的报文段中使用。在报文段中发送MSS选项的终端利用该选项来对端TCP实体通告本端点在一个报文段中所能够接受的最大数据长度。若没有指定这个选项意味本终端能够接受任何长度的报文段。

一个TCP连接上允许各种长度报文段的传输,因此连接的两端利用MSS选项来协商报文段中最大数据长度是很必要的。例如在一个小型系统中由于空间限制,TCP仅能提供较小接受缓冲区。则它与其它系统通信时,就必须互相协商一个较合适的MSS,使对端发出报文段中的数据能够存入其接受缓冲器。由于TCP连接的两个端点可能存在差异,在一个TCP连接的两个数据流方向上常常可能采用不同的MSS值。

进行MSS协商的另一个好处是能够提高网络带宽的利用率。在一个局域网中进行通信的两个节点可以选择一个较大的MSS,使得报文段封装成IP分组时能够充分利用网络带宽。但实际上在一般的Intenet环境中,为连接选择一个合适的MSS是很困难的。这是因为MSS的取值过大或过小都会影响网络和TCP的性能。如报文段太小,将会大大降低网络的利用率。但如果报文段太大也可能影响网性能。这是由于长IP分组在网络中传输时往往需要被分片传输。分片和重组的过程自然将带来一定的网络处理开销。而且IP分组被分片后会独立传输,任何一个分片出现错误或丢失都将导致整个分组被丢弃,这也意味着整个报文段丢失,TCP只能对整个IP分组进行确认和重传。由于在IP通信子网中分组丢失的概率总是存在,因此MSS的增加所导致的分片将会使报文段成功达到目的端的概率下降,从而影响TCP性能和降低网络的吞吐率。

从理论讲,理想的MSS应该能尽可能多地承载用户数据,在传输上又需避免分片。但实际中确定这样一个最佳的MSS是困难的。一种通路MTU发现技术可以帮助TCP来确定最佳的MSS值。但是,仍然有许多TCP的实现并不能提供这样的值。同时,由于Internet中采用的是动态路由选址,TCP报文段的传输通路可能不断地发生改变,这使动态地计算最佳MSS更加困难。


 评论