1700496850
1700496851
实际上,所有这些确认都可以增加相当数量的流量。我们认为,大文件传输是单向的操作,但实际上接收方会向发送方发送数百条“控制消息”。2014年下半年的一份报告显示,在高峰时段,近10%的上游互联网流量来自网飞公司(我们倾向于认为这几乎完全只向下游、向用户发送数据)。但是这样的视频产生了大量的确认字符。
1700496852
1700496853
在人类领域,对信息是否真正已被接受的焦虑,在对话中也同样普遍存在。演讲者可能会下意识地附加“你知道吗”在每句话的末尾,对听众来说,这是起不到什么帮助作用的,只能源源不断地附和着点头,或说出一些无用的回复。我们甚至在面对面交流时也会这样做,但在打电话时,这却是唯一知道通话是否还在继续的方法。难怪在21世纪无线运营商的一次最成功的营销活动中,主打网络工程师关于质量控制的口号,这句话一次又一次地重复:“你现在能听到我说的吗?”
1700496854
1700496855
当问题反复出现时,我们往往会留下一个问号。正如软件博客作者泰勒·特里特所说:
1700496856
1700496857
在分布式的计算机系统中,我们试图通过等待接收确认来保证消息的传递,但是所有的事情都可能出错。消息被丢失了吗?那个确认字符丢失了吗?接收器崩溃了,还是它们只是太慢了?是网络太慢,还是我太慢了?
1700496858
1700496859
他提醒我们,拜占庭将军所面临的问题“不是设计的复杂性,而是不可能的结果”。温顿·瑟夫注意到,早期网络研究的发现都是基于你可以建立一个可靠的网络的假设。另一方面,“互联网基于这样一个假设,即没有任何网络是绝对可靠的,你必须进行端到端的重新传输来恢复错误”。
1700496860
1700496861
具有讽刺意味的是,对此很少有例外,其中有一种例外就是对人类声音的传递。实时语音通信,如网络电话(Skype),它通常不使用传输控制协议,而传输控制协议是互联网其余部分的基础。正如研究人员在早期网络中发现的那样,使用可靠的、鲁棒性强的协议(带着所有的确认字符,以及对丢失的数据包进行重新传输)来传输人类的声音是有些多余的。人类自己可以提供鲁棒性。正如瑟夫解释的那样,“在传输声音的情况下,如果你丢失了一个数据包,你只会说‘再说一次,我刚刚有些没听到’。”
1700496862
1700496863
出于这个原因,自动将背景噪声降低到无声状态的这项电话服务对用户造成了极大的伤害。背景静态是一种持续的保证,可以保证呼叫仍然是连接的,但很明显,通话中出现的任何沉默,都是通话的另一方刻意的选择。如果没有这项服务,人们就必须不断地面对电话已经掉线的可能性,并不断地确认它到底有没有掉线。这也是所有包交换协议的存在焦虑,事实上,任何一种根植于异步转变的媒介,无论是写信、发短信,还是尝试性的反复的在线约会,都是如此。每条信息都可能是最后一条,有人花时间去回应,而有人早就结束了对话,通常也没有什么区别。
1700496864
1700496865
那么我们该如何处理一个不可靠的人或电脑呢?
1700496866
1700496867
第一个问题是,我们应该认为多长时间的不响应可以构成故障。这在一定程度上要取决于网络的性质:我们会在电话打出后的几秒,电子邮件发出后的几天,以及信件发出后的几周就开始担心。发送方和接收方之间的往返时间越长,保持沉默的时间就越长,而且在发送者意识到存在问题之前,可能会有更多的信息“在飞行中”。在计算机网络设计中,让各方正确地调整他们对确认时间的期望,对系统正常运转至关重要。
1700496868
1700496869
当然,一旦我们意识到故障已出现,第二个问题就是我们应该怎么做。
1700496870
1700496871
1700496872
1700496873
1700496875
算法之美:指导工作与生活的算法 指数退避算法:宽恕的算法
1700496876
1700496877
英国广播公司
1700496878
1700496879
世界上最难翻译的词已经被确认为是“ilunga”一词,源自刚果民主共和国东南部的希鲁巴语。Ilunga一词的意思是“一个人第一次愿意原谅任何虐待,第二次还容忍,但绝没有第三次”。
1700496880
1700496881
T.H.帕尔默
1700496882
1700496883
如果一开始你不成功,那就尝试,再尝试一次。
1700496884
1700496885
今天,我们希望我们的设备能够进行无线通信,例如,我们的键盘和鼠标可以与电脑相隔几米,通过无线的方式相互连接。但是无线网络的出现是出于必要,尤其是在一个没有电线用来这样做的地方——夏威夷。20世纪60年代末和70年代初,诺曼·艾布拉姆森试图将位于檀香山的夏威夷大学的7个校区和分布在4个岛屿和数百英里外的许多研究机构联系在一起。他的想法是通过无线电实现包交换(而不是通过电话系统)将这些岛屿与一个个的发射器和接收器连接起来。这个系统后来被称为阿罗哈网络(ALOHAnet)。
1700496886
1700496887
阿罗哈网络必须克服的最大障碍是干扰。有时两个站点会在同一时间发出信号,这就无意中干扰了彼此的信号。(当然,这也是人类对话中的一个常见特征。)如果两个站点都只是立即重新传输,以送达它们的信息,它们就会冒着永远被困在干扰之中的危险。显然,阿罗哈网络协议需要告诉竞争信号如何给彼此空间,如何为彼此让路。
1700496888
1700496889
发送者需要做的第一件事就是所谓的“打破对称”。就像人行道上的行人所知道的那样,当迎面而来的人偏向左边时,自己就躲向右边,两人都向同一边,就什么也解决不了。类似地,当两个说话的人都停下来,做出让另一个人说的手势以示尊重,然后又在同一时间开始说话;或者当两辆车在十字路口相遇,两车都停下来让对方,然后又试着同时加速。这是一个普遍使用随机性的领域,事实上,如果没有它,网络设计是不可能实现的。
1700496890
1700496891
一个简单的解决办法就是让每个站点都抛硬币。正面,就再发送一次,反面,就等待一个回合,然后再发送。毫无疑问,其中肯定有一个很快就能轻松送达。当只有两个发送者时,这就能很顺利地运行了。但是如果有三个信号同时发送呢?或是4个?在这一点上,网络只有1/4的机会能获得一个单独的数据包(在此之后,你仍然会有三个相互冲突的站点,甚至可能会有更多的相互竞争的信号等待到达)。随着冲突数量的进一步增加,网络的吞吐量可能会如悬崖掉落般骤降。1970年的一份关于阿罗哈网络的报告显示,在电波的平均利用率仅为18.6%的情况下,“这个频道变得不稳定……再传输的平均数量变得不可控了”。这样并不好。
1700496892
1700496893
那么,应该怎么做呢?有没有一种方法可以避免陷入这种命运?这一突破在每次连续失败最后都提高了平均延迟时间,具体来说,就是在试图再次传输之前将潜在的延迟加倍。因此,在最初的失败之后,发送者会在一个或两个回合之后随机地重新传输,在第二次失败之后,它会在1~4个回合之后再次尝试,第三次失败将意味着要再等待1~8个回合,以此类推。这种简练的方法使网络能够容纳各种潜在的竞争信号。因为最大延迟长度(2,4,8,16……)呈现一种指数级的递增,因此它被称为指数退避算法。
1700496894
1700496895
从1971年开始,指数退避算法就成为阿罗哈网络成功运作的一个重要组成部分,20世纪80年代,它被应用于传输控制协议,并成为互联网的一个重要组成部分。几十年后的现在,它仍然是如此重要。正如一篇有影响力的论文所言,“对于一个嵌入在未知拓扑网络中的传输端点,以及一个未知的、不可知的并不断变化的相互竞争的会话的群体,只有一个有可能有用的方案——指数退避算法”。
1700496896
1700496897
但该算法的其他用途表明了一些更规范、更深奥的内容。除了避免冲突,指数退避已经成为处理几乎所有网络故障或不可靠性的默认方式。例如,当你的电脑试图到达一个看起来马上就要瘫痪的网站时,它会使用指数退避算法,一秒后再试一次,几秒后再试一次,直到成功。这对每一个人都有好处:它可以防止瘫痪的主机服务器在恢复之后不会因为过多访问而又被再次攻击,同时防止你自己的机器浪费大量的精力做无用功。但有趣的是,它也不会强迫(或允许)你的机器完全放弃。
1700496898
1700496899
指数退避算法也是网络安全的一个重要组成部分,当你登录一个账户时,密码连续错误,就会受到指数倍增长的锁定周期的惩罚。这可以防止黑客对账户进行“字典攻击”,你可以用可能的密码一个个尝试登陆,直到最终密码正确,登陆成功。与此同时,它也解决了另一个问题:无论电脑账户的真正所有者是多么健忘,在一些任意的中断之后,他不会被永远锁定。
[
上一页 ]
[ :1.70049685e+09 ]
[
下一页 ]