对于孩子今后是成为科学家还是工程师这一话题,家长们的首选答案通常是科学家。因为科学家研究发现自然规律,而工程师依照自然规律进行工程建设。
但有个例外,在网络研究领域,工程师比科学家更伟大。因为在其他领域,科学家研究的自然规律可以说是造物主创造的,但网络空间所遵循的TCP/IP等协议是由工程师创造的,在此基础上,科学家们正在努力研究互联网的规律。
而这至少给了我们两点启示:
首先,如果年轻人想从事挑战性的工作,当一名互联网工程师其实大有可为。
其次,人类虽然在某种程度上充当了造物主的角色,但人类毕竟不是造物主,对问题的理解是有限的。所以千万别认为自己可以无视前人工作,再造一个全新的事物,历史证明这种行为通常是错误的。还是要不断试错,一点一点摸索前进。
互联网没有蓝图,它不可能像其他工程一样,一开始就被规划设计好。那么,如何才能确保互联网的可持续发展?
我认为要充分理解互联网的两个基本要素,一是“设计原则”;二是“技术组件”。如IP、TCP、UDP、BGP、OSPF等协议是互联网的技术组件,“技术组件”可以多种多样,吐故纳新,但互联网的设计原则是不变的。如果一项新技术完全否定了互联网的基本设计理念,那么这项技术是否有利于互联网的发展值得怀疑。因此,要充分理解互联网的设计原则。
互联网历史上的很多抉择,实际上印证了其设计原则的重要性。这也是我今天回顾互联网历史的原因,正如以下三句话所表达的:
第一,历史总是重复的。要学习过去的经验,更要从过去所犯的错误中吸取教训。
第二,未来是一扇门,过去则是门的钥匙。只有把握好钥匙,才能打开门,走得更远。
第三,如果一切能重来,我们会怎么做?如果我们早出生50年,处在前人曾经的位置,面对互联网发展的重要时刻,我们能否作出正确的决策?
阿帕网(ARPANET)由美国国防部高级研究计划管理局(简称ARPA)建立,是全球互联网的前身,诞生至今已52周年。而苏联全国自动化系统(OGAS)是“为了统计、计划、管理苏联的经济而建立的收集和处理信息的全国自动化系统”。该项目于1962年提出,是前苏联的一项全国性网络工程。
从某种意义上,互联网可以说是美苏冷战的产物。1957年,前苏联发射了世界上第一颗人造卫星之后,美国感受到巨大威胁,于是在1958年成立了ARPA。而ARPA为防止其军事指挥中心被前苏联的核武器摧毁,于1968年建立ARPANET,其核心思想是分布式,ARPANET最终发展成全球互联网。
为什么比ARPANET早6年建立的OGAS最终没能存活下来?
回答这个问题之前,我们先回顾一下互联网的发展轨迹。ARPA成立之后,1964年,兰德公司的保罗·巴兰(Paul Baran)发表了题为“分布式通信系统”的学术论文。与此同时,英国的唐纳德·戴维斯(Donald Davids)在英国国家物理实验室(NPL)的局域网中对分组交换的概念进行了实践。1969年ARPANET正式建立。1983年,TCP/IP协议被采用,基本思路还是建设一个分布式的、可分层的网络。
在这段时间内,发生了几个很重要的事件。一是保罗·巴兰提交给兰德公司的报告中提到有三种网络结构:中心式、去中心化和分布式,并提出,只有完全分布式的网络可靠性最高。二是劳伦斯·罗伯茨(Lawrence G. Roberts)设计出ARPANET最早的逻辑架构。三是RFC1,内容是ARPANET的终端系统设计。
在前苏联方面,1959年,苏联的军事工程师、控制论先驱安纳多利·基托夫(Anatoly Kitov)提出了红书计划;1962年,世界著名数学家维克多·格卢什科夫(Victor Glushkov)提出OGAS计划,希望能够通过收集和处理信息数据,实现统计、计划和管理苏联经济的目的。
OGAS项目是一个非常宏伟的计划,它的6个研究方向包括了理论、算法和计算机网络等等。但由于遭到官僚机构的反对,这个项目无法推进,最终流于失败。麻省理工大学(MIT)出版社出版的《如何让一个国家不联网:苏联互联网的不安史》详细分析了苏联互联网为什么没有成功。
比较互联网和苏联计算机网,前者是开放的网络,后者是管制的网络。在拓扑方面,ARPANET是扁平的无中心分布式结构,OGAS是面向计划经济设计的网络,存在1个中心、200个分中心和2万个终端节点等三层树状结构,具有非常强的管理结构,所以不需要分组交换,电路交换就已足够。
一项新技术的诞生,一定是由于有新的需求。如果现有技术能够解决问题,就不需要新技术了。而技术所蕴含的理念和需求是紧密相关的。因此,在当时苏联的计划经济背景下,不可能产生分组交换的互联网。
1972年,当时负责ARPANET的罗伯特·卡恩(Robert E. Kahn)在国际计算机通信大会(ICCC)上组织了一次非常成功的演示,首次向公众展示了ARPANET网络技术。
此次展示引起广泛共鸣,于是,以美国ARPANET,英国NPL和法国Cyclades项目成员为主,成立了国际网络工作组(INWG),某种意义上,该工作组可以说是国际互联网工程任务组(IETF)的前身。
1973年,互联网之父温顿·瑟夫(Vint Cerf)加入INWG,并成为主席。1974年,INWG形成了两个主要提案,一个是以美国ARPANET为主的INWG39,另一个是以欧洲Cyclades和NPL为主的INWG61。这两个方案都是基于无连接的分组交换技术。
1975年,INWG形成了统一美国方案和欧洲方案的INWG96,并正式提交给当时的国际电报电话咨询委员会(CCITT,后与国际无线电咨询委员会中从事标准化工作的部分合并成为国际电报联盟ITU),但遭到拒绝。CCITT的主要论点是分组交换是可以接受的,但必须采用虚电路(Virtual Circuit)。温顿·瑟夫很生气,为此辞去主席一职。
此后,另一位互联网之父罗伯特·卡恩选择不与欧洲人合作,而继续推进当时尚未完全成熟的INWG39。两年之后,美国主导的基本技术方案出台,而欧洲国家由于缺少资助,只能眼睁睁看着美国方案成为现实。
但这件事情其实存在一些争议。因为美国方案中的TCP/IP协议融入了很多Cyclades的思路。ARPANET最初采用的是NCP协议,该协议主要定义主机如何与接口信息处理器(IMP,即后来的路由器)连接,并假定通信系统是可靠的。
而Cyclades设计者路易斯·普赞(Louis Pouzin)在设计Cyclades网络的体系结构时,具有非常清晰的逻辑关系,他认为“主机不需要信任网络,所以网络不需要完美,而且网络也不可能做到完美”。
于是他提倡“尽力而为”(Best effort)和“端对端”(End to End),这两个核心思路其实是路易斯·普赞先提出来的。不过“端对端”的思想最终由戴维·克拉克(David Clark)于1984年在其论文中进行了系统化和学术化。
基于普赞CYCLADES网络的理念,温顿·瑟夫和罗伯特·卡恩于1974年在其发表的论文中提出了TCP协议,该协议确定了互联网的体系结构。但需注意,在该论文中,IP并没有独立,而是直到第3版本的时候,IP才和TCP分离,并在其后形成了IPv4。
因此,现在无论是IETF,还是其他网络研究人员都应该清楚地认识到,在自己可以控制的网络内(或自治域内)追求“完美”(如服务质量控制),可能可以实现。但如果想在整个互联网范围内构建“完美的网络”,显然违背了互联网的设计原则。
尽管美国人选择独自推进互联网协议的研究,但TCP/IP一开始并不被看好。
为此,国际标准化组织(ISO)于1984年提出开放式系统互联通信参考模型(Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model)。
当时,多数人包括欧洲网络研究人员,美国电信界、政府、美国国防部人员都认为互联网的未来属于OSI,而TCP仅为临时方案。就连美国国防部和美国政府所采用的GOSIP标准也是OSI的一个系列。包括电信公司、通讯公司、计算机公司,以及美国政府都在推进OSI的七层模型。
但TCP/IP没有被放弃,其工作人员仍然非常低调地坚持着。在借助了法国人无连接的分布式网络的思路,尤其是TCP/IP分离之后,该方案更显优雅。此后,TCP/IP经历了三个非常重要的事件:
1983年,ARPANET从NCP切换到IP;
同年,当时的“开源系统”UNIX BSD 4.2(及以上版本)广泛支持TCP/IP;
1986年,美国连接超级计算机的科学基金网(NSFNET)选择了TCP/IP。
这三件事推动TCP/IP成为事实上的标准,因此,TCP/IP最终走向成功,除了其内部设计的简单、轻巧,也有其已被广泛使用的加持。
当然,还有一个很重要的因素是NSFNET AUP(Acceptable Use Policy)的出台,该政策限制了NSFNET的商业化,用户以学术界为主,所以少了商业公司的竞争,让其逐渐成熟化。
那么,TCP/IP究竟是如何逆袭OSI的?
安德鲁·塔能鲍姆(Andrew S. Tanenbaum)编写的经典教材《计算机网络(Computer Networks)》在第三版之前都表示,TCP未来要过渡到OSI。但是从第三版开始反对OSI,说OSI有四个因素导致其最终没有走向成功:糟糕的时机、糟糕的技术、糟糕的实现和糟糕的政治因素。
而从TCP/IP和OSI的对比来看,TCP/IP的最终胜出也是符合基本逻辑规律的。因为互联网的网络层协议IP是 “无连接的”,所以网络层可以非常容易地使用“无连接”的链路层(例如以太网)。而互联网的传输层既“面向连接”,也有“无连接”,TCP是“面向连接的”,可以保证一个字节都不会出错,而DNS查询所采用的UDP则是“无连接的”,非常轻型。
与之不同,OSI的网络层仅有“面向连接”,当面对无连接的链路层协议(如以太网)时,就需要进行逐跳(hop to hop)认证,即类似于TCP在主机之间做的事,非常复杂。但OSI的传输层只面向有连接,所以DNS也要建立连接,又很复杂。
另外一个追求完美的网络是ATM,其最初的设想很好,通过定长信元保证服务质量。然而,ATM最后失败了。包括1994年,开始建设中国教育和科研计算机网CERNET的时候,很多人都认为应该选ATM,但我们最终还是选择了TCP/IP。为什么?
正如网络创业资源中心(NSRC)创始人兰迪·布什(Randy Bush)所指出的,互联网哲学和传统电信网哲学的区别,其实在于如何处理“复杂性”。怎么判断一项技术是否可扩展?
互联网服务供应商UUNET的首席技术专家麦克·戴尔(Mike O’ Dell)有一个观点认为,判断系统、协议、技术是否可扩展关键在于规模。“可扩展”意味着在小规模的试验环境中能够完成的功能,在全世界范围也都可用。而只有“简单”的系统才能具有“可扩展性”。
因此,互联网的“无连接分组交换”、“端对端”、“尽力而为”等本质特征,使得其在与ATM网络的较量中获得了最终的胜利。
IPv6实际上最早叫IPng,而IPng起源于SIPP。上世纪90年代初,IETF意识到两个问题:一是32位地址不够用;二是当时地址分为A类、B类和C类,可聚类B类已分配完毕,由于还未引入BGP4,而对于一定规模的网络,需要分配数个C类地址,而C类地址不聚类,这无疑将导致路由表爆炸式增长。
就当时而言,短期解决方案一是使用NAT解决IPv4地址的短缺,二是发明了“无分类域间路由”技术(CIDR);长期解决方案是IPng。
1992年,互联网体系结构委员会(IAB)认为TCP和UDP协议已相对成熟,面对地址不够用问题,提议网络层采用OSI长期推进的CLNP,即部分IETF草稿中的第七版本IP(IPv7)。提出以OSI的CLNP为网络层协议,传输层保留TCP和UDP。
然而,IETF参与者在第24届IETF大会上,针对该提议向互联网协会提出抗议。温顿·瑟夫和MIT的戴维·克拉克(David Clark)等互联网大牛也相继为IP站台。
虽然当时是IAB委员会成员,但温顿·瑟夫却坚定地支持IP。平常都穿三套件西服的他,在一次ISOC的问答会上,脱下西服,解开衬衫,展示出写着“IP On Everything”的T恤。这一行为引来了台下雷鸣般的掌声。
戴维·克拉克是IAB的第一届的主席,他在1992年的技术展示会上做了一场名为“A Cloudy Crystal Ball:Visions of the Future”的报告,他把互联网的未来形容为一个雾蒙蒙的水晶球。
在该报告中,克拉克提出了三个预测:一是 ATM不会成功。ATM在1997年才成为热门,但他在1992年时就不看好ATM,可看出他卓越的判断;二是实时通信(如视频)将成为重要应用;三是网络恐怖袭击将是最大的风险,要充分重视虚拟空间的犯罪。
2006年,克拉克在IETF 20周年庆的特邀报告中,他又用了当年用的对于互联网未来预测的内容,几乎一字不改。尽管互联网技术日新月异,但他敢于在14年后,重新呈现当年的报告,这从另一个侧面反映了该报告的前瞻性。
不仅如此,在该报告的后半部分,克拉克表达了对OSI的看法,他认为OSI是过去式,未来是属于互联网的。他提出为应对互联网及其社区发展所带来的变化,需要有六个过程:
第一,开放的过程,让所有声音都被听到;
第二,封闭的过程,向前推进,取得进展;
第三,快速的过程,与时俱进;
第四,慢速的过程,留出时间认真思考;
第五,市场驱动的过程,未来是商业化的;
第六,可扩展的过程,未来是互联网的。
互联网的商业化始于1995年,而他在1992年就已提出。但我个人体会最深的是“慢速的过程,留出时间认真思考”,当前的发展节奏太快,有些事一定要想明白了再往前推,如果没想明白,方向反了反而得不偿失。
所以无论是对于互联网的研究还是应用,一定要从其设计原理、架构出发,正如克拉克所作的经典论述:“我们拒绝国王,拒绝总统,拒绝选举;我们相信的是大致共识和可运行的代码。”
在经历大范围的抗议之后,IAB不再坚持OSI。最后大家表态,OSI不再作为唯一选择。实际上,IPv6基于SIPP(Simple Internet Protocol Plus);官方认定的IPv7(和上述草案中的IPv7不同)基于CATNIP;IPv8基于Pip;IPv9基于TUBA,其中仅有TUBA是基于OSI的。由于最后SIPP胜出,现在全球推进规模部署的是IPv6。
此外,还有一个“IPv9”出现于RFC1606。RFC一般只表明年月,只有一种RFC会表明年月日,那就是4月1日发布的愚人节RFC,虽然愚人节RFC未必没有道理,但多数是以玩笑的形式提出的。引用时一定要分辨清楚,不能稀里糊涂地参考。
早期TCP协议的具体内容可以参考温顿·瑟夫等人于1974年编写的RFC675,此时的TCP和IP并没有分离,在其报头的结构中,现有IP功能分列在TCP前后。TCP最早的思路还是受虚电路(Virtual Circuit)的影响,但是后来发现其实很多应用并不需要。
因此,1978年,温顿·瑟夫、丹尼·科恩(Danny Cohen)和乔恩·普斯特尔(Jon Postel)等人提出将IP分离出来,并建立了著名的沙漏模型,乔恩·普斯特尔在这方面做了很多工作。
分离后的TCP/IP协议经过ARPANET和美国科学基金网(NSFNET)等网络的实践,最后温顿·瑟夫总结了互联网的基本原理:
不为任何特定的应用设计,仅仅做到移动数据报文;
可以运行在任何通信技术之上;
允许边缘的任何创新;
可扩展性强;
对于任何新协议、新技术、新应用开放。
现在回头来看,IPv4具有重要意义,但仔细斟酌或许它并不完美,至少有一点值得探讨。
当时普赞设计的网络具有两个基本思路:一是分层模型,二是每一层都要有自己的地址。因此,链路层有MAC地址,网络层也有网络地址,这都没问题。但是,传输层“端对端”的地址其实可以是另外一套体系结构,未必如现在的IP地址既是“定位符”也是“标识符”。
其实早期的诸多设计中至少有一个考虑将二者分离,但是不幸的(也可能是幸运的)是TCP/IP并没有这样做。所以现在很多人需要设置“定位符”和“标识符”的分离。如果当时的IP设计将二者分离了,也就没有后续的这些工作了。而之所以说可能是幸运的是因为,如果当时就设计分离,需要在安全性方面做大量工作,否则无法保证“标识符”的分配。
但不论如何,我们都要多思考,不能迷信权威,包括RFC等很多被认为是完美的东西其实未必完美。
首先要指出的是IETF并没有发明万维网 (World Wide Web, WWW),所以IETF没有掌控,也不可能掌控互联网的所有发明。
1980年,伯纳·李(Tim Berners-Lee)到CERN工作半年,需要对大量的内部资料(声图文)进行关联和查询,他编了一段 “内部问询(Enquire Within)” 程序。
1984年,Tim重新回到CERN研究实时系统,他逐渐发现CERN内部沟通机制存在信息漏失的弊端,并于1989年提出开发World Wide Web 的建议,但未获支持,只能业余进行研究。
最后他成功开发出了WWW,实际上包含了两个概念,一个是超文本概念(Hypertext),另一个是通用资源定位概念(Universal Resource Locator,简称URI)。
两个实现技术,一个是超文本传输协议HTTP,现在归属IETF管理;还有一个是超文本表识语言HTML,现在归万维网联盟(W3C)管理。所以他是经过10年的努力,才把这件事做成。
WWW的出现使得互联网变得更有意思,因为如果IPv6最终没有实现推广,互联网将成为NAT44的世界。而在这种架构中,由于NAT44的存在,用户实际上使用的是私有IPv4地址进行通信,通过TCP或UDP的端口复用后映射到公有IPv4地址。在这种情况下,IP协议已不再保证“端对端”的通信。由于NAT44必然支持互联网上最主要的应用WWW,所以如果没有IPv6,沙漏模型就会上移,HTTP成为细腰,只有通过这个协议才能通话。
但是现在有QUIC协议, QUIC是基于UDP的,UDP可以穿越NAT。一些人认为QUIC并不是over UDP的高层协议,而是一个与UDP兼容的新传输层协议。
此外,作为大师级人物,伯纳·李还是非常有想法的,比如他总结软件工程的原理是“简单性”和“模块化”,互联网的生命是“分布式”和“抗毁性”。他是一个非常开放的人,其相关名言是:“你可以让围墙里面变得非常动人,但从长远来看,外面的丛林永远是更有吸引力的那一个”。
我当选体系架构委员会(IAB)成员的两年中发生了一些事件,非常有意思。
第一件事,当时IAB针对开放互联网关键词(Open Internet Keywords)进行了广泛讨论,这个讨论给我的体会是:
标准一定是自愿采用的,由政府确定必须遵循的标准不是IETF的风格,一定是大家觉得好才去用;
创新一定是自下往上的,敢于挑战权威才是真正的创新;
不同的参与者完成不同层的任务,一定不要包打天下;
互操作性,IETF非常重视互操作性,你在IETF里提一个建议,第一个问题就是要说明该建议是否需要有“互操作性”。比如“NAT的同步”这一课题,据我理解,永远不可能被IETF接受,因为第一,IETF不喜欢NAT,第二,两个NAT之间的状态同步,其实与厂家的实现有非常大的关系,很难标准化。
此外,还有两条值得关注,即“只要能竞争的时候就要竞争,必须需要合作的时候才合作”。尽可能竞争的原则保证了标准的先进性。
第二件事,在我当IAB委员期间,发生了斯诺登事件。据斯诺登爆料,美国国安局不光监测其他国家,例如攻入了清华大学的网络,也在各种手机操作系统中安装了后门。舆论一下子爆炸了,工程师们议论纷纷,对这一行为表示不满。于是IETF第88届会上开了我印象中唯一一次在上午召开的技术大会,当时委员会讨论了五大问题:
第一,大规模的监测是不是网络攻击?大家异口同声说是。
第二,既然大规模的监测是网络攻击,IETF要不要采取措施?大家说要采取措施。
第三,IETF是否应尽可能地实施数据加密,大家也说要,但前三问表示肯定的声音逐渐减弱。
第四,IETF是否要进行“端对端”的加密,即便有中间设备(middleboxes)。回答有不同的声音,但肯定多于否定。
第五,当今互联网上使用了许多非安全的标准,IETF应该创建一个安全的替代方案。回答基本也都是同意。
当时,我在台上发言,对不加区别的“端对端”加密表示异议。因为原有防火墙是针对明文的,监测到不好的关键词就可以拒绝连接。但加密之后,不可能实时解密,所以可能全部被封掉。我认为,如果是信用卡号码之类的加密没有问题,但如果传输的是公开信息,最好不加密,否则有可能会造成互联网的分裂。然而会场的主要声音还是倾向于加密。
总结互联网的历史,ARPANET之所以能够最终胜出,可能主要有以下五个因素:叛逆精神、国家战略、充足经费、市场经济和精英团队。
这五大因素美国均具备,因而美国主导了互联网的诞生。
此外,美国对于创新的体制机制也值得我们学习。简单举例,欧洲并非没有创新,WWW和Linux都是欧洲诞生的,但是不幸的是它们最终都在美国落地,W3C在MIT,而Linux基金会在硅谷。因此,中国要真正创新,还得有相应的创新土壤,能够让这些创新生存,且茁壮成长。
根据美国科学基金会在2016年所作调查和预测显示,80年代,10个人共用一台计算机,2016年,平均一个人拥有10台计算机,2051年每个人预计将拥有1000台终端设备,也即需要1000个地址。而这无疑从管理、技术、可扩展性等各个角度而言,均为互联网的发展带来巨大的挑战,因此我们要有相应的判断,并为互联网的发展留有足够的空间。
今年7月,网信办等三个部门发布《关于加快推进互联网协议第六版(IPv6)规模部署和应用工作的通知》,提出了向IPv6单栈演进三部曲:2023年IPv6单栈升试点;2025年规模部署单栈,2030年中国完成向IP6单栈的演进过渡。换言之,还有9年时间,所有的运营商的设备,包括网管系统、运营系统、用户系统,全部都要转成IPv6单栈,时间非常紧迫。
在实现IPv6单栈之前包括现在,网络其实很复杂。但如果真实现了纯IPv6,网络其实可以很简单:从上至下依次包括路由转发、SRv6、翻译、封装和SSM框架。当然,整个平台一定要保证安全。
如果以10年为一个阶段,1970年代,最重要的技术是NCP;1980年代,最重要的技术是TCP/IP;1990年代,是DNS和BGP;2000年代,WWW出现,最重要的技术则是HTTP;2010年代,受斯诺登事件影响,加密的HTTPS广受关注。
到2020年代,这一量级的核心技术究竟会是什么?中国作者能不能成为新的10年互联网核心技术的主要贡献者?
RFC1925中总结的互联网12条军规,对于互联网研究人员很有启示:
11年前,IETF会议第一次在中国大陆举行。当时我提出几点自己的体会:解决真实问题;聚焦关键问题;全局考虑,不光仅仅考虑中国的问题,而是要解决全世界的共性问题;一定要多交流,交朋友,鼓励年轻人参与,要乐在其中!