深入探讨网络带宽问题

整理自知乎,文末有原文链接。深入探讨网络带宽问题


带宽问题在网络中是一个全民热点问题,引无数人争议,可惜很少看见心平气和的有深度的文章,在下不揣鄙陋,希望与各领域专家共同切磋,以期抛砖引玉,共同学习。

放眼整个人类历史,互联网对人类文明的影响怎么评价也不为过的,而其发端不过是实验室的产物。所以,一开始根本没有考虑运营的问题,如与质量相关的带宽、时延等QOS技术根本没有考虑,由于设计的理念和先天不足,即使后期修补改进,也难以实施。比如最重要的协议之一:IP协议,网络中如果评选最差员工奖,IP协议无疑拔得头筹,这哥们的理念是尽力而为,听上去蛮不错的,实际上却是毫不负责。不管IP包是丢失或者损坏,IP协议从不负责,那出了问题怎么办?交给上会的传输层或应用层,由别人来背黑锅。想象一下XX快递公司,把你寄的包裹弄丢了,或是损坏了,一概不管,一切居然要你自己负责,重新发货,那不把你气得七窍生烟?

在谈论带宽前,我们首先要了解带宽的定义,澄清一些问题:

带宽的定义:指在固定的时间可传输的数据量,单位是bps(bit per second)。首先要搞清楚单位问题,带宽肯定是以bit为单位的,比如100M带宽,就是100M bit,而平常我们下载软件所显示的单位都是byte,1byte=8bit,这有个换算。常常有个无知而愤怒的声音:妈的,我的宽带是4M的,下载速率才400K左右,电信骗子!

再次,我们要明白ISP给我们开通带宽的真正含义:它仅仅是指从你家到本地ISP最近接入设备间线路的带宽,一般这是你唯一可独享的线路带宽,除此这外,全世界任何一个ISP也无法承诺。这是真正和大众有关且能控制的,其它很多问题当地ISP也无法解决的。

TCP/IP协议本来就是基于包交换的,换句话说,是一种带宽共享的协议,只能是在线路上独享带宽,从来没有说能在网络中独享带宽。10年前,ATM协议还有个虚电路的概念,理论上比IP协议能更好的承诺带宽,可惜最后被IP废成渣了,目前ATM仅在ADSL接入层还有应用,大家常常要在ADSL猫里要设置的VPI,VCI就是ATM协议最重要的参数,随着光纤的普及,ATM将彻底消失了。

假设以10M带宽为例,理论上下载速率可以达到10/8=1.25M,但实际上根本不可能,能达到1M就不错了,这是为什么呢?这其中的原因很复杂,大概有以下几个方面:

一、协议开销

TCP/IP是一个协议族,当然核心的是TCP和IP协议,让我们像剥洋葱一样,一层层剥开每一层协议:


深入探讨网络带宽问题



TCP协议报文格式


深入探讨网络带宽问题

由上可见,TCP最小协议开销为5X32=160bit(20byte),

IP协议报文格式


深入探讨网络带宽问题

由上可见,IP最小协议开销为5X32=160bit(20byte),

Ethernet II帧格式


深入探讨网络带宽问题

注此处单位是byte, Ethernet II类型以太网帧的最小长度为64字节(6+6+2+46+4),最大长度为1518字节(6+6+2+1500+4)。Ethernet II最小协议开销为6+6+2+4=18byte(144bit)

完整数据包


深入探讨网络带宽问题

总结一下:所有协议的开销为:14+20+20+4=58byte,按以太网最小数据包(46byte)算:其协议开销占比58/104=56%,按最大数据包(1518byte)算,也就是最大效率:其协议开销占比58/1518=3.8%。当然每秒在网络上传输的数据包大小并无规律可言,由于应用不同,也无法统计出一个大致平均的协议开销占比。其实这种算法并不严谨,数据链路层也并不是只有以太网协议,比如ADSL所用的PPPOE,WIFI的802.11n等等,其中还少算了应用层和物理层的开销,尤其是应用层各种协议种类繁多(难于计算统计),另外,传输层UDP协议的开销也会更小一些。这些开销全部要占用网络带宽,就好比到邮局寄包裹,包裹也是要算重量和费用的。

除此之外,为了维护物理链路的连接和各种协议和应用软件的连接,会定时地传输各种协议报文,类似心跳的报文,有时我们联网后,并没有任何上网动作,但很多协议已经开始工作,有流量和连接产生,可以在DOS窗口下用netstat –a查看传输层的连接情况。比如,在思科的设备上,某些类型的端口(比如最常用的以太口)默认实际只能使用75%的带宽,剩下那25%是拿来给网络间的各种协议和设备间的通讯用的,如果无法保证并预留以上系统应用的带宽,那设备都宕机或脱网了,带宽再多又有什么用呢?

二、传输问题

传输问题也分为几部分:

1. 接入线路问题。

传统的宽带ADSL对线路的要求高,既有距离、介质的要求,对电气干扰也有要求,有一部分ADSL的线路是不达标的,自然其带宽也不够。比如电话线的线径,最初只有电话时,线径记得只有0.3或0.4毫米,这对通话质量基本没什么影响。但有了ADSL后,影响就大了,中国电信集团要求采用0.5毫米的电话线,同时采用类似网线的双绞线,以减少干扰。曾经看见太平洋网的一篇首页文章,居然认为电话线太细造成中国带宽不达标,真是外行的笑话,让人无语。关于ADSL线路质量是一个很专业的领域,线径只是其中一个小小的指标而已,还有诸如双绞线或平行线方式,主电缆的质量,开线率等等指标。同时ADSL经过不断升级,各版本对线路质量要求也不同。比如版本ADSL2反而比ADSL支持的线路距离要短,但带宽增加不少。而线路质量也只是带宽问题中的一小部分。以我在电信工作10几年的经验,告诉大家一个最靠谱的办法:在ADSL猫里面可以查看到2种速率,一种是ISP给你配置的带宽(也就是你向ISP申请的带宽,一般是1024的整数倍),另一种是实际适配的速率,这表示你家的ADSL线路实际能达到的带宽。如果实际适配速率>配置速率,恭喜,你家的ADSL线路质量很好,是达标的。否则,你可以向ISP投诉,要求整改。仅对ADSL而言,其它任何测速方法全是扯蛋。由于ADSL猫的种类太多,查看的方法无法一一举例,一般在网络状态里可以查看到。当然这仅是针对你家到ISP这短短几公里的线路而言,影响带宽的因素远不止这些。

目前光纤入户已经开始大量普及,衡量的指标又完全不同,主要是光衰,一般<25DB以下都是合格的,当然越小越好。有的光猫可以直接查看光衰。

2. ADSL终端匹配。

ADSL的标准版本很多:ADSL,ADSL2,ADSL2+,ADSL猫和电信DSLAM之间就需要协商,匹配一个大家都支持的版本。电信的DSLMA设备都是顶级的设备制造商的产品,而ADSL猫的质量就参差不齐了,在ADSL版本匹配上影响很大,相同条件下,速率不达标,也许只是换个猫,速率就达标了,甚至速率会有成倍的提升。其中的原因是很复杂的,牵涉到硬件芯片和协议版本的兼容性,我也只是个门外汉。

3. 干线的传输

中国幅员辽阔,城市之间经过成百上千公里的光缆连接,远非弹丸小国可比。在这几百甚至上千公里的距离,只有光缆吗?那你就想错了,光是有衰耗的,所以每隔一段距离都会有中继站,重新放大光信号。同时为了更大的带宽,也会设置光复用的传输设备。对于传输对网络的影响,我想起一件事:当时在新疆某市开通骨干路由器到乌鲁木齐的电路,一般最少是2条电路,走不同路由的干线光缆。在测试的时候发现(路由器和电路均无负载),一条电路的时延在10ms左右,另一条却在20ms左右,难道是传输的问题?但经过传输专业人员的检查,指标正常,没有任何问题。仔细一问,原来第2条光缆的距离有近千公里(实际某市到乌鲁木齐的距离不过300多公里),我很奇怪:光的速度不是30万公里/秒吗?这点距离的时间差几乎可以忽略。但实际上,每台传输设备大部分都有光电转换的过程,在经过无数个中继站和波分复用设备后,信号被大大的迟延了。由此可见,这只是一个省内的情况,对于全中国呢?一个北方的用户如果访问南方的游戏服务器,那会增加多少时延呢?对于传输,我是外行,希望有专家能指教一二。

