Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

带宽、掉包率、延迟 相关概念

  谈论一个网络环境的好坏实际上同时涉及多个参数,只谈论一个参数的绝对是耍流氓。我们通常会涉及的参数有带宽、掉包率、延迟,等。但这些参数的概念貌似很模糊,网络上也没有找到相关概念的详细介绍,所以这篇文章就来总结一下这些概念。
  带宽分为上行带宽和下行带宽,这是网络提供商直接提供的硬性参数。当然有时候也有弹性的,比如早期的小区宽带是一栋楼共用一条网线,没有任何限制,大家都抢网络。很多一般用户不懂上下行带宽的区别,而网络提供商则声称10M独享之类的,实际上10M独享的只有下行带宽,上行带宽可能不到其20%,甚至不是独享的。这样的网络环境中,只要上行带宽一被占满,网络几乎就瘫痪了。因为普通的下载使用TCP,它要维护每个数据包的完整性,在数据传输过程中需要与服务器不断交互。如果这个交互渠道被堵塞,即使客户端下载到了数据,协议也无法确定数据的完整性,因而无法使用下载的数据。迅雷之类的下载工具就未必使用TCP了,但检测数据完整性的过程不可能省略,只是被简化了而已,所以或多或少也会受到影响。
  无论是上行堵塞还是下行堵塞,只要存在网络堵塞的情况,网络通信都无法完成。要么数据包发送不到服务器,要么无法从服务器接收返回包。这就是掉包的情况。掉包就相当于短时间的网络中断,如果持续掉包就意味着断网了。当一台电脑在上传数据,占满上行带宽时就会出现比较严重的掉包。我们通常认为网络卡就是因为掉包导致数据传输陷入等待。以TCP为例,客户端向服务器请求一个数据,请求发出后客户端当然要等待服务器响应。但是由于掉包,服务器可能没有收到这个请求,客户端就需要在等待一段时间后重新发起请求。之后发起的请求可能也无法抵达服务器,客户端会再次陷入等待,而且根据TCP的超时重传机制,这个等待的时间是指数递增的,比如第一次1秒,第二次2秒,第三次4秒,直到64秒之后不再增加。所以如果掉包率高的话,错过了前面的几个重传之后就可能陷入长时间的等待中。
  网络被大量占用,但又未被完全占用的情况就会产生高延迟的问题,它相当于掉包的弱化版。高延迟对TCP下载的影响很大,但对其它下载方式的影响未必大。如果只是浏览网页的话,高延迟可能只会让网页打开变得稍慢一些,但如果是网游这样需要实时通信的应用,高延迟就没法正常使用了。延迟也是最容易检测的东西,只要让程序记录一个请求发送和接收的间隔就可以得到延迟,但光有延迟这个参数无法推出带宽,即使用户的上下行带宽只有64Kbps,在没有其它程序占用网络的情况下延迟也可能非常低,因为延迟检测所传输的数据量不足以检测带宽。通常延迟低的网络通常掉包率也不会高,但这并不代表延迟高的网络掉包率就高,产生延迟和掉包的原因不止以上这些,以上这些只是网络环境本身的问题。
  除了网络环境本身的问题,还有链路的问题。比如试图在国内连接到谷歌就会被墙,因为有些网络根本是受限的。即使不会被墙,在国内访问谷歌也依然很慢,这不是因为谷歌的服务器差,只是因为服务器节点太远了。我们可爱的小信号要跨越太平洋,抵达遥远的资本主义大陆,这漫长的旅途有极大的迷路风险。所以掉包、延迟,什么都可能出现。除了节点的地理位置问题外还可能存在硬件问题,比如路由器要是出了毛病或者WIFI信号比较弱都有可能出现不可预料的情况。当然,这些应该当做特殊情况处理。对于一般的开发者而言要考虑的应该是客户端本身的网络环境问题。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^