2006年10月30日星期一

用Vista进行网络连接更有信心(之一)

对于即将到来的Windows Vista,很多人大概还迷恋于AERO那迷人的毛玻璃,或者不满于不时弹出的UAC窗口,不过喧闹过后,更多人慢慢在思考,到底是什么使得我们需要从Windows XP进行升级。

笔者想通过和网络通信相关的几个方面来探讨一下,到底是什么让我们对Windows Vista更有信心。

这一次,我们一起来看看Vista中一个站在后台默默无闻的技术,不过它可不是小角色——下一代TCP/IP堆栈

一提起这个名词,大概读者大多会觉得头疼,毕竟这牵涉到许多复杂的原理。但是有一点是肯定的,Windows Vista和将来的Windows Longhorn Server在网络满负荷工作的情况下,可以将网络的性能提高至少10%,在特殊的经过优化的条件下,甚至可以提高数倍的工作效率。时间就是金钱,虽然我的笔记本使用11M的无线也很方便,但是如要要传送一个4G的文件,我肯定会老老实实连一根网线。因此,越来越多的人必然会受益于Vista更高的网络连接性能。

提到TCP/IP,我们就不得不想到大名鼎鼎的三次握手还有Ack这三个字母,这个异步连接的机制为TCP/IP连接定下了基调,这是一个效率不高的连接。试想,当你发出一个数据包的时候,必须等待对方答复了,才能决定下一步改怎么作,在延迟非常高的网络中,大量的等待就会造成带宽的闲置,积累下来可以相当可怕的。

因此,在TCP/IP中为了提高网络的效率,加大吞吐量,采用了一个称之为“滑动窗口”的技术,这个术语被定义为——发送端在得到对方确认之前,一次性允许发送的最大数据量——,简单的说,就是既然我每次都要等着对方答复,那我一次就多发些数据包,提高网络的吞吐量,这样就减少了答复的数量,也就减少了等待的时间。当然,我每次能够发送多少数据,这个是有规定的,发送方和接收方将通过数据包中的一个Window字段进行调节,如果网络空闲Window字段就会变大,如果网络拥塞,Window字段就会变小,这也是滑动二字的由来。

在Windows XP中,滑动窗口的大小在刚开始的时候根据网络连接接口的速率有一个默认值,然后根据TCP会话的情况不断的波动。这个默认值还可以在注册表的HKEY_LOCAL_MACHINE\System \CurrentControlSet\Services\Tcpip\Parameters\TCPWindowSize and HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interface\InterfaceGUID\TCPWindowSize 位置进行修改。

但是,“滑动窗口”仍然是一个后知后觉的技术,我只有等到网络已经拥塞了,出现了丢包,然后才能进行改变。同时,会面临一个很尴尬的情况,我们称之为“TCP全局同步现象”。如果网络中相当拥塞,而且你同时运行了很多个网络应用程序(有多个TCP连接),这时会怎样呢?假定初始状态时,网络中只有很小的吞吐量,这时所有的应用程序都会不断的Window数值以提高吞吐量,当总的吞吐量提高到一定程度(超过网络连接的带宽),这时就必然会造成大量的丢包,于是所有的应用程序会(几乎)同时降低Window的数值到一个很低的水平以避免拥塞,这就会造成突然的网络利用率低下,然后因为网络代快有了富余,这些应用程序又会同时开始不断增大Window数值,提高吞吐量直到再一次超出带宽,如是不断循环。

如果图片缩小请点击以放大查看

很显然,这种情况网络利用率是很低的,Vista中下一代TCP/IP堆栈所设计了一种“接收窗口自动调节”的方法。“接收窗口自动调节”功能通过不断的测定带宽延迟乘积值(带宽乘以连接延迟)和应用程序速率来确定每个连接的最佳接收窗口大小,然后随着运行过程不断自动调整最大的接收窗口大小,也就是说。随着TCP连接吞吐量的提升,数据传送过程中网络带宽的利用率也会得以提高,接收方会自动预测可能产生的拥塞而对Window数值加以改变。如果所有应用程序都针对TCP数据接收进行了优化,则可以显著改善网络的整体利用率,从而使“服务质量”(QoS)的运用对于满负荷或接近满负荷运行的网络更加重要。

如果图片缩小请点击以放大查看

需要注意的是,有些网络设备,并不支持Vista“接收窗口自动调节”的设置,这有可能会带来一些性能上的问题。

与此同时,Vista新的TCP/IP堆栈为高速连接提供了更好的性能,如果你的连接是千兆以太网,使用Vista毫无疑问可以极大的提高发送方的网络吞吐量,这个技术称为“复合TCP”。 在Microsoft内部执行的测试中,对于传输速率为每秒1千兆位、平均往返行程时间为50亳秒的连接,大文件的发送时间几乎缩减了一半。带宽延迟乘积较大的连接可具有更好的性能。

这里借用网络上对于使用Vista进行BT下载的一个测试作为例子:
(以下内容为转载)

澳洲朋友Zheng long采用IPERF对Windows XP以及Vista的最高TCP带宽进行了统计测试,每个系统每项测试进行10次取均值。分为100Mbit宽带以及54Mbit无线网络两个网络硬件平台。

数据:
一、采用54Mbit WiFi
1.Vista:10秒钟传输25.4MB数据,平均速度2661.4KB/s
2.XP:10秒钟传输22.2MB数据,平均速度2321.4KB/s
3.Vista相对XP速度提高14.6%

二、采用100Mbit Ethernet
1.Vista:10秒传输112.8MB数据,平均速度11.5MB/s
2.XP:10秒传输103.1MB,平均速度10.5MB
3.Vista每秒速度快1MB/s,提高9.5%

如果图片缩小请点击以放大查看

如果图片缩小请点击以放大查看

三、这些数据意味着什么?
很简单,如果你“合法地”从BT网络下载某个1.5GB大小的文件,你的下载速度将提高10%,如果你采用1Mbit网络连接,10Mbit网络连接,节省2分钟(当然,在理想情况下)。
也就是说,Vista的确改善了TCP/IP网络传输速度,需要注意的是,考虑到TCP/IP协议为异步连接,也就是说,如果在BT网络中所有种子采用Vista系统,对整体网络性能的提升将高于10%——不仅文件下载,网络游戏对战以及iTunes等网络下载应用也会从中受益。

(以上内容为转载)

TCP/IP堆栈的另外一个改进是ECN支持。当TCP数据段丢失时,TCP会假定该数据段丢失是由于路由器拥塞而造成,并执行拥塞控制。但是这种控制同前面一样,是后知后觉的。借助 “显式拥塞通知”(ECN)支持,处于拥塞状态的路由器会在转发数据包时对它们进行标记。这样就通知了TCP Peer已经发生了阻塞,因此就会降低其传输速度来减轻拥塞状况和防止数据段丢失。在发生数据包丢失之前检测到拥塞状况会提高TCP对等端之间的总体吞吐量。Windows Vista的RC1版提供了ECN的支持,但默认情况下将此功能禁用。可以使用netsh interface tcp set global ecncapability=enabled命令来启用ECN支持,当然,还有路由器也要支持它,呵呵。

通过了这些讲述,大家应该会了解到,Vista的网络连接性能的确有了本质的提高,使用Vista就会给我们带来更多的自信。(zarthur)

Windows Vista文章宝库授权转载,网址http://vista.itecn.net,旨在研究和推广Windows Vista技术,由多位Microsoft MVP和其他技术爱好者组成。大部分成员接受过微软中国组织的Windows Vista讲师培训,其中四位MVP还在新加坡接受过微软Windows Vista部门的专门培训。

没有评论: