加载中…
正文 字体大小:

CTCP进驻Windows的故事

(2009-10-27 10:18:03)
标签:

微软亚洲研究院

技术转化

windows

7

ctcp

创新故事

分类: 技术

随着微软新一代操作系统Win 7正式面市,微软研究员们也欢欣鼓舞地庆祝这一时刻,因为在这备受瞩目的新产品中,倾注了全球许多研究员们多年的创新和研究。孵化于微软亚洲研究院的CTCP就是其中非常重要的一项技术发明。

作者:谭焜  无线与网络组

 

CTCP进驻Windows的故事
2005建立的CTCP测试床
 

对某些问题,学术界研究了很久,发表了很多的论文,可是却没有在工业产品上得到任何的应用,因而这些研究成果也就渐渐被别人淡忘了——这种事在学术界是司空见惯的,例如,TCP拥塞控制就是如此,自从1988年冯·雅克比松(Von Jacobson)发表了第一篇论文以来,在后来的二十年里陆陆续续就此论题发表了至少一千篇的论文来改进其算法,可是只有寥寥几种早期的改良方案被实现在主流的操作系统中,能得以广泛的应用;此外的就往往永远被搁置在纸面设计上了。从某种意义上来说,产生这种情况的一个主要的原因是因为TCP太重要了。它是现在整个因特网的基石,而因特网又是如此重要,因此TCP上哪怕是一点小小的设计错误,都可能导致灾难性的后果。于是,整个网络工业界对TCP的任何修改,哪怕是极微小的,都是非常谨慎和保守的。但也正因为同样的原因,各地的研究人员仍然热衷于对TCP的研究,并非常努力地试着把研究成果产品化。

 

大约在2003年左右,IT业正逐渐从网络泡沫崩裂中恢复过来。为了连接各地的大型数据中心,新建了许多新型高速主干网络。这些网络连接的速度高达几千兆比特/秒钟,而TCP的性能表现在这样的高速网络上却不尽如人意。2004年夏天,微软公司的吉姆·格雷博士(Jim Gray)正带领的一个小组尝试用Windows系统挑战“陆地极速纪录”(Land Speed Record)。所谓“陆地极速”就是看谁的网络协议栈传输数据最快,条件是所用的软硬件环境必须是已经商用的。但测试的结果却使格雷博士很担忧。于是他给当时微软核心网络部的主管经理亨利·萨得斯(Henry Sanders)写了一封邮件,表达他的担忧:“……(TCP)拥塞控制的问题一直困扰在我脑中——而且这似乎是一个让大家普遍困扰的领域……我觉得这里应该有更好的创新……”。亨利是一个TCP的专家,他了解这个问题的重要性,但也深深地知道它的困难:“……对于拥塞控制的问题,我想我已经很好的理解;但我不知道如何解决。……我可以为‘陆地极速纪录’定制一个高效的协议,但是它无法在真实的网络上运行……真正的困难是如何保持TCP友好性——我们很容易设计一个新的(拥塞控制)算法来提高效率,但却会使现有的TCP连接整个地陷入糟糕境地……”。

 

这些通信几经辗转,最后转到了我的手中。这是因为当时我发明了一个称为STODER的小东西,能够用来检测由于延时抖动而产生的TCP“假重传”。尽管STODER和其他的许多TCP改进算法一样,最终没被采用,但在雷蒙德总部还是引起了不小的讨论。于是他们知道在微软亚洲研究院还有一帮人在做TCP研究。我读完信后,没有立刻给与答复,因为我知道这是一个很棘手的问题。两天之后,我收到我经理的另一封信,催促我尽快做个回答,因为吉姆和亨利已经向整个微软研究院发出了求援。我决定试一下,但不知道有没有答案。于是,我要求了一个月的时间来思考一下。

 

正如亨利所说的那样,整个问题的难点就是在提高算法效率的同时保持TCP的友好性。所谓“TCP友好性”,是TCP的权威专家莎莉·弗洛伊德(Sally Floyd)博士对所有拥塞控制算法提出的一项要求。简单的说:就是新的协议不能降低所有与它共享网络资源的普通TCP的性能。提出这项要求的原因也很简单:因为TCP是如此广泛的应用,因而不可能同时更新协议;因此,也就不能由于少数网络节点部署了新的协议而使得其它节点的通讯陷入瘫痪。这个看似合情合理的要求,对协议的设计者而言却十分的苛刻。

 

当时流行的高速TCP设计主要有两个流派:基于网络丢包的设计和基于网络延时的设计。尽管在单独工作时,它们都可以有效地提高TCP的效率,但它们都无法很好地满足TCP友好性的要求。前者会抢得大量的网络资源,而使得普通TCP的性能极度下降;而后者却恰恰相反,在和大量TCP竞争的情况下,却往往使得自己的性能极大地降低。这两个流派相互争执,各不相让。但我却有着不同的看法。我认为这两种设计思想是可以互补的,例如利用前者可以保持和普通TCP竞争网络资源的力度;而后者正好用来弥补普通TCP利用高速网络资源不足的缺陷:在网络空闲的时候,基于网络延时的流可以有效利用网络资源;而在网络拥塞时,它又会自动降低自己的竞争力,从而可以保持好的TCP友好性。

 

考虑了几天之后,我简单的写了一个备忘录阐述了我的想法:“新算法应该包含两种控制方式。一种标准的基于网络丢包的控制;另一种更激进的,但是基于网络延时的控制。”我命名这个新的协议为复合TCP(Compound TCP, CTCP)。我开始着手写一个简单的仿真程序来验证自己的想法。几个星期之后,仿真的结果和我的理论计算吻合的很好,证明这种复合的思想很有效的解决了有效性和TCP友好性之间的矛盾关系。我在我设定的时间里寄出了备忘录。这时我信心十足,但我需要一些时间进一步验证我的设计。

 

