更快的网络与TCP慢启动机制

网络 网络管理
还在纠结到哪里能找到“最好最快的”网络提供商?最近我听取并比较了十多个不同的方案之后,有人提醒了我一个简单的事实:业界采用的主要指标(带宽)实际上极具误导性。其实对于大部分网站浏览的应用来说,超过几兆的网络连接对于性能只有很小的提升。

 

还在纠结到哪里能找到“***最快的”网络提供商?最近我听取并比较了十多个不同的方案之后,有人提醒了我一个简单的事实:业界采用的主要指标(带宽)实际上***误导性。其实对于大部分网站浏览的应用来说,超过几兆的网络连接对于性能只有很小的提升。

罪魁祸首之一就是“TCP慢启动”,对,这是个功能,不是缺陷。要理解其中的原因,我们必须到TCP栈里面一探究竟,这样我们也能学到一些建立更快速网络服务的有趣的小技巧。

TCP慢启动

TCP协议提供了许多内置的功能,其中我们感兴趣的两个是拥塞控制和拥塞避免。TCP慢启动是TCP层内部实现拥塞控制的一种机制。

 

 

慢启动和其它一些算法联合使用,避免发送过多的数据以至网络无力传输,也就是防止网络拥塞。

- wikipedia

表面上的流程很简单:客户端发送一个SYN包,它告知本端的***缓存大小(rwnd - 接收窗口),发送端回传几个包作为应答(cwnd-拥塞窗口),之后,每次它收到来自客户端的ACK包,它就把发送包(传输中并未收到确认的)的数量加倍。

这个过程也被称作TCP连接的“指数增长”阶段。OSI学院有一个很好的动画演示这个过程:(滚动到底点击播放)。那么,这和我们有什么关系呢?不管你的带宽有多大,每一个TCP连接都要经历这个过程,这也就是说,通常情况下,实际用到的带宽受制于发送端和接收端的缓存大小的设置。

HTTP和TCP慢启动

或者,稍微换个说法,一个10M的带宽平均上只用了16%的容量。老天!这说明,如果我们要提高网速,我们应该着眼于降低客户端和服务器之间的往返时延,而不一定要一味地花钱提高带宽。当然,当你在缓冲一个大文件的时候高带宽很有用,或者跑个速度测试也能唬唬人。问题是,基于HTTP的交互倾向于应用短暂、突发的连接 - 在这样的情况下,我们常常无法占用信道的全部容量!Google做一个研究表明,当带宽从5M升高到10M,页面加载时间只提高了让人失望的5%。

CWND的故事

如果TCP慢启动很慢的话,我们不能让它快一点么?其实,直到最近,Linux TCP栈本身把拥塞窗口(cwnd)的初始值硬编码为3到4个包,这也就是4kb的大小(一个包大约1360字节)。还有个频繁发生的问题,HTTP有每获取一个资源要建立一个连接的毛病。这些加在一块,你的性能就受到了严重限制。

 

 

在内核2.6.33版本里,经过了长期讨论和提交很多的IETF修改建议之后,cwnd的初始值被设为10个包。这本身就是一个很大的进步。但是有个问题,猜猜现在大部分服务器跑的是什么版本的内核?没错,也许现在是时候更新你的服务器了。给你个实用的小提示,如果你考虑你的网络服务开始使用SPDY,那么如果不在最近的几个内核上面跑,你实际上不会得到任何的性能提升!TCP栈的一个小小的改动在全局能产生巨大的变化。

那么我该怎么办?

TCP慢启动是一个功能,不是缺陷,而且它的确包含有趣而重大的意义。作为开发者,我们经常会忽视客户端到服务器的往返时延,但是如果如果我们真有志于建立更快的网站,现在该去研究一下这些选择了:在和网络服务通信的时候重用TCP连接,建立支持HTTP keep-alive和流水线的网络应用,重视端到端的时延。噢,还有,别在高于10兆的宽带上浪费钱了,可能你根本就不需要。

 

 

 

【编辑推荐】

  1. 期盼更快的网络 网络·安全技术周刊第41期
  2. 服务器虚拟化带来的网络现状及问题分析
  3. 迁移到扁平网络拓扑需要注意什么?
  4. 锐捷网络获“2011年高等教育信息化应用创新奖”
  5. 百G设备起航 布局未来网络
责任编辑:Writer 来源: article.yeeyan.
相关推荐

2021-07-30 16:16:54

网络面试TCP

2019-12-26 09:01:11

TCPIP三次握手

2011-02-21 15:45:26

Sendmail启动慢原因

2022-09-29 08:19:24

数据库运维D-SMART

2017-01-04 18:29:20

AndroidNestedScrol嵌套滑动机制

2023-11-21 08:45:10

JSON性能程序

2013-10-28 09:24:34

SDN软件定义网络TCP

2021-08-01 23:47:54

通用模型驱动

2011-01-19 17:54:48

2017-08-16 10:36:10

JavaScriptNode.js事件驱动

2011-12-30 09:49:30

网络网络安全

2020-09-14 09:33:02

网络

2018-08-22 06:50:55

WiFi网络速度网络频道

2009-12-14 15:31:48

2019-11-08 14:47:49

TCPIP网络

2021-03-10 14:01:54

Windows 10Windows微软

2021-04-26 23:14:25

4G5G手机

2018-02-25 06:59:40

2020-03-26 17:20:53

Windows 10命令系统技巧

2019-01-31 01:24:10

华为
点赞
收藏

51CTO技术栈公众号