几年前,我写了“IPv6是一个好设计的世界”(The World What IPv6 Is A GoodDesign)一书。我仍然为那篇文章感到自豪,但我想我应该更新一下。
不,我不会改变立场的。与三年前一样,IPv6距离普遍采用或成为我们这个世界的好设计还很遥远。但从那时起,我与人共同创立了一家公司,结果意外地基于我在那篇文章中概述的原则。或者更确切地说,是为了避免颠覆这些原则。
在那篇文章中,我探讨了网络的总体历史以及导致IPv6的考虑因素。我不打算再报道那块地了。相反,我想谈谈态度。
当我在20世纪90年代第一次加入互联网时,我找到了丢失已久的入门教程。它谈到了互联网(小写I)和互联网(大写I)之间的区别。互联网是将较小的网络连接在一起的任何网络。互联网是…。嗯..。事实证明,你不需要一个以上的互联网。如果您有两个Internet,那么几乎不可避免的是,很快就会有人想出如何将它们连接在一起。你所需要的只是一个人建立一个链接,你的两个互联网就变成了一个。通过诱导,当你让一个有动力的人足够容易地将一个互联网连接到另一个互联网上时,互联网就是最终的结果。
互联网基本上是马虎的。不管你可能组成多少个委员会,最终联系都是由个人把事情拼凑在一起建立起来的。这些东西可能符合规格,也可能不符合规格。他们可能会很好地遵守这些规格,也可能会很差。他们可能会违反规范,因为其他所有人也都违反了规范,而这是让一切正常工作的唯一方法。连接本身可能很快或很慢,或者很关键,或者每天只工作几分钟,或者受到业余无线电规则的约束,或者更糟。终端可能是功能强大的服务器、自动售货机、烤面包机或卫星,运行任何可以想象到的操作系统。只有一件事是肯定的:它们都有窃听器。
这就把我们带到了波斯特定律,这是我在写关于网络的文章时总是提到的。当我这样做的时候,总是会有很多人回应,争论波斯特尔定律是正确的,还是一个好主意,就好像它只是一个想法,而不是自然的力量。
邮政定律说得很简单:在你发送的东西上要保守,在你接受的东西上要自由。尽力正确处理另一端产生的窃听器。最成功的网络节点是对输入中可能存在的每一种不可能的损坏进行计划,并在它发生时采取合理措施的节点。(有时候,是的,抛出一个错误是明智的。)。
[旁注:邮政定律并不是在所有情况下都适用。您可能不希望您的编译器自动修复您的语法错误,除非您的编译器是javascript或HTML,撇开玩笑不说,它们实际上是为Postel';slaw原因而设计来进行这种自动更正的。但这条法律确实适用于几乎所有需要有效沟通的复杂情况,包括人与人之间的对话。我喜欢这样说,需要两个人才能沟通。一个好的倾听者,或者一个熟练的演说家,可以解决很多冲突。]
波斯特尔定律是互联网所依据的原则。这并不是因为JonPostel是一位伟大的推销员,他说服了每个人,而是因为这是互联网竞争中唯一取胜的进化策略。自然并不关心你对波斯特定律的看法,因为唯一会发生的互联网就是遵循波斯特定律的互联网。每一个其他的互联网最终都会无一例外地被一些做错了的傻瓜加入到互联网中,但只要做得足够好,它就会增加价值,所以最终没有人愿意切断这种连接。然后,为了保持这种联系,将需要进一步应用波斯太尔定律(Postel';‘s Law)。
如果你读了我的文章,你可能已经看到我把IPv6称为第二个互联网,并不是每个人都能连接到它。这一说法是站不住脚的。让我们往后退一点。
在IPv6是一个好设计的世界里,我谈到了导致IPv6的崇高设计目标:消除总线网络,去除MAC地址,不再有交换机和集线器,不再有NAT等等。我当时没有意识到的是,现在我认为这是至关重要的,与IPv4(以及导致v4的早期协议)相比,这些目标是一种根本的态度转变。
IPv4演变成一种实用的方式,可以用一堆已经存在的网络和机器来构建互联网。波斯特尔定律说,你最好面对现实,而不是你希望的那样,他们也是这样做的。当某些东西无法连接时,有人会黑掉它,直到它正常工作。太草率了。断断续续,缠绕和胶带。但最重要的是,没有人真的认为这整个烂摊子会在最终奏效时发挥作用,或者只要它最终被证明是持续的,就会持续下去。当时,没有人知道,每当你开始建设互联网时,它们总是无情地通向互联网。
当这些(大部分)人开始意识到他们制造的怪物时,他们开始担心。他们意识到,32位的地址,他们原本认为可以很容易地在他们小小的互联网的一生中持续下去,现在甚至不足以满足世界上每个人一个地址的需求。他们发现,并不是真的让任何人感到惊讶,波斯特尔定律,尽管它可能是坚定不移的,绝对是一个持续的噩梦。他们认为,在他们创建的这个非常流行的互联网成为可获得的、全球性的、必不可少的服务突然崩溃之前,他们最好快点修复这一切,这一切都将是他们的错。在此之前,他们认为自己最好快点修复这一切,以免这个非常流行的互联网突然崩溃,这一切都将是他们的错。
[剧透:它从来没有倒塌过。嗯,不是永久的。时不时地会有短暂的突发事件,现在也是如此,但少数几个专注的灵魂把它重新组合在一起,就这样过去了。]。
IPv6是在一个充满恐惧、可伸缩性问题和第二个系统效应的新环境中创建的。正如我们上一次所述,它的目标是用一个新的Internet取代Internet-一个不会犯下所有相同错误的Internet。这样黑客就会少一些。我们将在几年内逐步升级到它,就像我们在过去升级到更新版本的IP和TCP时所做的那样。
我们很难责怪人们相信这会奏效。甚至连“第二体系效应”这个术语在当时也只有20年左右的历史,而且并不广为人知。以前的每一次互联网升级都很顺利。以前没有人建造过这么大的互联网,有这么多的邮政法则,有如此多的用户、供应商和系统,所以没有人知道会有什么不同。
嗯,25年后的今天,我们并没有太大的变化。如果我们感到尖酸刻薄,我们或许可以将IPv6描述为“网络串论”:这是一个长达数十年的无聊玩意儿,吸引了真正的信徒,如果你质疑这一学说,你会勃然大怒,而且值得注意的是,它在多大程度上阻碍了进步。
当然,仍然没有例外的规则,即如果你建立任何互联网,它将不可避免地(通常是很快)连接到互联网。
当它发生时,我并没有坐在那里,但它很可能是第一个IPv6节点,它运行在一台也连接到IPv4的机器上,前提是有人可以远程登录到它进行调试。今天,即使是纯IPv6节点也几乎可以肯定地连接到一个网络,如果配置正确,可以找到通往任何IPv4节点的方法,反之亦然。这可能并不美观,它可能涉及很多代理、NAT、网桥和防火墙。但这是千丝万缕的。
从这个意义上说,仍然只有一个互联网。这是个大问题。从第一天开始,互联网就从来没有说过只有一种协议;它总是由路由器、网桥和网关组成的乱七八糟的东西,在很多层上运行着许多协议。IPv6就是其中之一。
IPv6的特别之处在于,它的支持者并不满足于它是一个连接到互联网的互联网。不!它是被选中的。它的命运是互联网。因此,我们不仅有连接IPv6互联网和IPv4互联网的网桥和网关(尽管我们确实有)。
相反,IPv6希望最终直接在每个节点上运行。最终用户一直不愿意放弃IPv4,所以现在,每个节点也都有IPv4。因此,机器通常直接连接到我所说的两个相互竞争的互联网-IPv4互联网和IPv6互联网。
好的,在这一点上,我们的术语变得非常混乱。抱歉,但所有这些都引出了一个问题,我知道你想让我回答:哪个互联网更好!?
我会讲到这一点,但首先我们需要回顾一下我勇敢地称之为艾弗里的无线可靠性定律,它不是定律,肯定是别人发明的(因为它们大多是对CAP定理的一个微不足道的子集的诠释),而且事实证明,它不仅仅适用于WiFi。哎呀。我猜这个名字几乎在很大程度上是错的。尽管如此,它们仍然是相当好的指导方针。
规则1:如果您有两个wifi路由器品牌,可用于90%的客户端设备,而您的设备其中一个出现问题,则更换wifi路由器品牌可以解决90%的问题。因此,提供两台WiFi路由器的ISP有[1-(10%x 10%)]=99%的最终成功机会。
规则2:如果您同时运行两个WiFi路由器(例如,一个主路由器和一个扩展器),并且这两个路由器每天大约90%的时间都工作正常,那么您的网络全天没有问题的可能性为81%。
这取决于您必须构建多少分布式系统,这要么非常明显,要么真的让人大吃一惊。为甚麽第一个方案的成功率跃升至99%,而第二个方案的成功率则跌至81%呢?有什么不同呢?还有.。这些情况中哪一种类似于IPv6?
或者我们可以用另一种方式问这个问题。为什么有这么多网页建议您通过禁用IPv6来解决连接问题?
让我们把事情简单化吧。IPv4是将客户端A连接到服务器X的一种方式,IPv6是第二种方式。这类似于从电缆和DSL提供商那里购买冗余的家庭IPv4连接,然后将它们插入同一台计算机。无论哪种方式,您都有两个独立的互联网连接。
当您有两个连接时,您必须在它们之间进行选择。这里有一些你可以考虑的因素:
哪一家甚至提供了从A到X的路径?(例如,如果X没有IPv6地址,那么IPv6就不是一个选项。)。
哪一个给出了从A到X和从X到A的最短路径?(您可以使用Hopcount或延迟来评估它,例如,就像在我的旧netselect程序中一样。)
哪条路径最少掉线?(重新启动的NAT将丢弃IPv4上的TCP连接。但IPv6路由更改更频繁。)。
哪一个有漏洞的防火墙或NAT挡住了去路?他们是完全阻止它(很容易),还是表现得很奇怪(很难)?
哪一个错误配置为阻止某些ICMP数据包,从而使PMTU发现(始终或有时)不适用于部分或所有主机?
一种名为“快乐眼球”的常见启发式方法是在路线之间进行选择的一种方式,但它只涵盖了其中的几个标准。
事实是,要回答所有这些问题是极其困难的,即使你能回答,A和X的每一种组合的答案也是不同的,而且它们会随着时间的推移而变化。操作系统、网络浏览器和应用程序,即使它们实现了“快乐眼球”或类似的东西,也往往在检测所有这些边缘情况时表现得相当糟糕。而且每个APP都要单独做这件事!
我的主张是,在两个互联网之间进行选择的问题与在同一SSID上的两个古怪的WiFi路由器之间进行选择的问题(规则2)相同。只要两个网际网络(或两个WifiRouter)都正常工作,一切都很好。一旦一个人行为怪异,你所有的结果都会变得怪异。
……互联网总是行为怪异,这是因为波斯特定律的暴政。调试互联网是一项全职工作。
现在有两个互联网,重叠程度低得令人吃惊,所以你的ISP必须构建和调试这两个互联网。
而且每个操作系统供应商都必须调试这两种协议实现,这需要两倍以上的代码。
……而且每个应用程序供应商都必须同时测试IPv4和IPv6,而他们当然不会这样做。
IPv6的支持者对此了如指掌,无论是理性的还是直觉的,或者至少是经验上的。两个不稳定的互联网连接在一起的故障率比单独连接两个不稳定的互联网的故障率要高。
这导致他们得出了你听过很多次的相同结论:我们应该干掉其中一个互联网,这样我们就可以把时间花在让剩下的一个互联网不那么摇摇欲坠,而不是把我们的精力分散在这两个互联网上。哦,很明显,我们杀死的是IPv4,谢谢。
他们没有错!只用一个互联网进行调试会容易得多,而且你知道,如果我们都必须在一个问题上达成一致,IPv6可能是更好的选择。
但是..。我们不一定要在其中一个问题上达成一致,因为波斯特尔定律有着令人敬畏的不可阻挡的可怕之处。没有人能宣布一个互联网或另一个互联网正式死亡,因为我们唯一能确定的关于互联网的事情是,它们总是结合在一起形成互联网。有些人可能试图拔掉IPv4或IPv6的插头,但其他一些笨蛋会马上把它插回去。
这种规模的纯净是永远达不到的。如果您需要纯净才能使您的网络可靠,那么您就有一个无法解决的问题。
好的,实际上我们必须做得更好,因为事实证明,在连接开始时,为每个连接在两个Internet之间做出正确选择是不可能的,也不够好。PMTU、碎片、NAT重置和路由更改等问题可能会中途中断连接,并导致性能低下或丢失。
我想回到我在世界末日时留下的一个附注,其中IPv6是一个很好的设计:移动IP,也就是说,即使您在IP地址之间跳转,您的连接也能继续运行。如果您拥有IP移动性,那么您可以根据实时平等反馈,实时迁移两个互联网之间的连接。您可以在两条链路上发送相同的数据包,然后看看哪条链路工作得更好。如果您选择了一条链路,但它突然停止,您可以在另一条链路上重新传输数据包,然后从您停止的地方继续。你精确的启发式甚至不会有那么大的影响,只要它最终尝试了两种方式。
如果您拥有IP移动性,那么您可以将第#34;a和第#34;b;情景(失败组合)转换为第#34;a或b#34;情景(成功组合)。
你知道吗,忘了IPv4和IPv6吧。同样的技巧也适用于我们上面提到的冗余电缆+DSL设置。或者同时支持WiFi和LTE的话筒。或者,给出一个足够花哨的wifi客户端芯片组,在多个无关的wifi路由器之间平滑切换。
这就是我们对Tailscale的VPN连接所做的小范围工作。我们尝试您的所有Internet链接,IPv4和IPv6,UDP和TCP,中继和点对点连接。我们让移动IP成为现实,即使现在只是在你们的私人网络上。你知道吗,数学是可行的。两个网络的Tailscale比一个网络的Tailscale更可靠。