网络世界中的恐怖场景 数据包丢失灾难

如果我们无法对时间的一致性取得共识,那么会发生什么事呢?可能会议不会准时开始,去看电影时才发现电影早已演到一半了。如果没有得到公认的标准时间,可能社会上的大部分工作都无法正常进行。

进入2012年,这样的恐怖场景将会出现,当然不是出现在我们的生活中,而是出现在网络世界中。该问题的产生根源在于我们的设备中过度使用了数据包缓存,所以这个问题也被称作Bufferbloat。 为了防止丢包或解决其它一些问题,开发人员都喜欢使用缓冲。而一个200ms的缓冲延迟,如果出现数据包丢失并重发,将会导致一秒钟延迟。因此数据缓冲一般被放置在数据量较大的共享网络环境中。每个缓冲器都会增加少量的时间延迟,但是却能够避免数据包重发带来的较大的时间延迟。

bufferbloat.net网站负责人之一Dave That认为,这其实会产生一个问题,即随着我们网络中的缓冲器越来越多,被带入的数据包延迟也越来越大。而Bufferbloat问题的最终结果就是导致数据包丢失的情况更加严重:

“随着网络总流量的加重,网络传输模式将发生明显变化,变得更加复杂和混乱。对于某个网络连接来说,网络负载空闲和超载时所表现出来的连接效果是有天壤之别的。而用户对于延迟和数据包总传输时间的体验,可能是网页的立即响应,也可能是“请稍后重试”。

而所有缓冲器所要防止的事件—数据包丢失,将在所有缓冲器被塞满后出现戏剧性的增长,因为只有偶尔发生的数千辆车大追尾,才能告诉互联网路由器降低数据包转发速度。

而这种情况所带来的后果还很多。其中最明显的一个是将域名转变为网络地址,即DNS lookups的速度变得极其缓慢。Skype这样的VoIP服务或者YouTube视频播放,将变得结结巴巴,使用者最终不得不放弃这些服务。而网络游戏用户更是苦不堪言。

但受其所累的用户不仅限于网络视频或网络游戏用户。很多网络服务都将被影响,包括:“NTP, ARP, DHCP, SSH, 以及多种路由协议。没错,我们电脑里的同步时钟也会出现错误!”

Buffer Bloat 的人知道该如何解决由此产生的问题。他们的方法分为三步:测试和修复Bufferbloat ,减少不受管理的缓冲区大小,使用智能路由器来适应缓冲器。

其实还有第四种方法,即在不增加延迟的情况下,防止数据包丢失。比如Silver Peak Systems的广域网优化系统,可以做到实时恢复最多六个丢失的数据包。Silver Peak的做法类似于RAID技术,它将数据流打包,并每隔N个数据包就添加一个用于CRC校验的数据包,从而实现对于丢失数据包的实时恢复。通过CRC校验,本应在接受方被丢弃的错误数据包能够实时得到修复,避免被丢弃的命运。

不管采用什么方法,对于今天以及未来的网络来说,我们都要时刻保持警惕,防止数据包丢失带来的冲击。