三、设备问题

主要是网络中各种设备,分2个方面:

1. 转发性能问题。数据包从设备入口进来,再从出口转发出去,这之间的时间差就是设备转发的时延,时延是带宽的杀手。网络工程师都知道,在衡量设备性能上,有背板带宽和包转发速率等主要参数。交换机是纯硬件转发的,是最快的,电信级的路由器也基本上是硬件转发的,而防火墙就慢多了,它要对每个数据包进行分析并控制,效率就差多了,所以在ISP骨干网里,是不会有防火墙的。

除了网络设备外,光传输设备的影响也非常大,小到本地网,大到省内,甚至国家骨干网。每台设备都要经历光-电-光的转换,时延也在一次次的累加。纯光的运算仍只在理论和实验室中。其中涉及到光网络的协议开销,已不在我所熟悉的领域了。

2. 除了ip及以上协议,每个数据包在进入一台设备上时先要对数据链路层协议进行解包,而在离开设备时要重新封装数据链路层协议,这都是造成时延的因素。在DOS下有个tracert命令,可以查看经过的三层以上的设备(如路由器),但这其中根本不包括二层及以下的设备,像交换机,网络接入设备FTTH等,其它传输设备根本不支持ICMP协议,更无法体现出来,其实我们随便访问一个页面,都要经过10台以上的路由器,而实际每个数据包经过的设备要乘以N倍。

综上所述,网络中设备成百上千,每台设备都不停地处理数据包,不断地累加时延,而带宽就只有2个参数:数据量/时间,而时延无疑严 重影响了带宽。

四、测速问题

我们常常用软件或在网站上测速,但在我看来,这并不科学,也不靠谱。本质上所有的测速原理都是通过下载一个大的文件来计算带宽的,是应用层的,而我们的带宽是纯物理层的。比如用迅雷,它计算的下载速率是你下载的文件大小除以时间,这其中根本不管物理层,数据链路层,网络层,传输层和应用层的所有协议开销,而且也不管PC中是否有其它程序同时也在占用网络带宽。真正科学的方法是从PC的网卡上抓取流量来计算带宽,但这也仅仅解决了PC侧的计算问题。那么对端呢?测速网站的服务器带宽是否够用?假设服务器的带宽只有100M,而同时有100个人在测速,那每个人测出的最大带宽也不过只有1M,哪怕你一个人就有100M带宽。另外服务器的硬件也可能是瓶颈,目前大部分服务器还是用传统硬盘,当有成百上千的用户请求时,即使带宽足够,但硬盘的传输速率也可能是瓶颈。其实,以上都不是最主要的问题,最主要的是这些测试都是测量PC到远端服务器的带宽,这些服务器可能在北京,也可能在广州,可能长达几千公里的距离。而ISP根本不可能给你承诺几千公里距离的带宽,它承诺的只是短短几公里从你家到ISP设备间的带宽。

其实简单地说,我们所感知的实际带宽分2部分:接入带宽和骨干网性能,接入带宽就是ISP办理业务时承诺的带宽。对于ISP来说,接入带宽随着光纤的普及,将不会成为瓶颈了,骨干网的性能只能通过不断扩大带宽,优化网络来解决。

而骨干网性能就是ISP骨干网的带宽、容量和优化情况,这就是大家所不了解的了。举个最简单的例子:某年和某设备制造商技术员聊天,谈到骨干传输带宽,他说某ISP正准备扩容新疆到北京的互联网骨干带宽,增加一条155M,我笑道:这么可怜的带宽?要知道电信当时到北京的带宽已经是40G了,就算是此ISP扩容完,其骨干带宽也只有电信的1%。就这么点可怜的带宽,也因为当时此ISP老旧的国外设备难以和新的国产设备对接而久拖未决。当然此ISP的宽带价格比电信便宜了将近一半,很多老百姓觉得便宜而选择了此ISP,但他们永远无法了解这些真相。所以常常有人说某ISP的10M带宽还不如另一ISP 2M的快,在中国,论骨干网的性能,北方的联通和南方的中国电信比其它ISP强出几条街,其实这就是中国电信拆分前的那张网络。

