1700496818
1700496819
高效利用带宽并不是在20世纪60年代推动对包交换研究的唯一动力,另一个原因是核战争。兰德公司的保罗·巴兰正试图解决网络鲁棒性问题,以便军方通信系统能够在核进攻中幸存下来,而核进攻可以毁坏大部分的网络。受20世纪50年代为迷宫导航而开发的算法的启发,巴兰提出了一种设计,在这个设计中,每一条信息都可以通过自己的方式抵达目的地,即使网络处于动态变化中,或者已成碎片。
1700496820
1700496821
这是电路交换及其专用、稳定连接的第二个缺点:非常稳定意味着通话中断就会一直中断。电路交换不够灵活或适应能力不够强,体现不出足够的鲁棒性。而且,在这里,包交换也可以提供这个时代所需要的东西。在电路交换网络中,如果其中的任何一个链接被中断,通话就会失败,这意味着当网络变得更大时,可靠性会呈指数级下降。另一方面,在包交换中,不断增长的网络的路径扩散成为它的一种优点:现在有更多的方法可以让数据流动起来,因此网络的可靠性随着它的变大成倍地增长。
1700496822
1700496823
尽管如此,正如范·雅各布森所言,即使发明了包交换技术,电话公司也不为所动。“所有的电信人员都很大声地说,那不是网络!”那只是利用我们网络的一种糟糕的方式!你用我们的电线,用我们创造的路径进行传输!但你又在上面放了很多胶水,因此你就无法有效地使用它。但是,从包交换的角度来看,电话线只是一种达到目的的方式,发送方和接收方实际上并不关心数据包是如何传递的。在不同数量的不同媒体上进行不确定操作的能力将是包交换的伟大美德。在20世纪60年代末和70年代早期的初期网络(如阿帕网络)之后,所有类型的网络都证明了这一概念的可行性,并开始在全美国范围内发展壮大,包交换不仅可以在铜线上进行,还可以通过卫星和无线电。2001年,挪威卑尔根市的一群计算机科学家甚至曾短暂地实施了一项名为“信鸽”的包交换网络,即写在纸上并包装起来,然后绑在鸽子的脚上。
1700496824
1700496825
当然,分组交换也不是没有一点儿问题。对于任何协议、人类或机器来说,首先要问的问题之一就是:你如何知道你的消息已经发送了?
1700496826
1700496827
1700496828
1700496829
1700496831
算法之美:指导工作与生活的算法 信息确认
1700496832
1700496833
温顿·瑟夫和鲍勃·卡恩
1700496834
1700496835
任何传输都不是绝对可靠的。
1700496836
1700496837
“上帝创造了什么”并不只是在美国发出的第一条远程电报信息,它也是第二个:艾尔弗雷德·韦尔把这段引文又发回了在最高法院的莫尔斯,作为确认收到之前信息的一种方式。
1700496838
1700496839
现在,韦尔的回答可能会使莫尔斯和美国的立法者们都聚集在他周围,他相信莫尔斯的信息已经收到,当然,韦尔事先并不知道这会是什么样的信息。但是,怎样才能使韦尔知道他的确认已被接收了呢?
1700496840
1700496841
计算机科学家们知道这个概念是“拜占庭将军的问题”。想象一下有两个将军,站在一个山谷的两边,他们有共同的敌人,试图共同协调进攻。只有通过完美的同步,他们才能成功,因为单独攻击就意味着自取灭亡。更糟糕的是,两名将军之间如果要传送任何消息都必须通过敌人所在的阵地,这意味着任何信息都传送不出去。
1700496842
1700496843
第一个将军,例如他想建议发起攻击的时间,但他一人又不敢擅自进攻,除非他知道他的同伴也会一起出发。第二名将军收到命令并发回确认,但除非他知道第一个将军收到了确认,否则他也不敢发动攻击(因为第一个将军是不会独自去的)。第一个将军接受了确认,但仍不会进攻,因为他要等待第二位将军知道他收到了才行。遵循这一逻辑链需要一系列无穷无尽的信息,显然我们不需要这样做。沟通是一件只有在实践中才能奏效的令人愉快的事情,在理论上它是不可能的。
1700496844
1700496845
在大多数情况下,沟通失误的后果很少会如此可怕,对确定性的需求也很少会如此绝对。在传输控制协议中,失败通常只会导致重新传送,而不是死亡,因此对一个会话来说,这已经足够了,可以从所谓的“三重握手”开始。访问者说你好,服务器确认你好,并回复你好,访问者确认了这一点,如果服务器收到这第三条消息,则不需要进一步确认,他们就会开始正题。然而,即使在最初的连接完成之后,仍然存在风险,即一些后续包可能在传输过程中受损或丢失,或者出现故障。在邮件投递中,包裹的递送可以通过回执来确认。在网上,包裹递送可以通过所谓的确认包或确认字符来确认。这些对网络的运作至关重要。
1700496846
1700496847
确认字符工作的方式既简单又睿智。在三次握手的背后,每台机器都提供了一种序列号,而且每一个发送的数据包每次都会在发送的时候增加一个序列号,就像支票簿上的支票一样。例如,如果你的计算机启动与网络服务器的联系,它可能会向该服务器发送信号,例如数字100。服务器发送的确认字符还将指定服务器自己的数据包的序列号(例如5000),同时还会说“101号准备好了”。你机器的确认字符的序列号将是101号,并将“传送5001号”。(注意,这两个编号方案是完全独立的,每个序列的开头数通常是随机选择的。)
1700496848
1700496849
这种机制提供了一种精确的方法来确定数据包何时走错路。如果服务器期望得到101号,却得到了102号,那么它将发送一个确认字符到102号数据包,并仍然说“101号准备好了”。如果它下一次收到的是103号,它会再说一次,“101号准备好了”。重复三次这样冗余的操作后,它将会向你的机器发出信号:101号不仅被延迟了,而已经无望地消失了,所以它会重新发送那个数据包。在这一点上,服务器(保留了102号数据包和103号数据包)将发送一个确认字符“104号准备好了”用以表示已经恢复了序列。
1700496850
1700496851
实际上,所有这些确认都可以增加相当数量的流量。我们认为,大文件传输是单向的操作,但实际上接收方会向发送方发送数百条“控制消息”。2014年下半年的一份报告显示,在高峰时段,近10%的上游互联网流量来自网飞公司(我们倾向于认为这几乎完全只向下游、向用户发送数据)。但是这样的视频产生了大量的确认字符。
1700496852
1700496853
在人类领域,对信息是否真正已被接受的焦虑,在对话中也同样普遍存在。演讲者可能会下意识地附加“你知道吗”在每句话的末尾,对听众来说,这是起不到什么帮助作用的,只能源源不断地附和着点头,或说出一些无用的回复。我们甚至在面对面交流时也会这样做,但在打电话时,这却是唯一知道通话是否还在继续的方法。难怪在21世纪无线运营商的一次最成功的营销活动中,主打网络工程师关于质量控制的口号,这句话一次又一次地重复:“你现在能听到我说的吗?”
1700496854
1700496855
当问题反复出现时,我们往往会留下一个问号。正如软件博客作者泰勒·特里特所说:
1700496856
1700496857
在分布式的计算机系统中,我们试图通过等待接收确认来保证消息的传递,但是所有的事情都可能出错。消息被丢失了吗?那个确认字符丢失了吗?接收器崩溃了,还是它们只是太慢了?是网络太慢,还是我太慢了?
1700496858
1700496859
他提醒我们,拜占庭将军所面临的问题“不是设计的复杂性,而是不可能的结果”。温顿·瑟夫注意到,早期网络研究的发现都是基于你可以建立一个可靠的网络的假设。另一方面,“互联网基于这样一个假设,即没有任何网络是绝对可靠的,你必须进行端到端的重新传输来恢复错误”。
1700496860
1700496861
具有讽刺意味的是,对此很少有例外,其中有一种例外就是对人类声音的传递。实时语音通信,如网络电话(Skype),它通常不使用传输控制协议,而传输控制协议是互联网其余部分的基础。正如研究人员在早期网络中发现的那样,使用可靠的、鲁棒性强的协议(带着所有的确认字符,以及对丢失的数据包进行重新传输)来传输人类的声音是有些多余的。人类自己可以提供鲁棒性。正如瑟夫解释的那样,“在传输声音的情况下,如果你丢失了一个数据包,你只会说‘再说一次,我刚刚有些没听到’。”
1700496862
1700496863
出于这个原因,自动将背景噪声降低到无声状态的这项电话服务对用户造成了极大的伤害。背景静态是一种持续的保证,可以保证呼叫仍然是连接的,但很明显,通话中出现的任何沉默,都是通话的另一方刻意的选择。如果没有这项服务,人们就必须不断地面对电话已经掉线的可能性,并不断地确认它到底有没有掉线。这也是所有包交换协议的存在焦虑,事实上,任何一种根植于异步转变的媒介,无论是写信、发短信,还是尝试性的反复的在线约会,都是如此。每条信息都可能是最后一条,有人花时间去回应,而有人早就结束了对话,通常也没有什么区别。
1700496864
1700496865
那么我们该如何处理一个不可靠的人或电脑呢?
1700496866
1700496867
第一个问题是,我们应该认为多长时间的不响应可以构成故障。这在一定程度上要取决于网络的性质:我们会在电话打出后的几秒,电子邮件发出后的几天,以及信件发出后的几周就开始担心。发送方和接收方之间的往返时间越长,保持沉默的时间就越长,而且在发送者意识到存在问题之前,可能会有更多的信息“在飞行中”。在计算机网络设计中,让各方正确地调整他们对确认时间的期望,对系统正常运转至关重要。
[
上一页 ]
[ :1.700496818e+09 ]
[
下一页 ]