2005年初春,我到雷蒙德参加公司的技术节。之后,我访问了Windows核心网络部做传输层协议的几个核心成员。那时我第一次见到姆拉瑞·希德汉兰博士(Murari Sridharan)。几年后,姆拉瑞升任了核心网络部的首席开发工程师(Principle Engineer)。但当时,他刚刚从一家创业公司来到微软。姆拉瑞身体微胖,精力旺盛。我们花了几个小时来讨论CTCP。但我相信在最初的半个小时里,我已经说服了姆拉瑞,剩下的时间里就开始讨论各种技术细节。最后,我们走进开发组组长萨基(Sanjay)的办公室。办公室的白板上还画着STODER协议的示意图。姆拉瑞开始向萨基汇报我们刚才的讨论结果。姆拉瑞两眼发光,语速很快;萨基听了一会儿,开始飞快的提问。我们又用了一个多小时的时间。最后,萨基看着窗外渐暗的天空,沉默了。然后,他转过头,冲着我说:“嗨,焜,我想你这次可以真的在Windows里放点东西了。”

 

但实际上,CTCP并不是唯一的候选方案。核心网络部还在同时考察其他的几种方案。例如:其一是来自科罗拉多大学大名鼎鼎的Injong Rhee教授提出的TCP Cubic。TCP Cubic被Red Hat Linux选中为缺省的协议栈,并在一次第三方测试中胜出。再者就是由加州理工大学史蒂文斯·罗教授(Stevens Low)提出的FAST TCP。还有就是莎莉·弗洛伊德博士的HSTCP。在那一年HSTCP通过IETF成为了试验标准。最后,还有加州大学洛杉矶分校的马瑞尔·盖罗教授(Mario Gerla)的TCP Westwood。其中,TCP Cubic和HSTCP是基于网络丢包的,而FAST TCP是典型的基于网络延时的协议。而TCP Westwood则稍微复杂一些,但本质上还是基于网络丢包。这时,CTCP还主要是仿真结果,因此急需真正的实验数据。于是,我回到北京的第一件事就是找宋京民博士。京民是微软亚洲研究院里少数几个拥有博士头衔,但却热衷于程序开发的人。他为人和蔼谦逊,做事认真。为了让CTCP很容易联入Windows内核,萨基和姆拉瑞为我们开放了一套拥塞控制API(同样的API也同时公布给上述的其他各方)。我们在我的座位旁边建立起了一个高速网络测试环境。在其后的几个月里,我们在这个测试床上通过软件工具模拟多种网络环境来测试CTCP的性能,并提出了一些进一步改进的算法。

 

六月中旬,我带着大量的实验数据再次来到雷蒙德总部。核心网络部花了整整两个星期的时间来分析、讨论和比较这些数据。姆拉瑞和我则忙于解答各方面的提问和质疑。而京民则守在北京的测试床前,随时准备着提供更多的数据。那是一段忙碌而令人兴奋的日子。最后,核心网络部同意将CTCP加入到Windows的内核中。八月八日,姆拉瑞正式将CTCP代码并入Windows主代码树中。核心网络部主管经理亨利亲自写信给我的经理祝贺成功。

 

但我们的工作还远没有结束。CTCP可以说是Windows十年以来对TCP协议最大的一次改动。核心网络部考虑在Windows Vista正式发布前对其进行更全面系统地实际网络测试,如果有任何的负面反应,将会从正式发布版本中取消CTCP功能。测试从2005年末到2006年底,持续了近一年的时间,在微软内部的数据中心,位于Polo Alto的SLAC美国国家原子加速中心,加州理工大学,以及其它自愿测试单位中进行。在此期间,我分别将CTCP的设计原理和测试数据发表在INFOCOM以及PFLDNet会议上。2006年四月,在INFOCOM大会上,我遇见了的加州理工大学的罗教授,他对CTCP很感兴趣,并约我另找时间详细面谈一下。可惜我那时的邮箱出了些故障,没有及时看到他的来信。后来,他的小组将CTCP移植到了Linux系统上。

 

2007年一月发布的Windows Vista首次包含了CTCP功能。二月初,在微软雷蒙德研究院召开了一次高速TCP峰会。峰会邀请了网络学术界和工业界的诸位知名专家,一起讨论高速TCP的现状,并对微软的CTCP给出反馈意见。尽管身体欠佳,莎莉·弗洛伊德博士依然参加了这次峰会。总体来说,峰会很成功,对CTCP给出了一致的正面反馈意见。随后,核心网络部决定将CTCP作为一项因特网标准,提交给IRTF和IETF讨论,并由资深软件架构师大卫·赛勒博士(Dave Thaler)挂帅。于是,姆拉瑞往返飞于IRTF/IETF和PFLDNet各次会议之间,游说IETF和IRTF接受CTCP提案。2008年,经过漫长的讨论,IRTF终于完成了CTCP的评审,同意CTCP可以安全地在因特网上部署和运行。在此期间,微软发布的每一款Window产品中都包含了CTCP,包括最近即将发布的Windows 7。

 

记得Vista刚发布不久,一个朋友打电话给我,说他最近在在他的新机器上安装了Vista,他问我使用CTCP会有什么不同。当我听说他家里使用的还是1Mbps的ADSL连接时,我笑了。“很遗憾,”我说,“你不会感觉到什么不同。但也许几年后,当家里直接接入了光纤,你就会感到很不一样了。”但我知道,在越来越多的数据中心之间的高速链路上,将会有更多的CTCP流在奔驰,高效地传输着数据。而广大终端用户,也最终会因此得到的更好的网络体验。

 

 

0

阅读 评论 收藏 转载 喜欢 打印举报
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有