总之,对大众来说,带宽是不靠谱的测试和应用上的感知,而真正理性分析后,会发现这是个非常复杂的问题,即使罗列了以上因素,我仍然觉得远远不够。只是希望大家能通过这篇文章,大家能理性地探讨带宽的问题,牢骚和叫骂是不能解决问题。也希望此文能抛砖引玉,和其它领域的专家一起探讨,以便更全面地看待这个问题。

网友补充

知乎用户:

补充几个啊。

首先楼主没有澄清带宽和速率的问题。这个问题非常有意思。

比如我们买了10M的带宽(大家都叫带宽,我先借用一下,等一下做进一步澄清),但网线用百兆以太网接入网络的时候(可能是光纤也可能是铜线),我们的传输的速率其实是100M的!你没看错,是100M的。但是你的电脑显示出来的bps为什么顶多10M?是因为你收包的时候是抽疯似的一会儿发一个包,然后静默一段时间。电脑上测试的是平均速率,而不是真实速率。

100M以太网只能按100M收发,不可能降速率收发。这一点非常有趣,但也经常把人搞晕。

接下来说带宽怎么回事。带宽其实是运营商设备在某一级设备(一般是最后一跳)上,设置了限速。说是限速,其实就是限制平均速度。再解释一层就是他不停地计算发给你的byte数,到了限定的值就缓存,缓存满了就丢包。注意,如果对端以200M的速率向你发包,这个包基本上也能到你最后一跳的设备上,但设备会根据设置丢包。最后的平均值,就是你签约的值。

下面才说到服务器和你的电脑最后形成的一个基本传输速率。tcp连接建立的时候,双方会根据“收包确认ack”的成功率去调整速率。如果发端有能力限制(例如网卡是10M的或者其他程序占了网络发包缓存),包在发端主机内就被丢。如果发端上行限速,那么他发出来的包在他的网络里就被丢了。否则可能在收方的最后一跳设备或者收端的主机内丢掉。无论哪种丢包,最后都通过tcp的ack去判断。如果发现丢的多,发端会降速,如果丢的少,发端会尝试提高发送速率。

这就是我们看到的电脑显示出来的网速的由来。有很多因素影响:发送端计算能力,网络能力,以及繁忙程度;发送端下一跳的限速,发送端接入他的业务服务商的限速,网络服务商网络拥塞程度,接收端被网络服务商的限速,接收端自己的网络繁忙程度,接收端自己的网卡能力,计算能力,以及其他程序占用网络程度,以及接收端自身处理数据的能力。


先写这么多吧,细节上有不少不准确的地方,后面有空完善一下。

答:

带宽即速率,单位是bps(bit per second)
不明白什么叫电脑显示速率?在windows系统中显示的速率是你的电脑和网线另一端设备协商出来的,一般是100M或1G,但并没多少用,因为ISP提供的速率远低于此,这不是瓶颈。
谈到限速,就比较复杂了,我也不是太清楚,从限制的位置看,大概有几种吧:
1.端口限速,直接在用户端口上限速,但这种办法最笨,现在早不用了,成千上万的端口都要做数据,用户的端口也会更改,结果就是完全无法控制和管理。
2.账号限速,原理不是很清楚,Radius大概是和BRAS联动,并没有作用到用户端口上。
以上是限速的手段,但限速的算法可多了去了,单桶双桶三桶,cisco很多算法是不公开的,3层和2层设备又是不同的算法,更复杂,我学艺不精,无法深入讨论。
另,TCP滑动窗口,只是TCP层面上的,端到端协议上的,不是设备硬件的上的。

原文:https://www.zhihu.com/question/40309762


以下三篇文章也不错,供参考:


anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/3188.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注