密西根大学互联网历史-技术与安全笔记-全-
密西根大学互联网历史、技术与安全笔记(全)
001:课程介绍与欢迎 🌐
在本节课中,我们将一起了解《互联网历史、技术与安全》这门课程的整体框架与目标。课程由密歇根大学信息学院的临床副教授查尔斯·塞韦兰斯博士主讲,旨在探讨互联网和万维网的起源、内部工作原理及其安全背景。
你好。我是查尔斯·塞韦兰斯,现任密歇根大学信息学院临床副教授。
欢迎参加我的“互联网历史、技术与安全”课程。
本课程的目标是探讨互联网和万维网是如何形成的。
同时,我们也会了解其内部运作机制——这不是从编程或纯技术的角度出发,而是以观察和讨论的方式进行。
我们对互联网的历史有一个基本概念:万维网发明于1990年。但在本课程中,我们将深入更多细节。
我在1990年代中期非常幸运地主持了一档关于互联网的全国性电视节目。主持该节目让我和我的搭档有机会采访当时正在实际发明这些技术的人们。
目前,我还担任《IEEE计算机杂志》的记者,周游世界采访科技领域的领导者。
我们将借助这些采访来审视互联网,并聆听亲历者用他们自己的话语讲述事情是如何发生的。
哪些方面做对了,哪些方面出了问题?在这一过程中有哪些不为人知的故事?
这将有点像一次调查。我们需要听取这些创新者的讲述,进行批判性倾听,并构建自己对这一复杂过程的看法——正是这一过程造就了我们今天所见所用的互联网。
一旦我们更详细地理解了这些,或许我们就能更好地共同展望未来,并思考需要什么来发明连接人、信息与技术的新方式。
在更近的层面上,我希望能够激发你对所有技术事物的兴趣,鼓励你更多地学习编程、网络应用设计、网络、数据库或其他任何技术。
这样,你不仅能成为技术的消费者,也能自己成为新技术的构建者或创造者。
正如我希望你能从本课程中遇到的创新者身上学到的那样,在技术领域取得成功最重要的特质是:好奇心、精力和学习的意愿。
那么,现在就该开始学习了。再次自我介绍,我是查尔斯·塞韦兰斯,非常期待你加入我的“互联网历史、技术与安全”课程。
我们课堂见。
本节课中,我们一起学习了《互联网历史、技术与安全》课程的介绍,明确了课程将围绕互联网的起源、技术原理与安全展开,并通过历史亲历者的视角进行探索。课程鼓励学习者从消费者转变为技术的积极构建者,并强调了好奇心与持续学习的重要性。
002:菲律宾马尼拉 🇵🇭
在本节课中,我们将跟随查尔斯·塞弗伦斯教授,一同回顾他在菲律宾马尼拉举行的一次课程附加办公时间。我们将了解这次活动的背景、参与的学生,并感受全球在线课程社区的互动氛围。
上一节我们介绍了课程的基本框架,本节中我们来看看一次具体的线下交流活动。
查尔斯·塞弗伦斯教授在马尼拉的一家星巴克与学生们会面。以下是本次办公时间的基本信息:
- 主讲人:查尔斯·塞弗伦斯
- 地点:菲律宾马尼拉,罗宾逊广场星巴克
- 时间:2012年11月26日
在简单的开场后,教授邀请在场的学生们进行自我介绍。以下是参与本次办公时间的学生名单:
- Sherry:来自菲律宾大学迪利曼分校。
- Jeff:欢迎来到菲律宾马尼拉。
- G:来自苏尔,表示感谢。
- Iris:来自菲律宾大学。
- Mervin:来自菲律宾开放大学。
- Mauudy:同时也代表她的丈夫 Sabio。
- Chosen:简单问候。
这次马尼拉的办公时间顺利结束。教授预告,下一次的线下聚会地点将是法国巴黎,时间定于一月底。
本节课中我们一起学习了《互联网历史、技术与安全》课程一次在菲律宾马尼拉举行的附加办公时间。我们了解了活动的基本情况,并认识了部分参与的学生。这展示了在线课程如何通过线下互动,构建起一个连接全球学习者的社区。
003:俄勒冈州波特兰市
概述
在本节课程中,我们将跟随查克博士,回顾在俄勒冈州波特兰市举行的一次线下办公时间活动。你将看到来自世界各地的课程学员分享他们的学习经历和感受。
大家好,我们正在俄勒冈州的波特兰市,进行又一次的线下办公时间活动。
我们原本计划有两位……等等,我刚才说了什么?哦,至少我确定自己所在的州是对的。俄勒冈州,波特兰市,俄勒冈州。好的,波特兰,俄勒冈州。
我们身处一条非常繁忙的街道,并在这里成功举办了一次办公时间活动。和往常一样,我希望向课程的其他学员介绍在场的各位。那么,请大家开始吧,只需说出你的名字以及任何想对课程其他同学说的话。
以下是参与者的自我介绍:
- “大家好,我叫阿尔文。我报名过好几门在线课程,而这门Python课程是我第一个完整学完所有四个部分的课程。这要感谢优秀的讲师。”
- “大家好,我叫斯科特。我报名了‘Python入门’课程。”
- “大家好,我叫阿里雷扎。在过去的四个月里,我见到查克博士的次数比见到我孩子的次数还多。我刚刚学完了Python课程,现在正在学习数据结构和数据库访问课程。讲得非常棒,谢谢。”
- “大家好,我叫保罗。我有一个17岁的儿子,他也叫保罗。我们正在一起通过Coursera学习编程,这是一个父子合作项目。他是一名高中生,学得非常出色。对我来说这是爱好,对他而言则是获取未来可用的技能。我的梦想是最终让这类课程进入每一所高中。虽然这很难实现,但至少在我们家已经开始了。”
- “嘿,我是麦迪,来自匹泽学院的有机生物专业学生,但我对学习Python感到非常兴奋。”
- “大家好,我是玛格丽特,实际上我是从田纳西州来这里度假的。Python课程是我一直想学的编程入门课。”
- “大家好,我是黛安。我正在学习这个系列课程的第四门,并计划在今年夏天完成毕业项目。这过程充满乐趣。” (查克博士补充道:“毕业项目是所有课里最简单的,别告诉别人哦。”)
- “大家好,我是亚历杭德罗。多年前我住在古巴哈瓦那时,就学习了精彩的互联网历史课程。感谢查克博士提供了如此出色的课程。”
- “大家好,我是安德鲁。我和同事内森一起加入了Coursera,他今天因为工作没能到场。但他算是在‘虚拟合影轰炸’吧?你可以把他的照片放在我旁边……不过我已经离开那份工作了。感谢查克博士付出的所有卓越工作。”
- “大家好,我是赫布。我在很久以前学习了‘互联网历史、技术与安全’这门课,后来成为了课程的社区助教,现在是一名导师。我参与这门课程已经很长时间了,非常享受帮助学生的过程。”
关于课程导师的重要性
上一节我们听到了学员们的分享,现在我们来谈谈课程运行中一个至关重要的角色。
赫布是课程中不到十位的导师之一。他孜孜不倦地帮助所有学生,并且完全是义务劳动。因此,我喜欢做的一件事就是去导师们所在的城市,请他们吃顿饭。这是对他们多年辛勤工作的一点微小补偿。
如果没有像赫布这样的导师,这些课程将无法保持活力。最好的讲座视频、最棒的作业和测验,如果缺乏人的参与,都将毫无作用。因为学习是人与人之间的事情,而不仅仅是信息的传递。正是像赫布这样的人,让这些课程保持生命力,即使在我和所有讲座都成为过去之后。
所以,让我们为出色的赫布鼓掌。
更多参与者
好的,我们还有一些随机加入的朋友……当然,不只是化学家。
“我是莫琳,一名化学家。我学习这门课程主要是为了能够以自动化的方式提取数据并每周生成图表,而不是在Excel中手动操作。”
活动预告与总结
好的,我们这次的活动就到这里。
下一次办公时间将在不到24小时后于西雅图举行。在那之后,大家还可以参加再之后在英国布莱切利园举行的办公时间。如果你正计划去英国度假,欢迎前来参加。

本节课中,我们一起回顾了波特兰线下办公时间的场景,聆听了学员们多样的学习背景和目标,也了解了课程导师对学习社区不可或缺的支持作用。这些真实的交流体现了在线教育中人与人连接的价值。
004:计算机与通信领域的高风险研究 🚀
在本节课中,我们将要学习互联网历史的开端,重点关注电子计算与通信技术如何在高风险、高投入的二战研究环境中共同诞生。
课程概述
大家好,欢迎来到《互联网历史、技术与安全》的第一堂正式讲座。我是查尔斯·塞弗朗斯。本课程将从互联网的历史讲起。需要说明的是,并非所有资料都由我本人创作,部分内容版权归属于IEEE计算机协会,特别是我为《IEEE计算机杂志》制作视频访谈所附带的文章。我的电视节目联合主持人理查德·威金斯也慷慨地允许使用他的一些视频资料。此外,密歇根大学开放课程团队的戴夫·马拉基帮助完成了我的幻灯片等内容版权清理工作,这是个好消息。
我们将用几周时间梳理历史,并将其划分为几个阶段。我们将从电子计算的黎明开始。计算本身开始得更早,例如算盘和人类计算,但我们将聚焦于电子计算诞生的那一刻。这尤其重要,因为正是在这个时刻,计算与通信技术几乎同时诞生。然后,我们将探讨互联网成为常态之前的通信技术、早期的互联网研究,以及学术界的互联网本身。当然,互联网随后走向了现实世界,接着万维网出现,它真正利用了所有这些连接,并让每个人都能轻松使用。我们今天很大程度上正是通过万维网来看待这个网络的。从那以后,我们将审视它的商业化、普及化以及广泛使用。
布莱切利园:战时创新的熔炉
我想给大家看的第一段视频,是关于布莱切利园的,它比大多数其他视频稍长一些。布莱切利园有许多英雄。这当然是英国政府在第二次世界大战期间进行的一项绝密密码破译行动。
回顾历史,或许没有哪个时期像二战那样。如果你对比1910年代、1920年代我们使用的技术与1940年代的技术,会发现惊人的差异。喷气式飞机、无线电、雷达等许多事物都是在那段时期发明、变得可用并达到生产质量的。战争当然是可怕的,但它迫使政府为生存而恐惧,并在研究上投入巨资。因此,在某种意义上,尽管战争是可怕的,我们却从这些广泛的研究中受益。他们试图解决战时问题,但最终解决的难题却以美妙的方式改变了我们的和平世界。
布莱切利园位于伦敦北部,牛津和剑桥之间。它是一个密码破译中心,巅峰时期有超过一万人致力于破译加密信息的绝密工作,最初是针对德国人使用无线电发送的信息。二战之所以被称为世界大战,主要是因为它在地理上触及的范围比此前或此后的任何战争都更广,例如美国的阿拉斯加、意大利、非洲、俄罗斯、日本、菲律宾。它确实是地理上高度分散的,为了有效进行战争,需要进行前所未有的通信,这意味着通信必须是无线的。
无线通信的问题在于,任何人都可以架设天线并监听无线信号。你无法像隐藏电线那样隐藏无线信号。如果没人能接触到电线,他们就看不到里面的内容。但如果你在快速机动的军队和远距离通信中使用无线,那么别人就可以拦截无线信号。因此,关键技巧当然是创建加密的无线信号,这样他们能看到你发送的一切,但对他们来说毫无意义,听起来全是乱码,除非他们知道密码。
所以,构建密码和密码机成为一项关键技术。一个很好的例子是德国制造的恩尼格玛密码机。我们将在课程最后关于安全的部分讨论这些密码和密码机的工作原理,它们通常以难以理解的方式扰乱信息。当然,布莱切利园的真正聪明人,如艾伦·图灵(那里众多聪明人之一),运用数学指出,这些密码可能比我们想象的更容易破解。也有一些来自波兰的人向他们提供信息,展示了波兰卷入战争前在破解数学方法上的大量工作。于是,他们建造了这些机器。
在接下来要展示的视频中,我试图对比两种机器。一种是由继电器、开关、旋转部件和来回移动的齿轮构成的、速度极快的机械计算机。它是一种非常物理化的计算机,用于寻找模式。当它旋转时,会检查各种可能的编码组合,试图对大量不同的可能性进行暴力检查。因此,它是一种机械计算机。“炸弹”破译机就是一种强大的机械计算机。后来,随着德国加密技术的改进,他们使用了更复杂的加密技术,机械计算机再也无法及时解密了。因此,他们被迫建造更快的设备,那就是世界上第一台真正强大的通用电子计算机。当然,它的存在一直被保密,至少到60、70年代,甚至许多细节到90年代仍属机密。所以它在历史中的地位是近期才被理解的。你可以查看早期的历史教科书,谈论第一台计算机时,它们没有提到这一台,就是因为它被保密了很长时间。所以,“炸弹”是强大的机械计算机,而“巨人”计算机是强大的电子计算机。
跨学科协作的力量
但是,除了展示机械计算机无论多努力也无法足够快,而电子计算机在巨大需求下被强力创造出来的那一刻之外,真正有趣的还有一点:布莱切利园在那段时期拥有的一万人中,包含了各种各样的人才,例如语言专家、数学家、工程师、焊工。这是一项真正紧密的跨学科活动。他们当时要解决的是破译德国传输信息的问题,但最终在追求这个目标的过程中,解决了电子通信和计算的问题。
因此,下面这幅由一位艺术家为我绘制的图画,真正试图展示的是:艾伦·图灵确实非常关键,但还有其他许多人,如戈登·韦尔什曼、多克·基恩以及提供信息的波兰同仁们,他们都是大学同事。这整个事业是一个非常紧密相连的、由高度积极、资金充足的天才们组成的集体,他们共同创造了这一切。
现在,让我暂停一下,请大家观看这段影片。
005:艾伦·图灵与布莱切利园
在本节课中,我们将探索现代计算机科学的重要发源地之一——布莱切利园。我们将了解二战期间,以艾伦·图灵为代表的一群杰出人物如何在此破解德军密码,并在此过程中催生了早期计算机技术。本节内容将涵盖恩尼格玛密码机、炸弹破译机以及巨人计算机的诞生。
🏛️ 布莱切利园的建立
布莱切利园位于伦敦北部,剑桥与牛津之间。许多人视其为现代计算机科学的诞生地。
1938年,战争前夕,政府密码学校及其行动主管阿拉斯泰尔·丹尼斯顿拟定了一份名单。他们派人前往牛津,主要是剑桥大学,物色人才。这份名单上的人同意在战争爆发时立即向布莱切利园报到。
1939年9月3日英国对德宣战。次日,即9月4日,图灵和其他一些人按要求抵达了布莱切利园。随着对人员的需求增加,一位名叫戈登·韦尔什曼的绅士回到了剑桥。他本就在最初的名单上,与图灵同一天抵达。他开始招募自己最优秀的学生。
实际上,他们在这里创建了世界上第一个“臭鼬工厂”——一个没有规则约束的秘密组织。他们的主要支持者最终变成了首相温斯顿·丘吉尔。他们说服丘吉尔,这个地方需要更多资源。丘吉尔同意了,并写下了一封著名的信。这封信由韦尔什曼、图灵和两位副手起草,并由一位名叫斯图尔特·米尔纳-巴里的绅士亲自递送到唐宁街。
令人惊讶的是,丘吉尔在信件送达当天就阅读了它。他在上面盖了著名的“即日行动”印章,并手写了一张便条给他的参谋长伊斯梅将军,上面写着:“以最高优先级处理,完成后向我报告。” 从那一刻起,即1941年9月,布莱切利园获得了所需的所有资源。
他们实际上将英国最聪明的人聚集在一起,并告诉他们:“这是预算,这是最终目标。” 这就是他们发明了一些可能多年后才会出现的技术的原因。
在许多方面,布莱切利园是早期多学科科学中心的版本,类似于今天的CERN或NCSA。许多拥有不同技能和背景的杰出人物被聚集在一起,以解决难题。技能的结合与协作环境不仅解决了他们面临的密码学问题,还为整个计算领域和全社会解决了更广泛的问题。
🔐 恩尼格玛密码机与早期破译
当人们抵达这里时,他们知道德国人使用了一种机器,我们倾向于称之为恩尼格玛的加密机。这是加密机的一个特殊变体。该机器从商业版本修改而来,允许他们加密信息。这将成为一个用于作战通信的机器,信息非常短,最多250个字符。
希特勒构想出了一种前所未有的战争类型,由将军们执行,后来被称为“闪电战”,即每天50英里的快速移动。特别是在他们入侵法国和入侵波兰的后期阶段,无法使用有线通信,需要使用无线通信。
这里有一种便携设备,重25磅,由电池供电,可以加密信息。然后通过一个单独的流程,使用当时相当新的无线电台技术发送出去。
波兰人最先认识到恩尼格玛密码机的出现,并且擅长处理它的人是数学家。事实上,他们甚至在波兹南大学开设了密码学课程,邀请了20到30名讲德语的年轻数学家参加。这是一个非常困难的课程,课程结束时,实际上只有三名毕业生被招募。他们的名字是马里安·雷耶夫斯基、亨里克·齐加尔斯基和耶日·鲁日茨基。这三个人是团队的核心,正是他们取得了早期的突破。
他们在秘密总部召开了一次会议,那是在1939年7月。在那次会议上,他们向英国人透露了一切,展示了他们的成果。他们给了英国人一台复制的恩尼格玛机器以及他们所有的研究成果。这些信息被带回了布莱切利园。一旦他们在布莱切利园站稳脚跟,他们就使用波兰人的方法来破解恩尼格玛机。
波兰人实际上自己制造了一些机器,其中一台叫做“炸弹”。那台机器的名字显然来源于一种同名的波兰冰淇淋甜点。所以,实际上是为了纪念波兰人所做的事,这台机器被命名为“炸弹”。
但波兰人的技术是基于当时德国人加密信息的特定方式。那时,他们会重复信息头,这就是波兰人开发的攻击方法。他们正确地相信,当战争开始时,德国人会改变他们的做法。于是他们寻求帮助。他们告诉了图灵和这里的人们他们所做的一切,我们对此应该非常感激。但他们也证明了破解是可能的。我认为,这激励了英国人真正开始着手解决这个问题。
💣 炸弹破译机的原理
现在,图灵理解了波兰人方法的弱点。他开发了一种基于“猜词”的机制,其依据是:世界上每个军事组织都无法停止发送格式固定的信息。
然后,他与由多克·基恩领导的一支杰出工程师团队进行了交谈。工程师们大致告诉他,检查可能的设置所需的速度。他们共同设计了一台名为“炸弹”的机器,它能够寻找正确的设置,并在合理的时间内完成。
这里有一个例子:我们截获了这条信息“SN M K G”。我们相当确定它的意思是“天气”,因为这个特定的操作员总是这样做。这是他的早晨天气预报。
因此,我们有了猜测的德语明文“Wetter”(天气)。当猜测和密文对齐时,恩尼格玛机编码字母的特性(或不特性)就很有用,因为你可以确保这里没有“固定点”(即明文字母加密后不变)。
从这些猜测的字母中,猜词者会推导出像这样的图,称为“菜单”。你会注意到,在某个位置,比如这里的Z到E,G被编码为E,所以我们有G指向E。在另一个位置,E指向V。当然,这是可逆的,我们可以从另一个方向描述,所以这里是E指向V,这里是G指向V。S指向A,所以S指向V。抱歉,是S指向V。所以这里有另一个链接。最终,我们可以绕一圈,并闭合这个循环。
他们寻找的正是这些闭合的循环。“炸弹”机的操作很简单:如果你在这一点输入一个字母,它经过一连串(比如1、2、3、4、5、6个)恩尼格玛模拟器后,返回的是同一个字母,那么这些转轮的位置就有可能匹配冈瑟(操作员)在他的恩尼格玛机上开始编码信息时的转轮位置。
结果证明,它对循环和菜单的要求比他们希望的更挑剔一些,尽管它确实有效。在那个时候,韦尔什曼增加了一个完全出人意料的巧妙设计,叫做“对角线板”。我认为可以公平地说,这决定了图灵最初想法的成败。
(操作员演示机器)你看到的是中间进位,然后我们打开了“全进位”,让慢进位一直工作。这些杆只是在推动所有的鼓转动,你可以看到所有36个恩尼格玛模拟器都在同步转动,它们是一种资源。这些是非常快速的延迟,三个组(实际上是四个)用于检测的链条。这里是控制逻辑。然后这些是26位寄存器,用于记录一个停止信号,然后让机器减速以便读取结果。
我们最喜欢的一个统计数据是机器里电线的总长度,我们已经数不清了,但大约在10到12英里之间。
📡 洛伦兹密码与巨人计算机
德国人当时使用两个主要系统,恩尼格玛是他们的作战系统,用于特定的作战通信,同样非常短,最多250个字符,例如指令、命令一个装甲师从一个地点移动到另一个地点、命令一艘潜艇攻击船队、命令不列颠之战中的飞机攻击特定目标。
德国人可能从1941年开始引入一个不同的系统。英国建立的截听服务开始听到明显不是恩尼格玛的通信。恩尼格玛通信使用莫尔斯电码,很容易识别,人们可以经过相当简单的训练来听抄莫尔斯电码。但这是一种完全不同的信号,它无法辨别,无法听抄。这是希特勒与他的陆军将军之间的通信渠道,是非常高级别的绝密通信。
因此,这可以说是一项比恩尼格玛更艰巨的任务,因为用于这个系统的加密机器(有几种,希特勒称它们为他的“秘密书写器”)更加复杂。今天仍然存在的几家公司,如西门子,当时在制造这种机器(如哈格林机),但主要是洛伦兹公司,特别是洛伦兹SZ 40/42型机器。那台机器与恩尼格玛不同,恩尼格玛有3个加密转轮,而它有12个加密转轮。
他们找到了位于伦敦多尔利斯山的邮局研究实验室。一位名叫汤米·弗劳尔的年轻工程师被引入这个项目。他实际上被告知:“如果你能获得批准,就去做吧。”弗劳尔斯回到邮局获得了批准,组建了一个小核心团队,在不到一年的时间里就做出了一个可工作的原型,这是一项相当了不起的成就。
第一台被称为“巨人”的机器——马克1型,有1500个电子管(真空管)。他们把它带到布莱切利园,几乎立刻就能工作。这里的人们被说服了,他们要求一台更强大的计算机。弗劳尔斯已经预见到了这一点,他已经在生产拥有2500个电子管的型号。在那个时代,没有机器使用超过大约15个电子管,而他制造的机器有两千五百个。
弗劳尔斯被告知,他们需要在1944年6月1日前得到马克2型,因为有一个特定的日期……1944年6月5日是“霸王行动”(D日)的预定日期。实际上最终因为恶劣天气改在了6月6日。弗劳尔斯在6月1日将第一台马克2型送到了布莱切利园,他们打开开关,它立刻开始工作。他们立即开始破译德国最高统帅部之间的信息。
令他们非常高兴的是,他们发现所有关于D日登陆的欺骗手段都奏效了。希特勒相信主攻地点将是加来,而不是诺曼底。这些情报被送回盟军最高司令部艾森豪威尔将军那里。有合理的证据得出结论,如果没有来自布莱切利园的情报,1944年6月6日的D日行动很可能不会进行。
💻 巨人计算机的运作原理
我们现在在布莱切利园的H厅,这是最早专门建造的计算机中心之一。从1944年1月开始,大约有10台这样的机器安装在这里。
此前几年,一种新的加密信息方式被发现正在德国使用,那是希特勒和他的将军们之间的高级别信息,它们使用一台被称为“洛伦兹”的机器加密,并采用电传打字机代码来实际传输这些信息。
到了1943年,手工破译这些信息需要大约六周时间。问题在于,六周后,你从这些信息中获得的情报的用处显然已经消失了。因此,这个过程需要加速。在布莱切利园尝试了许多电子技术,但这台机器在1944年初投入使用后,将破译信息所需的六周时间缩短到了六小时,这真是一个巨大的飞跃。
信息本身在全国各地的截听站接收,并被穿孔到纸带上。现在机器上有两条纸带,一条正在运行,另一条为下一次运行准备。每条纸带横向每行有五个孔,每行代表一个字母数字字符,这就是接收并穿孔到带子上的加密信息。
虽然巨人计算机拥有现代电子计算机的所有要素,但它没有我们所期望的存储程序计算机的内存。因此,那条约5000个字符的信息纸带实际上被做成一个环。在这里读取,有一系列光电传感器和灯。每个字符被读取,机器以每秒5000个字符的速度读取。每次我们听到机器“咔哒”一声,就有另外5000个字符被读入机器。所以我们每次都在读取相同的5000个字符。
这是巨人计算机的控制面板。机器的这一侧实际上是操作员在战时使用的地方。我可以使用这些控制面板来设置我想要测试的算法和例程。机器每“咔哒”一声,就是另一个状态,我们实际上是在尝试一种新算法,并在那重复的5000个字符上重复该算法。机器检测到的结果显示在这里。现在,我们正在对那个加密纸带进行统计分析。
机器运行了大约六小时。这台机器里有2500个电子管。从前面看不到那么多,但一旦我们走到机器机架之间,你就能感受到它的规模。2500个电子管,每个电子管都有一个加热器,管子中心有一根热丝,工作电压约为2300伏直流电。2500个电子管加上电源,产生或消耗超过8千瓦的电力。当我们站在机架之间时,你能感觉到这些机架散发出的热量。
巨人计算机是电子技术和机电技术的结合。我们可以在这些电子管机架(机箱号)中看到电子技术,也有机电开关设备,所以这里有继电器板。这些大的单动检测器是一种电动开关,实际上会旋转。机器里有很多这样的设备。这些技术是英国邮局所熟知的设备。
这台机器是由汤米·弗劳尔斯设计的。汤米·弗劳尔斯是伦敦英国邮局研究中心的一名工程师。汤米被要求研究如何自动化这项手动任务。汤米提出了使用电子技术来做这件事的想法。在当时,在任何电路中使用超过半打电子管的想法都被嗤之以鼻。电子管名声不好,人们家里的收音机就有电子管,打开收音机时它们会坏掉。所以使用两千五百个电子管的想法简直是不可思议的。但汤米明白,很可能(几乎可以肯定)是热冲击首先杀死了电子管。所以如果你让机器一直开着,不承受那种冲击,就不会有问题。布莱切利园这里所有的巨人计算机都是永久开着的,机器由操作员分三班全天运行。
我们必须同样小心。显然,这是机器本身的复制品。但同样的问题存在,我们需要小心地逐渐提高电压供应,以免遭受热冲击,关机时也同样如此。
汤米的想法是电子化生成密钥,因为我们要将密钥与加密纸带进行比较。这些被称为“闸流管环”的计数器,闸流管实际上保存着……我们不能……现在我们说巨人计算机没有内存。我们说没有内存,是指现代计算机那种数据和程序共用的内存。这里的程序是在前面的控制面板上设置的,那是通过开关和插头编程的,很像同时代的ENIAC机器。但这些机器,后面的这些电子管,确实起到了存储的作用,作为计数器,它们实际上在计算我们每次运行算法得到的分数。
我们可以在后面这里看到……当然,一些现代技术,我怀疑战时建造和调试这些机器的人会不惜一切代价想要一台可靠的示波器,更不用说逻辑分析仪了。但如果我看向机器这里的铭牌,你可以看到从纸带上投射出的图像。那束光照在五个光敏电子管上。正是这些电子管每秒读取5000个字符。纸带一直使用到20世纪60年代和70年代,而这种速度简直是惊人的,以前从未真正被想到过。
🛠️ 巨人计算机的重建
我们原来的博物馆馆长托尼·塞尔想要重建巨人计算机,建造一台巨人机的复制品,这大约是20年前的事了。当时外界信息非常少,只有几张可能合法保存下来的照片、一些零碎的电路图,以及一些最初参与机器工作的先驱者的记忆。
当托尼开始计划时,汤米·弗劳尔斯还健在,记得他能够画出电路图。找到零件也很重要,但关键是这台机器是由当时的一位邮局工程师设计的。这位工程师习惯于设计电话交换系统。所以这里的很多组件,从继电器组到开关,再到电源,在战前时期都是英国邮局常见的。
因此,当托尼想要找到零件来重建复制品时,他很幸运,因为最后一批这样的交换机正从全国各地的邮局退役。托尼因此真的可以开一辆皮卡车到交换站后面,拿走所有那些组件,拆卸它们,它们绝对完美。时机真的再好不过了。
👨💻 战后影响与人物去向
艾伦·图灵实际上在大约三年半后离开了布莱切利园,他的参与基本结束了。他去了美国。图灵实际上并未参与巨人计算机的开发。他的一些统计工作被主要人物(如比尔·图特,他是那位相当了不起地重建了洛伦兹机器的人)所使用。图灵参与了语音扰频系统等项目,在美国参与了其他项目。所以他在战争末期并未真正参与巨人计算机的工作。
战后,图灵去了国家物理实验室工作,继续追求这类想法。当然,他最终去了曼彻斯特大学,而马克斯·纽曼(曾在布莱切利园负责巨人计算机所在部门)也最终成为数学系主任。显然,那时图灵参与了英国非常早期的计算机开发。
戈登·韦尔什曼在战争结束后,于1948年移民到美国,并参与了许多美国早期的计算机开发项目,如“旋风计划”。韦尔什曼在麻省理工学院工作,在麻省理工学院教授了第一门计算机科学课程。所以韦尔什曼参与了像曼彻斯特“小宝贝”机、费兰蒂马克I型等早期计算机的开发。
当然,众所周知,图灵于1954年不幸自杀身亡。
📝 总结
本节课中,我们一起学习了二战期间布莱切利园作为密码破译中心和早期计算机技术摇篮的关键作用。我们了解了恩尼格玛密码机的原理及其被波兰人和以艾伦·图灵为首的英国团队破译的过程,重点介绍了“炸弹”破译机基于“猜词”和闭合循环菜单的破译机制。随后,我们探讨了更复杂的洛伦兹密码系统,以及为破解它而诞生的、具有划时代意义的巨人电子计算机。这台由汤米·弗劳尔斯设计的机器,拥有大量电子管,能够高速处理数据,极大地缩短了破译时间,为盟军提供了至关重要的情报。最后,我们回顾了图灵、韦尔什曼等关键人物战后的去向,以及巨人计算机重建的历史。布莱切利园的故事,是多学科协作、技术创新在极端压力下催生革命性突破的典范,深刻影响了现代计算机科学的发展轨迹。
006:布莱切利园同学会 🏛️

在本节课中,我们将跟随查克博士,探访计算机科学与互联网历史的重要起源地——布莱切利园。我们将通过一次特别的“线下答疑课”,认识来自世界各地的课程学员,听听他们学习本系列课程的经历与收获。
大家好,我们现在位于布莱切利园。计算机科学、互联网历史、技术以及整个计算领域都起源于此。我们在这里举办了一次破纪录的特别线下答疑课,我想让大家认识一下你的同学们。
以下是参与本次活动的学员介绍:
史蒂夫:我是Python课程的导师之一。欢迎你,史蒂夫。多年来与你共事是我的荣幸。史蒂夫和其他导师们承担了所有艰巨的工作,而我收获了赞誉。非常感谢你,史蒂夫。
博诺瓦:我来自法国,现居伦敦。很高兴来到这里。查克博士,很高兴见到你。我上过互联网历史课程,非常喜欢,并且很期待接下来的树莓派相关课程。
克雷格:我正在学习Python网络数据课程,我们网上见。
史蒂夫(另一位):我完成了第一个Python课程,并且计划很快开始学习其他课程。这门课程对我入门这门语言非常有帮助,真的非常感谢。
珍妮:我是一名软件开发者。我在泰国清迈的一所国际学校使用《Python for Everybody》课程来教授编程课。很高兴来到英国的布莱切利园。你知道吗,这本书有中文译本。这在泰国好用吗?可能没那么好用。好吧,看来我没那么酷。
阿尔诺:我来自法国,在大学担任Arduino讲师。因为学习了Python课程,我忘记了Arduino的语法,这在我的工作中有点尴尬。我现在主要用Python,而不是Processing。不过,我仍然在使用Arduino。我的工作是在大学里进行调试。Python无处不在,然后我就把Arduino的语法忘了。
凯文:我只从伦敦过来。能听到课程是如何构建的以及你是如何制作课程的,真的很好,谢谢你。
苏(来自中国):嗨,我们来自中国,是你的学生。我们目前在英国工作。很高兴在布莱切利园见到你,Python课程很棒。
扬尼斯:我使用Python很长时间了,但这是我第一次专门上课来系统地学习这门语言。谢谢你。
米:我用你的课程来刷新我的计算机科学知识。是的,我正在跟你学习Python。我来布莱切利园至少五次了,像你一样,我也是这里的粉丝。我多希望二战期间能在这里工作,那一定非常激动人心。你知道吗,这里四分之三的工作人员是女性。是的,非常令人印象深刻。她们可能没有最有趣的工作,但我们……确实如此。
帕特里克:我上过互联网历史课程。今天对我来说是非常激动的一天,因为当我上那门课时,我说我想来布莱切利园,今天我来了。我还说过我想参加一次查克博士的线下答疑课。所以今天我一下子实现了两个愿望,这太棒了。我的一个想法是,这就像是我们的同学会。
大卫:我上过你的Python课程和互联网历史课程,非常喜欢。欢迎你,很高兴你在这里。
保罗:我上过Python课程,它们非常棒,谢谢你。
休:我来自剑桥,上过你的Python课程,目前正在学习网络课程。非常兴奋能在这里和你在一起。我学习也是为了教孩子,因为我儿子考试要考Python,希望我能帮到他。你就住在树莓派总部附近吧?他们也在那里做很多Python相关的事情。是的,我想把所有这些联系起来,想一个巧妙的计划。
罗杰:我上过Python入门课程,刚刚开始学习网络课程,非常期待能顺利完成。
达留什:我来自波兰,现居英国。我刚刚开始我的Python学习之旅。我应该非常感谢你所做的一切,真的非常棒。那么,问题来了:你知道布莱切利园的历史和那三位波兰密码学家吗?哦,非常厉害。但这里的每位历史学家都很好地阐明了这一点。这引出了我的下一个问题:你还会在其他地方举办线下答疑课吗?我会去很多地方,也许我们会找到办法的。还有一件事,向我的妻子和两个女儿问好。
玛蒂:我住在伦敦北部。我上第一个Python课程是为了能跟上我小儿子的学习进度,他在学校正在学这个。很高兴见到你。
安德鲁:我是一名退休人员,学习Python课程是出于兴趣。我希望能把它和我正在用树莓派做的小项目结合起来。我认为Python课程是一门引人入胜的课程。你作为退休人员来说非常年轻。我70多岁了。
马达姆:我和家人一起来的。我开始学习Python了。我原本学生物学,后来从事相关工作。我希望将来能教我女儿编程。是的,在某个时候,这会变得很平常。是的,就是下一代密码破译者。没错,带他们来这个一切开始的原点很重要。在未来,一切会变得更好。我们开辟了这片天地,它会一直保持被开辟的状态。
爱丽丝:我住在布里斯托尔。我几个月前完成了Python课程,我打算学习你的新课,课程3。我试过Coursera上的一些课程,我可能不会把那部分剪掉。很高兴在现实中见到你。我是一名分析师,希望能将学到的Python知识应用到工作中。我会跟着你学到顶点课程。希望到我们开始顶点课程时,我能搞明白它。
大卫(另一位):我来自利物浦,是一名学习技术专家。我对学习Python很感兴趣,想提升我的编程技能。
辛西娅:我正在上你的Python课程,这门课非常优秀,我强烈推荐给任何想学习编程的人。我现在正处于职业间歇期,在抚养孩子。这门课程对保持理智非常有帮助。这实际上是一个非常重要的应用场景。但你的职业是和核反应堆或隐形飞机有关吗?有点关系,质谱分析。哦,质谱分析,我知道这很复杂。没有计算,质谱分析就毫无用处。质谱分析是一个大海捞针的问题,如果没有编程,我们根本无法理解那些数据。我以前从来不知道怎么做,我希望当我重返职场时,我能真正知道自己在做什么。这是度过职业间歇期的一个好方法。
奥芬:我来自伦敦,已经完成了互联网历史与技术课程,我期待学习Python课程。
以上就是我们的同学会。也许这是我们在布莱切利园举办的多次同学会中的第一次。那么,网上见。

本节课中,我们一起在计算机历史的圣地布莱切利园,进行了一次特别的“同学会”。我们认识了来自全球各地、拥有不同背景的课程学员,听到了他们如何利用本系列课程开启编程之旅、提升技能、辅助教学甚至规划职业转型的故事。这次相聚不仅是一次地理上的重逢,更是对学习社区和知识共享精神的生动体现。
007:战后计算机与通信发展


概述
在本节课中,我们将要学习第二次世界大战结束后,计算机技术如何从战时专用的密码破译机器,演变为用于学术与和平目的的通用电子计算机。我们还将看到,随着计算机的普及,人们如何开始通过电话网络连接这些宝贵的计算资源,为后来的网络化计算奠定基础。
从战时密码破译到和平时期计算
上一节我们介绍了机械计算机向电子计算机的转变。战后,布莱切利园等密码破译机构被关闭,但参与其中的工程师和科学家们带着他们的知识与经验,进入了麻省理工学院、曼彻斯特大学、哈佛大学等学术机构。他们战时的工作是保密的,但他们无法忘记一个核心认识:电子技术能够以远超想象的速度进行计算。
战争结束后,压力减小,这些先驱者开始思考如何建造用于天气预报等和平用途的计算机,而不仅仅是战时计算。于是,一系列计算机在战后迅速涌现。它们常被认为是世界上的第一批计算机,但实际上是布莱切利园那些计算机的后续发展。
20世纪40年代的战后初期,美国和英国的密码破译技术推动了计算能力的边界。那些为战争目的建造设备的人们,转而投身于学术与和平用途。他们知道电子计算的可行性,可以更从容地设计出真正优雅的计算机。虽然关于“谁是第一”存在争论,但这些计算机都很快相继问世,因为用电子信号表示和快速处理数据的核心思想已经传播开来。这是一个伟大的时代:电子计算从专用走向通用,许多至今仍在使用的创新性计算机架构正是在那时被构想出来的。
学术研究与政府支持
同样在战后,特别是20世纪50年代,美国政府意识到学术界的重要性。赢得战争的不仅是计算机专家,还有设计飞机、雷达等的科学家。因此形成了一种共识:最安全的国家是拥有最聪明人才的国家。这推动了美国整个教育体系的建设,旨在发现并高效培养杰出的科学家。
以下是当时的一些关键发展:
- 科学系科建设迎来真正的繁荣。
- 美国国家科学基金会(NSF)在战后成立。
- 美国政府及其他政府大幅增加了对科研的投资。
当时,数学家在许多方面被当作名人对待。电影《美丽心灵》(A Beautiful Mind)中的一个场景很好地体现了这一点。影片讲述了数学家约翰·纳什的真实故事:他22岁在普林斯顿大学获得数学博士学位,1951年至1958年在麻省理工学院任教,在30岁前患上了严重的成人型精神分裂症。然而,他在普林斯顿期间对“博弈论”的研究极具创新性,革新了人们对经济学的理解。20世纪90年代中期,他的病情得到控制,并于1994年获得了诺贝尔经济学奖。这正体现了20世纪40年代和50年代所有这些学术成果的蓬勃发展。
计算模式的转变:从独立到连接
进入20世纪60年代,我们开始看到一种不同的计算方式。重点从研究计算机的数学原理,转向计算机的实际应用。这时,连接性变得至关重要,因为计算机非常稀有。例如在1955年,可能整个州只有一台计算机可供大学研究人员使用。
因此,人们必须将它们连接起来。办公室里出现了被称为“终端”的设备,它们通过“声耦合调制解调器”(acoustic coupler modem)拨打电话(本地或昂贵的长途)来连接到远程的中央计算机。这些计算机如此核心和珍贵,以至于人们不在乎电话费用,也无法做到人手一台。
当时主要有两种连接模型:
- 终端到计算机:人们通过调制解调器连接到计算机进行工作。
- 计算机到计算机:更少见的是使用“租用线路”进行计算机间连接。这些线路非常昂贵,类似于一天24小时、一周7天都在打长途电话。在学术环境中很少使用,更多是银行用于每天将分支机构的数据传送到总部。它们速度一般较慢,价格昂贵,仅在特定情况下才具合理性。
这就是当时的世界:我们桌上有台终端,通过电话线连接到一台中央计算机,许多人共享这台计算机的资源,这被称为“分时系统”。
早期计算体验:连接与交流
接下来这段视频(仅需观看开头部分)展示了20世纪60年代和70年代,当我开始接触计算时,我们感知计算机的方式。我们会拨号连接,听到“咔嗒”的噪音。视频中你将看到的电传打字机基本上是二战时期的产物,我个人的首次编程正是在这种计算机上进行的,听着和视频中一模一样的噪音。
这里需要强调的关键点是,回顾过去那个戴着厚框眼镜的“老家伙”可能很有趣,但我们当时真的乐在其中。你可能会想,我现在有功能强大的智能手机,可以玩《愤怒的小鸟》,难道过去的人就没有乐趣吗?答案是,我们当时也玩得很开心。我们连接、交流、计算,做着所有这些美妙的事情,只是设备更简单,速度更慢。但即使从60年代和70年代开始,人与人之间的交流已经是这项技术应用的重要组成部分。
总结
本节课中我们一起学习了战后计算机发展的关键转折。电子计算技术从战时密码破译的保密应用中解放出来,在学术机构中迅速发展为通用计算机。同时,政府对科研的大力投资催生了学术繁荣。随着计算机的普及但资源仍相对集中,通过电话网络连接终端与中央计算机的“分时”模式成为主流,这不仅是技术的演进,也包含了早期用户连接与交流的社会体验,为未来的网络化时代埋下了种子。
008:通过6-00使用密歇根终端系统



概述
在本节课中,我们将学习如何使用密歇根终端系统。这是一个运行在密歇根大学计算中心IBM 360/67大型机上的系统。我们将通过一台标准电传打字机,使用普通电话系统拨号接入。无论身处何地,只要能直接拨号到计算机,都可以使用这个系统。这些电传打字机并非固定线路连接,而是利用普通电话系统工作。
连接与登录系统
上一节我们介绍了系统的基本概念,本节中我们来看看如何实际连接并登录到密歇根终端系统。
首先,按下“Originate”按钮以启动电传打字机。然后,使用设备上的常规电话拨号盘进行拨号。每台电传打字机系统都配有一个听筒。你也可以使用听筒来拨号。两种方式都有效。但一旦连接到计算机,就不要再将听筒用于任何目的。
现在,我按下“Originate”按钮。我可以通过这个小旋钮控制扬声器音量,这样你就能听到拨号音。我将拨号763-0300。在中心系统中,只需拨30300。现在计算机正在响应,我将调低音量。
计算机的响应是系统标识信息。“WHO ARE U”是标准的电传打字机通信身份询问,电传打字机本身会用其内置的代码编号进行回答。在本例中,是电视中心的电传打字机。
现在,我必须登录计算机并验证身份。行首的井号(#)表示密歇根终端系统正在等待我向其发送信息。我必须做的第一件事是发出登录命令。系统中的所有命令都以美元符号($)开头。
电传打字机的键盘非常像打字机的键盘,包括Shift键。对于键位顶部的字符,我们没有大小写字母之分。因此,Shift键仅用于获取另一组字符。在本例中,美元符号是数字4上方的字符。
现在我将输入单词signon,这是官方命令。命令后必须至少有一个空格。现在我将输入我个人的计算中心编号,即W010。该系统的每个用户都会获得一个计算中心识别号,学生通过其导师获得,教职员工通过其所在部门获得。
现在这一行已经输入完毕。它正由计算机暂存。但如果我发现其中有任何错误,可以进行一些编辑和修正,稍后我们会看到这一点。我对这一行感到满意,现在我将给出行结束字符。每行结束后都必须给出此字符,我会在一段时间内每次操作时提醒你。
结束一行的字符需要使用键盘上的Control键。这是一个特殊键,表示我想使用除了通过Shift键添加的字符之外的更多字符。我按住Control键,在按住的同时,我可以按下其他一些键中的一个。在本例中,我将使用Control键加字母Q。也可以使用字母S,但它紧挨着另一个会使电传打字机断开的键,因此我建议使用Q。我将使用Control+Q来终止该行。
现在系统要求我输入私人密码。我先输入一个错误的密码,只是一些无意义的字符。当然,最后要加行结束符,因为我必须表明我对此行满意。系统提示我最好输入另一个密码。既然我打算输入正确的密码,我将关闭打印功能,这样没人能看到我的密码。要关闭打印,我们使用这个标有HDX(半双工)和FDX(全双工)的开关。我们通常在半双工模式下操作电传打字机。如果我将其推到全双工模式,打印就会被抑制。现在我将输入正确的密码。再次推回半双工模式。然后输入行结束字符Control+Q。系统接受了密码,我现在已成功登录。
这里输出的信息是上次登录的时间和日期,以及本次登录的时间和日期。这样我就可以检查是否有人在我之后使用了我的号码。
修改密码与创建文件
成功登录后,我首先要做的事情之一是修改密码。我可能担心有人已经获取了我的密码。我将发出一个命令:$ set。这个命令用于设置系统中的各种参数,但这次我想将密码设置为其他内容。每个命令后至少有一个空格。PW是我的密码参数名,后面跟等号,等号前后没有空格。现在我将再次关闭打印,输入新密码。然后终止该行。
井号(#)表示我现在可以准备向系统发出另一个命令了。
现在假设我们希望开始使用计算机,并希望将一些信息输入到一个文件中。我可以拥有多个私人文件,每个文件都有一个我自创的、对我有用的名称。我将尝试通过发出create命令来创建一个新文件。我将在这里说明一个事实:每个命令只需要前三个字母。所以输入cre,空格,然后使用一个名称,例如EX。系统会检查我是否已经有一个同名文件。当然,我知道我有一个这样的文件,现在我们看到它被检测到了。
为了显示我有哪些文件名,以防我忘记了,让我们运行一个计算中心库中可用的特殊程序,叫做catalog。所以我会说run命令,run命令用于激活各种程序,包括我自己的私人程序和公开可用的程序。空格,现在这个程序的名字是catalog,后面带一个星号(*)。我稍后会解释星号的作用。当然,最后是行结束符。
现在它正在列出我私人编号下的所有文件。像EX这样的名称,其内部形式实际上是W010 EX,我自己的识别号作为前缀。因此,除非他以W010身份登录,否则任何人都无法引用我的文件。而不知道我的密码就无法做到这一点。这样我就受到了保护,只要我保护好我的密码,我通过经常更改密码来做到这一点。
现在我们看到了我拥有的各种文件的名称,包括videotape,它被用来打印出这盘磁带的标题。我确实想创建一个文件,我最好想一个不在此列表中的名字。那么,想一个像X1这样的名字。所以我说cre X1。现在必须在计算机的磁盘存储上为这个文件找到空间,并且必须将其输入到系统的文件目录中。现在它向我报告已经完成了。
X1后面的空白提醒我,一个名称最多可以有12个字符。我这次没有选择那么长。现在我想在这个文件中输入一些行,这些行将被编号。我可以要求自动编号。所以我们将给出命令number。如果我此时终止该行,它将从1开始,步长为1进行编号,即1、2、3、4等等。但这次我将指定从第1行开始,但使用步长3。好的,现在它正在询问第1行。我将简单地输入一些信息。我拼错了一个单词。
编辑与修正文件内容
上一节我们开始向文件输入内容,本节中我们来看看如何在输入过程中进行编辑和修正。
让我们看看如何在这里进行修正。一种方法是删除整行然后重新开始。要删除一行,我使用Control键加字母N。这会在行中插入一个删除行字符。如果我愿意,我可以继续输入我希望在该点插入的新行,这次我就这么做。然后行结束。注意,由于我要求步长为3,它现在正在询问第4行。让我在这里再输入一些信息。我又犯了一个错误。
同样,如果我愿意,可以使用Control+N,这次我会在那一刻终止该行。我得到一个指示,表明该行已被删除。在上一种情况下我没有得到指示,因为我只是继续输入了该行的新形式。
那么,让我再次输入该行。我又犯了一个错误。这次,我其实只需要回退一个字符然后继续。让我回退两个字符来展示这是如何工作的。回退字符是Control键加字母A。如果我输入两个回退字符,我现在就回退了两次,可以重新开始输入单词“come”。
请注意,电传打字机不会像打字机那样物理回退。回退字符被插入到行中。当计算机处理该行时,它会解释为删除前面的字符。我们在电传打字机本身上看不到这一点。
我可以在这里再添加一行。好的,现在让我关闭自动编号,以便开始对它进行其他操作。我可以输入$ number,然后行结束符。它关闭了编号,并等待我进行操作。
现在,文件X1是我的活动文件,这意味着我所做的任何操作,例如输入一行,都会进入当前的活动文件X1。为了防止自己无意中执行某些操作并损坏文件中的信息,我将通过release命令将其从活动文件中释放。例如,现在如果我选择输入一行,比如“two”,我是受到保护的,因为我现在没有任何活动文件。
查看、修改与文件操作
既然我们对X1中的信息进行了相当多的修改,让我们打印或列出文件中的信息,看看实际输入了什么。命令是$ list。我可以输入全名X1。看起来很好。
现在,让我展示一下如果我们想进行修改,如何插入一行。我可以插入一个带编号的行,比如第2行,它会放在正确的位置。我甚至可以使用2.5。那么,让我们再次将X1设为活动文件,并在该文件中插入第2.5行。X1第一次是活动的,因为它是通过create命令创建的。我现在不能那样做,但我可以通过get命令使其成为活动文件。它得到确认,现在X1可能是活动文件了。让我尝试输入第2.5行。行中的信息从逗号后的字符开始,逗号表示行号结束。
现在让我们验证它是否确实被插入。我不想列出整个X1文件,它可能很长,但这次不是。所以我想做的是列出文件的一部分,比如说编号在1到5之间的所有行。有一个错误,回退。X1,1到5。注意,第2.5行根据其行号被插入到了正确的位置。这里的文件结束注释,即使我们没有得到第7行,也与名称X1(1,5)有关。括号(1,5)命名了一个新文件,它实际上是由旧文件的一部分组成的。X1的第1到5行实际上是一种逻辑文件,当到达该文件的末尾时,它会指示“文件结束”。
还有其他方法可以从旧文件创建新文件。我们可以使用一个称为显式连接的过程。例如,让我列出一个由旧文件片段组成的文件。我会说list。我有一个长文件,名字是EX,所以我将取第25到27行。现在,用一个加号(+),我显式地将一些额外的行附加到这些行的末尾,或者说连接到它们。比如说,第53和54行。注意,如果还是同一个文件,我不需要再次写名字EX。
现在我将直接从我的终端连接一些行,所以我需要我的终端作为一个文件的名称。我们使用星号(*)source。E,这是我的终端作为输入文件的名称。然后,我可能再从文件EX中取一些行。如果我只给一个数字,比如100,它意味着从第100行开始的所有行。那是一个长文件,所以实际上我们会看到相当多的打字输出。
这引出了一个问题:我如何中断一个正在进行但我希望停止的操作?电传打字机上有一个特殊的按钮,叫做Break按钮。它位于不同位置,取决于电传打字机的型号。在本例中,它就在这里。现在,当我想要中断时,正如我们将看到的,无论正在进行什么,我都会按下Break按钮。此时,由于电传打字机的构造方式,键盘会被锁定。然后我必须按下位于电传打字机另一部分的另一个按钮,称为Break Release按钮。这个按钮会亮起,当我按下它时,它会解锁键盘。
现在让我们实际操作一下,看看中断过程是如何工作的。我现在将给出行结束字符,这样我刚才输入的那一行实际上就会执行。第25、26、27行,这些是来自某个计算机程序的行。第53行,没有第54行。现在它正在等待来自名为source的文件的输入行,所以我必须输入一行。由于我正在这个终端上列出内容,当我输入一行作为输入时,它会立即回显出来,就像它在该文件中一样列出。该文件的第一行。
现在我需要一种方式来表示来自我终端的这个文件结束了。所以有一个特殊字符Control+C,用于表示文件结束。这是一个进入行中的字符,我现在仍然必须终止该行,然后我会得到一个确认。它显示“文件结束”,现在它继续处理那个旧文件EX的第100行。这是一行有趣的代码。我知道这个文件相当长,里面有一些程序。
所以现在我将按下Break按钮,以终止正在进行的操作。我从计算机得到一个响应,表明“注意”信号已被发出。现在我将按下Break释放按钮来释放键盘。按钮灯亮着,当我按下它时,灯熄灭,现在我可以再次从键盘进行操作了。井号(#)表示在通过Break按钮中断后,系统已准备好让我再次告诉它该做什么。
运行语言处理器(PIL)
现在,我将演示系统中一个语言处理器的使用,这种语言叫做PIL(匹兹堡解释性语言)。PIL语言的处理器存储在一个名为*PIL的文件中。我将通过run命令来运行那个程序,即PIL程序本身,并指定程序所在的文件名。我可以指定PIL的输入源来自其他文件,并让它直接读取该文件。在本例中,输入源将来自我的终端,所以我不会特别说明,它将默认使用终端。
我们会看到注释“执行开始”,当加载器找到该程序、加载它并启动它时。现在PIL正在标识自己已准备就绪。我只介绍这种语言的一些特性。关于该语言的完整描述,以及使用电传打字机的信息,可以在书店的一本名为《MTS中的PIL入门》的小册子中找到,由计算中心的Larry Flanagan教授编写。
现在,让我演示PIL语言的一些特性,但只是其中几个。首先,我可以要求轻松计算数值表达式。3+4-2应该得出5,很好。我可以说type sqrt(4.12345)。我可以要求某些三角函数,比如sin(sqrt(...))。注意我这里写平方根的方式不同。然而,这并不是完全的自由英语,只有这两种方式。
现在我可以要求,例如,x+1的值。当然,我得到了警告,因为我不知道x是什么。所以我可以用另一个PIL语言命令set x=3来设置。现在我可以要求type x*x-1,例如。好的。
现在在PIL中,可以将一系列语句构建成一个程序包。为此,我们给出一个行号,它由小数点前的数字(称为部分号)和小数点后的步号组成。我可能会说第1.2步,我输入的是demand y and z。这一行没有立即执行,因为带有行号表示它将被保存起来,成为程序包的一部分。让我们创建第1.3行:type y+z as well as y and z。然后第1.4行是:go to step 1.2。现在我们有了一个程序,它将首先要求我输入两个数字,然后打印出它们的和以及每个数字,接着返回去再次要求输入两个数字。
现在,为了实际执行这个计算,我必须说执行那组指令。由于所有这些都以1开头,这被称为第1部分,我们还可以有第2部分等等。所以我会说do part 1。它如预期那样要求输入y,我会说y=5。要求输入z,z=4。现在,打印它们的指令在那里,现在它又回到开头要求另一个y和z,比如7和9。我们可以看到我们可以做各种事情。
现在我如何停止这个程序,因为它总是回来要求更多输入?在PIL中,我可以给出一个中断,我可以按下Break按钮。但在PIL中,当它要求更多输入而你没有了时,你可以使用一个星号(*),这是通过Shift键和键盘上方的星号键输入的,然后输入任何非空格的字符,我通常用X。然后行结束。这向PIL表明我在第1.2步(它要求输入的地方)中断了程序。
顺便说一下,如果我想查看某个大型程序中第1.2步是什么,我可以说type part 1,它会告诉我第1部分是什么。
在这个语言中我们可以做各种事情,我再演示一个:我可以说for,不带行号,它会立即执行。for i=1 from 1 to 5 by 2,然后type i+1。如果它以步长2从1到5,它将取1、3和5,i+1应该是2、4、6。让我们看看是不是。现在PIL正在等待其他东西。
那么,在这一点上,我将停止演示PIL并返回到MTS系统。我们应该仔细区分,我一直在系统中运行一个特定的程序。所有的文件操作、编辑和修正都是在系统本身层面进行的。如果我现在正在与PIL对话,而我想返回到系统,例如去注销,我必须回到系统本身的层面。我通过告诉PIL命令system来实现这一点。执行终止,我们现在回到了系统。
回顾命令与文件管理
让我们回顾一下到目前为止使用过的命令。我有一个包含各种命令的文件。如果我复制那个文件,我们应该看到一些我们已经见过的命令,还会有几个我们尚未见过的命令:signon、create(创建文件)、get(使文件活动)、number(开启自动编号)、number(停止编号)、release(释放活动文件)、list(查看文件内容)。我们已经见过set和run。
我们还没有使用copy,尽管我用它来获取这个命令列表,但copy的主要用途是将一个文件复制到另一个文件,可能是一个临时文件,以便能够对其进行更改。例如,我将复制文件X1到一个临时文件,其名称将是-J。这里的减号表示这个文件将因为我此刻提到它而被创建,并且当我从该终端注销时它将被销毁。像X1这样名称不以减号开头的永久文件不会被销毁。我下周回来时,X1仍然完好无损。
创建临时文件需要一点时间,因为要检查确保我没有同名的文件。现在它准备好了。例如,我将只列出-J中的一两行,以确认X1已被复制进去。让我们列出,嗯,就第1行吧。现在-J将被自动销毁。
但在那之前,让我们将-J复制回X1,以防我们在进行一些更改后想要保留它。现在,如果我们简单地将其复制回X1,只有来自另一个文件-J的行会被替换,旧的行仍然会在那里。如果我不想新旧混合,我最好在将新形式的文件复制回去之前清空X1的内容。
因此,我将使用一个新命令empty X1。这不会销毁文件,它只擦除文件已有的任何内容。这是非常重要的一点:我们不喜欢销毁信息,除非我们确定这是应该被销毁的正确信息。系统要求我确认在这种情况下我想要清空的是X1。我输入ok。这是一个肯定的确认。感叹号(!)或O.K.也可以,但其他任何内容都不行。所以现在X1实际上被清空了,但它仍然存在。
如果我想完全摆脱这个文件,我会说destroy,就像我们复制-J回去之后我会做的那样。完成了。如果我对-J进行了修改,那么我现在就会有一个新的副本。现在,我会说destroy X1。它要求确认。我会说ok。现在,例如,如果我说get x1,它会说“就绪”,但一旦我尝试向其中放入一些内容,比如“bap”,它会报告没有这个文件。
一旦它返回,我将从计算机注销。我会说cancel,因为我没有其他想做的事情了。好的,现在我将通过发出命令signoff从计算机注销。现在我将得到一些总结本次会话的信息:注销时间、经过的时间。在本例中,我们使用了13秒的计算机时间。然后是各种其他信息,本次运行的近似成本是3.20美元。
总结与更新说明
本节课中我们一起学习了如何连接、登录密歇根终端系统,进行基本的文件创建、编辑、查看和修改操作,运行PIL语言处理器,以及管理文件(包括复制、清空和销毁)。我们还学习了如何使用Break按钮中断操作,以及一些基本的编辑技巧。
本演示旨在使您在电传打字机终端上的工作更加轻松。要复习这些材料,您可能希望再次观看此内容,或者如果您拥有计算中心编号,可以实际在电传打字机上尝试。如果您有任何问题,请咨询您的导师或计算中心咨询室的任何人。
请注意。自本影片制作以来,MTS系统已进行了一些更改,其中三点我们现在提请各位注意:
- 要回退以删除字符,请使用
Control+H,而不是Control+A。 - 虽然
Control+Q仍可用于表示输入行结束,但键盘右侧的Return键也可以使用,而且通常更方便。请使用Return键来结束一行。 - 拨号接入时,如果电话连接建立后几秒钟内电传打字机上没有任何打印输出,请键入单词
go,然后按Return键。即单词go加Return键。

谢谢。
009:课程总结与反思


在本节课中,我们将回顾20世纪60年代至70年代初,用户使用计算与通信技术的体验。我们将探讨早期技术的局限性、其变革性影响,以及推动技术向更高效共享方式发展的动力。
上一节我们回顾了互联网的早期形态,本节中我们来看看早期用户的真实使用感受。
我想让你了解20世纪60年代和70年代初,最终用户使用计算与通信技术的体验是怎样的。
正如我所说,那是一个充满乐趣的时代。如果你无法与数千英里之外的人交流,而突然之间,你桌上的这个设备让你能够做到这一点,即使它体型巨大、噪音嘈杂,它依然令人印象深刻,并且改变了你对世界的看法。你的同事可以通过这个键盘与你相连,而他们就在键盘的另一端。这是一个变革性的概念,即使以今天的标准看,当时的技术显得非常粗糙。
我们经历了许多复杂的步骤,因为计算机昂贵且稀有,必须被高度共享以证明其成本是合理的。
因此,在下一讲中,我们将开始探讨如何改进设备共享的方式,并使这种共享不再需要像最早时期那样直接拨号。在最早的时候,如果你想与千里之外的计算机对话,你必须支付长途电话费。所以,我们当时正在研究如何建立永久性的连接,以便我们能以更自然、更低成本的方式使用这些设备。
以下是早期技术体验的几个关键点:
- 通信能力具有变革性,尽管硬件笨重。
- 计算机是昂贵且稀缺的资源。
- 用户必须通过复杂的步骤(如长途拨号)来共享访问权限。
本节课中我们一起学习了早期计算与通信技术的用户体验,理解了其虽原始但具有变革性的本质,以及高成本和共享需求如何推动了后续网络连接技术的演进。下一讲,我们将探讨如何建立更高效、低成本的永久性连接。
010:西班牙巴塞罗那 🇪🇸
在本节课中,我们将跟随查克博士在西班牙巴塞罗那举行的一次附加办公时间,聆听来自世界各地的课程首批学员分享他们的学习体验。
大家好,我们现在在巴塞罗那进行办公时间。我想首次为《互联网历史、技术与安全》这门课介绍一些学生。
我们就在这里,稍等。
好的,如果你们想对同学们说些什么,请随意。
嗯,这很棒。没有乔,还有课程中的所有伙伴们。
那是主要的工作,好的。
嗨,我是马格·马丁内斯。在Coursera上学习这门课很愉快。我希望你们也去试试。
嗨,我是汉。感谢提供这个机会。
好的,嗨,我的名字是简。我非常喜欢这门课。
你好,我是伊万。我很高兴能和查克博士以及我的同学们在这里。
嗨,我的名字是安德烈。我喜欢这门课,并且希望未来能有更多这样的课程,谢谢。
你好,我是乔。我认为这是一门非常棒的课程。
好的,谢谢大家。哦,又来了一些人。
本节课中,我们一起聆听了在巴塞罗那参与首次课程教学的学员们简短而积极的分享。他们的反馈表明,这门关于互联网历史、技术与安全的课程受到了来自不同背景学生的欢迎。
011:超级计算机中的历史印记 🖥️
在本节课中,我们将要学习20世纪60至70年代计算机连接与通信的物理体验,了解早期网络(如Bitnet和ARPAnet)的运作方式,并探索从存储转发网络到分组交换网络的演变过程。我们还将看到,国家科学基金会如何推动网络从军事研究项目转变为连接更广泛学术界的工具。
早期计算与连接体验
上一节我们回顾了互联网的早期构想,本节中我们来看看60、70年代用户与计算机交互的真实物理体验。
70年代是我职业生涯的起点。幸运的人可以使用电传打字机,就像视频中展示的那样,而其他人则使用穿孔卡片。你还能听到数据被转换成声音来回传输的尖啸声。当时的关键目标是,如果你足够幸运,在你坐的地方20英里半径内会有一台计算机。这样你就可以使用本地电话线路,整天连接在上面工作。这非常令人兴奋,也很有趣。
如今你拥有一台2000美元的笔记本电脑,而在当时,高端人士的办公室里就有电传打字机,这样他们就能方便地进行计算,而无需去某个特定的地方。因此,拨号连接是当时校园运作的主要方式。但你也可以通过租用线路进行数据传输。
租用线路与成本考量
以下是关于租用线路的典型情况:
电话公司会在两个城市之间挖沟铺设电缆,里面包含一定数量的铜线。当然,那是过去的情况,现在已经是光纤了,但当时是铜线。每次你在这两个城市之间打电话时,系统都需要找到一根空闲的线路来连接,让你的通话音频通过那根线传输。
如果你想,可以付费租用其中一根线路。这意味着其他人不能再用那根线打电话,相当于把它从服务中移除了。如果两个城市之间有500根线,你租用了其中一根,他们就只剩下499根可用,因此费用相当昂贵。非常重要的是,成本是基于距离的。一英里、五英里、二十英里或一百英里,成本会随着距离线性增长。距离在这些资源非常有限的铜线网络中至关重要,因为一根线要么用于电话,要么用于数据。
学术界的存储转发网络
因此,在学术界,我们逐渐发展出了所谓的存储转发网络,其唯一目的就是通过一切手段妥协,以将我们为电话线路支付的费用降至最低。学术界需要与全国乃至全世界的人交流,所以必须保持低成本。
我们的工作场景是这样的:办公室里放着终端,我们使用拨号连接。这可能只有几英里,比如一到两英里(或一到两公里)。你必须住在计算机附近,或者在计算机附近有办公室,然后使用本地电话网络拨号工作。那台计算机的后端会有一条连接,通向另一台也有用户的计算机,然后是其他有用户的计算机,以此类推。
例如,这里是密歇根大学,那里是斯坦福大学。斯坦福有一台计算机,密歇根也有一台。斯坦福的用户连接到斯坦福的计算机,斯坦福的计算机有一条小小的连接通向外部世界。假设坐在这里的你想和坐在那里的人交流,工作流程是这样的:你总是处于连接状态。你在计算机里输入一封电子邮件,然后说“发送给我在斯坦福的同事”。问题是,其他人也在发送数据。
举个例子,假设有人发送了一个很大的东西(用大紫色圆圈表示)。然后你办公室隔壁的人发送了一个中等大小的橙色圆圈。它们都存储在本地计算机里。最后,你终于打完了你的邮件,它是一个小绿色圆圈。现在的问题是,你需要排队。
软件会维护一个队列或队伍,决定谁使用那条线路。然后它开始将这些数据流式传输出去。一旦开始传输一个文件,它就会一遍又一遍地持续发送同一个文件。如果传输中断,它会从头开始重传。因此,数据穿过网络需要一些时间。
当数据穿过网络后,队列中的下一条消息才会开始发送。它使用那条链路,完成传输。这些数据穿过链路需要一段时间。最终,可能是10分钟后,终于轮到你了。你的数据会通过网络传输到下一台计算机。问题是,一旦数据到达那台计算机,你会面临同样的问题,因为如果所有这些消息都要从密歇根发往斯坦福,它们都必须经过所有这些链路,因为没有直连线路。直连斯坦福的线路会非常昂贵。
我们发现自己处于这样一种情况:数据存储在这些计算机上。如果网络出现中断,比如这条线路中断,数据可能会在这些计算机的硬盘上(甚至不在内存里)待上几个小时。然后线路恢复,或者计算机重启,数据才会再次开始流动。所以,这很……随意。我一直告诉你们这很棒。它只是很慢。它很棒,但很慢。所以不用为我们感到遗憾。我们热爱它,享受它。能和世界各地的同事交流真是太棒了。
网络架构与多跳路由
我们最终形成的网络架构鼓励更多的跳数,这意味着鼓励更高的延迟,也增加了数据在网络中传输时被大型数据块阻塞的可能性。
例如,我们要从东兰辛发送一条消息到东海岸某个地方。我们可能有两条连接:也许有一条连接在密歇根州立大学(东兰辛)和安娜堡之间。数据会在安娜堡存储并转发,然后进一步发送到克利夫兰。如果你想一想,安娜堡和克利夫兰之间的线路大概是这样的,他们可能把线埋在地下。
如果我们能说服托莱多加入我们的小俱乐部呢?长距离线路的成本与两条短线路的成本相比,两条短线路的成本几乎正好等于长线路的成本,因为它实际上不是一根更粗的线。所以,如果我们能说服托莱多加入,我们并没有增加通信成本,因为线路长度差不多,但我们用同样的成本多连接了一所学校。
如果你持续这样做,不断地说“哦,我们在这里放一所学校,在这里放一所学校,在湖中间放一所学校,在森林中间放一所学校”,经济学原理表明,通过每次连接时缩短距离,你可以用基本固定的成本连接更多的学校。有时他们会建立两条连接,但通常的运作方式是:从整体来看,数据往往会先上传到某个中心位置,然后从中心位置再分发出去。因此,在整个网络中并没有很多冗余链路。
我们发现自己处于这样一种情况:仅仅通过增加跳数就能节省更多钱。在这种环境下,我们当时有很多电子邮件,但没有很多图像。计算机有时连处理大小写都勉强,当我们终于能处理大小写时已经很了不起了,更别说图像了。所以在很长一段时间里,我们所做的一切都是非常文本导向的。有时我们会互相发送小文件,比如程序,但要么是文本。以今天的标准看,这些文件很小,几乎就像短信一样。那个时代典型的邮件消息大小,几乎就和现在一条短信的大小差不多。我们没有能显示图像的计算机,所以图像几乎无关紧要。
因此,你的生活都围绕着20英里半径内的那一台计算机。它有一条连接,像蛇一样蜿蜒穿过山丘和山谷,最终到达斯坦福,或者你的邮件需要去的任何地方。但再次强调,能够坐在键盘前与世界各地的人交流真是太棒了,即使这需要四个小时。我们那时发的邮件也没那么多。
Bitnet 与 ARPAnet 的兴起
出现了许多网络,其中一个后来被广泛使用的是 Bitnet。在Bitnet中,一切似乎都汇聚到普林斯顿,那里是Bitnet的主要枢纽之一。它运作得很好。有一种方式是,当我们需要增加一所学校时,我们会找到地理位置最近的学校,然后建立连接。
这基本上就是普通学术界人士所看到的网络:一台校园计算机,以及这种奇怪、缓慢但足够有效的存储转发网络。
然而,就在同一时期,从20世纪60年代到80年代,美国国防部正在投资一个名为 ARPAnet 的研究网络。ARPAnet由军方资助,机构是国防高级研究计划局(ARPA)。我们将在后面的课程中见到文特·瑟夫,他能把这个故事讲得比我好得多,但我现在先给你一个简短的版本。
很多人想知道为什么国防部启动了这个项目。很多人说“哦,是因为害怕核战争”。这个项目历时很长,在不同的阶段有不同的动机。但根据我所听到和读到的内容,我认为可以安全地说,主要动机是为了提高他们用于军事目的的计算机设备的使用效率,让人们更容易访问它们,减少人们的出差需求,让人们可以从办公室使用许多不同的计算机工作,同时也让人们能够更有效地交流,以便快速发送电子邮件,让军方的电子邮件传递更快。所以,第一点实际上是最终用户导向的,为了让计算机对人们更有用,让人们更有效地协同工作,这是最初的重要动机。第二个动机实际上与可靠性、冗余性和对局部故障的抵抗能力有关,这并不完全是关于核攻击,更多是关于战场攻击。这个概念是,一旦你开始拥有所有这些链路,并把它们做成无线的,放在战场上的拖车里,数据在几百英里间来回传输,那么我们就必须担心在战场情况下,其中一辆拖车可能被击中。如果一辆拖车被击中,你如何保持网络运行?关于我们拥有整个国家并担心通信的概念,我确信也有这方面的担忧,但这并不是主要原因。对我来说,令人兴奋的是,主要原因是一个非常以人为本的原因,即让人们更有效地工作。
但这是一个相当排外的俱乐部,一个相当排他的网络,因为它只对军方人员或获得资助建设它的人开放。所以在1969年,上面只有四台主机。重申一下,这是研究网络,使用的是租用线路,就是我们当时用来发电子邮件的那种,非常昂贵。但因为这是一笔巨额拨款,他们就直接支付了费用,因为研究的关键不在于钱,而在于:如果你拥有这些连接,使用它们的最佳方式是什么?如何处理冗余?如何处理到达同一地点的多条路径?所有这些都是有趣的研究问题,计算机科学家们花了很多年去构思。
到1972年,看起来我们有了大约20个节点,有了一些跨州链路和多重连接。这看起来是一个很好的测试平台,可以用来观察,比如,如果这部分突然中断,我们能多快地重新路由绕过中断。如今,这些系统绕过中断的时间远远少于一秒,这确实令人印象深刻。我们当前的互联网可以将其历史追溯到20世纪60年代和70年代进行的研究。
分组交换:关键突破
但是,Bitnet的存储转发网络与ARPAnet研究网络之间的根本区别在于分组交换的概念。
这是一个非常简单的概念,只是需要更复杂的软件来实现。存储转发网络会开始通过链路发送数据,然后持续发送直到完成。这看起来非常高效,你想尽可能快地使用链路,然后发送下一个,再下一个,再下一个。这很简单,并且通过将所有数据本地存储在磁盘上来简单地处理中断。
但是,如果你这样做呢:你把每条消息都拆分开。让我看看我能不能画出来,我可能应该为此做个幻灯片。所以,如果这里有一个网络,这是我的计算机,它有一个网络连接。它有一条非常大的消息。把它拆分成许多片段。然后它一次发送一个片段。如果你带着一条只有三个片段的很短的消息出现,你只需要等待一个片段发送完,然后你的片段就可以插进去发送,然后你们共享一段时间链路。你们共享一段时间,然后你的消息就通过了,因为你只有三个分组,而那条消息有上千个分组。一旦你的消息通过,它们就恢复按顺序发送那条大数据。这样,你就能“溜过去”,绕过由大量数据造成的交通堵塞。这就是分组的思想。分组就是这些数据块,我们要发送的是一片数据,在那片数据结束后,我们可能会发送另一条消息的一片数据。它允许多条消息同时在空中传输。
这就是分组交换。随之而来的,我们还出现了这些称为路由器的特殊用途计算机。它们仍然是计算机,但它们不以同样的方式存储数据,它们只是转发。它们不是存储转发,而仅仅是转发。我们稍后会再讨论这一点。
分组交换的类比:明信片
我最喜欢用明信片来类比说明分组是如何工作的。
假设我想给我在斯坦福的朋友达芙妮发送一条30个字符的消息,但我只有10个字符容量的明信片。那么我就这样做:我把我的消息分成三个10字符的片段。我把每个片段写在一张不同的明信片上。我在每张明信片上写上发件人和收件人地址:查克寄给达芙妮。然后我加上序列号,这样当地收到明信片时,她知道按什么顺序把它们重新拼起来。
所以我必须标记每一张明信片。它们是固定宽度和固定长度的。就像分组一样,我把一条可能很长的消息拆分成许多小片,使每一片都是特定的大小,以便我们都能共享链路。
然后我这样做:我寄出它们,我把它们都放进我的邮箱。然后我等待,这个叫做邮局的神奇机构会来取走它们。把它们放进建筑物里。人们再次分拣它们,装上卡车。它们最终上了飞机、火车、驴背,或者由人手动传递。我的每张明信片可能走不同的路线。我的意思是,我的一张明信片可能从密歇根到芝加哥,到堪萨斯城,再到旧金山。另一张明信片从密歇根到芝加哥,到达拉斯,到丹佛,到堪萨斯城,到芝加哥,再到旧金山。我的第三张明信片走得更疯狂,它去了克利夫兰,然后去了亚特兰大,然后去了华盛顿特区,然后去了芝加哥,然后去了堪萨斯城,最后才到达旧金山。
事实上,它们走了不同的路径,甚至可能不按顺序到达。有些可能互相超越,有些可能卡在某个地方。但这没关系,因为每一张明信片都标有发件人和目的地地址。所以每一个中间地点不必把它送到最终目的地,只需要把它送到更近的地方。它们做出选择,即使做出了错误的选择,也可以以某种方式处理。所以,这是一个大谜团,叫做邮局。它只是拿着这些带有标签的小卡片移动它们。它不知道那是一个YouTube视频还是一封电子邮件,它真的不在乎。它只是有一些带有发件人和收件人地址的小数据块需要移动。这就是网络的本质。互联网,那个“云”——这就是为什么我们画这个图。你会看到它像一朵云,那是因为不用担心里面是什么,一切都超级神秘。不用担心,它最终会出来。
在所有这一切发生之后,达芙妮(她恰好拥有和我一模一样的邮箱,这有点罕见,我们都有一个知识共享版权的邮箱,这就是这个邮箱酷的地方)在之后的某个时间点,这些东西开始出现。她会想:“嗯,看起来查克给我发了个便条,但由于明信片的限制,他只发给了我一张。我知道是谁发的,发给谁,我也知道这是若干条消息中的第一条。”然后第二天,另一张出现了,因为那是走了更偏南路线的那张。她会想:“嗯,我还缺一些,我就坐着等等看会发生什么。”最后,许多天后,走了最迂回路线的那个到了。现在达芙妮可以重新组合消息了,因为她有序列号。她只需把它们按一、二、三的顺序拼起来,砰,她就得到了完整的消息。她把明信片扔掉,就得到了最终的消息。这就是分组:将一条大消息分解成小部分,单独标记每一个部分,然后把它们扔进共享的网络中。
这就是它的样子。在这个类比中,邮局被称为网关。好的,那是一个网关。这里是密歇根,这里是斯坦福。斯坦福也有一个网关,就像他们的邮局。中间是邮箱,而邮箱基本上……邮局有中间地点,有卡车和地点。这些就是链路和路由器。消息可以走不同的路径。然后它们到达并被重新组装。我们还有能力从家庭等地方连接,所以有局域网(LAN),然后有这种互联网,即网络的网络。它就像邮局,仍然把东西分成数据包,它们仍然以数据包的形式出来,然后达芙妮必须在她的计算机上重新组装它们以创建消息。所以,研究网络ARPAnet解决了许多工程问题,这就是他们所做的事情。
网络研究挑战:路由环路
这里有一个需要解决的问题示例。现在,邮箱(路由器)、邮局(网络节点)没有一个确切知道东西要去哪里,它们也不把它运输到最终目的地。它们所做的只是把它运输到更下游的目的地。但是,如果它们搞错了怎么办?如果这里是密歇根,这里是芝加哥,这里是达拉斯,如果密歇根认为发送到芝加哥是个好主意,芝加哥认为发送到达拉斯是个好主意,然后达拉斯认为发送到密歇根是个好主意呢?那么密歇根会再次收到它,并把它发回芝加哥。这样你就会陷入一种情况:你的分组,你的数据,在一个循环中。
这对邮局不好,对互联网也不好。所以你必须说,当出现问题时我们如何解决这个问题?你希望它是完美的,但它不是。这就是那种需要研究如何解决的问题。当我们进入更多技术细节时,我们会更多地讨论这个问题。我只是想说明,这就是那种花了整整20年时间、经历了四个不同版本的ARPAnet才搞定的研究和工程。
从研究网络到广泛连接
所以,到20世纪70年代末,已经有了一个相当复杂的网络。就像我说的,他们重写了四次,变得非常复杂。投入了大量资金,每次重建时都仔细研究如何改进。所以它确实是一套运行良好的软件。在这些研究大学和军方使用它的人看来,那就像一个未来世界。你可以发送电子邮件,一秒钟后它就出现了,真的很快,一切都很棒。你甚至可以进行即时消息般的互动,消息立刻送达。问题是,这只是一个小群体,可能只有大约60台计算机,这就是整个互联网上的所有计算机。我的意思是,现在我们有了手机,有数十亿台,但当时只有大约60台。
所以,一个真正的问题是:这是如何从一个非常狭窄群体的60台计算机,发展到一个更广泛的群体的?这个问题的答案,在伊利诺伊大学厄巴纳-香槟分校。
国家科学基金会与超级计算机中心
这某种程度上要回溯到布莱切利园,当时计算机是科学的一部分。在整个50、60和70年代,科学家们,就像军方一样,逐渐认识到计算机对推进科学研究非常有用。
因此,国家科学基金会(NSF)会资助大学购买计算机。大学会说:“给我1000万美元买台计算机。”另一所大学也会说:“给我1000万美元买台计算机。”然后三年后,第一所大学说:“我的计算机显然……我需要另外1000万美元。”
研究问题是好的研究问题,对社会也很重要。但国家科学基金会厌倦了给每个人1000万美元。事实上,我也是其中一员,因为我曾经是高性能计算领域的人。这是一台Convex C3800超级计算机。我在这台超级计算机前大概这么高。这是一个可爱且非常昂贵的型号,是后来送给我的。之后,我们打算扔掉它,因为这大概是1987年的东西。
基本上,我非常想要一台这样的机器。每台大约200万美元,这里大概有……2、4、6、8、10,大概1000万美元。我如此渴望得到它,我认为我应该得到一个1000万美元的玩具,我可以做如此伟大的研究。但不幸的是,其他每个人都想要完全相同的东西。他们也很重要。
所以国家科学基金会对自己说:“嘿,这样下去不行。如果我们找不到一支笔……你知道,我们将要建立一个网络。我们放几台这样的机器进去,然后建立一个网络把它们连接起来。”当然,事情从来没那么简单。现在,我们要认识一下拉里·斯马特。
拉里·斯马特与NCSA的作用
拉里在伊利诺伊大学厄巴纳-香槟分校的国家超级计算应用中心(NCSA)工作。拉里是NCSA的主任,是众多参与者之一,但也是创建我们现在所认为的互联网国家网络、并将其从一个研究项目转变为我们所有人(包括学术界和普通大众)都能很好利用的项目的最关键人物之一。让我们来看看拉里·斯马特。
本节课中我们一起学习了早期网络的物理体验、存储转发与分组交换的根本区别、ARPAnet的研究目标与成就,以及国家科学基金会如何通过建立超级计算机中心网络,为互联网从军事研究项目走向广泛学术应用铺平了道路。这些历史印记塑造了我们今天所依赖的全球互联网的基础。
012:拉里·斯马尔与国家超级计算应用中心 🖥️
在本节课中,我们将跟随拉里·斯马尔博士的讲述,了解国家超级计算应用中心成立的背景与过程,以及它如何意外地推动了互联网基础设施的普及。这段历史揭示了学术需求、政府政策与技术创新之间复杂的互动关系。
个人背景与早期困境
上一节我们介绍了课程背景,本节中我们来看看拉里·斯马尔博士如何踏入超级计算领域。
我是一名受过训练的相对论天体物理学家。我的博士学位和早期工作都在物理系,专注于涉及广义相对论、气体动力学等天体物理学问题。在20世纪70年代,当我发展如今被称为“数值广义相对论”的领域时——即用数值方法求解爱因斯坦场方程,以模拟黑洞碰撞或需要广义相对论的天体物理过程(如超新星爆发)——我不得不去获取最高机密的核武器许可,以获得超级计算机的使用权。
因为在70年代中期,唯一能获得超级计算机的地方要么是利弗莫尔、洛斯阿拉莫斯这类国家实验室,要么是气象领域。天文学一直是超级计算的驱动力。事实上,在约翰·冯·诺依曼为高等研究院建造的计算机中,一半给了阿伯丁的陆军用于弹道计算,另一半则用于恒星演化研究。因此,天文学和气象学在长达50年的时间里,基本上是超级计算使用的主要驱动力。
然而,为了进行纯粹的天体物理研究,我却必须获得最高机密的核武器许可。当时似乎没有人觉得这有什么不寻常。于是,作为一名博士后,我就在夏天去工作几个月,每周工作100小时,然后在一年的其他时间里,我回到哈佛(我当时是初级研究员),试图向他们解释:我们可以用这些机器,以惊人的细节求解我们已确立300年的物理定律,用于像核武器这样的工程设备。这些设备能产生太阳中心的温度,以及我们试图在众多学科学术问题中解决的、超出想象的应力。
所以,这项技术本可以彻底改变学术研究。但是,没有人理解。我感觉自己就像乘坐飞碟,在利弗莫尔这个先进文明和哈佛这个石器时代文化之间穿梭。而哈佛在当时对此的思考已经是最前沿的了。所以,这是一个困境。
欧洲见闻与问题意识
我直到80年代初才想明白这件事。那时,第一台克雷超级计算机进入了欧洲大陆的一个开放科学研究所——马克斯·普朗克物理与天体物理研究所。那年夏天我在那里,与像戴夫·阿内特(我们国家伟大的超新星超级计算专家之一)以及化学领域的人们一起。那情景就像20年代的巴黎,所有流亡者聚在那里,我们试图搞清楚:这是一台美国造的超级计算机,对吧?为什么我们在慕尼黑?这太奇怪了。
但在美国,我们从不质疑基础设施。它要么存在,要么不存在,或者本来就是这样。但有一天深夜,我喝了几杯啤酒——我想是第二杯——和我的德国主人(他也像我一样是战后出生的)在一起。他终于转向我说:“你不为自己感到羞愧吗?你们这个富裕的大占领国,来到我们这个小国家。我们在二战后好不容易凑够钱买了一台这种超级计算机,你们美国人却过来用光我们的机时。”我说:“你们这帮人到底是怎么打赢战争的?这里到底是怎么回事?”
这最终刺激了我,让我思考:这到底是怎么回事?这太荒谬了。我回去后调查发现,例如,在苏联发射斯普特尼克卫星之后,联邦政府资助大学建造了科学大楼,建立了超级计算中心,IBM几乎到处赠送大型机。因此,60年代的科学家们想当然地认为他们在学术界拥有世界上最快的计算机。
但大约从1970年开始,随着越南战争的爆发,以及各种“大炮与黄油”的议题,这一切都停止了。事实上,举个例子,到1978年,我国培养的工程学博士和工程师数量只有1970年的一半。这意味着与联邦政府在斯普特尼克时代的伙伴关系被彻底切断。
在计算领域尤其糟糕。举个例子,当我在70年代于利弗莫尔时,那里有四台CDC 7600,这是有史以来最优秀的超级计算机之一。然而,没有一所美国大学收到过一台CDC 7600。事实上,当我最初来到伊利诺伊大学时,这里有一台Cy 175,这是CDC 7600的二次设计和制造翻新版。我们是首批拥有它的大学之一,人们都认为伊利诺伊自然遥遥领先于其他学校。情况就是这样:我们完全与生产这些美妙机器的私营部门脱节,因为联邦政策认为这些东西太宝贵,只能放在战争环境中。
发起倡议与争取支持
在这次德国遭遇之后,我回来了。我想知道,还有多少像我这样的科学家?于是,在伊利诺伊大学,我开始给同事们打陌生电话,说:“嗨,你不认识我,我只是个小助理教授,但我敢打赌,你的研究正因缺乏超级计算机访问权限而受阻。”他们起初的反应像是接到了骚扰电话。但当我们开始谈论化学、生物学、农业等领域时,果然如此。他们知道如何做科学,只是没有访问权限。于是我说:“好吧,如果你有超级计算机,你能做什么科学?给我发一份简要说明。”
最终,我收集到了一个校园内15个系、65位教师的反馈。我想,全国肯定都是这种情况。我觉得,必须有人提出这个问题。大约在那时,有一份联邦政府做的“拉克斯报告”,开始揭露这类问题,但他们仍然没有……我记得彼得·拉克斯,他是最伟大的数学家之一,是普林斯顿高等研究院的顶尖人物,也是计算事务的长期倡导者。
我和彼得进行了一场漫长而艰难的斗争。因为在拉克斯报告的草案中,它打算说:是的,我们应该弄一台超级计算机供大学使用,但是,让我们把它放在利弗莫尔,放在知道怎么处理这些东西的地方。大学并不在拉克斯报告认为适合放置超级计算机的地点名单上。
我和彼得·拉克斯通过电话进行了漫长的“战斗”,这有点像大卫和歌利亚,因为他是该领域的巨人,而我什么都不是。我最终说服了他不要排除大学作为一种可能性,尽管他觉得大学不太可能玩得转这种“锋利工具”而不伤到自己。
我的意思是,你必须理解,世界完全不同了。当超级计算中心计划即将成形时,人们……现在的人们很难通过互联网回到那个时代。那时没有互联网。你知道,有一些杰出的人,如文特·瑟夫、鲍勃·卡恩、比尔·乔伊,他们开发了TCP/IP并将其应用于ARPANET。但这仅限于少数计算机科学系和军方。物理系或化学系的人从未听说过ARPANET,更不用说访问它了。但这显然是正确的想法。
NSFNET的建立与互联网的萌芽
一旦我们推动国会通过国家超级计算机计划的资金,接下来就是全国性的竞争,五个中心被选中。这时NSF意识到:好吧,我们现在建立了这些中心为学术科学家提供访问,但他们还得像我以前飞往利弗莫尔一样,飞往香槟-厄巴纳,这不对。于是进行了很多讨论。
但问题是,华盛顿的电信游说者会阻止任何关于联邦政府建立我们今天拥有的那种网络的讨论,而这正是人们想要的。我的意思是,每个人都知道他们想要一个无处不在的个人对个人电子邮件网络。但只要一开始讨论这个,电信游说者就会站出来说:“没门,伙计们,那是私营部门的事。别让联邦政府掺和,离远点。”
所以我们早期学到的一点非常有趣。就好像如果我们当初争论的不是超级计算机计划,而是让联邦政府给每个人买一台个人电脑(IBM个人电脑在1985年才问世两年),放在人们的桌子上。同样,这会被视为干涉私营部门。但是,我们说,哦,我们只要几台这种深奥的超级计算机。他们说,好的,没问题,那里没有市场。联邦政府可以扮演这个角色。
在网络问题上也是同样的策略。我们说,我们只是想在全国铺设一条高速骨干网来连接这五个中心。电信公司的人说,好的,没问题。56 kbps就是当时国家的高速骨干网——比今天的ISDN还慢。是的,那不是市场。可以。然后我们说,我们有一些在大学里的古怪超级计算机用户想接入这个网络。他们说,是的,可以,那不是市场。你们可以这么做。
这就是NSFNET骨干网。然后区域网络得到了资助。接着,各个大学校园担心,如果他们不挖开校园广场铺设一些光纤,那么那些想访问超级计算机的教授就会转到愿意这么做的大学去。于是,逐渐地,整个互联网从这种在华盛顿得到的政策建议中浮现出来:在那里你不能做正确的事,你必须做一些看似无关紧要、但有内在逻辑的事,从而逐渐引入市场力量,最终催生出整个产业。
总结
本节课中我们一起学习了拉里·斯马尔博士推动建立国家超级计算应用中心的历程。这段历史的核心在于,一个旨在解决特定学科(天体物理学)计算需求的倡议,如何通过巧妙的政策策略(避免与既有市场直接冲突,从“非市场”的超级计算接入切入),意外地成为了推动互联网基础设施在全国学术机构乃至更广范围普及的关键催化剂。它揭示了技术创新往往需要与政策、市场现实进行复杂互动,有时迂回的策略反而能更有效地达成深远的目标。
013:NSFNET发展史 🚀
在本节课中,我们将学习美国国家科学基金会网络(NSFNET)的建立背景与发展历程。我们将了解NSFNET如何从学术需求中诞生,以及它在扩展互联网连接方面扮演的关键角色。
背景与挑战
上一节我们介绍了早期网络的发展。本节中我们来看看NSFNET建立的背景与面临的挑战。
我希望你们能从中理解到,这件事并非轻而易举。并非有人简单站出来说“嘿,建个网络吧”就能完成。当时存在强大的反对力量,特别是电信行业的游说团体,他们不希望这个网络建成。在本讲座的后续部分,我们还会多次看到这些电信游说团体的身影。
因此,拉里·斯马特(Larry Smart)和那些制造超级计算机的人士说服了国会,授权拨款建设国家科学基金会网络(NSFNET)。该网络计划使用ARPA(美国国防部高级研究计划局)开发的TCP/IP协议,并旨在至少面向研究和学术界开放,让研究型大学能够接入。
密歇根大学的早期网络
我们的故事现在从伊利诺伊大学厄巴纳-香槟分校转向我的大学——密歇根大学。
如果你观察一下这张1972年左右、NSFNET建立之前的ARPANET(阿帕网)地图,或者所有早期的ARPANET图示,你会发现一个明显的遗漏。从我的角度来看,在所有图中,密歇根大学都不在其中。这有一个很好的原因:因为我们建立了自己的网络。
我们使用租用线路建立了一个三节点网络,连接密歇根州立大学、密歇根大学和韦恩州立大学。我们共享彼此的计算资源,交互式地使用对方的计算机,玩在线多用户游戏(我们称之为“冒险”游戏,它们都是基于文本的,但非常有趣,并且极大地促进了社区建设),我们还有聊天论坛和各种其他功能。我们使用彼此的软件,那是一个很酷的小世界。
而当时,ARPANET在许多人看来并没有那么重要,它更像是一个实验性的研究项目。我们的网络是实际投入使用的,而ARPANET则更偏向研究。所以,在早期实际上存在着许多这类初生的网络。
因此,密歇根大学从未真正深度参与过ARPANET的工作。
争取NSFNET的动机
作为一所大型大学,密歇根大学确实希望获得一个超级计算中心。但由于一些战略失误(道格·范·霍林稍后会向你们解释),密歇根大学未能获得超级计算中心。于是,我们的想法转变为:我们将尽一切努力去争取这个网络。
因为这可能更有趣。当时,道格·范·霍林是密歇根大学的首席信息官(他刚从卡内基梅隆大学来到密大),同时也是连接我们三所学校的“Merit网络”的负责人。他们认为,既然没能获得超级计算中心,就必须全力以赴以确保获得NSFNET。
当然,他们最终确实获得了NSFNET。道格·范·霍林从1988年开始,成为了NSFNET的首席研究员。
总结
本节课中我们一起学习了NSFNET建立的背景与挑战,了解了密歇根大学在早期网络发展中的独特角色,以及他们争取并最终主导NSFNET项目的历程。接下来,让我们听听道格·范·霍林亲自讲述这个故事,我稍后会回来。
014:13_Doug Van Houweling与NSFNET




在本节课中,我们将跟随道格·范·霍韦林(Doug Van Houweling)的讲述,了解美国国家科学基金会网络(NSFNET)从构想到实现的历程。我们将看到密歇根大学如何从一个超级计算中心的竞标者,转变为连接全美科研网络的关键建设者,以及产业界如何参与其中,共同推动了互联网基础设施的早期爆炸式增长。
密歇根大学是当时提交国家超级计算中心提案的机构之一。
这份提案恰好在我于1985年初抵达密歇根大学时提交。
密歇根大学的提案中,其核心硬件设备是一台在日本制造的机器。
我向我的新同事们解释,我认为这份提案获得资助的可能性极低,因为我不认为在那个时期,一台日本制造的机器能通过美国国家科学基金会的评审流程。
不久之后,我访问了美国国家科学基金会。
我认识了当时的基金会主任埃里克·布洛克(Eric Block),虽然不算熟识。
我与埃里克就密歇根大学的提案进行了一次交谈。
从谈话中我清楚地认识到,密歇根大学的提案没有获得资助的前景。我对埃里克说,在我看来,对密歇根大学而言,比拥有一个超级计算中心更好的选择,或许是运营那个将所有超级计算中心连接起来的网络。
一段时间后,关于那个网络的提案征集发布了,该网络后来被称为美国国家科学基金会网络(NSFNET)。
那时,我已经成为Merit网络(密歇根州全州网络)的董事会主席。
多年来,Merit网络与ARPANET所涉及的分组交换协议发展并行,开发了自己的分组交换网络。因此我们知道,NSF设想的是一个为期约五年、总耗资1500万美元的项目。
在构思如何撰写这份提案的过程中,我们很快意识到,500万美元的年度预算只够建设一个56千比特的网络。很明显,即使建成,这个网络也会迅速被流量淹没。
因此,我们立即开始思考:如何才能扩大这个提案的规模?
于是我与杰米(时任密歇根州州长詹姆斯·布兰查德的代表)取得联系,告知他我们有一个NSFNET的机会,并打算尝试引入产业界,询问州政府是否有兴趣参与。杰米表示肯定,并让我们在整合好各方资源后再联系他。
接着我们找到了IBM公司。尽管IBM和Merit一样,在互联网协议工作方面没有太多资历,但它是一家拥有强大通信设备制造能力的大公司。
我有一位在IBM研究院工作的老朋友,名叫阿尔·韦斯(Al Weiss),他负责IBM研究院的所有计算设施。我打电话给阿尔说,这是一个绝佳的机会,但IBM单打独斗不会成功,我需要他的帮助。于是阿尔召集了IBM研究院的一些人员,那里确实正在进行TCP/IP协议等方面的工作。我们又安排了一次会议。
我设法把汉斯·沃纳(Hans-Werner Braun,Merit网络的工程师)也拉来参加了与IBM的另一次会议。
在那次会议结束时,汉斯·沃纳承认,IBM内部确实有人懂这方面的技术,他们可以成为项目的一部分。
于是我们初步获得了IBM的同意,他们将贡献硬件和软件,来构建网络的路由结构。
但我们仍然需要通信设施。
那时,IBM的首席财务官我记得姓克劳(Crow)。通过IBM,我们联系到了他。他认识一位前IBM员工,此人当时是MCI公司的首席技术官,实质上也是首席网络运营官,名叫迪克·利巴伯(Dick Liebhaber)。
于是IBM联系了迪克·利巴伯,询问MCI是否有兴趣为这个网络提供通信设施。
你可能记得,当时MCI还是一个新兴组织,有人形容它更像一个律师事务所,试图在AT&T强大的游说攻势下,创造一个能够真正提供电信服务的环境。他们刚刚取得成功,正在美国各地建立设施。迪克·利巴伯将此视为一个让MCI跻身主流、参与NSFNET提案的机会。
最终我们达成了一项协议,将提交一份联合提案。Merit作为主要组织,与IBM(负责建造所有路由硬件和软件)以及MCI(提供全国范围的通信设施)合作。
此外,我们还让布兰查德州长承诺从州政府资金中每年额外投入100万美元。
最终,我们得以向国家科学基金会提交了一份提案,金额大约是1470万美元,因为我们知道上限是1500万。但实际上,通过纳入所有这些实物贡献,这份提案的实际价值更接近5500万美元。
它的设计起点不是56千比特,而是T1速率,即1.5兆比特,并计划在网络生命周期内进行升级。
我们后来得知,这份提案受到了国家科学基金会评审员的极大怀疑,因为Merit在TCP/IP方面没有深厚历史,IBM则被视为互联网的敌人(当时它专注于自己的专有协议)。因此,人们真的怀疑我们是否有技术能力完成此事。
但那份评审没有参考实际的资助模式。当评审员们了解到合作伙伴为此提案承诺投入的资源总量后,它立即在NSF的名单上跃升至首位。
我们一直觉得这可能是一件大事,但并不确定。
因为从我们在1988年启动这个网络开始,直到大约1994年,网络流量、网络上的主机数量等所有指标,都以每月约15%的速度增长。
这个网络可以说是在我们脚下爆炸式地扩张。我们极其幸运的是,TCP/IP协议套件和网络的基本理念允许它以这样的速率增长。
但我们不得不进行大量创新。为了允许多个网络相互交互,边界网关协议(BGP)必须被开发出来。我们还必须建设能力越来越强的路由和通信设施。
我记得大约在1990年左右,这个网络增长如此之快,以至于很明显这些T1线路将无法满足需求。因此我们必须升级到下一步,即DS3速率,从1.5兆比特提升到45兆比特。这是一个非常大的跨越,容量增加了30倍。
为了做到这一点,我们最终创建了另一个非营利组织,名为“高级网络与服务公司”(Advanced Network and Services)。Merit仍然是该资助项目的主要研究者,但它将开发这个新的45兆比特网络的任务分包给了总部位于纽约埃尔姆斯福德(Elmsford)的高级网络与服务公司。
NSFNET是当时最快的互联网网络,直到最终退役。
退役是在1995年,当时国会认定联邦政府不应再支持一项在他们看来本应已成为商业设施的服务。
我永远不会忘记坐在国会大厦的一个听证室里,旁边是米奇·卡普尔(Mitch Kapor,Lotus创始人)和一些小型互联网初创公司的CEO们。他们向国会抱怨,国家科学基金会资助NSFNET是不合适的,因为他们可以作为商业服务来提供这项服务。
然而,就在他们提出投诉的同时,他们却在使用NSFNET作为备用网络,当他们在全国范围内可靠性低得多的网络出现故障时,由NSFNET来承载流量。
MCI后来当然也成为了主要的互联网服务提供商,同样使用着相同的技术。
在一个经典的“创新者窘境”时刻,当时作为互联网骨干网路由技术领导者的IBM,却决定终止他们在开发这些路由器方面所做的所有工作,因为他们认为这会威胁到其专有网络业务。这几乎一手导致了思科(Cisco)而非IBM成为美国占主导地位的路由器公司。
本节课中,我们一起学习了NSFNET的诞生故事。我们看到,一个最初看似不可能的提案,通过整合大学(密歇根大学/Merit)、产业界(IBM、MCI)和政府(州政府、NSF)的多方资源与远见,最终构建了推动互联网早期爆炸式增长的关键基础设施。这个故事不仅关乎技术,更关乎合作、创新以及在面对质疑时坚持愿景的重要性。NSFNET的成功为互联网的商业化铺平了道路,而其建设过程中的经验与教训,至今仍具启发意义。
015:ARPANET上最早的两个数据包
在本节课中,我们将跟随伦纳德·克莱因罗克的讲述,了解ARPANET(互联网前身)上首次成功发送两个数据包的历史性时刻。我们将探索其背景、技术实现过程以及这一事件的重要意义。
当你走进加州大学洛杉矶分校(UCLA)博勒尔大厅的后门入口时,可能会注意到地面上有一组看似随意的瓷砖图案。
如果你花点时间观察这个图案,可能会意识到这些瓷砖代表了0和1。
你甚至可能发现,这些瓷砖代表的是ASCII字符。
地面瓷砖上的字符拼写出的正是“Lo and behold”,用以纪念1969年10月29日从UCLA发送到斯坦福研究院(SRI)的、ARPANET上最早的两个数据包“L”和“O”。
网络诞生的初衷
上一节我们看到了纪念首次通信的物理印记,本节中我们来了解构建这个网络的原始动机。
美国国防部高级研究计划局(ARPA)需要一个网络,以便在全国范围内共享其提供给研究人员的大型计算资源。
犹他大学拥有出色的图形操作系统,斯坦福研究院(SRI)拥有数据库系统,我们(UCLA)拥有模拟系统,伊利诺伊大学拥有高性能计算系统。
每当ARPA引入一位新的研究人员,他们会提供生物医学计算机,但研究人员会说:“我想要和其他人一样的能力,我想要图形、数据库等等所有功能。”ARPA的回应是:“我们负担不起。如果你想做图形,就通过我们打算建立的网络登录到犹他大学的机器上。”
因此,建立网络的需求是为了实现资源共享,而不是为了保护美国免受核打击。
当鲍勃·泰勒成为ARPA主任时,他认识到了资源共享的需求。请注意我使用的短语——“资源共享”,这正是我融入网络设计中的核心理念。他们希望共享外部资源,其理念是:如果你不使用,别人就可以使用。
项目的启动与设计
了解了网络的需求后,ARPA开始着手实施这个项目。
他们请来了拉里·罗伯茨(我在MIT的同学,事实上是室友)来管理这个项目。他来找我,因为他了解我的工作,看过我做的模拟,事实上我还在TX2计算机上用过他编写的编译器。他说:“伦,我们需要知道这东西是否可行。”他知道我有理论支撑,可以向他证明这是可行的。事实上,他甚至说过,如果不是确信这东西能行,他绝不会决定花费美国政府的数百万美元。
设计工作始于1967年,由我们少数几个人开始规划。1968年底,他们发出了招标书。同年年底,位于马萨诸塞州剑桥的BBN公司赢得了合同,负责生产第一个交换机(IMP)。我们(UCLA)很早就成为了网络测量中心,以便对其进行测试。
在设计阶段,一些杰出的人物贡献了他们的想法:
- 赫布·巴斯金(时间共享专家)在场,他说:“如果这个网络不能在半秒内传递短消息,我就无法用它进行分时操作。”规格要求是半秒,实际上我们后来达到了200毫秒。
- 韦斯·克拉克说:“将通信与计算分离。”
- 我说:“听着,如果这将是一个实验(我也对研究和实验本身感兴趣),我们必须内置软件以便进行实验。”我们需要流量生成器、测量钩子(用于评估测量结果的位置)等软件。
霍伊·弗兰克开始讨论网络可靠性,他说:“这个网络,如果任何部分发生故障,网络不应该崩溃。”因此我们设计时没有说它必须有“五个九”(99.999%)的可用时间,我们更务实,我们说:如果任何一个单一部件故障,其他所有人仍然可以通信。
为了实现这一点,你需要一种称为两连通拓扑的结构,即在每对节点之间都有两条独立的路径。
所有这些规格都交给了BBN公司。他们建造了交换机,并在合同签订八个月后按时将交换机交付给了UCLA。他们需要交付这项新技术、新应用、新设备。他们做到了按时、按预算交付。
首次连接与历史性时刻
上一节我们介绍了网络的设计与构建,本节我们来看看历史性的首次连接是如何发生的。
交换机运抵这里。我们将其接入,在1969年劳动节后的第二天,即9月2日,比特开始在我们的分时机和那个交换机之间来回传输。
但这只是一个单节点网络。计划是另一个同样的交换机将被交付给北边400英里外的斯坦福研究院(SRI)。他们会将那个交换机连接到他们的主机上。这件事发生在十月份。
于是,在十月份,我们有了一个两节点网络:我的机器、我的交换机,以及40英里外的另一个交换机和SRI主机。连接它们的不是单条线路,而是一组4条、每条8千比特/秒的线路。我们必须将它们捆绑在一起,连接起来。这就是骨干互联网的第一段。
那么,当你有了一个两节点网络时,你能做什么呢?现在你可以做点事情了。于是我们决定,在十月底的一个深夜,我和程序员查理·克莱恩在房间里说:“看,让我们在这两台机器之间进行通信吧。”
我们接通了在那边的程序员比尔·杜瓦尔,我们说,让我们简单地从一个连接到我们主机的终端,登录到那台机器。其理念是,这两者都是分时系统,它们期望终端连接进来并使用机器的服务。关键在于:坐在这边的终端,通过这个奇妙的网络,登录到那边的机器,就像你是一个本地用户一样。这很简单。
我们一切准备就绪。让查理坐在那边的终端旁。为了确保通信正常,我们准备了一个电话听筒。事实上,我认为我手头就有它,我很高兴拥有它。那是一部电话,我们把它接上,我们使用了高速线路的一部分来建立电话连接。有趣的是,我们使用过时的电路交换技术来验证新的分组交换技术,这确实帮助我们理解了正在发生的事情。
查理输入了“L”,他说:“你收到L了吗?”比尔说:“是的,收到L了。”输入“O”,“你收到O了吗?”我们试图输入“LOGIN”(登录),收到了“O”,输入“G”,收到了“G”,然后系统崩溃了。
因此,网络上第一条消息是“LO”,正如“Lo and behold”(你瞧)所示。现在这尤其有趣,因为如果你走出这个走廊,到小巷里,从这个建筑的另一个入口进来(我大约一周前才发现这个),你会踩在一个平台上,那里有一组瓷砖马赛克,图案很奇怪。结果发现,那是“Lo and behold”的ASCII码。我不知道是谁做的,大概一年半前,某个非常聪明的人把它放在了那里。
那就是第一条消息,1969年10月29日,晚上10点30分。你现在正踏入1969年。我们复原了这个房间,让它看起来、闻起来、感觉起来都和大约45年前一样。
互联网的第一件设备
上一节我们重温了首次通信的激动时刻,本节我们来看看见证这一时刻的物理设备。

看这边。你看到的是互联网上的第一件设备。这就是第一个接口消息处理器(IMP),UCLA的IMP一号。这是一台由BBN公司改造的霍尼韦尔小型计算机,用作交换机,实现了分组交换的功能。这正是它当年服务、开启互联网的同一块四平方英尺的物理空间。注意,这是互联网上的第一件设备,而且是真品。就是它,我保存了很多年,多次试图扔掉它。大多数拥有IMP的人都把它们扔掉了。全世界只剩下两三台,但这是第一台,是第一个部件。
如果你打开这台机器,你将有幸闻到它的气味。是的,它有一种不寻常的气味,能立刻把你带回到那个年代。情感上,这很棒。看看这个,这是军用级别的坚固机器。这台机器本质上是当时最先进的小型计算机,由BBN改造。我第一次看到它是在1968年的一次联合计算机会议上,在巨大的展厅里有成千上万的人,你看到那些吊在天花板上的吊钩了吗?他们就把这样一台机器挂在天花板上,在空中摇摆着运行。还有一个光着膀子的大个子,皮肤上抹了油,拿着一个大锤,在那里“哐、哐”地敲,以展示这是军用级别的,很坚固。
最重要的文档
除了硬件,记录这一事件的文档同样至关重要。
你问过谁和我一起工作。嗯,我的软件工作人员之一是约翰·波斯托尔,事实上,这是他的照片。他不是一个嬉皮士,尽管看起来像。他基本上是那个督促我的团队规范做事并保存记录的人。他说:“我们必须记录下发生的事情。”于是,在十月初,基本上是IMP到达一个月后,我们开始保存一份IMP日志。你知道,这是一份工程师的日志,不是随便的涂鸦。我们使用旧的SDS日志本,记录下发生的一切。
最重要的记录恰好就在这里:1969年10月29日,晚上10点30分。查理·克莱恩,那个当时和我在房间里的程序员,写下了这条记录:“与SRI通话,主机到主机。”这是今天唯一一份关于首次消息发送的记录。
早期实验与分布式控制
有了网络之后,研究和实验便随之展开。
我们拥有了技术。我们开始用第一个实验节点进行测量,所以我们看到了事情的发生。我们有一条50千比特/秒的线路,路由程序一次只能选择一个方向,那么如何在两个节点之间获得超过50千比特/秒的速率呢?如果任何时候都只有一条路径。我们说,哦,这很明显。当这条路径堵塞时,就切换路径,所以当那条路空着而这条路堵塞时,你就从那条路发送,这样就能接近100千比特/秒的总速率。但是我们可以让它崩溃,正如我所说,每次我们让它崩溃,我们就会打电话给BBN说:“修复它。”我们这样做,让他们修复,因为他们不给我们代码。他们一直保持代码的专有性,直到ARPA说:“我们为那代码付了钱,你们必须公开。”他们照做了,我们看到了代码,每次我们拿到代码,他们都要花六个月来修复任何问题。这次我们发现了故障,我们有了代码,我们告诉他们如何修复。仍然花了六个月。
在设计阶段我非常感兴趣的一点是分布式控制。为什么?当我还是克劳德·香农的学生时,香农的伟大工作表明,当许多事物相互作用时(例如长码字),这些涌现属性就会出现。所以我说,我想设计大型网络。在一个大型网络中,你不能有单一的控制点,你必须将其分布式化。那么分布式控制意味着什么?意味着你将权力委托给所有对等体。
当ARPA开始资助首席研究员时,他们有着相同的理念,他们说:“看,你是个聪明人,这里有些钱,去做你最擅长的事,我们不会坐在你头上指手画脚,让好事发生。”所以,我们在这里,我是这种资金的接受者,我用它做什么?我有我的研究生,我给他们任务,说:“看,我们需要一个主机到主机协议。去吧,我不会坐在你头上指手画脚,放手去做。”这不是产品思维,而是研究和开发,以创造新事物,而且效果非常好。
本节课中,我们一起学习了ARPANET上首次成功发送“L”和“O”两个数据包的历史事件。我们从网络资源共享的初衷讲起,回顾了项目的启动、关键设备IMP的交付、首次连接的实验过程,以及记录这一里程碑的珍贵日志。我们还探讨了早期网络实验中的发现和分布式控制的设计理念。这次通信不仅是技术上的突破,也标志着互联网时代的开端,其背后的协作与创新精神至今仍在推动着网络技术的发展。
016:15_凯蒂·哈夫纳与《巫师熬夜的地方》
概述
在本节课中,我们将跟随记者兼作家凯蒂·哈夫纳的讲述,了解她撰写互联网早期历史著作《巫师熬夜的地方》背后的故事。我们将探索她如何发现并记录ARPANET的创建过程,如何与关键人物互动,以及她所揭示的互联网诞生初期那些不为人知的细节与精神内核。
发现被尘封的故事
上一节我们介绍了互联网发展的宏观背景,本节中我们来看看一位记者是如何深入挖掘并记录这段历史的。
凯蒂·哈夫纳发现,在20世纪60年代,存在一个由程序员和硬件工程师构成的完整世界。她认为这其中必定有非常有趣的故事。她的编辑西蒙与舒斯特出版社对此给予了百分之百的支持。这本书最初的工作标题非常糟糕,叫做《构建网络空间》,因此他们知道需要一个新书名。
合作与研究的展开
当研究工作进行到大约一年时,凯蒂感到有些力不从心。她当时有一个新生儿,同时在《新闻周刊》工作。她意识到这个故事的内容远超她个人所能完成的范围,所需时间可能要翻倍。就在这时,她已故的丈夫马特加入了该项目。马特是一位更优秀的作家,拥有绝佳的头脑,能够理解任何事情。
凯蒂确实发现了一个关于ARPANET如何启动的、令人难以置信的、未被讲述的故事。需要明确的是,这本书的重点是ARPANET,而非整个互联网。事实上,关于项目如何获得资金的那一章《最快的一百万美元》正是由马特撰写的,故事发生在当时的IPTO(信息处理技术办公室)。
接触关键人物与原始资料
以下是凯蒂在研究中接触到的关键人物和发现的珍贵资料。
- 拉里·罗伯茨:当时负责IPTO的拉里·罗伯茨是最令人惊叹的发现之一。凯蒂在伍德赛德他的家中,从车库里翻出了许多装有旧ARPANET文件的盒子。里面甚至有他与麻省理工学院人员的旧信件。最重要的是,他拿出了一套令人惊叹的草图,就像是他大脑内部的构思,描绘了网络所有可能的配置。这些早期图表都被收录在书中。
- BBN公司:BBN公司是这本书背后的重要推动力,本书的创作部分源于他们的想法。我们常常忘记的是,BBN公司制造了第一台IMP(接口消息处理器)。书中有一个非常有趣的故事:马萨诸塞州参议员泰德·肯尼迪曾给BBN发去一封贺信,祝贺他们获得了“跨信仰”网络的合同(实际上应为“接口”处理器)。这是一个完全未知的领域,他们必须建造这台硬件并为其编程。
- 雷·汤姆林森:凯蒂花了很多时间与BBN的员工相处。其中一位是雷·汤姆林森,大家都说应该去采访他,因为他发明了“@”符号。雷是一个安静的人,当凯蒂敲开他的门询问此事时,他只是简单地说“哦,是的”,然后解释了他是如何做到的。如今,雷·汤姆林森发明“@”符号的故事已成为一大传奇。
研究方式与难忘的经历
与之前需要四处奔波采访黑客的书籍不同,这本书的研究更多地依赖于电子邮件往来。研究过程持续了几年。从1993年开始写这本书时,电子邮件已经更加普及,因此他们进行了大量的邮件沟通。
凯蒂也进行了许多实地采访。当时她住在奥斯汀,但经常前往波士顿。她还飞往洛杉矶,花了很多时间与约翰·波斯特尔相处,后者是域名系统的发明者。约翰于1998年或1999年去世,令人震惊。
关于约翰·波斯特尔,任何见过他照片的人都会对他那长长的、像圣诞老人一样的胡子有印象。令人惊奇的是,凯蒂在他位于洛杉矶地区的小房子里度过了很多时间。他的冰箱上贴满了家庭照片,照片里的人都有着长长的白胡子,是一个非常有趣的家庭。他开着一辆破旧的沃尔沃,生活极其朴素,毫无矫饰。他所有的历史文件都存放在他小房子的书房里,以及他工作的玛丽安德尔湾ISI。
他们首先在波士顿的一次ARPANET周年聚会上共度了许多时光。凯蒂认为这个人非常关键,但他非常安静,要让他敞开心扉确实需要花费大量时间。他们还在1995年夏威夷的一次早期互联网会议上见面并相处了很久。他非常耐心地试图向凯蒂解释各种事情。
但凯蒂永远不会忘记在夏威夷INET会议上发生的一件事。当时她正在问约翰一些问题,但他看起来完全心不在焉。他说:“不,不,那边有个人我必须去谈谈。”那是一个来自某个小国家的人,想和约翰讨论他们国家的域名问题。对约翰来说,解决那个人的问题远比在ARPANET历史中巩固自己的地位重要得多。
当凯蒂撰写这本书时,她给约翰发了一封邮件。她永远不会忘记这封邮件。她出于好奇问道:“为什么你从来没想过要变得富有?”因为那时人们刚刚开始通过互联网致富。那是1995年。约翰回答说:“那根本就不是这件事的意义所在。”这正是约翰的为人。
大公司的短视与历史的偶然
凯蒂一直好奇的是,这个项目是如何绕过AT&T的。这真是缺乏远见的典型例子。保罗·巴兰曾试图说服AT&T建造他设计的卓越网络,但失败了。后来的这批人也一样。想想看,在当时,AT&T拥有垄断地位,他们真的在乎吗?他们拥有贝尔实验室,但这是一种“非我发明”综合症。他们就是看不到其中的价值,真是缺乏远见。
但谢天谢地,他们没有染指这个东西。IBM也一样。最初的硬件是基于霍尼韦尔机器的,谢天谢地霍尼韦尔现在已经不存在了。这听起来可能有些苛刻,但这一切都是一系列愉快的偶然巧合。
阿尔·戈尔的角色
阿尔·戈尔的角色被完全低估和低估了。每次凯蒂告诉别人她写了一本关于互联网起源的历史书时,人们都会嘲讽地说:“哦,是阿尔·戈尔发明的吗?”凯蒂不会附和这种嘲讽。阿尔·戈尔在政策和方向制定方面发挥了巨大作用。当克林顿竞选总统时,他们发布了一份非常重要的技术白皮书。没有像阿尔·戈尔这样的人提供的支持,你无法做成这样的事情。
总结
本节课中,我们一起学习了凯蒂·哈夫纳撰写《巫师熬夜的地方》的经历。我们看到了她如何通过挖掘车库里的原始文件、采访关键创造者(如拉里·罗伯茨、雷·汤姆林森和约翰·波斯特尔),来还原ARPANET的创建故事。我们了解到早期互联网的发展得益于一群聪明、专注且不计较个人财富的先锋,同时也因为AT&T等大公司的短视而幸运地避免了被商业巨头控制。最后,我们也认识到像阿尔·戈尔这样的政策制定者在推动这项技术发展中所扮演的重要但常被低估的角色。这段历史充满了偶然、理想主义与合作精神,正是这些因素共同塑造了我们今天所知的互联网。
017:Nii Quaynor 将万维网引入非洲
概述
在本节附加内容中,我们将跟随 Nii Quaynor 博士的讲述,了解互联网在非洲大陆,特别是加纳的早期发展历程。我们将看到在缺乏政府支持的情况下,个人和私营部门如何推动关键互联网基础设施的建设,以及非洲技术社区如何通过协作与自治来促进网络的成长和治理。
加纳的起步:私营部门主导
上一节我们介绍了全球互联网的发展背景,本节中我们来看看非洲的具体情况。在加纳的案例中,政府最初对互联网建设并无兴趣。因此,推动建设的责任落在了私营部门身上。
但这里所说的“私营部门”主要指我个人。我并非一个庞大的私营实体,而是通过私营部门的机制来完成这项工作。我意识到,不能无限期地等待大学或政府来行动,因为他们依赖于政府拨款且效率不高。
我曾公开表示,我不能等待政府为国家建设互联网。既然我知道如何做,我就会去做,无论规模多小,只为证明我们有能力做到。通过这种方式,或许能创造一种动力和势头,推动事情向前发展。这就是我尝试做的事情。
非洲大陆的多样化路径
非洲大陆的情况多种多样。例如在埃及,当时的部长是我们互联网协会的同行,因此政府主导的建设取得了很大成功。在南非,则主要依靠强大的学术力量推动。
但在西非大部分地区,最初的推动力主要来自私营部门。我曾四处协助,例如帮助多哥的私营部门、冈比亚的私营部门,甚至向尼日利亚提供知识产权,帮助他们起步。这形成了私营部门互助、但为了公共利益的模式。我们深感必须共同前进,否则将一事无成。
以下是当时采取的一些具体协作方式:
- 提供中转服务:我允许一些国家(如多哥)的数据通过我的节点中转。
- 派遣工程师:我派遣工程师前往其他国家(如冈比亚)安装节点。
- 提供培训:为其他国家(如斯威士兰)的电信公司人员提供培训。
- 提供咨询服务:为埃塞俄比亚等国提供咨询服务。
这就是大致的发展进程。建立域名系统是必要的,因为这是传输邮件等服务的基石。下一步则是提升连接容量。这虽然是一项艰巨的任务,但也是一个良好的社区活动,因为我们希望互相帮助。这种精神一直延续至今。
非洲网络运营商小组的诞生与使命
这种互助精神催生了非洲网络运营商小组。该组织的主要功能是帮助运营商进行自我支持。我们通常专注于在许多不同领域,特别是基础设施相关领域,建设自身能力。
这些领域主要包括:
- 路由问题
- 服务器服务问题(针对那些希望构建信息和资源的人)
AFNOG 现已发展成为非洲技术社区的主要聚会场所。我们每年只聚会一次,为期两周。第一周用于培训获准参加研讨会的人员,目前大约有四个研讨会(最初只有两个,后来逐渐增加)。我们还在路由课程中增加了法语分支。
在针对学生的研讨会之后,我们会举行会议,试图引导学生了解真实世界的运作。会议包括多种形式:
- 分组讨论会:让参与者进行深入讨论。
- 教程环节:例如关于安全的教程。
- 会议报告:有一天专门用于各种领域的会议报告或30分钟简短演讲。
这已成为工程师们的重要聚会。这是一项服务社区的活动,无人从中获取报酬。我们努力为学生参与者筹集参会资金。思科一直是常规的资金来源,我们也从互联网名称与数字地址分配机构、互联网协会、法语国家组织等获得资助。
随着时间的推移,我们尝试改变计划,使其更具可持续性。我们要求来自运营商、电信公司等机构的参与者支付更多费用,以便为学术和研究界人士筹集参与资金。AFNOG 至今仍是许多运营商的重要聚会点。
当然,一旦实现连通,一系列其他问题便开始浮现。但我们认为所有问题都可以在同一个环境中解决。因此,我们在同一会议平台上聚焦不同议题:
- 国家代码顶级域名问题
- 非洲顶级域名组织
- 研究教育网络建设挑战
在一定程度上,AFNOG 已从一个研讨会性质的活动,转变为一个可以孵化许多新事物并让其蓬勃发展、拥有自己生命的聚会场所。
.africa 顶级域名的漫长征程
.africa 顶级域名的案例非常有趣,我们花了10年时间才获得授权。起初,我们并不完全清楚它是什么,但知道它非常重要。作为工程师,我们明白这是需要关注的核心,而非其他。
我们开始围绕它建立共识。1995年首次提出提案,1997年形成正式文件,然后继续推进。但我们意识到,不能仅仅停留在非正式会议上,必须就具体细节达成一致。
关键细节之一是董事会成员的构成。我们决定按地理区域分配席位,以避免某个地区代表过多而另一个地区没有代表的情况。每个次区域选举一人,由成员选举产生,任期为一到三年(错开任期)。这就是当时的方案。
但困难在于,随着我们不断学习,越来越多的人参与进来。每当我们认为就某事(例如合作)达成一致并准备推进时,就会有更多人加入并提出异议。有一个时刻非常令人困扰。
当时 Jon Postel 也在场。他已同意让我们来做这件事。我邀请所有人参加与非洲工程师的会议,突然有人站起来说:“不,为什么不把它分给各个国家,让大家各自为政?” 那一刻,我觉得世界末日到了。说实话,我从未感到如此羞愧,因为我当时在非洲技术社区和全球社区之间扮演着接口角色。我本人认识 Jon Postel,他们是来帮助我的,而我的人却没有准备好。
Jon 当时只能对我说:“让你的人准备好。” 所以我必须继续努力,直到能够建立足够的共识。最终在2005年,我们成功了。
在那时,我也清楚地意识到两个因素:在这10年里,我可能得罪了很多人。这是不可避免的,因为三个现有的注册管理机构必须为 .africa 让出一些空间。因此,我显然不能继续以同样的身份担任领导。当然,我没有告诉同事们我的真实想法。
另一个事实是,如果我继续留任,可能会减少其他人的参与度和积极性。而我最需要的是更多人付出努力,而不是一个人单打独斗。我知道这个领域非常广阔,即使我不做这些事,也有足够多的事情可以做。
因此,我的战略思考是:找到一种退出方式,但不告诉任何人,确保不透露太多信息以免被人利用。每个人都以为我将成为下一任正式主席(而非初创主席),我也让他们这样认为。但在董事会会议上,我决定解散董事会并为此投票。然后,我决定不再参选。
同时,有七位贡献者可能颇具争议。我试图劝阻他们不要参选,并在某些情况下告诉他们,如果他们参选,我将动员社区投票反对他们。有些人尝试了,结果被否决了。但这促使了一批新的、愿意为社区服务的人参与进来,这种态势一直持续至今。我认为这对非洲是一件非常好的事。
本地化政策的力量
当然,我们也观察到,制定本地政策的能力确实会影响任务的执行效果。例如,在获得授权后不久,我们拥有的邮件列表类型开始向小型运营商倾斜,因为大多数运营商实际上规模较小。他们试图融入一个由大型运营商社区(如与 RIPE NCC 和 ARIN 合作的环境)主导的市场,但这效果不佳。
因此,我们通过改变政策来承认我们运营商的规模,从而能够增加成员数量。此外,我们也意识到地址分配政策需要调整。我们改变了政策,使分配规模小于典型运营商的常规标准。
核心理念是:通过了解社区,并制定适合该社区自身的政策,能够更好地满足社区的需求。这在非洲 IPv4 地址资源的增长和采用上得到了体现。
总结
本节课中,我们一起学习了 Nii Quaynor 博士分享的互联网在非洲发展的关键历程。我们看到了在资源有限和政府支持不足的情况下,个人倡议、私营部门驱动以及技术社区协作如何成为非洲互联网建设的核心动力。从加纳的初步实践,到非洲网络运营商小组的成立与壮大,再到 .africa 顶级域名长达十年的申请之路,整个过程凸显了因地制宜制定政策和培育本地技术社区自治能力的重要性。这段历史不仅是技术的引入,更是关于赋权、协作和非洲技术人才自主发展的故事。
018:美国华盛顿特区
在本节课中,我们将回顾密歇根大学《互联网历史、技术与安全》课程在华盛顿特区举行的一次附加办公时间。本次会议旨在与学员进行线下交流,我们将看到课程讲师与学员们的简短互动。
会议开场与介绍
讲师首先欢迎大家来到华盛顿特区的线下办公时间,并邀请每位参与者进行简单的自我介绍。
以下是参与本次办公时间的部分学员自我介绍:
- JR
- John
- Thorston
- John
- Joe
- Desie
- 刚总
- Baldwin

会议规模说明
在大家自我介绍后,讲师特别指出,这是课程迄今为止规模最大的一次线下办公时间活动。
本节课中,我们一起参加了课程在华盛顿特区举行的线下办公时间,见证了讲师与学员们的现场交流,并了解到这是该课程系列活动中参与人数最多的一次。这种线下互动有助于增强学习社区的连接。
019:通往万维网之路 🌐
在本节课中,我们将跟随互联网发展的脚步,从美国跨越海洋,来到欧洲核子研究组织(CERN)。我们将了解这个全球顶尖物理实验室的独特文化,并探寻万维网在此诞生的故事。
上一节我们介绍了NSFnet的建立,本节中我们来看看欧洲核子研究组织(CERN)如何成为孕育万维网的摇篮。
CERN:一个独特的科学社区 🧪
CERN是一个高能物理实验室,以其周长27公里的环形对撞机而闻名。科学家们在此让粒子对撞,拍摄碰撞瞬间,并寻找(或已发现)希格斯玻色子。这是一个非常酷的地方,我推荐你去参观。

CERN是一个来自世界各地的物理学家访问、居住并进行实验物理合作的中心。整个机构都围绕着那些实验设施运转。因此,无论你来自俄罗斯、澳大利亚、德国、美国还是日本,只要你是一名高能核物理学家,你就必须与CERN合作或在此工作一段时间。那些在CERN工作过的人往往能做出最杰出的发现。


这些项目周期极长,且需要各种不同领域的顶尖人才,例如冶金学家、焊工、物理学家、工程师、设计师和项目经理。参与人员众多,资金充足,且每个人都相当聪明。因此,他们的一项活动就是寻找乐趣,组建了各种俱乐部,如垒球俱乐部、板球俱乐部、布鲁斯音乐俱乐部。这有点像这些人经常远离家乡,所以彼此之间会一起找乐子。


塞网乐队与第一张网络照片 🎸




这里有一张我要展示给你的“塞网乐队”的照片。他们因成为网络上第一张乐队照片而闻名。有些人好奇他们是否是网络上的第一张照片。他们是一个嘟·喔普风格的和声团体,演唱类似50年代风格的嘟·喔普歌曲,观看他们的表演非常有趣。但他们的歌曲内容是关于粒子、互联网、调制解调器之类的东西,这些都是我非常关心的主题。
遗憾的是,他们从1990年代初(大约是1991、92年)就开始表演,如今成员们都已长大,他们的孩子也长大了,我们的孩子都已上大学。他们在2011年进行了告别巡演,其中一位成员搬去了澳大利亚,所以我们不知道塞网乐队是否还会重组演唱。但目前,他们处于无限期休团状态。
为了您的观赏乐趣,请快速浏览一首或多首塞网乐队的歌曲。
亲历CERN:合作与文化的体验 🏛️
正如我所说,你应该去参观CERN。我曾有幸多次访问CERN。我曾以专业身份访问,用我可能提到过的Sematic软件帮助他们录制讲座。我也曾以协助其他技术事务、教学与技术融合等身份访问。他们有一个很棒的咖啡馆,如果你与那里的人合作,还可以去后台休息,这非常酷。他们还有一个很棒的博物馆,你可以在那里看到第一台网络服务器和其他各种很酷的东西。
在2006年,我很幸运受邀在CERN做了一次演讲,内容是关于Sakai以及他们如何利用Sakai进行协作工作。我带着我的家人一同前往——我的妻子特蕾莎、女儿曼迪和儿子布伦特。照片中是我们,我们当时在一个“坑”里。这个坑大约有八九层楼深,六层楼高,这里是粒子束进入的地方,距离坑底有三层楼。当时这个设施只完成了不到三分之一,所以我们可以参加导览。因此,我有一张戴着安全帽在CERN坑道里的全家福,这非常酷。
另一次访问时,我和我们密歇根大学的一位物理学家一起演唱了歌曲。就是照片中这位,他叫斯蒂芬·戈尔德,是Atlas项目的物理学家,但他也是一支全部由物理学家组成的乐队——“坑道布鲁斯乐队”的领队。他让我唱了一首歌。我当时是去为他做一些视频工作,碰巧在附近,就在一次行程中顺道拜访。我和另一位密歇根大学的同事拿了几台摄像机,为他制作了一些音乐视频,并把塞网乐队的一些音乐视频放到了网上。然后他们让我唱了一首歌,叫《Got My Mojo Working》。我会和大家分享我演唱《Got My Mojo Working》的视频。需要说明的是,乐队里的每个人都是物理学家,而且基本上每个跳舞的人也是物理学家。
我向大家展示所有这些,是为了让大家感受CERN除了艰苦工作之外,所充满的活力与欢乐。不知道你是否注意到,唱到一半时,我虽然对那首歌了如指掌,但还是把歌词写在了手上。所以中途你可以看到我看了一眼我的手来确认歌词,这让我看起来有点傻。我真的很想唱歌,只是唱得不是很好。感谢斯蒂夫让我和乐队一起演唱。
回归正题:探寻万维网的起源 💡
现在让我们回到手头的主题。1999年,我访问了CERN,那是我在密歇根大学任职初期的任务之一,目的是帮助他们进行讲座录制。我当时说:“嘿,我有一台摄像机,万维网的发明者们还在这里吗?”那时我们还有一点电视节目的制作经验,所以我前去采访了当时仍在CERN的罗伯特·卡里奥。他的办公室就在咖啡馆街对面,我们走进他的办公室,递给他一个麦克风,开始谈论万维网的起源。罗伯特·卡里奥是与蒂姆·伯纳斯-李共同发明万维网的人,后者正是在CERN构建了万维网。接下来,让我们听听罗伯特·卡里奥的讲述。
本节课中我们一起学习了CERN作为全球高能物理研究中心独特的协作文化与社区活力,了解了“塞网乐队”等趣闻,并跟随讲述者的亲身经历,为下一节深入探寻万维网在CERN诞生的具体历史时刻做好了铺垫。
020:万维网联合发明者Robert Cailliau访谈
概述
在本节课中,我们将跟随Charles Severance教授,聆听万维网联合发明者Robert Cailliau的分享。他将回顾万维网在CERN诞生的早期历史,解释其设计初衷、与Gopher等早期系统的竞争,以及技术发展过程中的关键决策与挑战。
万维网的诞生背景与需求 🌍
上一节我们介绍了互联网的早期发展,本节中我们来看看万维网诞生的具体环境。Robert Cailliau身处瑞士日内瓦的CERN,这里是世界顶尖的高能物理研究机构。
CERN的大型合作项目涉及遍布全球的研究人员,他们以CERN为基础设施进行实验。因此,整个高能物理学界早在网络出现之初,就已形成了一个微缩的信息社会。由于存在分发文档的需求,我们建立了集中式数据库等系统。
例如,CERN文档库和斯坦福大学维护的大型物理学文献数据库。在万维网出现之前,访问这些资源需要确切知道通过网络登录哪台计算机等一系列复杂操作。当万维网出现后,需要知道访问哪台计算机、如何与之通信等必要性都消失了。人们可以建立带有链接的页面,只需跟随链接就能到达想去的地方并找到一切。而且,所有内容都采用相同的格式,这一点也非常重要。
我们打破了垂直市场中那种专有的商业系统,那种系统除非你坚持使用某家特定公司的产品,否则无法获取任何东西。我们所做的、在顶层的浏览器和底层的数据库之间的那种横向切割,我认为这对使其对我们有用至关重要,同时也使其对所有人都变得有用。这就是最初的情况。
早期发展:第一台服务器与扩展 🖥️
Tim和我就是在这台NeXT机器上完成了所有早期工作,时间大约在1990年。第一台服务器在1990年底上线。大约一年后,美国的第一台服务器在斯坦福大学上线,这与我之前提到的那个数据库有关。
在某种意义上,我们当然在1990年就将其称为“万维网”,Tim在那之前其实也想到了类似的名字。实际上,我们无法构建一个比当时已无处不在的互联网更小的东西。但我们最初可能没有预料到或明确瞄准的是,让这个系统在当时的学术界和互联网人士社区之外也变得有用。
互联网走出学术世界,我认为是在1994年之后。1994年是我所称的“万维网之年”。那时我们举办了第一届会议,Mosaic浏览器真正起步,商业世界开始注意到它,公司纷纷成立等等。在那之前,它主要存在于大学和学术界。
与Gopher和Mosaic的竞争 ⚔️
上一节我们了解了万维网的早期部署,本节中我们来看看它与其他早期系统的竞争。Gopher更简单,更容易安装和填充内容。这解释了它为何在一段时间内取得了更快的成功,因为两者大约同时起步。
由于万维网某种程度上更复杂,它的发展花了稍长的时间。但Gopher也几乎立即被集成到了网页浏览器中。因此,在短暂接触两者之后,人们看到了万维网能做什么以及Gopher能做什么,就会选择万维网。但安装Gopher要容易得多,这就是为什么它曾一度领先于万维网。
同样的情况也发生在Mosaic上。Mosaic并不更好,但更容易安装,因此它领先于我们当时正在尝试做的事情。我的意思是,在浏览器环境方面,我们完全被击败了,因为我们试图用我们的浏览器实现的功能比Mosaic试图做的要更复杂。
这证明,有时更好的东西会被扼杀,或者需要更长的时间才能出现,因为更简单的东西就像病毒一样,会超过另一个。我认为真正的问题在于,NeXTSTEP开发系统比其他任何系统都好得多,以至于将我们在这里拥有的东西移植到任何其他平台,需要花费多一个数量级的时间。
例如,在我们的系统中,每次点击都会打开一个新窗口;点击图表,会在另一个窗口显示图表;点击地图,会得到可完美缩放打印的Postscript格式地图。但当你试图将其移植到另一个系统时,就会遇到阻碍。这就是为什么在Mosaic中,你只有一个窗口,每次点击都会替换那个窗口的内容,这不是我们想要的。每次打开页面,图片是内联的,所以你需要滚动,这些都不是我们想要的。这对用户来说非常复杂,而且效率不高。但你知道,这是在NeXT系统上实现的最简单方式。所以,适应性决定了传播。
开发工具与HTML的演进 🔧
如果你想制作一个编辑器,而不仅仅是展示页面但无法与之交互的东西,这之间有巨大差别。我们1990年的系统也是相关的。直到NeXT停止生产硬件,我不得不从NeXT回到Macintosh时,我才不得不学习HTML。
在此之前,我们生成了所有文档和资料,但我们从未见过任何HTML,也从未见过任何URL。因为你是通过说“把这个链接到那个”来创建链接,而不是通过输入URL。有一个特殊的窗口可以调出,如果需要可以在里面输入URL,但这不常用。我指的是导航部分,也就是HTTP等等,我是在后来以艰难的方式学会必须使用那些,因为你已经失去了原来的系统。
现在,我发现HTML是一种辉煌的语言。我不是普通用户,但我喜欢编写它。我享受文字处理,就像TeX一样。它和TeX一样“糟糕”,完全一样。你能想象吗?标题有绝对的层级,拜托。HTML,我们必须意识到,我们在这里从未超过四个人:Tim、我自己和一个学生。因此,像投入大量精力思考HTML这样的事情,是优先级较低的事务。当然,等到有时间去做的时候,它已经传播得无法修复了。这有点像病毒。
幸运的是,我们现在有了XML,这将有所帮助。这台机器,现在已经超过10年了,它运行着Unix,但有一个漂亮的图形界面。它还有其他一些有趣的特点,使我们能够在如此短的时间内完成万维网的开发。它拥有一个完全面向对象的开发系统,其库中已经提供了一个可编辑的文本对象。Tim正是用它制作了第一个浏览器。
这一切都很好,因为它让我们非常快速地达到了目标。然后我们意识到,现实世界使用的是那些糟糕的机器,将这里的系统以同样优雅的方式移植到那些糟糕的机器上,是一项巨大的工作。大约在93年年中,我认为我们做出了最后的努力,推出了一些也旨在成为编辑器的浏览器,但那时已经没有希望了。
总结
本节课中,我们一起学习了万维网联合发明者Robert Cailliau的回顾。我们了解了万维网在CERN高能物理研究需求中诞生的背景,其旨在打破信息孤岛、通过链接和统一格式简化信息获取的核心设计思想。我们看到了它与Gopher、Mosaic等早期系统的竞争,其中易用性和可移植性在推广初期起到了关键作用。最后,Robert Cailliau也坦诚分享了早期开发在资源有限的情况下,对HTML等标准未能深入完善的遗憾,以及将先进但小众的NeXT系统理念移植到大众平台的巨大挑战。这段历史揭示了技术创新与普及之间复杂的互动关系。
021:万维网成为内容载体 🌐

在本节课中,我们将探讨万维网如何从一个协作编辑工具演变为主要的内容载体。我们将回顾早期网络的技术限制、设计选择背后的逻辑,以及关键人物如何无意中推动了这一转变。
我非常喜欢那段视频,它对我来说非常珍贵。我在1999年拍摄了它。你可能注意到了,我当时留着马尾辫和“村民乐队”式的小胡子。当我第一次来到密歇根大学时,我觉得自己很特别,所以留了马尾辫。我现在没有马尾辫了,头发颜色也更深了一些。
我特别喜欢他开始对我大喊的那个时刻,因为我喜欢HTML。如今的HTML5比当时的HTML好得多。他完全正确,HTML并不优雅,但它同时具有惊人的力量。我们能看见它的事实意味着人们相信它,它不再是魔法。
你可能注意到的另一点是,他对于网络浏览器应该如何设计有着非常强烈的观点。当你第一次听时,这些观点可能显得不合逻辑。他说的一件事是,每张图片都必须在同一个屏幕中弹出。而Mosaic浏览器是用一个页面替换整个页面,图片是内联显示的,这不是我们想做的。这是罗伯特说的。
今天,在Farmville和Facebook的时代,这听起来可能不合逻辑。但你必须理解,在1990年,网络环境与1995年时都大不相同,它非常慢。如果你在每个页面上都放图片,加载速度会变得极其缓慢。
因此,当时的用户界面是这样的:你有一个包含文本、粗体、斜体等内容的文档,当你点击某个东西时,你会得到一个新页面。然后这个页面需要一段时间才能显示出来,因为网络确实非常慢,电脑也很慢。
所以,这对你来说可能听起来像是一个非理性的设计选择。但在1990年,这是一个完全理性的设计选择。随着时间的推移,随着网络速度变快、计算机速度变快、技术能够更自然地处理图像,这种设计选择变得越来越不理性。
上一节我们回顾了早期网络的设计哲学与限制,本节中我们来看看故事如何继续发展。
我们的故事从伊利诺伊大学厄巴纳-香槟分校开始,我们去了密歇根大学,在1990年建立了NSFNET,随后CERN创造了万维网。当美国第一台网络服务器在斯坦福大学上线时,网络向前迈进了一大步。
事实上,它是第一台网络服务器并不那么重要,重要的是服务器上有什么。上面有30万篇物理学论文,存储在斯坦福直线加速器中心(SLAC)的大型机数据库中。罗伯特·卡约在对话中提到了这一点。接下来发生的事与保罗·昆斯有关,我们马上会见到他。他说他会把自己的数据库放上去。这个数据库非常有名,人们有很多方式使用它,但有了网络,它变得更容易使用。
因此,我认为在某种程度上,保罗·昆斯无意中创造了第一个搜索引擎,第一个主要用于人们阅读内容的网站。在那之前,蒂姆·伯纳斯-李和罗伯特真正试图构建的是一个允许对存储在世界各地服务器上的信息进行集体编辑的工具。
让我们来听听保罗·昆斯怎么说。
022:保罗·昆茨与美国首个Web服务器 🌐



在本节课中,我们将跟随保罗·昆茨的讲述,了解世界上第一个Web服务器在美国斯坦福直线加速器中心诞生的背景、过程及其深远影响。我们将看到,一个为解决特定领域访问难题而生的工具,如何意外地成为推动互联网普及的关键转折点。
背景:SLAC数据库的访问难题 🔧
在Web出现之前,位于斯坦福直线加速器中心的数据库虽然被全球的研究人员使用,但访问过程极为困难。用户不仅需要在大型机上拥有账户,还必须掌握一套复杂难用的数据库查询语言。
为了改善这一状况,保罗·昆茨在Web诞生前就发明了一种方法,允许用户无需登录即可查询数据库,这类似于后来的即时通讯概念。随后,人们又增加了电子邮件接口,用户可以通过邮件发送查询并接收结果。
灵感的诞生:在CERN的会面 💡
1991年9月,当保罗·昆茨在欧洲核子研究中心时,蒂姆·伯纳斯-李将他拉到办公室,首次演示了万维网。
起初,保罗并不十分感兴趣。然而,当蒂姆演示如何通过Web查询大型机上的帮助系统数据库时,保罗立刻将两者联系起来。他意识到,既然能查询帮助系统,那么同样也能查询SLAC的数据库。这个想法激发了他的兴趣。
关键在于,他们无法改变数据库内置的查询命令,但网页可以提供示例并提醒用户查询语句的格式,从而降低使用门槛。
首个Web服务器的搭建 🛠️
保罗被问及是如何创建第一个Web服务器的,是重头编写协议,还是使用了现有软件。
他使用了用C语言编写的CERN服务器软件。幸运的是,当时SLAC的大型机上恰好有一个C编译器。保罗所需要做的,就是编写一些额外的C代码,用于接收用户的查询请求,并将其转换为数据库能理解的查询命令。
1991年12月12日,他们安装并启动了SLAC的Web服务器,并立即邀请蒂姆·伯纳斯-李进行了首次测试。
转折点:法国南部的研讨会 🚀
真正的转折点发生在大约一个月后,即1992年1月,在法国南部举行的一场关于高能与核物理计算主题的研讨会上。
蒂姆·伯纳斯-李在会上做了一个长达一小时的主题演讲,向来自全球的大约200位高能物理学家介绍了万维网。作为演示的一部分,在演讲的最后,他连接到了SLAC的Web服务器,并现场进行了一次数据库查询。
这个演示让在场所有人震惊不已。因为每个人都熟知那个数据库,也深知访问它有多么困难。而现在,蒂姆只是点击了几下,输入几个查询词,结果就立刻被格式化地返回了。
保罗形容,在那一个小时里,对Web感兴趣的人数从大约20人激增到了200人。随后,这200人回到各自的国家,如果每人再告诉10个人,那么在一周之内,对Web感兴趣的人数就增长到了2000人。保罗认为,这正是Web腾飞的关键转折点,蒂姆也认可这一点。
Web迅速普及的原因:双赢模式 🤝
保罗分析了Web能够如此迅速被商业领域接受并普及的原因。他认为这创造了一个双赢的局面。
- 对消费者而言:他们可以进行价格比较、自主浏览航班时刻表、快速可视化所需信息,并且可以凭借耐心尝试各种组合来降低价格。这极大地改善了消费体验。
- 对提供商(如航空公司)而言:由于这一切都通过运行在机器上的软件完成,成本大大降低。因此,他们同样是赢家。
总结与反思 🧠
在本节课中,我们一起回顾了美国首个Web服务器的诞生故事。我们看到了一个为解决特定科研领域访问难题而生的工具,如何通过一次关键的公开演示,迅速点燃了全球的兴趣,并因其创造的双赢商业模式而得以飞速普及。
保罗在演讲接近尾声时提出了一个发人深省的观点:在进行大型科学研究时,我们往往在解决或寻找一些公众尚未意识到自己存在的问题的方案。
因此,谁能预料到,从高能物理研究中会诞生出像万维网这样的东西呢?这似乎是不可预测的。但事后看来,这又是一个自然而然会发生的地方。正如他所说,对于Web的出现,这既是一个“事件”,也是一个“自然的结果”。
023:Mosaic浏览器的诞生 🌐

在本节课中,我们将探讨万维网从学术工具转变为大众平台的关键转折点。我们将了解早期网络的局限性、竞争技术Gopher的兴衰,以及最终由NCSA开发的Mosaic浏览器如何引爆了互联网的普及浪潮。
早期网络:内容与认知的挑战
上一节我们介绍了万维网的诞生,本节中我们来看看它早期面临的推广困境。蒂姆·伯纳斯-李发明了万维网,但最初几年它主要局限于物理学家和小部分技术爱好者群体。
保罗·孔斯(Paul Coons)的优势在于他拥有大量内容,并且这些内容至少对物理学家而言极具价值。他为我们创建了第一个搜索引擎,并证明了网络可以成为一个以消费内容为主的环境,且极其有用。试想一下,如果没有网络也没有内容,人们如何能知道网络是查看内容的绝佳方式呢?
我记得当我第一次看到网络时,我的反应是:好吧,它有图片,但那又怎样?因为像Gopher这样的其他工具同样出色。直到我看到了使用网络前往联邦快递追踪包裹的功能,我才觉得:这才是个很酷的想法。事实上,Gopher无法做到这一点。
1993年的十字路口:Gopher与Web的竞争
到1993年,也就是万维网诞生约三年后,网络实际上并不那么流行。1991年是保罗·孔斯的时代,但用户主要是物理学家和包括我在内的少数极客。而在1993年,Gopher是更优秀、更受喜爱的产品。
问题再次归结于网络速度太慢,基于纯文本的应用比高度图形化的应用运行得更好。有一个广为流传的故事发生在1993年3月,当时互联网工程任务组(IETF)召开会议,为所有这些技术制定标准。
以下是当时会议的情况:
- 他们为Gopher安排了一个“兴趣小组”会议,也为万维网安排了一个。
- Gopher的会议人满为患,房间里挤不下,人们不得不坐在地上,挤在门口。
- 相比之下,万维网的“兴趣小组”会议几乎没人参加。
蒂姆·伯纳斯-李当时很沮丧,他说:“我为这个东西工作了三年,它比Gopher更好,但没人想用。”房间里的人告诉他,原因在于它太复杂,太难搭建和运行了。在那个遥远的年代,万维网的成功并非板上钉钉,前景并不明朗。1993年是一个真正的分水岭,很多事情都可能走向不同的方向。
业界的远见与史蒂夫·乔布斯的间接影响
当时,大型电信供应商发布了一系列全国性的广告宣传活动。电信行业看到了这一切正在发生,他们知道这将是巨大的变革,知道它将允许多种方式的交互。他们并不愚蠢,他们完全知晓。这系列精彩的广告令人惊叹。
回顾这段历史,思考那些可能不存在的联系,很少有人真正指出史蒂夫·乔布斯可能对万维网产生过影响。但在某种程度上,他确实颇具影响力。史蒂夫·乔布斯创立了苹果公司,后在麦金塔电脑发布后被赶出苹果。他创立了一家名为NeXT的新公司。
如果你仔细听罗伯特·卡里奥和保罗·孔斯的讲述,你会发现,在整个90年代初期,我桌上用的电脑都是NeXT计算机。NeXT是史蒂夫·乔布斯被苹果解雇后创立公司时打造的一款大胆的、基于UNIX、高度网络化、具备高分辨率显示器的强大计算机。他最终回到了苹果,而NeXT的技术也成为了麦金塔电脑的基础——即麦金塔操作系统。因此,如果你在麦金塔上操作出错,可能会看到一个以“NSS”开头的错误信息,那就是源于这些NeXT计算机上的操作系统NeXTSTEP。
在万维网的头三年,它几乎只在NeXT计算机上运行。甚至服务器和浏览器都在NeXT计算机上。因此,NeXT计算机在某种程度上确实承载了早期的网络。我在史蒂夫·乔布斯去世几个月后,为我们《IEEE计算机杂志》2012年1月号写了一篇文章,试图至少从历史角度指出史蒂夫·乔布斯在帮助互联网形成方面可能有多么重要。
回归起点:伊利诺伊大学与Mosaic的诞生
我们的旅程始于伊利诺伊大学厄巴纳-香槟分校(NSF网络在此创建),经历了密歇根大学(我们在此创建了网络和第一个网络服务器),现在我们将回到旅程的起点——伊利诺伊大学厄巴纳-香槟分校。正是这里的人们,真正引爆了网络,将网络从学术空间推向了商业和终端用户空间。
当时,各种条件正在成熟:网络在增长,速度在变快,个人电脑正以非常快的速度变得更好(因为IBM PC已诞生近十年),90年代的计算机及其显示能力正在飞速提升。
在这样的环境下,伊利诺伊大学厄巴纳-香槟分校的国家超级计算应用中心(NCSA)开发了一款开源的网页浏览器,它能在Mac、Windows和UNIX系统上运行。这是第一款实现跨平台的网页浏览器。
Mosaic 的出现,真正使得普通家庭用户,只要拥有PC或Mac电脑并能连接网络,就可以开始享受万维网上涌现的所有新内容。
此后,NCSA的员工、学生程序员和软件开发人员共同成立了网景公司(Netscape),以将这一切商业化。约瑟夫·哈丁(Joseph Hardin)是NCSA软件开发团队的负责人,该团队负责构建并以开源形式发布Mosaic网页浏览器和HTTPD网络服务器,并将Mosaic免费提供给公众。
总结
本节课中我们一起学习了万维网早期发展的关键阶段。我们看到了尽管技术优越,但早期万维网因复杂性和网络限制而难以普及,一度被更简单的Gopher协议超越。我们了解了史蒂夫·乔布斯通过NeXT计算机为早期网络提供了重要的硬件和软件基础。最终,伊利诺伊大学NCSA中心开发的跨平台、开源且免费的Mosaic浏览器,打破了这些障碍,成为将万维网推向大众、引爆互联网革命的决定性产品。从学术工具到全球平台,Mosaic浏览器的诞生是互联网历史上一个至关重要的转折点。
024:约瑟夫·哈丁与国家超级计算应用中心Mosaic项目 🌐


概述
在本节课中,我们将跟随约瑟夫·哈丁的讲述,了解国家超级计算应用中心(NCSA)的特殊环境,以及Mosaic浏览器诞生的背景、开发过程与早期影响。我们将看到一个小团队如何创造出改变世界的工具,并探讨其引发的连锁反应。
NCSA:一个充满能量的特殊之地 ⚡
NCSA是一个非常特殊的地方。这种地方极为罕见:那里充满了能量、拥有大量资源、具备远见的领导力,并为人们提供了大量自由探索的空间。
从一开始,拉里(Larry)就认识到,并且我们所有人都热爱这样一个想法:桌面上的这些小东西,实际上是每个人通往后台大型机器的门户。而所有这些,最终将汇聚成屏幕后方的一片“云”。我们需要思考如何让用户尽可能深入地参与进来。
从同步协作工具到Web浏览器 🔄
上一节我们介绍了NCSA充满活力的环境,本节中我们来看看他们最初的工作重点。
最初,我们的兴趣在于同步协作工具。当我们思考协作工具时,我们正在构建一个名为 NCSA Collage 的东西。
以下是NCSA Collage工具集的特点:
- 它是一套工具集。
- 一个重要的特点是,它们能在三种平台上运行:为Unix用户准备的X Window、Windows环境和Mac系统。
- 这某种程度上是底层文化的一部分:我们希望让尽可能广泛的社区能够使用它们。
我们开始致力于协作工具。每个平台上都有一组人员,致力于让人们能够实时共享他们的数据图像、数据电子表格,以及他们发现的、包含有趣参考文献的论文,并与地理上相隔遥远的同事分享。
“我们可以做得更好” 💡
正是在这样的背景下,开发者戴夫·汤普森(Dave Thompson)——他是Collage工具的X Window主要开发者——下载了一个早期的Web浏览器。
他下载的是CERN的浏览器。他费了很大劲让它运行起来,然后拿给马克·安德森(Mark Andreessen)和我看。
我们俩看着屏幕,戴夫描述了他展示给我们的东西。我们说:“我们可以做得比那个更好。那是个复杂的系统,而且界面看起来很糟糕。”戴夫说,对他来说,下载、安装、编译并让它运行起来非常痛苦,而且它只能在NeXT工作站上运行。如果它能跨所有三种平台运行,并且像我们其他工具一样即插即用,那该多酷。
Mosaic的诞生与早期反响 🚀
马克和埃里克(Eric)正在开发第一代NCSA Mosaic,这是一个X Window应用程序。当时还没有人开发Windows或Mac版本。
我们看到它的第一个版本在什么时候出现?是93年初,还是92年底?大概是93年初。当然,反响非常热烈。能够点击某个东西然后立刻看到它,这太棒了。
实际上,超链接作为一种用于文档导航和检索的用户界面,结合在文档中,简直太棒了。很多人立刻理解了它,尤其是那些在NCSA和公司里使用工具的人。
我记得有一次,一位惠普(HP)的高管来访。马克和埃里克写了一个小过滤器,能将Unix文档转换成HTML,并将所有引用变成链接。他们访问了HP的站点。那位高管问:“这是从哪里来的?”因为他能在NCSA的房间里看到自己所有的HP文档,并且非常轻松地浏览。我们说:“嗯,你们后面有三四个人架设了HTTPD服务器,你可能还不知道那是什么。”他说:“我从来没听说过这个。”我们说:“但这可能就是未来,对于那些试图以分布式方式管理文档的人来说,会非常有用。”
我们继续讲着这样的故事,这位高管在他的座位上兴奋得坐立不安。这就是我们得到的反响类型。
“一枪响遍世界” 🌍
到了93年底、94年初,出现了一套完整的Mosaic浏览器,可以在X Window、Mac和Windows系统上运行。正是在这个时候,当时的互联网协会主席说:“NCSA打响了全世界都听到的一枪”,因为它现在可以在所有这些平台上使用,任何人都可以使用它。
我们看到HTTPD服务器的数量和流量呈指数级增长,等等,所有这些都发生了。当然,蒂姆·伯纳斯-李(Tim Berners-Lee)这时会说,他从一开始就看到了指数级增长,他是对的。
我们俩都对。我们从推出浏览器的时候看到了增长,它们确实对此有帮助。但我认为,在人们能够轻松地用HTML发布材料并做所有事情这方面,已经存在一个潜在的指数增长基础。
商业化的浪潮与浏览器之争 💼
我记得和来访的商业人士坐在房间里,我会把整个软件开发团队叫进来,说:“听听这些人怎么说,然后告诉我你们的想法。”
当时没有人确定它会发展成什么样子。有些人开始构建浏览器,但基本上没有成功起步。直到网景(Netscape)公司开始努力,我认为才有了足够的能量和资源来真正推进、驾驭和推动这股浪潮。你知道,在几个月内组建起几百名开发者的团队。
然后,他们很快就被微软投入的努力所超越。我记得一位网景的员工说,他从西雅图的一些人那里开会回来,他们说微软现在有……这是在网景处于巅峰时期,对吧,处于游戏的顶端。这家伙说:“微软刚刚告诉我,他们大约有2000名开发者在做这个。”他说在那一刻,他意识到我们将遇到一些困难。
对标准与多样性的期望 📜
当然,我们一直觉得应该不止有一种浏览器。我们之所以希望这样,是因为我们对标准和开放性感兴趣。如果在某个时期只有一种浏览器,那么那家公司就可以决定标准是什么。早期有各种各样的麻烦,比如在浏览器中加入不同的功能来推动标准,而不是由标准来驱动浏览器,诸如此类的事情。所以我们希望有一些多样性。
但是,在93年,也许到94年,没有人……我认为在93年,我们仍然对我们所拥有的东西感到惊讶,对得到的反响感到惊讶,并且对整个想法——即这将是一个很多人会觉得有用、并且我们玩起来会很有趣的东西——感到欣喜若狂。我们并没有真正的预感。
每个人都谈论,我们谈论了所有的可能性,但我们并没有真正预感到它会如此迅速地起飞并被商业化。
总结
本节课中,我们一起学习了NCSA Mosaic浏览器诞生的故事。我们看到了在一个资源丰富、鼓励创新的特殊环境中,一个小团队如何因不满现有工具的复杂与局限,而萌生“我们可以做得更好”的想法,并最终开发出首个广泛流行的图形化Web浏览器。Mosaic的跨平台特性使其迅速传播,引发了互联网使用的指数级增长,并拉开了后来浏览器大战的序幕。尽管开发者们最初并未预料到其巨大的商业影响,但他们对开放标准和多样性的追求,为早期网络的发展奠定了重要基础。这段历史提醒我们,伟大的创新往往源于解决具体问题的简单愿望,并在开放协作的环境中开花结果。
025:Mosaic浏览器的历史回响
在本节课中,我们将探讨Mosaic浏览器如何引发互联网产业的连锁反应,特别是微软公司如何应对网景(Netscape)的崛起,以及随之而来的市场剧变与投资热潮。

上一节我们介绍了Mosaic浏览器的诞生与早期影响,本节中我们来看看它如何重塑了整个商业格局。
约瑟夫在最后部分,重点阐述了微软公司如何被迫对网景浏览器作出反应。突然间,整个市场开始剧烈震荡,并伴随着海量投资与高度竞争。
以下是这一系列事件的关键发展脉络:
- 微软的应对:面对网景浏览器的迅速普及及其对操作系统潜在主导地位的挑战,微软必须采取行动。
- 市场震荡:互联网领域突然出现了激烈的竞争,导致市场格局发生快速且剧烈的变化。
- 投资热潮:大量资本涌入互联网相关企业,形成了巨大的投资强度与关注度。
这些因素共同作用,标志着互联网从学术和研究工具,向一个充满商业机遇与竞争的全新大众市场时代过渡。

本节课中我们一起学习了Mosaic浏览器引发的商业与技术浪潮。我们看到,一个关键软件如何迫使科技巨头调整战略,并催生了激烈的市场竞争与空前的投资热度,这为后续互联网的爆炸式增长奠定了基础。
026:墨西哥墨西哥城 🇲🇽
在本节课中,我们将跟随查克教授来到墨西哥城,与几位课程学员进行面对面的交流。本节内容记录了这次线下办公时间的见面场景。
学员介绍
以下是查克教授在墨西哥城遇到的几位学员的自我介绍。
- 学员一:你好,我是乌奥。非常高兴能在这里见到查克博士和其他同学。
- 学员二:我是索马尔。和查克博士在一起真的很开心,他能来墨西哥城真是太棒了。
- 学员三:大家好,我是伊姆。这是我第一次参加Coursera的课程。我非常感谢查克博士,也很高兴认识一些新同学。
- 学员四:大家好,我是埃里克,我也非常高兴见到你,查克博士。
- 学员五:大家好,我叫安娜,这太棒了。
本节课中,我们一起见证了查克教授在墨西哥城与学员们的线下会面。通过几位学员简短的自我介绍,我们可以看到在线课程如何连接起全球各地的学习者,并促成线下的交流与互动。这体现了互联网教育超越地理界限、促进人际连接的魅力。
027:万维网元年 🌍

在本节课中,我们将探讨1994年如何成为万维网发展的关键转折点。这一年,图形化浏览器Mosaic的发布、首个全球性网络会议的召开以及商业力量的涌入,共同标志着互联网从学术研究领域迈向了大众化和商业化时代。
1994年:变革之年
上一节我们回顾了万维网的早期发展,本节中我们来看看1994年发生的决定性变化。这一年与1993年截然不同,其变革主要由Windows和Mac版本的Mosaic浏览器发布所触发。
商业化的开端
随着Mosaic浏览器的普及,互联网不再仅仅是思想和研究的领域,资金开始涌入,我们开始看到一场重要的转型。
以下是1994年发生的几个关键事件:
- NCSA的团队于1994年4月创立了网景公司。
- 首届万维网会议在瑞士举行。
- 不久之后,另一场首届万维网会议在芝加哥召开。
- 1994年10月,蒂姆·伯纳斯-李离开欧洲核子研究中心,创立了万维网联盟。
- 到1994年底,内置了TCP/IP协议和网络浏览器的Windows 95 Beta2版本出现。
因此,在短短不到一年的时间里,世界发生了永久性的改变。
网景与微软的竞争
网景公司处在这场变革的前沿。他们最初基于开源产品开发浏览器,但很快决定将浏览器和网络服务器转向更专有的模式,试图利用网景独有的技术来创建分布式计算应用。
他们开始挑战微软。当网景公司明确表示将开发一种能在Mac、Windows和Linux上运行软件的方案时,微软感到了威胁。因为这可能意味着操作系统变得不再重要,而微软在Windows操作系统上投入巨大,操作系统的边缘化将严重威胁其核心业务。
因此,微软推出了内置TCP/IP和免费网络浏览器的Windows 95作为回应。网景的举动在某种程度上刺激并警醒了微软。
浏览器大战的升级
微软试图收购网景,但网景拒绝出售,希望获得更多资金。随后,微软誓言要摧毁网景。
面对微软的进攻,网景首先试图通过开发更好的软件来竞争,例如我们稍后将介绍的JavaScript语言。之后,他们又尝试从“专有的反派”转向“开源的正派”,但这策略并未成功。他们创建了开源的Mozilla项目,该项目最终演变为Mozilla基金会,并诞生了Firefox浏览器。
下节预告
接下来,我们将认识两位关键人物,他们如今都是Mozilla基金会的高级领导者。
以下是即将登场的两位人物及其背景:
- 布兰登·艾克:Mozilla基金会的首席技术官。他将讲述1995年他在网景公司用10天时间发明JavaScript的故事。
- 米切尔·贝克:Mozilla的创始人之一。她将讲述网景公司如何衰落、被美国在线收购,以及他们如何从网景的代码库中剥离出Mozilla代码库,最终形成Firefox代码库的过程。她还会介绍Firefox那个带来巨大收益的搜索框创意。
本节课中我们一起学习了1994年如何成为万维网发展的分水岭,见证了商业力量的介入如何引发了网景与微软之间的“浏览器大战”,并了解了这段历史如何为后续Firefox等开源浏览器的诞生埋下伏笔。
028:Mozilla基金会主席Mitchell Baker访谈
概述
在本节课中,我们将跟随Mozilla基金会主席Mitchell Baker的讲述,了解Mozilla项目从Netscape浏览器中诞生、经历内部冲突与挑战,最终成功推出Firefox浏览器的完整历程。这段历史揭示了开源项目管理、商业利益与社区价值观之间的复杂博弈。
从Netscape到Mozilla
Netscape以其产品Netscape Navigator闻名,这是网络上第一个商业浏览器,也是第一代真正用于上网的工具。它在初期取得了成功,但随后面临来自微软的激烈竞争。
面对竞争,一种不同的策略是构建共享资产,而非让Netscape与微软直接对抗。Netscape计划汇集志愿者和其他商业伙伴的贡献,共同构建一个共享的产品。这群人深知,要成为真正的开源项目,不能仅仅宣称“我们是开源的”,而必须采用不同的管理方式。
当时,有六到八名员工受雇于Netscape,作为Mozilla.org的成员,另有约100到150名Netscape工程师负责构建Netscape产品,同时将他们的工作贡献给Mozilla开源项目。我们都在同一栋楼工作,参加许多相同的会议,但目标略有不同。
尽管我们称之为Netscape产品,但Netscape已被AOL收购。因此,客户端本身的重要性在下降,其价值主要在于为AOL网站引流。然而,我们Mozilla.org团队却是一个特例,因为我们的使命是建立一个成功的开源项目。
这种情况持续了相当长一段时间,期间存在诸多紧张关系。对Mozilla来说,那是一段黑暗的岁月。我们逐渐认识到,需要重建我们的核心技术。这花费了很长时间,在此期间,市场份额持续下滑,并且围绕“如何运营一个真正的开源项目”产生了诸多矛盾。
事实证明,存在两种相互竞争的观点。一种观点认为开源非常棒,代码公开,欢迎任何人使用,我们也绝对希望建立一个庞大且积极参与的贡献者社区。但所有决策和权力都将由管理层掌握,我们将做出我们认为最有利于我们试图构建的Netscape浏览器的决定。
我们Mozilla.org团队坚信这不会成功。构建一个仅对AOL有利的产品,无法从个人志愿者或商业伙伴那里获得我们成功所需的那种兴趣。我们发现,志愿者的不同视角极大地提升了项目质量。他们承受着巨大的产品发布压力,因为公司需要它。这不仅在技术和工程上很困难,而且我们Mozilla.org团队还在不断指出其他问题:你们可能认为它足够好,但我们根据收到的反馈告诉你们并非如此,你们需要改变一些开发流程和管理实践。
他们的想法可能是“我们需要按原计划继续推进以发布产品”。但不幸的是,Mozilla社区是正确的。当那个产品(Netscape 6)发布时,它失败了。它被普遍认为是一个糟糕的产品,也几乎被公认为是Netscape产品线的终结。所有那些在Netscape 4时代坚持并等待更新的用户,在得到它后基本上都放弃了。
这确实对我们没有帮助,很不幸。但它也强化了我们的观点:我们对世界的看法并非疯狂。因此,我们继续前进。开发我们喜欢的技术和产品仍然漫长而缓慢。管理上的紧张关系仍在继续,Netscape 6的失败并没有让事情变得更容易,对AOL方面的人来说当然也是如此。
用户界面与商业利益的冲突
我们深入思考了用户界面。UI是持续的紧张来源,但在我们这里情况更糟,因为一些争论在于:从AOL的角度看,在产品界面中加入某些东西(无论是导向AOL网站的按钮、包含广告的内容,还是合作伙伴付费的功能)是有意义的,这能产生收入,可能将用户导向我们的网站,部分用户可能真的喜欢它。但从他们的角度来看,这一切都说得通。然而,如果你不是在为AOL构建AOL客户端,而是试图构建一个供许多人使用的开源产品,那么这些功能显然是一个巨大的负面因素。因此,这些争论非常激烈。
客户端管理团队有非常明确的机会和想法,希望将其融入产品中。而我们这个小团队则持反对意见,我们会说:“不,你不能把它放进核心产品。欢迎你们建立自己的构建系统,稍后再添加进去。”这就是我们最终处理这些事情的方式。我们确实开发了一个系统,但这当然很尴尬,你总是在纠结什么应该放在哪里。结果证明,即使在早期,开源Mozilla版本的产品也比Netscape版本接受了更多的测试。我们还尝试建立一些如今看来很正常的质量机制:你被聘为员工,并不能自动获得将代码提交到代码库的权利。需要有人审查你的资格,了解你的编码水平、工作方式,以及如果你的代码出现问题该如何处理。这对于招聘经理来说是一个困难的处境:我刚雇了你,但你不能像你想象的那样高效,因为还有另一个小组的审查流程。我理解这为什么困难,但另一方面,作为一个开源项目,如果你无法控制代码质量,并且对此没有发言权,你就不够真实。
AOL客户端的命运在Netscape 6之后急剧衰落。因此,AOL有意裁员。在2001年的一次大规模裁员中,我被包括在内。这被视为一场权力斗争,因为到那时,关于我们在构建什么以及谁在做决策的争论在工程组织内部已经广为人知。这很难不被知晓。我的意思是,在任何地方都是如此,但在某些情况下,争论和错误报告也都是公开的。
因此,我被解雇了(取决于你如何描述)。事实证明,取代我的位置并不容易,我继续以志愿者身份工作。Netscape工程组织非常明确他们更愿意追随谁的领导。因此,我们必须找到一种方式,让剩余的Netscape/AOL管理层和我能够在一定程度上合作,以便他们能够发布他们想要的产品,而我则继续领导这个项目。我认为这令人惊讶,但对我来说并不那么意外。
志愿者时期与转机
因此,我作为志愿者在Mozilla项目上工作了数年,包括我们发布第一个产品(我们称之为Mozilla)的年份。我们在技术上为此感到非常自豪。在当时,许多人对它的优秀程度感到惊讶,但它的用户体验并不好。最终,我暂时与Mitch Capor一起从事另一个开源项目。
这很幸运。他启动了这个开源项目,并联系Brendan和我进行交流学习。他计划前来与我们交谈的那天,正是我被解雇的日子。这是一个奇怪的时机巧合。那是Chandler项目,在Firefox之前。Mitch一直是Mozilla的支持者,即使在Firefox之前他不喜欢那个产品时也是如此。但他认识到我们是生态系统的重要组成部分。这种情况一直持续到2003年。
当AOL决定几乎完全停止对客户端的投资时,幸运的是,他们知道直接扼杀它并不好。他们对Mozilla、其名称和品牌有足够的了解,认为应该用它做点什么。最终,我与他们合作,他们中的一些人认识Mitch,而我也在与Mitch合作,他们也认识他。我们花了一段时间试图弄清楚什么是可能的。
我的伙伴Brendan仍在Netscape,非常渴望有所改变。许多我们想要的关键人物也迫切希望继续从事Mozilla的工作。最终,我们从AOL获得了200万美元的种子资金。Mitch在这方面和其他一些事情上提供了帮助,包括商标、Mozilla名称以及四台大型服务器。这些服务器在当时对我们至关重要,我们花了近18个月才通过AOL的采购流程获得。我想我们现在还保留着那些箱子,因为它们当时对我们太重要了。
于是在2003年,Mozilla基金会成立了。Mitch是第一任主席,因为他贡献巨大且能提供很多帮助。Brian Behlendorf和长期从事Mozilla工作的Chris Blizzard,以及Brendan和我都是董事会成员。AOL明白,当他们进行某种重组、关闭客户端团队时,会有三到四个人离开,这些人会加入我们。所有我们认为对Mozilla最有帮助的人都来了,大约有九到十个人。Mitch继续以兼职方式支持我和Mozilla的另一位成员。所以我们大约有10或11个人。
Brendan和我一直认为我们需要雇员。这令人兴奋,也有点害怕。因为我们知道200万美元用不了多久,我们还有很多工作要做才能让自己站稳脚跟。我们距离发布Firefox还有18个月(实际上是15个月)。这部分令人害怕,但也无比兴奋。Mozilla的一位朋友出现了,他们有一份大租约,可以转租给我们一点空间。我们在最里面找到了一个奇怪的小房间,甚至没有水槽,非常古怪,但我们真的很高兴。我们努力构建我们的产品。
转向消费者产品与Firefox的诞生
那时,我们做出了一个至关重要的根本性改变:我们明确决定要成为一个消费者产品。这看似显而易见,但当你是一群开发者时,这并不容易。这意味着你必须剔除许多对普通消费者来说笨拙的东西,你必须坚定地为普通消费者而非自己构建产品。我认为许多开源项目可能不想这样做,如果你不想,也不应该尝试,因为你必须坚持下去。于是我们开始这样做。
出乎意料地,一些来自爱尔兰和加拿大的视觉设计师出现了,我们开始有了漂亮的Logo(以前从未有过)和视觉元素。然后我们试图弄清楚如何处理起始页。因为我们知道Mozilla开发工具不是正确答案。我们花了很长时间,考虑了各种方案,最终决定:我们知道每个人都做的一件事是搜索。有人说:“很明显,你应该放BBC,至少在英文版本中。”但我们的工程师会说:“对我17岁的女儿来说,那显然不是她想要的,对我儿子来说也不是。”但每个人都使用搜索,所以我们想,我们有一个搜索框,也许我们也应该把它放在起始页上,让它更容易、更明显。于是我们去和搜索提供商洽谈。
我们与Google进行了富有成果的讨论。我认为他们也看到了世界上有一个Mozilla浏览器的价值,他们对此非常明确,我相信他们。他们也愿意达成商业安排。人们经常问Mozilla如何获得收入。与网络上大多数企业一样,通过搜索和广告。你进行搜索,会看到广告,如果你点击这些广告,就会产生收入,这笔钱通过系统流转,我们和其他浏览器制造商一样获得一小部分。这与网络上的商业模式非常相似。
我们做了一件我认为前所未有的事情:确保Google和Yahoo并排出现。你看不到它们并排,必须点击箭头才能看到,但它们都在那里。今天当我说起这个时,人们会笑我,因为你只看到一个。但那是我谈判的结果,那是一个我绝对会因此放弃交易的条款。因为我认为我以前从未见过这种情况。如果你登上飞机想要健怡可乐,但飞机只有健怡百事,因为那是他们的协议,你会生气。如果你想要健怡百事,却只有可口可乐。我用这个例子说:我不会让Firefox用户因为我们只提供其中一个而对我们生气。你们必须同意两者都出现在产品中。但这同时也是你们价值观的体现,是的,选择就在那里,我们可以做到。不这样做就是剥夺某人真正想要的选择,这对某人很重要。所以我们在搜索框中提供了这个选择。
但我们仍然不知道会发生什么。于是我们发布了Firefox。事实证明,我们预感正确的东西甚至超出了我们的认知。我们从0.8和0.9版本就看到了兴趣的显著增长,但一旦我们发布了正式版,它就爆炸了。
Firefox的成功与影响
部分原因是它是一个完美的产品。这一次,我们在市场正确的时间拥有了正确的产品。互联网能力已经足够发展,人们可以轻松下载浏览器,更多的人有带宽和能力,并且愿意尝试。这很好。我们有一个漂亮的产品,而且它是一个重要的产品。而当时的替代品(指IE)是可怕、危险且糟糕的。所有这些因素结合在一起,创造了巨大的兴奋感。
因此,Firefox的市场份额立即上升了一个百分点,并开始以巨大的数字增长。这是一场完全病毒式的风暴,除了产品本身和需求之外,没有任何其他驱动力。这让所有人都感到惊讶。我们原本希望能在下一年产生几百万美元来维持运营。我们有10或11名员工,算下来我们需要赚到足够的钱。结果,我们在年底前(可能是六周或八周)就产生了那么多钱。实际上,事情在那一刻变得更加紧张和忙乱,因为我们现在就像抓住了老虎的尾巴,但只有12个人。因此,立即增长的需求、压力和紧张感,与兴奋和成功交织在一起。我不知道,也许不像生孩子,但这种组合并不会立即变得更容易或更悠闲。是的,那是肯定的,我们当然看到了这一点。
Firefox于2004年发布,我们刚刚度过了它的八周年纪念日。到2004年底,很明显我们是一个不同的组织了。我可以说我们仍在与一组不同的问题作斗争,但我们已经从根本上改变了问题的性质。而且,我们是以用户喜爱的方式做到的。到2005年,我们进入了一个完全不同的世界,我们开始能够真正影响他人。这一直是目标。我的意思是,市场份额很好,人们喜爱你的产品也很好,市场份额是对你生产了正确东西的验证,这本身就很棒。但也许同样重要的目标是能够产生影响,不仅对我们自己,而且对行业中的其他人,这样我们才能开始看到更多我们关心的事物。
总结
本节课中,我们一起学习了Mozilla项目从Netscape的困境中诞生、在商业压力与开源理想间挣扎求存,最终通过明确聚焦消费者需求、坚持开放选择,成功推出Firefox浏览器并改变互联网格局的历程。这段历史强调了在技术项目中平衡社区价值观、产品质量与商业可持续性的重要性,也展示了坚持原则与灵活应对挑战如何能带来深远影响。
029:JavaScript的诞生与设计哲学
概述
在本节课中,我们将跟随JavaScript的发明者Brendan Eich的讲述,了解JavaScript在1995年诞生时的背景、设计目标、核心特性及其演变过程。我们将探讨它如何从一个在十天内完成的“伴生”语言,成长为驱动现代Web的核心技术。
背景与使命
我于1995年4月加入网景公司(Netscape)。
当时网景已经发布了其“Mosaic杀手”浏览器。如果你还记得,NCSA Mosaic曾是主导的浏览器,直到网景取而代之。
当我加入时,公司已运营约一年。我本有机会在最初加入,但我错过了。不过,我加入的时间点正好让我有机会去做一件吸引我的事:为网页设计师和程序员创建一个能直接嵌入网页的编程语言。
当时有一种正在兴起的语言叫Java,它更像一种专业语言,需要类型声明,并且需要编译才能运行。
而我想创造的是JavaScript,一种连编译器是什么都不知道的人也能使用的语言。它就像BASIC语言一样,可以直接加载运行。我们当时的定位很明确:这是两种不同的语言。
类似于微软的Visual Basic之于C++,JavaScript就是Java的“伴侣”。Sun公司的比尔·乔伊(Bill Joy)很喜欢这个想法并同意了。正是他签署了商标许可,使我创造的语言得以命名为“JavaScript”。
名称、定位与核心设计
JavaScript这个名字完全是个“谎言”,它与Java的关系并不大,更多是继承了共同的祖先——C语言的语法。
我们的目标是让它易于使用,用户可以复制粘贴代码,或从小脚本开始,逐渐发展成完整的程序。JavaScript取得了巨大的成功。
这同时也是一个极其匆忙的项目,因此其中存在一些错误和缺陷。
我认为很重要的一点是,我当时就知道语言会有错误和不足。因此,我把它设计成一种可塑性很强的语言。这使得开发者能够将它塑造成他们想要的样子,不仅能投射自己的API风格,甚至能投射自己的语言模式。
用埃里克·冯·希佩尔(Eric von Hippel)的话说,他们可以在其上创建自己的“创新工具箱”。所以,JavaScript不是一种试图将你限制在单一范式里的语言,它是一种多范式语言。
许多语言诞生后立刻会跌倒,需要第二次机会才能站稳。但JavaScript并没有真正“跌倒”。可以说,它从未有过一个“版本2”。这是事实,因为我曾尝试推动一个可能成为大版本2的“第四版”,但它失败了。
进化与“优良部分”
JavaScript一直在进化。网络本身就是关于进化的,身处其中时你可能不易察觉,因为这是微观进化。90年代的网页如今已不能全部正常渲染或工作,很多甚至已经丢失,只能通过互联网档案馆(web.archive.org)找到。
JavaScript在最初就拥有足够的“优良部分”(借用道格拉斯·克罗克福德的说法),或者说从其他语言继承了足够的“遗传物质”。
例如,从Scheme语言借鉴的一等函数(first-class functions),以及从Self语言借鉴的原型继承(prototypal inheritance)。
不过,从Scheme借鉴一等函数某种程度上是一种“欺骗”,因为存在许多差异,而我无法在JavaScript中完全体现这些差异,无法实现Scheme的那种方式。我当时的首要任务是让它“看起来像Java”,而且我只有10天时间来制作原型。所以,Scheme更多是一种精神上的影响,而非实际的影响。
但一等函数非常强大,并且非常适合事件处理的编程模型。我受到了阿特金森(Atkinson)的HyperCard的启发,所以你在JavaScript中能看到onclick这样的模式。HyperCard就有这种以“on”开头的事件处理程序模式,比如on page down。
早期的挑战与后来的复兴
回想90年代中期,JavaScript曾备受诟病,因为它主要被用于制造一些恼人的效果,比如状态栏的滚动消息、闪烁的图片,或者大量弹出的窗口。
我们本可以加入控制这些功能的设置,最终浏览器(如Firefox)引领了自动抑制这些恼人行为的功能,让体验变得好多了。
随着摩尔定律的持续作用,以及JavaScript在标准化过程中获得的一些进化改进,它在2004-2005年变得足够快、足够好,从而催生了Web 2.0革命。
我认为这与Firefox从IE手中夺回市场份额,以及开发者意识到客户端编程栈可以富有表现力、功能强大并且足够快速(主要得益于更快的计算机)是分不开的。
个人背景与快速实现
我接受过相关训练,有过很多语言实验经验,这让我能够借鉴Scheme等语言的思想。
当我最初进入计算机科学领域时,我是一个语言爱好者。我原本是数学和物理专业,最终本科毕业时拿到了数学和计算机科学学位。
我编程,学习形式语言理论,并将其应用于词法分析、语法分析,以及从语法自动构建解析器。我热爱这些东西,因为它们在理论上非常优美和清晰,至今变化也不大。
这让我有能力快速构建一个语言解释器。我可以编写解析器和扫描器,生成字节码。网景希望JavaScript也能用于服务器端嵌入,尽管它本可以是一种解释遍历树的方式,但我还是为它制作了一种内部字节码,而不是Java字节码(我认为Java字节码后来成了Java的一种负担)。
我能快速完成所有这些,是因为我以前做过。我在硅谷图形公司(SGI)做过,用来构建基于协议头字段表达式的网络监控工具包;我也出于兴趣做过,创建自己的语言。最后,我终于有机会真正快速地实现它。
市场博弈与设计妥协
速度对我而言是个问题,部分原因是我们都感觉微软会来追赶网景,因为他们曾在1994年底试图以极低的价格收购网景。我在加入网景前就听说过这件事。
同时,我们在与Java的关系上也处于一种奇怪的博弈论状态。即使在网景内部,也有人认为:“既然我们有了Java,真的还需要第二种语言吗?”他们没有看到这种“Visual Basic式的伴侣语言”对于更广泛的程序员、业余爱好者、设计师和初学者群体的好处。
在当时,为微软平台编写Java或C++需要大量培训,成本更高。而使用JavaScript,就像人们以前用BASIC和Visual Basic一样,可以更便宜、更广泛地粘合组件、设计页面和填补空白。
这再次实现了冯·希佩尔所说的“用户创新工具箱”方法。因为JavaScript可塑性强,而且有众多网页设计师,你会看到关于如何使用它的不同思想流派涌现出来。这在过去十年随着各种JS库的出现变得非常明显。
我认为这实际上是JavaScript的一个优势,正如我早先所说:我们不会告诉你只有一种写法,不会规定唯一“真正”的面向对象范式,也不会规定创建可重用抽象的唯一方法。
可塑性的力量与代价
当然,这并非没有缺点。对初学者来说可能有些困难,人们可能会重复发明某些轮子并犯错,或者不喜欢必须引入某个库。但你看jQuery库,因为它为人们提供了非常便捷的查询和操作范式,所以大受欢迎。
同样,这在JavaScript中不是强制性的,但很多人学习了jQuery后,就认为那就是JavaScript,甚至认为jQuery是一种语言。jQuery非常棒,John Resig(jQuery作者)曾与我们在Mozilla共事。但现在有太多优秀的库了,而且它们实际上正在变得更小、更具组合性,这是一个好趋势。
我认为,JavaScript通过其可塑性和对用户创新的培育,扮演了独特的角色。如果我当时做了一个更 rigid(死板)的东西,它很可能会失败。
我简直无法想象如何能摆脱C++那种面向对象的模式。部分原因是我不得不这样做,因为如果我在1995年5月那十天里就在JavaScript中实现了“类”,我想我会被告知:“这太像Java了,你在和Java竞争。”Sun公司的人可能会对比尔·乔伊抱怨更多,甚至可能毁掉这笔交易。
所以,我不仅受到时间限制,还受到市场命令的约束:让它看起来像Java,但不要让它太庞大,它只是Java身边一个有点傻的“小兄弟”语言。
隐藏的潜力与进化动力
但你在其中加入了一些原始特性,比如闭包(closures)等等,是的,这样你就可以构建你想要的东西。这种潜力在当时对很多人来说是隐藏的,甚至在第一个版本中,这些特性也并非都处于良好的工作状态。
但在接下来的几年里,它不仅变得广为人知,我认为在接下来的十年里,它更多地是被标准化和推广了。例如,克罗克福德(Croockford)大力倡导闭包模式及其良好用法。
人们发现JavaScript的可塑性、表达力和强大功能足够有吸引力,以至于有些人实际上抵制任何“版本2”的演进。他们会说:“我不希望你为某些模式添加语法糖或特殊形式,我更愿意自己编写或通过库来获取。”
你创建了一种抽象,让实现者可以做疯狂的事情,让人们可以重新思考解释器真正应该做什么。他们可以说:“好吧,V8引擎来了,它带来了前所未有的优化。”
我了解这些优化,因为我研究过Smalltalk语言本身,但之前没人投入时间和金钱去做。谷歌可能是第一个,其他公司如苹果和Mozilla也在尽力跟进。V8引擎在推动这方面发展上功不可没,尽管它并不完全像他们声称的那样是第一个出现的,因为大家都在2008年左右集中发力,但它确实非常有帮助,向人们展示了可以做到什么程度。
未来展望:性能与“Web技术栈”
对我来说有趣的是,当你对语言施加更密集的工作负载时,你会发现需要一个新的V8引擎,它可能并非来自谷歌,因为他们可能已经厌倦了优化JavaScript。事实上,我相信Dart语言(由V8负责人开发)就是对这种情况的回应,他们想要一种无需担心所有这些疯狂兼容性的语言。
Dart可能不会成功,它也可能无法为JavaScript带来下一级别的性能。但我相信那个性能级别是存在的,而且仍在以比Java等语言更惊人的速度提升(Java在标准基准测试上的提升通常只有百分之几或更少)。
现在,很多所谓的“HTML5”开发(包括JavaScript、CSS以及超越HTML5本身的Web API)正在兴起。你会看到像Zynga这样的公司在做HTML5游戏。它的发展速度比一些人想象的要快。
我和纽约联合广场风险投资公司的弗雷德·威尔逊(Fred Wilson)聊过,他说:“是的,它已经来了。”他原以为还需要很多年,但我们已经跨过了那个拐点。
你称之为“HTML5”,但它真正的含义是Web技术栈。这是你用来编写网页和托管式Web应用的同一套技术栈,现在你也可以用它来编写在设备上运行的应用。这些应用可能是托管的,可能是离线的,界限已经模糊:你可以将它们与一个URL关联,但也可以带上飞机,而不用担心断开互联网连接会丢失任何东西。
总结
本节课中,我们一起学习了JavaScript诞生的历史背景:它为了成为Java的“伴侣”语言,在短短十天内被创造出来。我们探讨了其核心设计哲学——可塑性,这使得开发者能将其塑造成各种形态,并催生了丰富的生态系统。我们回顾了它从早期制造“恼人效果”的工具,到凭借性能提升和标准化演进,最终成为驱动Web 2.0及现代Web应用核心动力的历程。Brendan Eich的分享揭示了技术成功背后的妥协、远见与持续进化的重要性。
030:29_万维网的潜能假设 🌐

在本节课中,我们将回顾万维网发展历程中的关键人物与事件,探讨开放标准与商业竞争如何共同塑造了今天的互联网格局,并展望其未来的潜能。
回顾与影响
上一节我们介绍了布伦丹·艾希和米切尔·贝克等人在推动JavaScript和开源浏览器发展中的关键作用。本节中,我们来看看商业竞争如何意外地促进了万维网的开放。
网景公司最初的商业策略是将其浏览器和服务器软件作为专有产品出售,价格在70到100美元之间。当时,计算机并不预装浏览器,用户需要单独购买。
微软为了追赶网景,采取了将其浏览器Internet Explorer免费捆绑在Windows操作系统中分发的策略。这一举动虽然引发了反垄断诉讼,但它使得网景无法继续对浏览器收费,从而在客观上挫败了网景将网络核心组件私有化的计划。
微软的竞争行为,尽管其初衷并非维护网络开放,但其结果是为火狐(Firefox)等开源浏览器的诞生、以及万维网联盟(W3C)的壮大和更公平的市场环境铺平了道路。
万维网联盟的诞生
面对网景可能主导网络标准的局面,蒂姆·伯纳斯-李等人坚信网络应为所有人免费开放,并依赖于多浏览器、多服务器的互操作性。实现这一目标的关键在于建立开放标准。
欧洲核子研究中心(CERN)意识到,一个物理实验室不应承担定义网络未来的责任。因此,在蒂姆·伯纳斯-李的领导下,万维网联盟于1994年10月在麻省理工学院(MIT)成立。
以下是W3C的核心使命:
- 制定标准:定义HTML、CSS等核心网络技术的规范。
- 保持开放:确保网络技术不被任何单一公司所控制。
- 促进互操作:让不同的浏览器和服务器能够协同工作。
尽管成立之初,W3C在财力和影响力上都无法与网景公司相比,但IBM和微软等公司的早期加入为其提供了至关重要的信誉。如今,W3C制定的高质量标准已成为维护网络开放与健康发展的基石。

网络的潜能假设
至此,网络的基础设施已基本完备,浏览器、服务器、开源与闭源软件共同构成了我们熟悉的网络生态。现在,让我们通过一段珍贵的采访,聆听万维网发明者蒂姆·伯纳斯-李对未来的展望。
“你们还什么都没看到呢,等着吧,当网络成为像电力一样可以‘假设其存在’的基础设施时……当信息空间的基础全部铺设完毕,下一场革命就该到来了……那可能是一场文化革命,一场比任何文化法案都更美好的文化革命。”
蒂姆的深刻见解在于,他认为网络的下一阶段将超越技术层面,引发根本性的社会与文化变革。他是一位对网络作为世界变革推动力有着坚定信念和深刻承诺的远见者。
从“如何实现”到“用来做什么”
我们接触过的这些网络先驱有一个共同点:他们很少将自己视为英雄或伟大的创新者,而更倾向于将自己看作集体探索和好奇心的一部分。他们的工作本质上是研究和探索。
大约在20世纪90年代末期,网络的焦点发生了一次根本性转变:
- 前期(至90年代末):核心问题是
如何构建网络。 - 后期(90年代末以后):核心问题转变为
用网络来做什么。
随着这个转变,一批新人开始登上舞台,其中一位早期的杰出代表就是亚马逊的创始人杰夫·贝佐斯。他的思维方式与早期的技术先驱截然不同。他视网络、浏览器和协议为既存的基础设施,并思考如何最大限度地利用它们来创造新的商业价值和社会效率。早在1997年,他就清晰地看到了电子商务的潜力,这远早于大多数人的认知。
总结
本节课中,我们一起学习了:
- 商业竞争(如微软与网景)如何意外地推动了网络浏览器的免费与开放。
- 万维网联盟(W3C)在制定开放标准、维护网络健康生态中扮演的关键角色。
- 蒂姆·伯纳斯-李提出的“网络潜能假设”,即当网络成为社会默认基础设施时,将催生超越技术层面的文化与社会革命。
- 网络发展从技术构建(如何实现)到应用创新(用来做什么)的历史性转变,以及像杰夫·贝佐斯这样的企业家如何利用已建立的基础设施开创新局面。
保护互联网的自由与开放至关重要,这需要所有人的共同努力,以抵御任何试图控制网络的力量。
031:亚马逊创始人杰夫·贝佐斯访谈
概述
在本节课中,我们将学习亚马逊创始人杰夫·贝佐斯在早期的一次访谈。他将分享创立亚马逊的灵感来源、早期的商业模式、库存管理策略,以及如何在互联网初期获取用户关注。我们将了解电子商务在起步阶段的关键思考与实践。
访谈内容解析
创业灵感的来源
上一节我们介绍了课程背景,本节中我们来看看杰夫·贝佐斯创立亚马逊的灵感来源。他当时在纽约一家定量对冲基金工作,偶然发现一个惊人的统计数据:网络使用量正以每年 2300% 的速度增长。他因此决定寻找一个在此增长背景下可行的商业计划。
以下是杰夫选择书籍作为首个线上销售产品的原因:
- 书籍在所有品类中拥有最多的商品条目,远超其他品类。
- 音乐品类排名第二,但仅有约 20万 首活跃曲目。
- 而全球范围内,在任何时间点都有超过 300万 种不同语言的书籍在印刷和销售,仅英语书籍就超过 150万 种。
如此庞大的商品数量,使得在线书店成为一种其他方式无法实现的商店形态。
早期库存管理模式
理解了创业契机后,我们进一步了解亚马逊早期的库存管理策略。杰夫将其分为几个层次:
以下是亚马逊早期的库存管理方式:
- 自营库存:仅储存当时最畅销的几千种书籍。
- 准实时库存:通过电子订单网络,从一批批发商和分销商处获取约 40万 种书籍。今日下单,次日早晨即可到货。
- 出版商直供:另外 110万 种书籍直接从 2万家 不同出版商处获取,配送可能需要几周时间。
- 绝版书:目录中收录了 100万 种绝版书,会尽力寻找并寄送给客户。
其中,“准实时库存”指的是那些销量排名在第200位到第40万位之间的书籍。当客户下单后,公司会立即向合作的十多家批发商订购,书籍次日早晨抵达仓库,随后即可发货给客户。
获取用户关注的策略
在互联网初期,获取用户注意力是一项巨大挑战。杰夫认为,不仅在互联网上,在整个20世纪末,“注意力”本身就是稀缺商品。
以下是亚马逊早期获取关注的核心方法:
- 提供真正创新的价值:做一些全新且真正对客户有价值的事情。
- 依靠口碑与媒体:如果做到了上述创新,媒体会主动报道,用户之间也会口口相传。
- 早期广告实践:亚马逊在第一年并未进行付费广告,增长完全依靠口碑和媒体曝光。他们最初在《纽约时报》首页底部刊登了带有URL的小广告,将URL本身作为一种广告宏命令。
随着业务发展,亚马逊开始在约 40个 不同网站上进行横幅广告。在线广告的优势在于易于追踪效果,可以精确计算每个广告创意在每个投放位置带来的点击量、销售转化率以及每美元广告投入所产生的收入。
对电子商务未来的展望
最后,杰夫表达了对电子商务未来的极度乐观。他将当时称为电子商务的“基蒂霍克阶段”(莱特兄弟首次飞行之地),意味着一切才刚刚开始。他认为20世纪末是一个伟大的时代,未来的人们回望时,会惊叹于这个时代的活力与开创性。
总结
本节课中,我们一起学习了亚马逊创始人杰夫·贝佐斯的早期访谈。我们了解到:
- 亚马逊的创立源于对互联网爆发式增长的洞察,并选择了书籍这个具有海量SKU的品类作为切入点。
- 其早期采用了分层的库存管理模式,以平衡库存成本与商品丰富度。
- 在营销上,亚马逊初期依靠提供创新价值引发口碑和媒体传播,后期则利用在线广告可追踪的特性进行精准营销。
- 杰夫对电子商务的初期发展阶段充满信心,视其为一场伟大变革的开端。
032:现代互联网图景 🌐
在本节课中,我们将探讨现代互联网的形成与演变,重点关注其爆炸式增长、基础设施发展以及由此带来的经济影响。我们将看到互联网如何从少数服务器发展为全球性网络,并理解其背后的技术驱动与市场周期。
上一节我们回顾了互联网的早期发展,本节中我们来看看现代互联网的图景是如何形成的。亚马逊的股东或许处于有利地位,因为其领导者是一位不断寻求创新、致力于提供受欢迎产品的远见者。
在这一过程中,现代互联网逐渐演变。正如杰夫曾提到的,相关投资曾以每年约3000%的速度增长。
1996至1998年间出现了一种狂热现象,人们不断投资购买。当时普遍认为通信将极具价值,这导致了光纤网络的过度建设。如今地下已铺设了大量光纤,并且我们通过升级两端设备在现有光纤中传输更多数据的能力也在飞速提升。
因此,我们处于一个非常奇特的时代:如今,连接安娜堡和芝加哥(180英里)的光纤成本,与1960年代铺设30英里铜线的成本相差无几。
距离在互联网中正变得越来越不重要。这就是长途电话不再额外收费的原因,因为长途与本地通信的差异已不大,这得益于地下丰富的光纤资源。
但有一个问题值得思考:我们会耗尽资源吗? 我们目前正在享用90年代末过度建设留下的“遗产”,当时铺设了大量光纤并得以有效升级。但我们可能会面临资源耗尽,届时,挖掘新沟渠、铺设下一轮光纤的资金将从何而来?这有待观察。
以下是全球万维网服务器数量增长图,我们可以快速浏览一下:
- 1990年12月,蒂姆·伯纳斯-李拥有了第一台网络服务器。
- 随后增长缓慢,直至90年代末的最后两年出现起飞式增长,服务器数量从1996年的不足25万台,激增至约2000万至3000万台。
- 图中可以看到繁荣与崩溃的周期:增长停滞,然后出现新的曲线。这一时期,每个企业、每家小店都开始建立网站,每个人都必须拥有网络服务器。这是大型企业全面上网的阶段,也标志着90年代末狂热增长期的终结。
这种过度繁荣的增长深刻影响了美国乃至全球的股市。从90年代初到2000年,是美国历史上最长的经济扩张期之一。
造成此现象的因素很多,其中之一是:我们开始利用通信和计算技术来提升商业效率,这极大地刺激了经济增长。但同时也引发了过度投机。
因此,这里的下跌部分,即互联网泡沫破裂,在某种程度上是过度投机行为的自我修正。随后经济经历了一段低迷期。但毫无疑问,网络、互联网以及我们讨论的所有技术,在1990年代给全球经济打上了深刻的烙印。
关于这些话题,可以探讨的内容还有很多。
开源运动是其中的重要组成部分。我会提供以下我采访过的三位开源领袖的视频链接:
- 理查德·斯托曼:自由软件基金会与GNU项目创始人。许多Unix工具和编译器都以这种方式编写,他是开源软件的杰出倡导者。
- 布莱恩·贝伦多夫:来自Apache基金会。该基金会基于NCSA创建的首个Web服务器而成立,即Apache HTTP服务器,其 lineage 可追溯至约瑟夫·哈丁及其在NCSA的团队。
- 拉斯姆斯·勒多夫:PHP语言的发明者。PHP是用于构建网站的最流行的Web编程语言之一。
以上视频链接可供参考,但非课程必需内容。
下一节,我们将不再聚焦于互联网“是什么”或“如何形成”,而是开始深入挖掘其“如何运作”的原理。感谢您到目前为止的聆听,期待在下一讲中与您再见。
本节课中,我们一起学习了现代互联网的爆炸性增长与基础设施发展,理解了光纤技术如何使距离成本趋近于零,回顾了互联网泡沫的经济周期,并认识到开源运动在现代互联网图景中的关键作用。
033:Tim Berners-Lee专题 🌐
在本节课中,我们将回顾并学习万维网发明者蒂姆·伯纳斯-李的一段重要访谈。他分享了对网络未来发展的深刻见解,特别是网络基础设施成熟后可能引发的下一场革命。
上个月,我前往波士顿参加了第四届年度万维网大会。我有机会与万维网的发明者蒂姆·伯纳斯-李进行了交谈。我向他请教了一些关于网络未来发展方向的看法。以下是蒂姆向我们阐述未来走向的一些片段。
“你们还什么都没看到,但请等到人们将网络视为理所当然的时候——当网络变成某种你可以依赖的基础设施时。”
上一节我们听到了蒂姆对网络成为基础设施的展望。本节中,我们来看看他对此的进一步阐述。
“当网络及其基础设施全部铺设完毕,我们拥有了一个信息空间时,下一场革命的时机就将到来。”
那么,这场未来的革命会是什么样呢?蒂姆认为其影响可能远超我们已经历的变革。
“很难想象一场比我们已经看到的更大的革命。我的意思是,即使我去到最偏远的地方,每个人也都在建立网站。”
然而,蒂姆指出,当前的网络革命本身依赖于一个更早、更安静的革命。以下是他的核心观点:
“网络革命之所以能够发生,仅仅是因为互联网——这场更安静、规模较小的革命,即互联网本身在全球悄无声息地部署——已经发生了,因为互联网是人们可以依赖的东西。”
基于上述逻辑,蒂姆推导出了一个关于未来发展的关键公式。其核心思想是:
网络革命的发生 依赖于 互联网成为可依赖的基础设施。
因此,未来可能遵循类似的模式:
下一场革命的发生 将依赖于 网络成为可依赖的基础设施。
遵循这个逻辑,蒂姆对未来的可能性做出了预测。
“当网络成为你可以依赖的东西时,可能会发生一场文化革命,一场美好的文化革命,或者是文化革命行动。也许你会发现我们未曾想象过的、更好的做事方式。”
蒂姆的展望非常精彩。我欣赏的一点是,他明确指出下一步将是完全不同的东西。
“相当精彩,里奇。我欣赏的一点是,他说他的想法是下一步将是完全不同的——一场文化革命,而不仅仅是多一点技术。”
本节课中,我们一起学习了蒂姆·伯纳斯-李对万维网未来的思考。他核心的观点是:当前的网络革命建立在成熟的互联网基础设施之上;而当网络本身成为人人可依赖的通用基础设施时,将可能催生下一场深刻的、或许是文化层面的革命,其形态可能远超我们当前的想象。这提醒我们,技术发展的深远影响往往在其成为社会基础之后才真正显现。
034:澳大利亚墨尔本
在本节课中,我们将回顾密歇根大学课程《互联网历史、技术与安全》在澳大利亚墨尔本举行的一次线下附加办公时间。本节内容将整理并翻译课程视频中的对话,以简单直白的方式呈现这次交流活动。
大家好,我是查克。我现在在澳大利亚墨尔本。我们在这里举行了一次面对面的附加办公时间,现场有很多参与者。接下来,我将让他们进行自我介绍。
以下是参与者的自我介绍:
- 乔:大家好,我叫乔。我们在这里度过了大约两个小时,非常愉快。
- 弗朗西斯:大家好,我叫弗朗西斯。我们坐在这里,在这个时代度过了愉快的时光,也向所有其他人问好。
- 布伦特·格罗夫斯:我叫布伦特·格罗夫斯。任何对未来感兴趣的人都应该学习这门慕课。
- 德里克:伊雷克,真不敢相信我见到了著名的查克博士。我也真不敢相信我见到了著名的德里克。
- 朱尼:我是朱尼,我非常喜欢这门课程,我们今天在这里度过了愉快的时光。
- 雷·克里斯特尔:大家好,我叫雷·克里斯特尔,我住在墨尔本,感谢所有精彩的视频。
- 贝琳达:大家好,我是贝琳达。我很喜欢这门课,我正在重新接受教育,而这是一个非常好的起点。
- 迈克·巴里博士:你好,我是迈克·巴里博士,感谢你所做的一切。
- 法比安:大家好,我是法比安,我非常享受这门课程。
- 格雷戈尔:我是来自新西兰的格雷戈尔,我参加了上一期慕课,非常喜欢它。
- 查尔斯:大家好,我是查尔斯,我刚从克赖斯特彻奇飞过来,能在这里真好。
他昨天特地从克赖斯特彻奇飞过来参加这次活动。好的,这太令人感动了。感谢大家,这次活动非常成功。我们在墨尔本的这次活动参与人数非常多,每个人都拿到了贴纸。
本节课中我们一起回顾了课程在墨尔本举行的线下办公时间,并通过参与者的自我介绍,感受到了学习社群的活跃与热情。这种面对面的交流是线上课程宝贵的补充。
035:链路层技术
概述
在本节课中,我们将从历史视角转向技术视角,探讨互联网的基础架构。我们将从最底层的“链路层”技术开始,了解数据如何在单个物理连接上传输。课程内容将避免复杂的数学和编程,力求简单明了。
从历史到技术:故事的重述
上一节我们回顾了互联网的发展历史。本节中,我们将从技术角度,自下而上地重新讲述同一个故事。我们将从网络的最底层开始,逐步向上探索。
分组交换:互联网的核心创新
在20世纪60至80年代,学术界主要使用“存储转发”网络。在这种网络中,消息需要经过多次“跳转”,每个中间节点都可能存储消息一段时间,导致传输延迟从几分钟到数天不等。
ARPANET带来的核心创新是分组交换网络。其基本思想是将长消息分割成更小的数据包,让多个数据包可以同时共享同一条链路,从而大幅提高效率并动态处理网络中断。
分组交换的工作原理
想象你要给加州的朋友Daphne发送一条消息“Hello, have a nice day”。但你的“明信片”每张只能写10个字符。你需要这样做:
- 将消息分成三张明信片(数据包)。
- 在每张明信片上写上发件人地址、收件人地址和序列号(1, 2, 3)。
- 将明信片投入邮箱。

这些明信片可能会通过不同的路径(如芝加哥、夏洛特、圣路易斯)独立传输,最终在目的地由Daphne按照序列号重新组装成完整消息。这种方式允许所有数据包共享网络基础设施,可以同时传输并选择不同路径。

分层网络模型:化繁为简
为了实现数据在全国范围内可靠传输,工程师们将这个大问题分解为多个更小、更易管理的问题,从而提出了分层网络模型。
互联网采用的是TCP/IP模型(另一种是七层OSI模型)。通过将复杂问题分解,各层可以独立工作并通过标准接口交互,从而简化了设计和实现。
这些技术规范由互联网工程任务组(IETF) 通过开放流程制定,相关文档(RFC)公开描述了互联网各组件如何协同工作。
深入分层架构
让我们扩展之前的主机-路由器-主机模型,以观察各层如何协作。
当您发送消息时,数据在您的计算机上会经过四层软件处理:
- 应用层
- 传输层
- 网络层
- 链路层
然后,数据通过计算机背面的物理接口(如以太网插口或Wi-Fi)发出。连接线缆的另一端是路由器,它接收数据并将其转发到下一个链路。数据经过多个中间路由器的跳转,最终到达目标计算机(如斯坦福的服务器),并自下而上通过其四层软件。响应数据则沿相反路径返回。
聚焦链路层
链路层是整个分层模型的起点,它只关心单次跳转的数据传输问题,即数据如何通过一段物理介质(如一根网线、一段光纤或无线空间)从一台设备到达下一台设备。
它的职责非常专注:定义电压、信号如何在线缆上传输、以及如何共享介质。它不关心全球互联网或Web,只负责跨越“这一小段”距离。
链路层的关键问题与技术
链路层需要解决诸如数据封装、介质共享等问题。常见的链路技术包括:
- 以太网
- Wi-Fi
- 电缆调制解调器
- DSL
- 卫星链路
- 光纤
物理地址(MAC地址)
为了让共享同一链路的设备能识别属于自己的数据,每个网络接口在出厂时都被赋予了一个唯一的物理地址,也称为MAC地址。
其格式通常是6组两位十六进制数,用冒号或连字符分隔,例如 00:1A:2B:3C:4D:5E 或 00-1A-2B-3C-4D-5E。
在共享介质中(如所有电脑连接至同一个集线器或共享同一Wi-Fi信道),数据包会经过所有设备。每台设备通过检查数据包中的目标物理地址来判断是否接收该数据包,从而实现介质共享。
共享与冲突避免:CSMA/CD
以太网等共享链路需要一种机制来避免多台设备同时发送数据造成的混乱。其解决方案是一种基于“礼貌”的原则:载波侦听多路访问/冲突检测(CSMA/CD)。
其工作流程如下:
- 先听后说:发送前先监听链路是否空闲。如果忙,则等待。
- 边说边听:开始发送后,继续监听自己的信号。
- 冲突处理:如果检测到冲突(即其他设备也在发送),立即停止发送。
- 随机退避:等待一段随机时间后,重新尝试发送。这种随机性确保了公平性。
整个过程类似于道路交通:在路口观察(监听),没车时通过(发送),如果发生碰撞(冲突),则各自倒车(退避)再重新尝试。
以太网之父:罗伯特·梅特卡夫
以太网由罗伯特·梅特卡夫在施乐帕洛阿尔托研究中心(PARC)发明。最初是为了连接Alto电脑和高速激光打印机。早期的以太网使用一根贯穿走廊的同轴电缆,各办公室通过“抽头”接入,真正实现了介质共享。其设计灵感部分来源于夏威夷大学的ALOHA网络早期的无线网络研究。
总结
本节课我们一起学习了互联网技术的基础——链路层。我们了解了分组交换如何取代存储转发,成为互联网高效传输的核心;认识了分层模型如何通过分解问题来简化网络设计;并深入探讨了链路层的职责,包括其如何利用物理地址在共享介质上传输数据,以及如何使用CSMA/CD机制友好地避免冲突。从罗伯特·梅特卡夫发明的以太网开始,这些技术构成了我们今日连接世界的基石。下一节,我们将继续向上探索网络层。
036:鲍勃·梅特卡夫与以太网发展史
概述
在本节课中,我们将跟随以太网发明者之一鲍勃·梅特卡夫的讲述,了解以太网诞生的背景、核心技术原理及其早期发展历程。我们将看到一项伟大技术如何从一个具体的实际问题中萌芽,并通过结合现有思想与创新硬件设计,最终演变为当今全球局域网的基础。
背景与问题:一栋楼里的个人电脑
我非常幸运。当时恰好在施乐帕洛阿尔托研究中心工作。一个前所未有的问题出现了,这个问题就是:如何将一整栋楼里的个人电脑连接起来。
我是一个网络工程师,所以他们找到我说:“把这些小家伙连起来吧。”我们当时刚刚参与建设了后来被称为互联网前身的ARPANET,它采用的是分组交换技术。很明显,我们希望这个新网络也能连接到那个当时还不叫“互联网”的东西上,所以它肯定也得是分组交换网络。
与此同时,我们正在建造可以说是第一台激光打印机。我们造的第一台打印机名叫“E”(这又是另一个故事了)。它的速度是每秒一页,分辨率是500点每英寸。计算一下数据量,这大约相当于每秒20兆比特。
因此,现有的互连方法存在很多问题。第一,它们都是“星型布线”,即从每张桌子拉一根线,全部汇聚到楼里的一个地方,形成一团巨大的、我们称之为“老鼠窝”的线团。第二,它们的速度通常只有每秒300比特,或者即使全力提升,也只能达到每秒144千比特。这离每秒20兆比特差得太远了。我们希望所有个人电脑都能发送文档,让打印机保持忙碌工作状态。当然,那时候连个人电脑都还没造出来。实际上,当时在帕克研究中心,打印机和个人电脑都还在同步建造中。
早期尝试与灵感来源
于是我开始着手这项工作。在我之前,帕克中心有一个叫“Signnet”的项目,由我的朋友查尔斯·西蒙尼负责。但他不是网络工程师,所以他们派我去接手查尔斯的Signnet项目,他则转去做别的事情了。顺便提一下,他后来开发了一个文本编辑器,一个叫“Bravo”的文字处理软件,这个软件后来演变成了Microsoft Office。查尔斯现在是个亿万富翁,还去过国际空间站两次。也许我不该让他离开Signnet项目,也许我该去做Bravo?谁知道呢。总之,我立刻断定Signnet(顺便说,Signnet代表“西蒙尼无限荣耀网络”)虽然确实“无限荣耀”,但活动部件太多,不适合作为一个局域网。顺便说,“局域网”这个词直到1990年才被发明出来,而当时还是1973年,所以“局域网”这个词还远未出现,这算是用词不当了。总之,Signnet对于局域网来说活动部件太多了。
正是在研究如何组织这个局域网的过程中,我偶然发现了夏威夷大学的一个分组无线电网络,它叫“ALOHA网络”。ALOHA网络的精妙之处在于,它解决了一个分布式问题:如果我们只是一群散布在夏威夷群岛的终端,无法轻易相互通信以协调,那么如何共享一个返回夏威夷大学主机的无线电信道呢?夏威夷大学的诺曼·艾布拉姆森设计了一个非常简单的随机重传程序:一个人输入数据(顺便说,他们输入的是卡片映像,源自卡片批处理时代,宽度为80列),然后点击发送。接着,终端会向主机发送数据,然后等待一小段时间,看反向信道是否有确认返回。如果有,一切顺利;如果没有,那很可能意味着有两个终端同时决定发送数据。那么,所有参与了这次传输冲突的终端会随机化,并在未来的一个随机时间重新发送。这样,如果它们这次重叠了,未来很可能不会再重叠,因为它们会选择不同的随机数进行倒计时。这就是随机重传、多址接入。
由于我正试图避免那个巨大的“老鼠窝”线团,只想用一根线缆,就一根,而不是16根或32根或其他方案,我想要一个分布式的方案来共享这根电缆,而ALOHA网络利用随机重传实现了这一点。
硬件实现:从电缆测试到编码
实际上,这里有两个故事。一个是关于硬件的,一个是关于软件的。硬件故事没那么有趣,但它是基础。我最初做的事情之一就是买了一公里(或者可能是一英里,我不确定当时是否已改用公制)的电缆。那是一大盘同轴电缆,大概这么大,两端露出来。我拿了一个脉冲发生器,把它接到一端,然后绕回来接到示波器上,开始向电缆发送方波,观察输出是什么。我认为这是建设网络的好准备。
从另一端出来的不是方波,而是上升沿和下降沿都变得平缓的波形。但如果你接一个数字门电路,就可以恢复出方波。正如你刚才所说,利用数字阈值,从这个门电路出来的就是方波了。所以,在一英里电缆的末端,你可以恢复出这个方波。这样我就大概知道了,也更有信心了:连接到这根电缆的各种站点可以注入它们的方波,而其他站点可以恢复它们。所以那个硬件并不难,是直截了当的。最初的硬件相对简单,非常直接。顺便说,那个方波被称为曼彻斯特编码。我们的做法是:取一个比特包(数据包),然后一个比特一个比特地通过电缆发送出去,并对它们进行编码。编码也很简单,就是曼彻斯特编码,意思是对于每个比特,比特的前半部分是比特值的反码,后半部分就是比特值本身。这样,在每个比特单元中间都会有一个跳变。这是一个非常简单的调制方案。所以,当你发送数据包时,电缆上信号在变化,你可以在另一端恢复信号,并将这些比特时钟同步地移入移位寄存器,然后再将移位寄存器的内容时钟同步地移入内存,这样就收集到了一个数据包。所有这些只需要一些焊接工作就能实现。
当然,当你想在一英里电缆上连接255个设备时,事情就有点复杂了。你必须小心抽头的阻抗,因为经过抽头的方波可能会产生反射,从而造成干扰。但曼彻斯特编码的美妙之处在于,当你发送数据包时,信号有持续的跳变。所以,如果你监听,你可以判断是否有数据包正在经过。你不需要监听很久,只需要监听大约一个比特的时间(结果证明是34纳秒),然后你就能知道是否有数据包经过。
核心改进:载波侦听与冲突检测
以太网和ALOHA网络之间有很多区别,但最初的几个区别之一是载波侦听。在ALOHA网络中,你无法判断是否有人和你同时发送。但在以太网上,你可以。这样做的好处是:如果你在发送,同时别人也在发送,你最好放弃,因为你们的包已经互相破坏了。这样,就收回了那些原本会因为继续传输损坏的数据包而浪费的带宽。
另一件事是,曼彻斯特编码意味着电缆一半时间有信号,一半时间没信号。也就是说,驱动器(我们过去称之为“集电极开路”驱动器)要么将电缆电压拉高到三、四或五伏(我现在甚至忘了具体电压,但肯定低于五伏,我有个原则:电压绝不超过五伏),要么在比特的另一半时间你不拉高时,就放开电缆。例如,在每个比特单元内,你可以在停止拉高时观察是否还有别人在发送。如果有,那么你就发生了冲突。这是第二个特性。所以它确实是一个数字信号,不是调制信号。嗯,你可以在同轴电缆上通过曼彻斯特编码发送开关式的数字信号。所以曼彻斯特编码类似于一种调制方案,但它是你能想到的最简单的一种。是的,它是基带的,但这是一种计算机科学家会想出来的调制方案,而不是那些花哨的无线电专家想出来的。顺便说,我因此受到了很多无线电专家的批评:你为什么用这么简单的方案?你浪费了所有带宽!那根电缆能承载每秒数百兆比特,而你只用了2.94兆,真是浪费电缆。嗯,当时电缆多得很,可以浪费。
数据包结构与错误校验
我们讨论了载波侦听和冲突检测。方案是每个数据包携带两个地址:目的地址和源地址。每个地址都是8比特。在那些小型个人电脑的背板上,你会通过跳线设置一个0到255之间的代码,那就是机器的序列号。然后你会从背板上读取这个代码,并放入数据包中。所以每个数据包有两个地址。顺便说,这与ALOHA网络不同,ALOHA网络只有一个地址,因为它的信道是单向的(有两个信道)。我们还在数据包末尾添加了一个循环冗余校验码,用硬件实现。这样,除了其他功能,你还可以判断数据包是否损坏。所以,如果发生冲突,竞争的站点退避后,电缆上会留下一段垃圾数据在传播,但当它被接收时,校验和不匹配,你就直接把那段垃圾数据扔掉。
合作与标准化
那天,当我向那盘电缆发射脉冲时,我正在做一些焊接工作,也在用刀剥铜线的绝缘层。房间另一头有一个年轻的研究生在做别的事情,他注意到我做得不太熟练。结果证明他非常擅长这个,因为他在电视台工作过,也干过有线电视,所以他对细线和同轴电缆了如指掌。他过来帮我,他的名字叫大卫·博格斯。然后我们开始一起工作,一起完善以太网。他更偏硬件一些,我更偏软件一些。后来还有第三个人,他比大卫更偏硬件,就是那个负责“皮可法拉”级别细节的人,他会把最后那几个无源元件装到末端,确保连接到同轴电缆的接口是干净的,每次你接入时,不会在抽头处引入一大块阻抗。
解决布线难题:抽头技术
这似乎是一个反直觉的事情。我的意思是,每个人都会认为星型结构是对的,但你却要直接接入电缆……嗯,我们决定要解决的问题之一就是“老鼠窝”问题。我们不想要一个老鼠窝,每次安装一台新电脑时,我们不必拉一根新线回到那个老鼠窝。所以我们想把一根电缆铺在走廊中央,然后每次你想增加一台电脑,只需就近接入即可。而且我们不希望在你接入时网络中断,因为我们希望网络能7天24小时访问。所以必须有一种方法可以在不中断网络的情况下接入。这引导我们找到了有线电视行业中使用的一种设备,叫做“穿刺式分接头”。它基本上是一个“吸血鬼”抽头:你在同轴电缆的外护套上钻一个小孔,然后拧入这个抽头,它会刺穿绝缘层直接接触到铜芯并接入。注意,在这个操作中,你没有切断铜芯,所以网络可以继续发送数据,你接入后就成为了网络的一部分。这个想法来自有线电视行业。是的,一个名叫大卫·拉德尔的人,他在托莱多读研究生时做过有线电视安装,他建议我们使用穿刺式分接头,因为这种分接头已经在批量生产,而且据他所知效果很好。这让我们解决了我们认为很重要的问题——老鼠窝问题。
速度演进:从兆比特到吉比特
ALOHA网络运行在千比特每秒的量级,比如4800,我记不清具体数字了,但就是千比特每秒。以太网最初是2.94兆比特每秒。顺便说,在那个时候,T1线路的速度是1.544兆比特每秒。所以在1973年,以太网的速度已经是T1的两倍了。当然,T1现在还在用,很奇怪吧。然后我们从2.94兆,在施乐内部短暂提升到了20兆比特每秒。后来,当我们在802标准化过程中与DEC和英特尔合作时,我们决定定为10兆,从20兆降到了10兆,以便芯片能够工作。之后,我们从10兆起步,后来我帮助创立了一家叫Grand Junction Networks的公司,推出了100兆以太网。我记得当时在帕洛阿尔托(我想是,记不清年份了,也许是在伍德赛德)的咖啡桌旁,我们正在思考如何制造更快的以太网。有一些数学计算表明,随着速度提高,效率取决于网络的直径(以比特为单位衡量)。速度越快,效率越低。我们试图将速度提高10倍,然后不知道是谁,我们中的一个人指出:等等,我们一直假设以太网的直径是一公里。但现在我们都在用集线器了,所以我们只需要100米,而不是1000米。这正好就是10倍的因子。通过改变冲突检测间隔,并假设传输距离是100米而不是一公里,我们就能保持相同的理论效率。这让我们达到了100兆比特每秒,然后是千兆、万兆(我想现在是主流了),再到现在的100吉比特每秒开始运行。到了这个速度,你不能再只是一个计算机科学家来构建这种数字系统了,你必须是一个硬件工程师才能运行100吉比特。我想,到了那个程度,你基本上就是个无线电专家了。而在100吉比特之后,就是太比特了。所以我已经开始做关于太比特以太网的演讲了。
总结
本节课中,我们一起学习了以太网的诞生故事。我们看到了鲍勃·梅特卡夫如何从施乐帕克中心连接个人电脑和高速打印机的实际需求出发,借鉴了ALOHA网络的随机接入思想,并创新性地引入了载波侦听多路访问/冲突检测(CSMA/CD)机制、曼彻斯特编码以及穿刺式分接头等关键技术,从而发明了以太网。从最初的2.94兆比特每秒,到10兆、100兆、千兆乃至今天的万兆和100吉比特,以太网通过不断演进,始终是局域网技术的基石。这个故事完美地展示了技术如何从解决具体问题开始,通过结合现有智慧与硬件创新,最终发展成为支撑全球信息基础设施的核心标准。
037:网络互联协议(IP)
概述
在本节课中,我们将学习网络互联协议(IP)的核心概念。IP协议是互联网的基石,它负责在全球网络中路由数据包。我们将了解IP地址的结构、网络号的作用、数据包转发机制,以及动态主机配置和网络地址转换等关键技术。
从链路层到网络层
上一节我们介绍了链路层协议,它负责在单一链路上传输数据。本节中我们来看看网络互联层(IP层),它负责跨越多个链路,将数据从源主机传送到目的主机。
链路层只关心单一链路的通信。但互联网层需要关心所有链路,并确定从密歇根大学到斯坦福大学需要经过的正确链路序列。这是一个更复杂的问题。我们甚至不关心可靠性,只关心一个问题:如果我有一个带有源地址和目的地址的数据包(就像一个明信片),我能否将它送达目的地?我将如何转发它?我们假设链路层是完美的。
IP层是第一个端到端的层。如果你回想那个四层架构的垂直框图,一组垂直的框代表源主机(起始计算机),另一组垂直的框代表目的主机。所以在这个树莓派设备中,应用层、传输层、IP层和链路层都存在于这一个设备中。
IP协议是“尽力而为”的。如果出现问题,丢弃数据是可以接受的,这是它最迷人的特性之一。
IP地址:互联网的“电话号码”
除了以太网地址或媒体访问控制(MAC)地址,IP协议还必须引入一个目的地址。
MAC地址来自设备制造商,在设备出厂时就被烧录进去。但这些设备在全球移动。如果这台设备在密歇根大学运行,它需要一个地址来连接网络;一个IP地址。如果它在斯坦福大学运行,则需要一个不同的IP地址。所以我们必须能够更改这些地址,它们是以不同方式分配的。
IP地址是全球性的号码。它就像你的明信片地址,也像一个电话号码。无论我在哪里,你拨打我的电话号码,这个设备就会响。这就是地址。
在计算机中,它们不像手机那么“酷”,你每到一个新地方都必须更改地址。我们稍后会讨论如何做到这一点。IP地址基于设备所连接的位置。它们偶尔会被重新分配,但不经常发生。
你甚至可以访问互联网上的各种网站进行IP地址查询,这是最常见的搜索之一。它会告诉你一些关于你来源地的信息,有时可能很奇怪,因为你可能在星巴克,但流量可能全部先路由到圣路易斯,然后显示“你来自圣路易斯”,即使你并不在那里。
IP地址格式
IP地址格式是四个由点分隔的数字。每个数字可以在0到255之间。它只是早期一个32位数字的表示形式,当时他们保持数字较小是为了节省计算机内存。
这是一个IP地址的例子:四个介于0和255之间的数字,用点分隔。
网络号与主机号
地址的概念被分为两部分:网络号部分(即前缀)和网络内的计算机号。
这有点像手机出现之前的电话号码,区号代表电话所在地区,后面的号码则是在该区号内寻找具体电话。甚至在更早的时候,这些号码实际上也是地理相关的,这些数字可能代表社区或其他区域。如今,一切都电子化了,电话号码到地理位置的精确映射变得不那么精确。这就是为什么你有了一个手机号码,即使搬到一个全新的州,也可以保留旧的手机号码,因为它已经变得电子化了。但在早期,当电话依靠继电器和交换机工作时,它们实际上必须与地理位置相关。
回到IP地址。有四个数字,这四个数字的某一部分是前缀,我们称之为网络号。
当数据包在网络中传输时,它并不真正查看这些数字的全部,它只查看前缀。所以它会把所有发往密歇根大学某部分的数据包看作是 141.211.*.*。然后我们在密歇根大学内部分配这些数字,而这个网络号是由分配号码的互联网管理机构分配给我们的。我们说:“嘿,我们需要更多地址”,他们就会给我们一个前缀。然后在这个前缀内,我们可以设置所有其他东西。
这个网络号,即IP地址的前缀,是数据包在互联网中传输时被路由的方式。
路由简化与路由器表
这有点像,如果我从我在密歇根大学的电脑(这是我的实际号码)发送一个数据包到斯坦福大学的电脑(那是它的号码)。一旦数据包进入网络,它不会丢弃数据,但会停止思考完整地址,只查看前缀。这极大地简化了路由器在数据包跨越互联网跳转时必须做的工作,因为它只需要查看第一部分,而不需要查看整个地址。
然后它开始决定如何到达那里。当它到达堪萨斯城时,它会决定选择哪条链路。当它离开网络进入斯坦福校园时,它会找到通往实际计算机的路。在斯坦福校园内,这些数字有意义,斯坦福校园使用这些数字将数据包送到真正的计算机。所以它使用这个前缀,数据包有一个真实的号码,但在网络中间使用前缀,然后在末端又恢复真实的号码。这就是所谓的网络号,它极大地简化了问题。
在网络中间,必须担心来自堪萨斯城、北京等地的所有这些数据包要去哪里,要查看每一个并知道每台计算机的位置是疯狂的。这就是为什么它被称为互联网协议,因为它说有一个网络,有另一个网络,我唯一关心的是网络号。我是互联网协议,我只是把这些东西从一个网络送到另一个网络。然后由那个网络来弄清楚如何将数据包送到其内部正确的计算机,由斯坦福大学来弄清楚如何将其送到斯坦福大学正确的计算机。这些东西被称为网络号,它是IP地址的前缀。
路由器的简单与高效
关键在于,这是一个非常、非常漂亮的设计。网络中心在某种程度上极其复杂(因为它如此庞大和快速),但在另一方面又极其简单,它只需要将数据从点A移动到点B。如果你从路由器的角度来看,它甚至更简单。
以这个画圈的路由器为例。它刚收到一个数据包,它查看网络号。它在某种程度上甚至不关心数据包真正属于哪里,它只有两个选择:走这条路,或者走那条路。哪个更好?事实证明,如果你看,两条路都能工作。这个选择更好,但如果我走那条路,可能只会多花十分之一秒左右。所以做出的决定甚至不必完美。你可以做出错误的决定,网络会自动纠正,这是网络设计目标的一部分。
这真的简化并限制了对每个路由器理解整个网络的需求,这使得这些路由器——我在图上故意把它们画得很小,因为我们把它们看作是小型、快速、只解决一个非常微小问题但做得非常出色的设备。
以下是路由器的工作原理:
- 路由器表:路由器维护我们所说的路由器表。它们维护一个网络号列表以及每个网络号的最佳出站路由。
- 动态更新:它们做的另一件事是相互传递路由信息,这就是它们适应错误的方式。它们动态更新,相互询问最佳路径。如果它们看到一个以前没见过的网络号,它们会询问邻居,然后邻居的邻居,最终找到通往该网络的路。
- 按网络号索引:路由器表是路由器拥有的,但它们按数据包的网络号(而不是目的主机地址)进行索引。这是互联网核心(IP核心)性能和效率的一个惊人改进。
动态地址分配与私有地址
现在我想谈谈计算机移动的问题。你有一台笔记本电脑,你在本地咖啡店使用它,然后合上盖子回家打开,它在家能用。然后你合上盖子去学校,打开并连接学校无线网络,它也能用。
你会问:“嘿,Chuck博士,你刚刚告诉我必须有这个地址,如果我没有正确的地址就不能在互联网上通信,而且数据包是基于这个地址的前缀路由的。为什么我能在三个地方——咖啡店、家和学校——似乎一切都能正常工作?”
这是因为,虽然你的电脑有一个出厂时烧录的以太网地址,但大多数计算机在首次启动并连接到Wi-Fi时,会被配置为询问,而不是在电脑中配置一个固定的IP地址。它们会发送一个请求说:“嘿,我是新来的。有没有人能给我一个适合这个特定位置的IP地址?”
如果有一个接入点,比如在你的星巴克,它会说:“当然,用这个。你现在在星巴克,这对星巴克来说是个好号码。”事实证明,这个地址的前缀正是全世界看到的发往星巴克所有流量的前缀,所以它实际上是一种真实的地址。它给你一个地址。
所以当你的设备启动时,它会询问“我能得到什么地址?”,然后被告知使用哪个地址。这样,你在星巴克时使用一个地址,在家使用另一个不同的地址,在学校又使用另一个不同的地址。这被称为动态主机配置协议。
网络地址转换
然而,对于学校、家庭来说,计算机太多了,无法给每台计算机一个真实的(公网)地址。所以我们有这些特殊的地址,它们被称为不可路由地址。
你可能注意到,如果你去一个人的家里,你的IP地址可能是 192.168.x.x;去另一个人的家里,也会是 192.168.x.x;去你自己家,也是 192.168.x.x。你会想,这怎么行得通?我似乎有相同的地址。
这是因为一项称为网络地址转换 的技术。每个家庭路由器实际上都有一个唯一且不同的(公网)地址,但你看不到它。它给你一个临时地址,一个实际上根本不能在互联网上运行的地址,它只存在于家庭内部。然后当你的数据包离开家或离开星巴克时,真实的(公网)地址被放入。当数据包返回时,真实的地址被取出,你的本地地址被放回。所以它们被称为不可路由地址,因为如果它们逃逸到真实的互联网中,网络会说:“哦,这些是给你家用的,它们不应该传很远,我甚至不知道它们该去哪,它们无处可去。”在互联网核心中,它们无法路由,但在你的家庭内部,它们工作正常。
这种方式的工作原理是:如果你在咖啡店,咖啡店有一个(公网)地址。你关联到他们的基站接入点。它给你一个本地使用的不可路由地址。然后当你的流量被发送时,这个地址被更改为那个(公网)地址。你永远看不到这个过程发生,它是在数据包通过基站时完成的。然后当数据包返回时,它带着这个(公网)地址回来,但当它到达基站时,又被切换回这个(本地)地址。
所以,即使这个(本地)地址不是网络看到的真实地址,网络看到你拥有这个(公网)地址。因此,如果你从咖啡店进行IP查询,咖啡店会被识别出来,你会看到这里的IP地址。而如果你查看你的笔记本电脑,你的笔记本电脑不会有相同的地址,因为它在接入点被转换了。
然后你回家。在家里,你的接入点有一个不同的(公网)地址。但你的电脑向你的接入点请求一个地址,并得到一个本地生成的地址。同样,存在一个映射,称为NAT(网络地址转换)。当数据包通过时,它取出一个地址并放入第二个地址;数据返回时,它取出地址并放回本地地址。同样的事情也发生在学校。所以你最终在学校,得到一个不同的地址,它们并不相同,但你看前缀是相同的。看起来它们应该在同一个地方,但它们完全不同,因为你的学校有一个不同的(公网)地址,并且在数据来回传输时进行转换。因此,仅仅在本地Wi-Fi范围内,使用这些 192.168 数字,然后它们被你的网络接入点转换为真实的数字。
所以这些地址在这个网络内部是“非法”的,如果它看到一个 192.168 地址,它只会丢弃那个数据包。它们只用于非常本地的连接。
生存时间与路由跟踪
到目前为止,我一直在谈论这个神奇的云网络,数据包走不同的路由,我们不知道但它们出现了(记得邮箱的例子,它们只是出现或不出现)。事实证明,有时我们作为工程师想看看互联网内部发生了什么。
他们早期添加了一个功能来帮助诊断互联网中的问题,我们今天仍然在使用它。它非常方便,直接内置在你的操作系统中。Macintosh或Linux内置了 traceroute 命令,如果你有Windows,你需要安装 traceroute,搜索“Windows install traceroute”就能找到。
但有个问题。回想一下,我说过每个路由器看待世界都非常狭隘和简单,它看到一个数据包,就做出一个决定。假设在去斯坦福的路上,这些路由器配置有些奇怪。这个路由器认为应该走那边,那个路由器认为应该走这边,另一个路由器又认为应该走那边。最终,如果你的数据遇到这种错误配置的路由器情况,你的数据可能会一圈一圈地循环。
这实际上会压垮网络,因为它就像一个漩涡。你甚至可能注意不到它正在发生,因为可能有很多这样的循环。然后数据包又回来了,你又把它发送出去。你占用了所有带宽,它永远到不了目的地,除非有什么东西改变或崩溃。但路由器认为这是最好的做法,它们可能出错,因为它们基于不完美的信息操作。
那么如何解决这个问题?路由器是不完美的。
他们用一个叫做生存时间 的字段解决了这个问题。就像网络地址转换在进出时调整地址一样,生存时间是一个路由器每经过一次就会更改的字段。每次数据包经过一个路由器,它从这个字段减去一。
它从一个数字开始,通常在25左右,最高可以是255。发生的情况是,每次数据包经过一个路由器,数字就减一。所以如果它从255开始,经过这里变成254,然后253,回来变成252……最终,当它到达这些路由器中的一个时,数字会变为零,然后路由器会决定:“好吧,你运行太久了,我们将丢弃你。”所以数字一直减少,当它达到零时,它们丢弃数据包,说:“你已经经过了255跳,很可能你永远到不了目的地了。”
Traceroute 命令原理
traceroute 命令有点“作弊”。正常的数据包发送时TTL(生存时间)大约是30或40跳。
但 traceroute 做的是发送“损坏的”数据包。事实证明,当路由器丢弃你的数据包时,大多数时候它是礼貌的。它会发回一个通知说:“嗨,我收到了你的数据包,我把它减了一,它变成了零,我把它丢弃了,抱歉。这是我的身份。我真的为丢弃你的数据包感到抱歉,也许你想弄清楚别的办法?我不知道,肯定有什么地方搞错了,不可能是我的错,但我把它丢了。”
所以 traceroute 做的是:首先发送一个TTL为1的数据包,这样第一个路由器就会说:“哇,这个已经传了很久了”,将其设为零并丢弃,然后发回一个便条。接着 traceroute 发送一个TTL为2的数据包穿过。它跳一跳,然后被丢弃,一个小便条回来。
通过发送足够多的数据包并从路由器获得某种拒绝返回,你可以构建一个地图。如果数据包能到达那里,它就会被目标接收;如果不能,中间的某个路由器会告诉你它在哪里被丢弃了。
例如,如果我从密歇根大学对斯坦福大学进行路由跟踪,我会得到这个输出。这是跳数,第一个,第二个,第三个……一直到第14个,14跳。所以现在需要14跳。有趣的是,我不记得在存储转发时代跳数是多少,但现在相当多,这是因为它在优化地理路径。
你可以看到第一跳在我的校园内。然后第二和第三跳在我的校园内再跳转几次。现在我们不太清楚这一个在哪里,但现在它在一个叫做Internet2的国家网络上。Internet2,Internet2,这可能正在穿越全国,然后最终到达Scenic(我认为是加州的某种网络),它在加州跳转了几次。看,LAX,那是洛杉矶。这个,我不知道洛杉矶是哪里。现在看起来它正在前往奥克兰。我不知道这些名字可能有什么含义。所以它正在通过奥克兰,然后从奥克兰的某个地方前往斯坦福。现在它在斯坦福校园内,它还需要三跳才能穿过斯坦福校园到达斯坦福校园的Web服务器。
这里还在跟踪花了多长时间,它发送每个探测包几次。这些是毫秒,毫秒是千分之一秒。所以534毫秒是半秒多?等等,不对。1000毫秒是一秒,所以0.49毫秒是千分之零点五秒,那很快。6毫秒是千分之六秒。76毫秒,也就是九跳之外,那是千分之七十六秒。所以大约是千分之七十七秒。不到十分之一秒。
通过14个路由器从密歇根到斯坦福,不到十分之一秒。相当令人印象深刻。
现在,如果我从密歇根州安娜堡追踪到密歇根州东兰辛的密歇根州立大学,我们有一个非常近的连接(我提到过的Merit网络,我们长期有紧密连接)。所以不仅跳数更少,到密歇根州立大学只有8跳。看看这里的跳数:我在校园内跳了3次,在州内跳了2次,在密歇根州立大学校园内跳了3次,总共8跳。两跳穿越我的校园,两跳穿越密歇根州,三跳进入对方校园,而且非常快,是9毫秒,也就是千分之九秒,不到百分之一秒,真的很快。
如果你多次运行这个跟踪路由,它可能会改变,但不会改变太快。但从法律上讲,它可能会改变,我的意思是不能保证它会相同。它很可能是相同的,因为最有效的路径在几秒钟内不会改变。但如果你在一天中开始做,第二天再做,它可能会改变很多。所以可以尝试玩一下:运行它,打印出来,在午夜再运行一次,在中午运行一次,看看你的跟踪路由是否不同,会很有趣。
全球路由示例
这是一个从密歇根大学到中国北京大学的跟踪路由例子。同样,它在我的校园和州内跳了几次,在美国境内跳了几次,然后开始穿越太平洋。流量实际上经过了韩国首尔,然后最终到达北京。有趣的是,你可以看到,在美国国内大约需要61毫秒,也就是千分之六十一秒,略高于十分之六秒。然后开始花费更长时间,当它一路到达中国并返回时,需要256毫秒,大约是四分之一秒。
这里的主要区别可能不是流量,而很可能是光速。是光穿越太平洋所需的时间。所以需要一段时间。我认为这些数字很可能是因为流量很低,因为这些数字非常一致,几乎总是如此。这表明我们没有等待任何流量,我们正在以物理上最快的速度通过,这是某种电缆速度和光速的组合。
总结
本节课中我们一起学习了网络互联协议(IP)的核心机制。我们了解到,IP协议通过在全球数据包上添加一个全局编号——IP地址来工作。该地址包含网络号前缀,在互联网部分(即网络之间真正移动数据的部分)使用,而将数据送达最终网络内具体计算机的任务留给目的网络自身。这最终极大地简化了数据包(明信片是一个贴切的例子)的转发。
关键点在于,特别是在思考四层架构时,我认为TCP/IP成功的原因在于,在数十亿计算机之间移动数据这个真正复杂的问题中,它保持了中间部分的极度简单。它不试图完美,不试图重传数据,不试图存储数据,不试图保持顺序,也不保证如果一个数据包走了这条路,下一个也一定走同一条路。如果两个数据包,一个超过了另一个,我们并不真正关心。这意味着它非常快速且可扩展。通过保持简单和快速,它解决了一个惊人的问题,但我们还有其他问题需要解决。
拓展:互联网先驱Vint Cerf
我想通过向你介绍另一个人来结束本讲。Vint Cerf是一名研究生,当时分组交换的概念正在被审视,无论是在美国联邦政府的国防高级研究计划局(DARPA),还是在高等教育界(包括美国和欧洲,如英国等地)。
Vint Cerf恰逢其时,处在了正确的位置,我们对此应心存感激。他被誉为阿帕网之父之一,而阿帕网当然孕育了互联网。
Vint将向我们讲述,从某种意义上说,甚至回溯到阿帕网之前,带我们了解分组及其意义,然后这一切如何融入阿帕网,以及阿帕网如何演变成互联网。请享受他的分享。
038:数据包简史 📦
在本节课中,我们将跟随文特·瑟夫回顾数据包交换技术从概念萌芽到互联网协议(TCP/IP)初步成型的关键发展历程。我们将看到多个独立的研究如何最终汇聚,并催生了现代互联网的基础架构。
数据包交换的早期构想
数据包交换是一个被专门研究的想法。伦纳德·克莱因罗克在麻省理工学院研究了消息交换,并完成了一篇关于使用排队论分析消息交换网络队列的杰出论文。他的分析虽然未使用“数据包”一词,但同样适用于数据包交换,这是1961年左右的一个重要里程碑。
军事需求催生的网络韧性理念
大约在1962年,保罗·巴兰为兰德公司工作,他深切关注在核战后环境中保持指挥与控制的能力。当时人们严重担忧苏联可能发动核攻击,因此必须确保能够响应,并需要相应的指挥与控制体系。保罗在1962年(早于集成电路的出现)就提出,应该将语音数字化和数据包化,并使用能够向所有方向传输的杆装无线电,创建一个高度连接的环境。这样,即使核爆炸在网络中炸出空洞,只要这个“网络织物”仍以某种方式连接,信息就能从一端传送到另一端。他设想了“消息块”的概念,并采用动态路由(如“烫手山芋”路由)。他将语音切割成20毫秒的小片段。据我回忆,他当时主要讨论的是语音网络,旨在建立一个用于指挥与控制的高韧性语音网络。我可能对他有所不公,因为他后来也非常清楚数据通信的重要性。这个构想记录在一套11卷的系列报告《论分布式通信》中,但他未能说服任何人。传统的电信公司(尤其是AT&T)和当时的国防通信系统人员都嘲笑这个想法,认为它愚蠢且不可能实现,因此他在这方面毫无进展。
实验验证与术语诞生
1966年,拉里·罗伯茨与另一位(我现记不起名字的)同事进行了一项点对点实验来测试数据包交换。实验在圣莫尼卡系统开发公司的AN/FSQ-7计算机和麻省理工学院林肯实验室的TX-2计算机之间进行。他们在一条2400比特/秒的线路上演示了数据包的来回传输。大约在1964-65年间,伦敦国家物理实验室的唐纳德·W·戴维斯也产生了兴趣。他试图从英国科学研究委员会获得资金,但只够建造一个节点,即“单节点网络”。他构建了这个数据包网络,并发明了“数据包”一词来描述这些传输对象。这个网络运行良好,连接了许多终端和其他设备。从某种有趣的角度看,他构建了一个基于物理线路的局域网。
愿景的汇聚与项目启动
以上三位先驱引入了数据包交换的概念。拉里和他的合作者证明了使用标准方式让两种截然不同的计算机进行通信是可能的。J.C.R. 利克莱德实际上是麻省理工学院的心理学家,但他在60年代初就确信计算对于非数值处理非常重要,它将使人们能够以前所未有的方式协作。他带着这个信念来到ARPA,并创立了信息处理技术办公室。在那里,他遇到了斯坦福研究所的道格拉斯·恩格尔巴特,两人一拍即合,因为恩格尔巴特也专注于非数值计算以及人们构建通信、文档超结构并进行交互的能力(包括超链接、鼠标、白底黑字的纵向显示模式等)。可以说,恩格尔巴特在斯坦福研究所里就拥有了一个“盒子里的万维网”。利克莱德理解这一点,并向他的小圈子发送笔记,谈论“星际网络”。因此,他确实因在ARPA确立这一理念而受到赞誉。
随后,鲍勃·泰勒从利克莱德手中接管了信息处理技术办公室的运营职责。他非常恼火,因为他在五角大楼的办公室里有三台终端,分别连接到三台不同的计算机。他说,他想不通为什么不能有一台终端可以同时与这三台计算机通信。我们需要一个网络。当他与当时的ARPA主任查理·赫茨菲尔德探讨这个想法时,查理在20分钟的谈话后就给了他一百万美元。现在泰勒面临的问题是:谁来具体执行?因为泰勒也不是技术专家,他是另一种类型的心理学家。于是他决定找来曾做过数据包实验的、来自林肯实验室的拉里·罗伯茨,但拉里不愿意来。泰勒向查理·赫茨菲尔德抱怨了此事,查理打电话给林肯实验室的负责人说,我们每年为你们支付相当大一部分研究预算,你应该告诉拉里他应该来。实际上,我曾以为拉里是被查理强迫的,但可能情况没那么糟糕。拉里最终被说服前来,当然,后来他从鲍勃·泰勒手中接管了办公室的运营,但与此同时,他也是负责启动互联网或ARPANET项目的人。
ARPANET的诞生与早期团队
他们撰写了一份招标书。收到了许多回复,大概有几十份。我个人不确定具体数量,但我知道我和我的同事史蒂夫·克罗克当时还是加州大学洛杉矶分校的研究生,我们为圣莫尼卡的一家名为Jacobs Systems的公司提供咨询,并共同撰写了一份回复。Bolt Beranek and Newman公司提交了另一份主要由来自麻省理工学院的鲍勃·卡恩撰写的回复。回复被评估后,有四份进入最终候选,Jacobs Systems的回复不在其中,或者即使在了也未被选中。BBN被选中了。于是史蒂夫·克罗克和我作为研究生回到了加州大学洛杉矶分校。接下来我们知道的是,曾在麻省理工学院撰写过关于数据包交换的原创论文的伦纳德·克莱因罗克,来到加州大学洛杉矶分校任教并探索排队论。他是拉里·罗伯茨的同行,因为他们都曾在林肯实验室共事。因此,他获得了ARPANET项目的网络测量中心部分。而史蒂夫·克罗克、约翰·波斯特尔和我(我们都来自圣费尔南多谷的同一所高中)最终都在伦纳德·克莱因罗克的领导下运行网络测量中心。我是那里的首席程序员,史蒂夫·克罗克负责管理和领导网络工作组,该工作组后来制定了主机到主机协议。约翰·波斯特尔最终成为文档保管人,他是RFC编辑(史蒂夫·克罗克开创了“请求评论”系列),也是负责跟踪地址空间和分配的号码分配者,最终在互联网出现时成为域名管理者或互联网号码分配机构——当然,那时互联网还未出现。
首次演示与国际合作
ARPANET项目这一时期将我们带到了1972年,这是整个历史中的一个重要时刻。因为ARPANET的首次公开演示于1972年10月在华盛顿希尔顿酒店的地下室举行。一大批来自美国乃至法国、英国、意大利、德国等地的网络兴趣社区、数据包交换社区的人士参加了。这个大约25到30人的小组,见证了ARPANET的运行,看到了正在开发的应用(包括道格·恩格尔巴特团队的应用),然后仿照史蒂夫·克罗克为构建ARPANET系统而建立的工作组模式,成立了这个国际网络工作组。此时,我成为该小组的主席,因为史蒂夫正忙于在ARPA进行人工智能研究。
从ARPANET到互联网的跨越
同年年底,鲍勃·卡恩离开BBN前往ARPA。我离开了与克莱因罗克、克罗克和波斯特尔共事的加州大学洛杉矶分校,前往斯坦福大学。因此,鲍勃在ARPA,我在斯坦福。1973年春天,鲍勃从ARPA过来,他说他遇到了一个问题。我问是什么问题,他说:“我们有了这个ARPANET。”我说是的。但他接着说,他们还在开发其他网络能力,以实现军事指挥与控制。如果要认真地将计算机用于指挥与控制,它们必须是移动的,必须安装在装甲运兵车、坦克等装备上,还必须是海基的,以便进行舰对舰、舰对岸通信,这就意味着需要卫星。因此,除了ARPANET所代表的固定有线系统(即固定不动的设施)外,我们还需要移动无线电和卫星。于是就有了所有这些不同的技术。鲍勃的绝妙想法不是构建一个包含所有这些技术的单一网络,而是将它们分开。他说:“让我们构建一个数据包卫星网络,以优化卫星的使用,并考虑到它有半秒的往返延迟。让我们构建一个数据包无线电网络,以优化一个连接性随时间变化(因为设备在移动)、延迟可变且干扰也可变的系统。”所以,这是三个不同的数据包网络。那么问题来了:如何将它们连接起来?如果你把所有技术都放进一个网络,就不会有这个问题,但那样做会使控制所有这些高度可变的参数变得非常困难。因此,他说,不如将它们分成不同的网络,再把它们连接起来。于是我们设计并构建了一个网关,也就是今天我们所说的路由器。
互联网协议的设计与演进
这个概念还引入了一系列其他问题,例如,如何引用另一个网络?每个网络都认为自己是宇宙中唯一的网络,像SNA和DECnet这样的专有网络就是如此。当时没有一种词汇能表达“将这个数据包传送到另一个你可能并未直接连接的网络上的另一台计算机”。因此,我们必须发明一个互联网地址空间来解决这个问题。我们必须找到一种方法,允许在这条路径上丢失的数据包被恢复,这就是TCP现在成为端到端可靠性管理者的原因,而不是依赖每个网络都可靠。ARPANET建立在可以构建可靠底层链路的假设上,而互联网则基于没有网络必然可靠的假设,你必须进行端到端重传以恢复数据。在1973年期间,鲍勃和我完成了第一篇论文,并于1974年5月发表在《IEEE通信汇刊》上。我认为当时基本上没多少人关注它。与此同时,ARPA资助我们在斯坦福大学实际实现这一构想。我和我的研究生们(有些在Xerox PARC,有些在斯坦福)一起制定了TCP/IP的详细规范,我们于1974年12月发布了该规范,这是“互联网”一词首次出现在任何印刷品中。这是我们首次讨论“网络互连”的论文。因此,“互联网”作为一个完整的规范出现在1974年12月,但它也存在缺陷,只是我们当时还不知道。直到1975年,我们开始与另外两个组织一起实施时才发现。鲍勃·卡恩说我们不能只有一个实现。BBN成为一个实现者,伦敦大学学院和英格兰的彼得·克里斯汀小组是第二个或第三个实现者。所以我们有了三个TCP实现(实际上,当时只有TCP,IP部分尚未分离)。三个实现同时进行,我们立即发现了设计中的问题,并开始改进。因此,从1973年到1978年,我们经历了四次设计和实现、测试的迭代,直到获得一个非常稳定的版本。然后我们将其标准化。所以在1978年,我们修复了一切。到这时,互联网协议已经被分离出来,因为像大卫·里德和丹尼·科恩这样的人提出,我们需要不一定可靠但低延迟的实时通信,比如语音通信、雷达轨迹等。你不在乎导弹两秒前在哪里,你想知道它现在在哪里。对于语音,如果你丢失了一个数据包,你只需说“请再说一遍,我没听清”。因此,我们将TCP拆分为TCP和IP,并创建了一种称为用户数据报协议的东西,它与TCP并行,是可靠TCP的实时、低延迟版本。所有这些小组件——IP、TCP和UDP——从1978年开始成为互联网架构的一部分。
协议的普及与网络演进
在接下来的五年里,我们尽一切努力让TCP/IP在我们能找到的每一个操作系统上实现。它被移植到IBM机器上,移植到DEC机器上,也进入了UNIX。BBN构建了一个UNIX版本,我们将其发送给伯克利BSD发行版团队,但比尔·乔伊不喜欢那个代码,他自己重写了一个,并将其放入BSD 4.2。正是这个UNIX版本将TCP/IP带给了学术界,因为在同一时期,Sun Microsystems等公司推出了这些出色的工作站,他们希望使用开源(或至少开放的)协议和操作系统,因此他们采用了UNIX,而TCP/IP随之而来。他们使用以太网将工作站连接在一起。因此,他们是驱动学术界的引擎,而学术界对工作站和高速局域网的需求非常旺盛。当然,所有这些都对ARPANET骨干网造成了巨大压力,其速度仅为50千比特/秒,最终导致了更高速网络的需求。美国国家科学基金会看到了这一切对学术界的巨大价值,决定介入并构建一个运行速度更快的网络,他们确实这样做了,这个网络被称为NSFnet。
总结
本节课中,我们一起学习了数据包交换技术从早期理论构想、军事应用驱动、实验验证到最终催生互联网协议套件(TCP/IP)的完整发展脉络。我们看到了多位先驱的贡献如何在不同阶段汇聚,从解决网络韧性、实现异种机互联,到应对多种网络技术(有线、无线、卫星)互连的挑战,最终定义了互联网的核心架构原则:端到端原则、网络互连以及将可靠性保障置于传输层(TCP)而非网络层。这一历程奠定了现代全球互联网的基础。
039:美国加利福尼亚州帕罗奥图 📍
在本节课中,我们将跟随课程视频,了解一次在帕罗奥图进行的附加办公时间场景。本节内容是对课程线下互动环节的简单记录。
概述
本节视频记录了讲师查克在加利福尼亚州帕罗奥图进行的一次非正式办公时间。几位学生路过并进行了简短的交流。
场景描述
视频始于帕罗奥图,查克正在进行办公时间。他邀请路过的学生打个招呼。
以下是几位学生的自我介绍与简短感想:
- 斯科特:他表示渴望在Coria学习更多课程,并认为见面很有趣,课程也很棒。
- 哈利:他简单地打招呼,并表示课程非常出色。
总结
本节课中我们一起观看了课程在帕罗奥图一次轻松的线下办公时间片段。这次互动人数不多,大家在星巴克度过了愉快的时光,体现了课程社区的非正式交流氛围。
040:传输层技术解析 🧩
在本节课中,我们将学习传输层(TCP层)的核心工作原理。传输层位于四层网络架构的中间,负责确保数据在网络中可靠、高效地传输。我们将探讨TCP如何弥补IP层的不足,以及它如何通过确认和重传机制来保证数据的完整性和顺序。
上一节我们介绍了网络层(IP层),它像明信片一样快速传递数据包,但不保证可靠性和顺序。本节中我们来看看传输层(TCP层)如何解决这些问题。
IP层的“魔法”与局限 🌐
IP层的“魔法”在于它通过多跳路由,将带有源地址和目的地址的数据包从一个网络传递到另一个网络,最终到达目标网络上的计算机。其核心特点是网络内部没有长期存储,所有长期存储都在网络外部。这使得IP非常快速。
然而,IP层并不要求完美:它不保证数据按顺序到达,也不保证不丢失数据。它速度快,极少丢失数据,但当丢失发生时,需要一个上层协议来恢复。这就是传输层的作用。
传输层(TCP)的作用 🛡️


TCP层既简单又复杂。其目的是补偿IP层可能出现的错误,并最佳利用可用资源。TCP需要判断底层网络的速度和可靠性,并根据网络状况调整数据传输速率。如果网络快,TCP会快速发送数据;如果网络慢,TCP会降低速度以提高效率。TCP/IP网络的目标之一是有效共享资源,因此感知网络状况至关重要。

TCP的关键思想是:发送数据时,将数据分割成数据包发送,并保留每个数据包的副本,直到收到接收方的确认(ACK)。只有收到确认后,发送方才会丢弃副本。如果数据包丢失,它可以被重复发送,直到最终被目的系统确认。TCP的基本功能就是跟踪哪些数据包成功穿越了互联网层。





TCP工作原理示例 📦



假设有一条消息被分成5个数据包(包含第1-100、101-200、201-300、301-400、401-500个字符)。TCP不会一次只发送一个包并等待确认,因为那样无法充分利用网络。相反,它会推测性地先发送几个数据包。




以下是工作流程:
- 发送方先发送数据包1、2、3。
- 数据包1和3成功到达接收方,但数据包2丢失了。
- 接收方收到数据包1和3后,发现顺序不对(缺少数据包2)。它会向发送方发送一个确认,内容是:“我已收到第1-100个字符,我准备好接收从第101个字符开始的数据(即数据包2)”。接收方甚至可能因为等待过久而丢弃已收到的数据包3,要求从101开始重传。
- 发送方收到这个确认后,知道数据包1已成功送达,可以丢弃其副本。同时,它知道需要重传数据包2(101-200),并再次发送数据包3(201-300)。
- 这次,数据包2和3都成功到达。接收方确认收到数据包2,这意味着发送方可以丢弃数据包2的副本。接着,发送方继续发送数据包4和5。
- 通过这种确认和重传的“簿记”机制,双方最终确保所有数据包都按顺序被接收和确认。




这是一个简化的视图,展示了TCP连接两端进行的簿记工作。


互联网设计的精髓 💡


这里的精妙之处在于存储需求的位置。网络中间的路由器(IP层,即网际网络)被设计为快速、敏捷、动态、智能,但也有权失败。我们并不要求它们在网络中到处存储数据包。事实上,路由器应该丢弃数据包,并向系统反馈网络可能存在问题。


另一方面,网络外部有数十亿台计算机(如你的笔记本电脑、手机)。我们需要一种方法来使通信可靠,因此需要在数据包传输过程中存储它们以便重传。我们将数据包存储在网络外部的计算机中。每向网络添加一台新计算机,就为正在发送的数据包增加了存储空间。当你的计算机或手机发送数据时,它负责保留自己的数据包副本,并不期望网络内部来承担这个责任。
这种设计非常出色,正是它使得互联网得以工作。
范·雅各布森与“慢启动”算法 🧠
实现上述机制仍需大量工程努力。这里介绍一位本课程中的创新者:范·雅各布森。他在20世纪80年代末于伯克利工作期间,完成了一项关键贡献。
在20世纪80年代末,曾有一种预测认为互联网即将崩溃。当时NSFNET正在发展,越来越多的计算机接入,但主干网速度太慢,开始出现故障。一些计算机供应商认为学术界无法构建一个健壮、可扩展的网络。
在1987年,范·雅各布森拯救了我们。网络正在崩溃,我们所有人都安装了他的补丁,然后网络状况得到了改善。在我的记忆中,这是最后一次整个互联网看似要崩溃的情况。
他发明了“慢启动”算法,该算法已成为你现在使用的每台计算机上每个TCP实现不可或缺的一部分。事实上,在我们此刻进行讲座时,它正被用于流量控制。这个算法帮助TCP连接开始时缓慢增加数据发送速率,探测网络可用带宽,避免瞬间拥塞,从而让网络运行得更加平稳高效。
本节课总结:我们一起学习了传输层(TCP)的核心机制。TCP通过在通信两端(而非网络中间)进行数据包的确认、重传和流量控制,弥补了IP层不保证可靠传输的缺陷。其“保留副本直至确认”和“慢启动”等机制,是互联网能够在数十亿设备间可靠、高效运行的关键。理解了TCP,你就掌握了数据如何在不可靠的网络上实现可靠交付的基本原理。
041:范·雅各布森与慢启动算法
概述
在本节课中,我们将学习范·雅各布森(Van Jacobson)如何发现并解决了早期互联网中一个严重的性能问题,即网络拥塞。我们将了解问题的背景、分析过程,以及最终催生出TCP“慢启动”算法的核心思想。
背景:网络聚合与瓶颈
上一节我们介绍了早期互联网的雏形。本节中我们来看看当时网络扩展带来的具体问题。
当时,许多大学校园内部署了以太网,因为它们易于部署,可以安装在各个系里。然后,人们通过拉一条线连接两个系,就能形成一个更大的网络。因此,网络是通过聚合的方式成长起来的,在许多不同的大学校园里都是如此。
美国国家科学基金会(NSF)提供了一些资金,用56千比特的线路将这些校园网络连接起来,形成了NSFNET的第一阶段。但这就产生了一个问题:人们将10兆比特的校园基础设施与56千比特的线路连接在了一起。
这项技术非常受欢迎,因为之前无法通信的人们突然可以交流了。他们发送电子邮件、传输大文件,每个人都对此感到兴奋。但是,任何一个校园网络都可能以百倍的量超额使用这个骨干网,导致大量数据包堆积并被丢弃。
问题的发现与分析
当时,我是劳伦斯伯克利国家实验室的研究员,同时在伯克利分校任教。即使在80年代中期,每门课也都有一个类似新闻组的消息群,所有作业都会放在网上。我试图从我的办公室获取课程材料到伯克利分校埃文斯大厅的一台机器上,但网络吞吐量几乎为零,大约每10分钟才能收到一个数据包,性能差得令人难以置信。
我下去和迈克·卡雷斯(Mike Karels)谈了谈,他负责伯克利Unix(BSD)开发小组。他收到了来自全国各地的关于这些问题的报告。在当时,运行TCP/IP最简单的方法就是启动伯克利Unix,因为它有一个由ARPA资助的、非常优秀的实现。每个人都在经历糟糕的性能。
我们那天以及接下来的几天里讨论了很长时间:到底哪里出错了?是协议实现有错误,还是协议本身有错误?这个东西在较小规模的测试中运行良好,但突然就崩溃了。我们努力了三四个月,检查代码、编写工具来捕获数据包踪迹、查看数据包踪迹,试图找出是什么导致了故障。

我记得我们两个坐在迈克的办公室里,在埋头苦干了几个月之后,其中一个人(我记不清是谁了)说:“你知道我无法弄清楚它为什么崩溃的原因吗?因为我不理解它曾经是如何工作的。” 我们以10兆比特的速度发送这些比特,它们快速穿过校园,然后撞上这条56千比特的线路。我们期望它能穿过那条线路,从另一侧出来。这怎么可能正常工作呢?这成为了关键的起点。
核心原理:带宽变化与时钟同步
从那时起,我们开始思考:这个协议的什么特性让它能够工作?它如何处理所有这些带宽变化?如何处理多跳?
请看这张图。横轴是时间,纵轴是带宽。所以粗管道代表高带宽,细管道代表低带宽。当时的比例是,这是10兆比特的管道,而这是56千比特的管道。实际上差异接近100比1,而不是图中的3比1。
时间(秒)乘以比特每秒等于比特数。图中的每个小方块代表一个数据包,即一个数据包中的比特数。如果你在带宽维度上压缩它,它就必须在时间维度上延展,因为比特数不会改变。
因此,发送方发送了一串数据包(一个窗口的数据包),它们会在网络中飞行,直到遇到这个从快到慢的转换点。然后,因为数据包必须在时间上延展,它们都必须等在那里,排队进入更慢的线路。当它们从另一侧出来时,它们被这个瓶颈(慢速线路)拉开了间距。一旦它们被拉开,就会保持这个间距,没有什么能把它们重新推到一起。
数据包到达接收方,接收方将每个数据包转换成一个确认包(ACK)。于是你得到一串返回发送方的ACK,这些ACK记住了通过那个瓶颈的正确间距。ACK返回发送方,每个ACK又触发一个新的数据包被发送。我们可以看到数据包流回来。这是在经过一个往返时间(RTT)之后。
现在,数据包到达时已经完美地间隔开了,所以它们依次通过。一个新的数据包进入网络的时间点,恰好是前一个数据包离开瓶颈的时间点。这些ACK就像是一个时钟,告诉发送方何时可以安全地注入每个新数据包。网络中总是会有空间留给最慢的那个点。关键问题在于:如何最快地达到这种稳定的、浪费最少的状态?

问题的根源:启动阶段
我们看到的故障问题在于:这个机制在交换了大约一个往返时间的数据包后,工作得非常完美。但是当你启动连接时,没有时钟。所以TCP的难点不在于让它运行起来,而在于启动它。因为一旦它运行起来,你有了一个时钟告诉你该怎么做。
如果你突然启动,你会陷入一种重复的故障模式:你塞满了某个网关可用的缓冲区,然后当你重传时,你又做了同样的事情,所以你总是在丢失数据包。
但是,如果你启动得更平缓一些,你就不会使缓冲区过载。你会得到一个足够好的时钟开始工作,从而控制积压的数据量以适应可用的缓冲区,同时你仍在增加传输中的数据包数量,最终你会得到一个完整的时钟。你从一个零散的时钟开始,但最终会填满细节,得到一个完整的时钟。
解决方案的实施与社区协作
那么,你是如何让它应用到全球所有的TCP/IP实现中的呢?因为它们在某种程度上必须合作。请记住,那是一个简单得多的时代,当时全球的TCP/IP实现大概只有四个:伯克利Unix的实现、MIT的PC/TCP、BBN用于Butterfly和Nymbus的实现,以及Multics的实现。
我们拿了一直在研究的几个TCP内核模块,把它们打包成一个tar文件。我有一个非常糟糕的驱动黑客程序,可以让我们从内核嗅探数据包。你通过一个ioctl调用告诉内核你想嗅探什么,你写入一些二进制值,指定你想监听的端口,驱动程序会将这些数据包捕获到一个环形缓冲区,然后你读取内核内存来取出那个缓冲区。
我小组里的克雷格·拉格斯(Craig Lugg)和克里斯·托克(Chris Torek),他们都是长期的Unix黑客,对此感到尴尬。他们一起做了一个非常干净、漂亮的驱动程序,即BPF(伯克利数据包过滤器),它允许你通过一个非常高效的ioctl接口从内核中提取数据包。我们把所有这些捆绑在一起。
然后,我们在TCP/IP邮件列表上宣布这些材料可用。在那个年代,TCP/IP是非常实验性的前沿技术,几乎所有研究它的人都在那个邮件列表上。一群人下载了它,尝试了,结果程序崩溃了。他们发送内核崩溃信息和错误报告。我们修复错误报告,发布新版本。然后立即有人回来说:“这里内核恐慌了,你想要内核转储吗?” 我说:“哦,不,太尴尬了。” 发布新版本,又有人回来说:“这里恐慌了。” 就这样循环往复。
大约一天后,我们得到了一个不会立即导致内核恐慌的版本。然后我们开始研究实际的算法,并进行了一些微调,以确保它始终表现良好且不会造成任何损害。这完全是一个社区的努力。当社区基本上说“这大多数时候表现良好,而且似乎从不造成损害”时,迈克就把它放入了内核。他采纳了社区开发的模块,并将其整合到BSD版本中。

总结
本节课中,我们一起学习了早期互联网因带宽不匹配导致的严重拥塞问题。范·雅各布森通过分析数据包在网络瓶颈处的排队与时钟同步机制,发现了问题的核心在于TCP连接的启动阶段缺乏 pacing 时钟。由此,他们提出了“慢启动”算法的核心思想——通过逐渐增加发送窗口来避免瞬间冲垮网络缓冲区,并依靠返回的ACK来建立发送节奏。这一解决方案通过开放的社区协作方式,集成到了伯克利Unix中,并最终成为TCP协议不可或缺的一部分,极大地改善了互联网的稳定性和性能。
042:域名系统解析 🌐
在本节课中,我们将要学习域名系统(DNS)的基本概念和工作原理。DNS是互联网中一项至关重要的服务,它负责将我们容易记忆的域名(如 www.umich.edu)转换为计算机和路由器能够理解的IP地址(如 141.211.243.67)。我们将探讨它为何存在、如何工作,以及其独特的层级结构。
概述:DNS的角色与位置
上一节我们介绍了互联网的分层架构。域名系统在架构中的位置比较特殊。它并不严格属于应用层或链路层,更像是位于互联网层与传输层之间,或者互联网层与链路层之间的一个附加组件。它的核心功能是充当互联网的“地址簿”,在用户友好的域名和网络友好的IP地址之间进行转换。
DNS的必要性:从数字到名称
网络设备和路由器依赖IP地址来路由数据,这些数字地址编码了互联网连接的地理信息。然而,人类很难记住一长串数字。在互联网早期,服务器数量少,人们或许可以用便签记录IP地址。但随着网络规模爆炸式增长,服务器会迁移、重组,其IP地址也会改变。我们不想让用户去记忆这些可能变动的数字地址。
因此,域名系统应运而生。它允许我们使用一个固定的、友好的名称(如 www.facebook.com),而系统会在后台透明地将该名称映射到当前正确的IP地址上。这样,即使服务器背后的IP地址发生变化,用户也无需知晓。
DNS的工作原理:分布式数据库与缓存
域名系统本质上是一个庞大的、分布式的数据库。它的设计非常高效,广泛使用了缓存技术。这意味着当你首次访问一个网站时,你的计算机会向DNS服务器查询其IP地址。查询结果会被缓存在本地或你的网络服务提供商处。下次你再访问同一网站时,就可以直接从缓存中获取地址,速度极快,即使部分网络出现故障也不影响已缓存记录的解析。
命名结构:从右到左的层级
理解DNS结构的一个关键点是其命名方向。这与IP地址和电话号码的阅读方向相反。
- IP地址:从左到右阅读,从最通用的网络部分到最具体的主机部分。
- 域名:从右到左阅读,从最通用的顶级域到最具体的服务器名。
这类似于一个邮政地址:
www.si.umich.edu
可以解读为:
.edu:教育机构(顶级域,最通用)umich.edu:密歇根大学(二级域)si.umich.edu:信息学院(子域)www.si.umich.edu:信息学院的一台特定Web服务器(主机名,最具体)
域名所有权与管理
域名的另一个有趣特性是所有权从右向左授予,形成一个管理 hierarchy。
以下是域名层级管理的运作方式:
- 像
.edu、.com、.org这样的顶级域由特定机构管理。例如,.edu仅授予经过认证的高等教育机构。 - 当一个组织获得一个域名(如
umich.edu)后,它就拥有了管理其下所有子域(如*.umich.edu)的权利。 - 该组织内部会建立机制(如委员会)来审批和分配子域。例如,密歇根大学的信息学院需要向大学的域名委员会申请才能获得
si.umich.edu。 - 拥有
si.umich.edu后,信息学院又可以进一步分配其下的子域(如*.si.umich.edu)。
对于 .com 这类通用顶级域,通常遵循“先到先得”的原则,但也受商标法等法律约束。例如,如果某人注册了 coca-cola.com 但并非合理使用,可口可乐公司可以基于商标权要求收回。
总结
本节课中我们一起学习了域名系统(DNS)的核心知识。我们了解到DNS是连接人类可读域名与机器可读IP地址的桥梁,它作为一个分布式数据库运行,利用缓存实现高效解析。关键点在于,域名的结构是从右向左阅读的层级体系,并且所有权和管理权也遵循从右向左的授予规则。正是这套系统,让我们能够轻松地通过 www.google.com 这样的名字访问互联网,而无需关心背后复杂的数字地址。
043:TCP协议总结
在本节课中,我们将总结传输控制协议(TCP)的核心职责和工作原理。TCP是互联网协议栈中至关重要的一层,它确保了数据在网络中可靠、有序地传输。
TCP的职责与工作原理
上一节我们介绍了IP层,它负责数据包的路由,但本身并不保证可靠性。本节中我们来看看TCP层如何弥补IP层的不足。
TCP协议的核心职责是补偿IP层的不完美性。数据包可能不按顺序到达,也可能完全丢失。因此,TCP层通过特定的方式标记数据,并将数据存储在源计算机的缓冲区中,直到收到目标计算机的确认。
以下是TCP实现可靠传输的关键机制:
- 数据标记与确认:TCP为每个数据段编号,接收方必须确认收到。
- 缓冲区管理:数据在发送和接收两端都被缓冲,以处理乱序和重传。
- 流量与拥塞控制:通过滑动窗口等机制调节发送速率,避免网络过载。
这种在边缘(即终端计算机)保存缓冲区的设计,使得互联网能够以出色的方式扩展和增长。
端到端的可靠连接
这最终形成了一个协议层,它为我们提供了看似端到端的可靠连接。我们可以在一端输入一串数据流,只需将其发送出去。在另一端,数据流会以相同的顺序、可靠地输出,我们无需担心其内部过程。
这种分层架构的整个目标正在于此。我们可以假装这个“黑盒子”内部的复杂性是简单的。其内部并不简单,但我们这些将要利用此传输层的应用程序,可以假定它是简单的。
例如,我输入一个“H”,“H”就出来了;我输入一个“E”,“E”就出来了;我输入“L”,“L”就出来了;“O”也出来了。这背后是数十万工程师和数百亿美元的研究投入才使其得以实现,但呈现给我们的接口却极其简单——当然,这里的描述是高度简化的。
课程回顾与展望
至此,我们已经讨论了链路层、IP层和传输层。接下来,我们将探讨在拥有了连接不同应用程序的可靠“管道”之后,我们可以做些什么。
本节课中我们一起学习了TCP协议如何通过确认机制、缓冲区和流量控制,在不可靠的IP层之上构建出可靠的、有序的端到端数据流,从而为上层应用提供了简单的通信抽象。
044:美国密歇根州安娜堡 📍
在本节课中,我们将跟随课程讲师查克,一同走进位于美国密歇根州安娜堡的课程线下办公时间现场,并认识几位参与其中的学员。
上一节我们介绍了课程的主要线上内容,本节中我们来看看线下互动环节。以下是查克在安娜堡办公时间开场时的情况。
Hello, 我是查克,我们正在密歇根州安娜堡,为Coursera课程举行线下办公时间。
让我为你介绍几位前来参加办公时间的学员。
在认识了现场环境后,我们来听听几位参与者的自我介绍。以下是他们的分享:
- 莎拉:“我是莎拉,是密歇根大学的一名硕士生。我非常喜欢查克博士的课程,因此决定再次学习它。”
- 亨利:“我叫亨利,只是一个老家伙,想看看这些在线课程到底是怎么回事。”
- 大卫:“嗨,我是大卫。今年我很享受一边通过Coursera学习,一边动手实践构建互联网。”
以上就是本次安娜堡线下办公时间的简短记录。本节课中我们一起学习了课程线下活动的氛围,并听到了来自不同背景学员的学习体验分享。
045:应用层技术解析 🌐
在本节课中,我们将要学习互联网四层架构中的最顶层——应用层。我们将了解应用程序如何利用下层网络服务进行通信,并重点解析万维网(WWW)的工作机制。
上一节我们介绍了TCP层如何提供可靠的端到端数据流。本节中,我们来看看应用程序如何利用这个“管道”进行通信。
应用层建立在TCP层提供的可靠连接之上。TCP层确保数据能在一台计算机的某个应用与另一台计算机的某个应用之间,有序、可靠地双向传输。我们可以发送“Hello”,经过价值数十亿美元的硬件、数十万工程师、四十年的工程设计,最终在另一端准确地显示出“Hello”。四层架构的美妙之处在于,我们可以将这个过程视为“魔法”——我们发送数据,数据就出现了。
有了这个“魔法”管道,我们能用它做什么呢?TCP提供了可靠的管道,我们现在要思考的是,如何在这个管道之上构建应用。
客户端与服务器模型 💻 ↔️ 🖥️
现在,我们暂时忽略网络底层细节。假设你的电脑上运行着一个应用程序(客户端),而另一台服务器上也运行着一个应用程序(服务器)。客户端和服务器通常是不同的应用:客户端负责请求信息,服务器负责响应并提供信息。

这种客户端-服务器的通信机制,可以用来构建电子邮件系统、万维网,或者用于视频流传输。本节课我们将聚焦于万维网,因为它非常简单、优雅,也最容易理解,并且是最流行的应用协议。
端口:连接特定服务的“分机号” 📞
应用层需要解决两个基本问题。第一个是:数据应该交给哪个应用程序?这是通过端口机制实现的。
端口允许一个IP地址(即一台计算机或服务器)提供多种服务。客户端可以像拨打电话分机号一样,连接到它感兴趣的特定服务。
端口和TCP一起工作。IP地址定位到特定的服务器硬件,而端口号则进一步指定我们要与服务器上的哪个应用程序通信。

以下是一些常见的TCP端口及其对应的服务:
- 25: 接收电子邮件 (SMTP)
- 22/23: 远程登录 (SSH/Telnet)
- 80/443: 网页服务 (HTTP/HTTPS)
- 109/110: 个人邮箱访问 (POP2/POP3)
应用协议:对话的规则 📜
一旦我们通过端口连接到目标服务器(如网页服务器、邮件服务器),接下来就需要知道如何与它“对话”。这就是应用协议,它定义了通信的规则。
TCP提供了可靠连接,端口让我们连接到目标服务,而应用协议则规定了在这个连接上谁先说话、发送什么内容、会得到什么回应。这取决于你正在与哪种类型的服务器通信。
我们将主要探讨万维网协议,因为它最简单,也最能清晰地展示这个过程。
万维网与HTTP协议 🌍
万维网客户端(即浏览器)和服务器使用名为HTTP的协议进行通信。事实上,你可以在浏览器地址栏的URL开头看到“http://”。
HTTP协议规范非常简单。其核心是HTTP请求-响应周期:
- 你在浏览器中点击一个链接。
- 浏览器(客户端)向服务器建立一个连接。
- 客户端发送一个对特定文档的请求。
- 服务器查找并处理请求,然后将文档作为响应发回。
- 浏览器接收响应,显示文档,随后连接通常会被关闭。

这个过程就是:点击 -> 请求 -> 响应 -> 显示。
深入HTTP:模拟浏览器请求 🛠️
那么,浏览器具体发送了什么命令呢?通过TCP连接发送到服务器的命令是一个GET请求。例如,点击一个指向page2.htm的链接,浏览器会发送:GET /page2.htm。服务器则会返回描述页面如何显示的HTML代码。
如果我们想自己编写一个浏览器,就需要遵循IETF制定的规范,例如RFC 1945(HTTP/1.0)。规范规定,请求一行应包含:GET + 空格 + 请求的URL + 空格 + 协议版本。
我们可以通过一个简单的方法来“模拟”浏览器:使用Telnet工具。Telnet可以建立到指定主机和端口的TCP连接,并将我们输入的内容直接发送过去。这对于理解公开协议(如HTTP)非常有用。
操作示例(在命令行中):
- 连接到服务器的80端口(HTTP默认端口):
telnet www.drchuck.com 80 - 手动输入符合HTTP规范的请求行:
GET /page1.htm HTTP/1.0 - 按两次回车(发送请求并结束头部)。
- 服务器将返回响应状态码(如
200 OK)、头部信息和请求的HTML文档内容。
通过这种方式,我们成功地“手动”与Web服务器进行了对话。只要我们遵循协议规则,服务器就会回应我们。这展示了应用层的本质:知道连接到哪个端口,并使用该端口对应的协议进行通信,就能获取数据。
互联网:一个有机的整体 🌱
应用层是一个丰富多彩的领域。我们有了“管道”抽象(TCP),用“分机号”(端口)连接不同服务,并用“对话规则”(应用协议)进行交流。
至此,我们已经走完了互联网四层架构:从底层的链路层(以太网、光纤、无线),到网络层(IP,负责不可靠的地理位置跳转),再到传输层(TCP,负责可靠传输和重传),最后到应用层(我们实际使用的网络服务)。
令人印象深刻的是,这套架构源于20世纪70年代的研究工作,其核心思想至今仍在支撑着拥有数十亿设备的全球互联网。它被设计成能够自我修复,而非追求完美无缺。这种韧性使得互联网在面对局部故障(如自然灾害)或人为中断时,能够寻找其他路径,保持整体连通。它就像一个有生命的有机体,是人类共同构建的最大规模的集体工程。
展望未来:持续演进 🔮
最后需要思考的是,互联网架构并非一成不变。正如范·雅各布森(Van Jacobson)等先驱者所探讨的“内容中心网络”等概念,未来的网络形态可能与我们今天所知的完全不同。作为工程师和互联网的使用者,我们不应自满,而应持续质疑和创新,因为技术永远在演进。
本节课中,我们一起学习了应用层的工作原理。我们了解了客户端-服务器模型、端口如何像电话分机一样定位服务,以及应用协议(特别是HTTP)如何定义通信规则。通过手动模拟HTTP请求,我们直观地看到了浏览器与服务器之间的对话过程。最后,我们回顾了互联网架构的韧性,并认识到技术需要持续演进。
046:Van Jacobson与内容中心网络
概述
在本节课中,我们将探讨当前互联网面临的大规模扩展性问题。我们将分析以信息为中心的万维网模型与以主机为中心的TCP/IP模型之间的根本矛盾,并了解Van Jacobson提出的“内容中心网络”这一革命性构想,它旨在从底层改变我们构建网络的方式。
从电话模型到内容模型
上一节我们回顾了互联网的起源,本节中我们来看看其核心设计理念的演变。互联网最初是作为计算机的电话系统而设计的。
其模型是:计算机希望交换数据,人们希望他们的计算机能够交换数据。我们拥有的通信模型,在140年里一直是电话系统。因此,设计者认为计算机需要进行跨越长距离的“对话”。于是,他们创建了允许计算机进行对话的协议和基础设施。
早期的网络,如ARPANET,处理了不同的带宽需求,并用缓冲等技术替代了电话网络所需的全局时钟分发。但最关键的一点来自保罗·巴兰的贡献:与电话系统不同(电话系统的通信是关于在两个端点之间逐跳建立一条链路,本质上是指导交换系统如何制造一根长线),保罗提出不要那样做,只需标识端点,然后让网络负责将数据送达。
这个设计非常伟大,完全改变了世界。但这一改变的大部分并非发生在互联网初生的70、80年代和90年代早期,而是发生在90年代末和21世纪初万维网兴起之时。并且,这与计算机的对话模型毫无关系,而是与人们创建和消费内容有关。
万维网的启示与局限
万维网首次向我们展示了,如果我们抛弃这种18世纪的电话模型,转而关注线缆中承载的信息,会发生什么。万维网提供了一种结构,你可以为信息本身命名,而不是为获取它的过程命名。例如,“我想要这个网页”、“我想要这个YouTube视频”、“我想要这个亚马逊个人页面”,然后你会得到相应的内容,即代表你所给名称的东西。
那么,如果我们从根本上重新思考底层基础设施呢?不要像今天实现的那样,说万维网是TCP/IP之上的一个覆盖层。如果说我们99%以上的行为都是类似万维网的活动,是否存在一种模型,让我们在数据包层面做同样的事情,使其成为我们通信的基础,而不是说它必须是一个覆盖层?
当前模型的局限性是:你可以创建视频,放在自己的网站上,但你得祈祷它们永远不会流行起来。因为一旦流行,你的网络服务提供商几乎会立即关闭你的连接,因为你的链路会被完全饱和——我们过去称之为“Slashdot效应”。这在对话模型中是固有的问题。
我们不会通过给电视台打电话来播放广播电视。如果你想在TCP/IP上实现媒体分发,你必须想办法“欺骗”网络。例如,YouTube.com在TCP看来是一个由IP地址标识的位置,你必须确保这个“位置”不是遍布全球的单一地点。
当前扩展性危机的根源
在90年代,我们大部分时间都在发展互联网,让协议为我们工作。但现在,如果你看看YouTube、Google、Amazon、Facebook、Twitter所有这些被重度使用的服务,它们对网络呈现为一个IP地址,看起来像单一位置。但如果一个“单一位置”拥有数亿用户,那么在对话模型中,流量总是随着受欢迎程度(即消费者数量)线性增长。
当你发布一条推文更新或一个希望被数百万人观看的视频时,你无法在对话模型中部署它。我们花费所有时间填满网络的信息在性质上基本相同——都是命名或身份信息,但它们被随机分散在整个数据包中。
以下是数据包中信息的典型结构:
- 源地址和目的地址:传统上被认为是第3层(网络层)信息,放在前面供网络层使用。
- 端口号:属于第4层(传输层),位置稍深,供终端节点用于解复用到特定应用程序。
- 序列号:在应用程序内部用于重组更大的数据单元。
- URL:由应用程序中比传输层更高的部分使用。
所有这些信息本质上都是命名信息,它们定义了这些比特的含义。它们共同为信息提供了上下文,都是信息的名称。
内容中心网络的构想
那么,如果不是像亚马逊的负载均衡器那样工作(它需要查看地址、端口、序列号、Cookie,以便将请求分派到处理它的那台服务器),而是说:数据包的前面有一个名称,所有这些信息都汇总到这个名称里,会怎样?
在网络中的任何一点,你只需查看完成工作所需的那部分名称。如果只看前面部分就够用(因为你只做粗粒度的路由),那就只看前面。如果需要查看更多,我们就查看更多。我们不再有严格的层级,而是拥有一组结构化的信息。
我们知道会因不同原因查看它的不同部分。因此,我们把拓扑敏感的信息(如 Amazon.com)放在前面,因为你可以用它来构建可扩展的路由表。但当数据包到达那里时,我们不再说有传输协议和各种层,而是说:是的,当我到达 Amazon.com 时,我有一个任务要完成,而这个任务需要我查看这么多信息。
缓存与扩展性的关键
如果你不关心从哪里获取数据,只关心数据本身是什么,而不是它来自哪里。那么,网络中所有必须作为缓冲以管理网络复用的内存,突然之间就变成了一个可行的数据源。
今天的情况是:你在观看一个YouTube视频,这意味着比特从YouTube服务器离开,进入下游网关的内存,从内存中取出放入线路,进入下一个网关的内存……它们通过所有这些互连的线路,在内存之间弹跳,最终到达你这里。如果我们两个人正在观看同一个视频,那么紧邻的上游网关就会得到一份发往我的视频副本,和另一份完全相同的、发往你的独立副本。它们都经过了那个网关的内存。
正是因为我们强加的对话抽象,网关不知道我们正在消费相同的内容。它看到的是两个不同的对话。它无法查看自己的内存并说:“哦,我有那个数据,可以给你。” 你必须获取一个新副本,并且必须一路从YouTube获取。
这就是导致我们扩展性极差的根本原因。让负载随受欢迎程度线性增长,严格来说是“数据只能从一个地方起源”这一假设的函数。而如果你只关心数据本身,你只需开始朝那个地方前进,一旦你遇到了数据,好了,现在你有了一个副本,你的分发任务就完成了。
总结
本节课中,我们一起学习了当前互联网TCP/IP对话模型在应对以内容为中心的现代网络流量时面临的扩展性挑战。Van Jacobson指出,问题的核心在于我们将“位置”(IP地址)与“信息”(内容)错误地绑定在一起。他提出的内容中心网络构想,建议将数据包设计为携带一个代表内容本身的“名称”,而非目的地地址。这样,网络中的节点可以识别并缓存流行内容,从根本上改变数据分发的模式,使流量规模不再与消费者数量线性相关,而是与内容的唯一性相关,从而为解决大规模内容分发问题提供了全新的思路。
047:美国加利福尼亚州圣地亚哥
在本节课中,我们将跟随查克老师走进位于美国加利福尼亚州圣地亚哥的附加办公时间现场,认识几位参与课程的同学,并聆听他们的学习感受。
上一节我们介绍了课程的不同模块,本节中我们来看看同学们在实际参与课程后的真实反馈。
查克老师首先向大家介绍了在场的几位同学,并邀请他们进行简短的自我介绍。
以下是几位同学的自我介绍与课程体验分享:
- 布拉德说:“大家好,我叫布拉德。我非常喜欢这门课,感谢科塞塔提供这个机会。”
- 萨姆说:“大家好,我是萨姆。我很高兴选修了这门课,这是一次富有启发性的经历。请大家一定要看看这门课。”
- 托德说:“大家好,我是托德。这门课对所有年龄段的人都很有趣。谢谢。”
- 查曼说:“大家好,我是查曼。我非常享受这门课,并且鼓励大家去选修Python课程。”
在听取了同学们的热情分享后,查克老师对本次办公时间进行了总结。
查克老师表示,这又是一次在圣地亚哥成功的办公时间。他还不确定下一次办公地点会在哪里,或许是洛杉矶,并期待与大家再次相见。
本节课中我们一起学习了同学们对于《互联网历史、技术与安全》课程的真实评价,感受到了这门课程带来的启发与乐趣,并了解了课程社区互动的形式。
048:信息安全导论 🔐
在本节课中,我们将要学习信息安全的基本概念。我们将认识通信中的主要角色,理解安全的核心目标,并探讨在实际应用中如何权衡安全与成本。
认识通信中的角色 👥
在密码学领域,我们通常用一些特定名称来指代通信中的各方。
以下是通信中常见的角色:
- Alice 和 Bob:他们是希望安全通信的双方,是“好人”。在计算机术语中,他们常被简称为 A 和 B。
- Eve:这是一个常见的“坏人”角色,代表窃听者。其他可能的“坏人”名称还包括 Carol、Carlos、Charlie 或 Chuck。
- Trinity:这个来自电影《黑客帝国》的角色,在这里被用作一个具有恶意意图的中间人形象。
Alice 和 Bob 相距甚远,他们需要安全地通信。而中间可能存在像 Trinity 这样的恶意角色,意图窃听、篡改或完全重定向他们的通信。
理解安全威胁 🎯
上一节我们介绍了通信中的基本角色,本节中我们来看看谁可能对我们构成威胁。思考安全问题时,需要明确谁想攻击你以及原因。
对于大多数普通人而言,我们面临的主要威胁是:
- 犯罪分子试图窃取信用卡号等财务信息。
- 如果你是有影响力的人物或公职候选人,对手可能会试图入侵你的电子邮件。
然而,对于绝大多数普通人来说,我们的生活相对“平淡”,并非恶意攻击者的高价值目标。但这并不意味着可以忽视安全。我们仍应尽可能保护自己的信息和通信安全,保持警惕。
视角的转换:我们与政府 🔄
在最初的课程中,政府(如布莱切利公园的密码破译者)是破解敌方密码、拯救文明的“好人”。但现在,当我们作为普通公民试图保护自己的通信时,视角发生了转换。
现在的情况是:
- 我们(试图加密通信的普通人)成为了需要保护隐私的“好人”。
- 政府(拥有强大监控和破译能力的机构)在某种程度上扮演了试图解读我们私人通信的角色。
这本质上是一场“军备竞赛”。加密方不断发明更强大的加密方法,而解密方则持续开发更强大的破译技术。哪一方是“好人”取决于我们自身的立场。
安全与成本的平衡 ⚖️
在深入技术细节之前,我们需要理解一个关键概念:安全需要与成本进行平衡。
安全专家有时会认为“安全性越高越好”,但这是一个误区。完美的安全是无法实现的。安全本质上是一种成本效益分析。
以信用卡为例:
- 信用卡号为我们提供了巨大的支付便利。
- 虽然偶尔会发生盗刷,但银行通过监控异常交易(例如,持卡人在密歇根州,交易却出现在新泽西州)能将损失控制在很低水平。
- 如果为了绝对安全,要求每次交易都有安保人员陪同,那么交易成本将高得无法承受。
因此,真正的安全专家明白,安全并非追求完美,而是在风险与成本、便利性之间找到最佳平衡点。
信息安全的两大核心目标 🎯
现在,我们进入信息安全的技术术语部分。在后续关于安全的讲座中,我们将主要解决两个基本问题。
以下是信息安全的两大核心目标:
- 保密性:防止信息泄露给未经授权的个体。其核心问题是信息的泄露。例如,确保只有指定的接收方能看到信用卡号,而其他人都无法看到。
- 公式/目标:
发送信息 M, 确保只有接收方 B 能解密并读取 M, 而窃听者 E 无法获取 M 的内容。
- 公式/目标:
- 完整性:确保信息在传输过程中未被篡改,并且确实来自声称的发送方。这包括验证信息来源和内容是否被修改。数字签名等技术就属于这个范畴。
- 公式/目标:
接收方 B 能够验证收到的信息 M' 确实来自发送方 A, 且 M' 等于原始发送的信息 M(即 M' == M)。
- 公式/目标:
保密性和完整性这两个主题将贯穿我们后续所有的安全课程。


本节课中我们一起学习了信息安全的基础。我们认识了通信模型中的经典角色(Alice, Bob, Eve),理解了安全威胁因人而异,并认识到安全措施需要在成本和效益之间取得平衡。最后,我们明确了信息安全的两大核心目标:保密性和完整性,这是构建所有安全技术的基石。在接下来的课程中,我们将深入探讨实现这些目标的具体方法。
049:加密与保密性 🔐



在本节课中,我们将要学习信息安全的核心概念之一:保密性,以及实现它的基础技术——加密与解密。我们将从最古老的凯撒密码入手,理解其工作原理,并通过动手练习体验如何“破解”它。



概述:加密的基本概念
上一节我们介绍了信息安全的目标,本节中我们来看看实现保密性的核心技术——加密。
加密的目的是确保信息在传输过程中不被未经授权的人理解。其核心涉及三个基本概念:明文、密文和密钥。
- 明文:指我们希望传输的原始信息,例如一段文字或一个信用卡号。
- 密文:指经过加密处理后的信息,看起来是杂乱无章的字符。
- 密钥:指用于加密和解密的一串数据或一个算法。加密是将明文转换为密文的过程,而解密则是利用密钥将密文恢复为明文的过程。
在通信中,我们假设密文可能会被中间人(如路由器或窃听者“Eve”)截获。因此,密文的设计目标是让截获者无法理解,并且难以(或不可能)在没有密钥的情况下还原出明文。
对称密钥加密
接下来,我们将探讨两种主要的加密系统。首先介绍的是对称密钥加密。
对称密钥加密,也称为共享密钥加密,意味着通信双方(例如“Alice”和“Bob”)必须拥有并使用相同的密钥进行加密和解密。其过程可以概括为:
- Alice 使用密钥加密明文,生成密文。
- Alice 通过网络发送密文。
- Bob 收到密文后,使用相同的密钥进行解密,得到原始明文。
这种加密方式历史悠久,从古罗马时代一直沿用到第一次世界大战。但它存在一个关键问题:双方必须通过某种安全的方式(例如面对面交换)预先共享密钥。这个“密钥分发”问题,正是后来推动非对称加密(公钥加密)发展的原因。
凯撒密码:一个古老的例子
为了更具体地理解对称加密,让我们来看一个最著名的例子——凯撒密码。
凯撒密码是一种替换密码,其加密方法是对字母进行固定位数的“移位”。例如,移位数为1时:
- 明文
A变为密文B - 明文
B变为密文C - … 以此类推,
Z循环回到A
移位数就是密钥。如果 Alice 想用移位 2 加密单词“CANDY”,过程如下:
- C -> E
- A -> C
- N -> P
- D -> F
- Y -> A
- 得到的密文是:
ECPFA
Bob 收到密文 ECPFA 后,如果他知道密钥是“减2”(即移位-2),就可以将每个字母反向移位,恢复出明文“CANDY”。


动手练习:使用“秘密解码环”




理论需要结合实践。现在,我们将扮演二战时期布莱切利园的密码破译员,尝试破解一段密文。


首先,你需要获取我们的“秘密解码环”工具。请访问以下链接下载PDF文件,并建议打印出来以便操作:
drchuck.com/secretdecoder.pdf




这个解码环的使用方法很简单:
- 加密(明文 -> 密文):在明文行找到字母,向下对齐到指定的“移位”行,该位置对应的字母就是密文。
- 解密(密文 -> 明文):在密文行找到字母,向上对齐到指定的“移位”行,该位置对应的字母就是明文。






你的第一个挑战来了!以下是截获的一段密文:
UPO UBTU

你的任务是破解它。由于不知道移位密钥,你需要扮演“人肉计算机”,尝试所有26种可能的移位(1到26),然后找出哪一次解密的结果是有意义的英文单词或句子。
(请在此暂停视频,尝试破解……)
你成功了吗?答案是移位1。解密后的明文是:TOAST。就像布莱切利园的专家一样,我们通过判断解密结果是否“有意义”来确定破解成功。


优化破译:利用信息泄漏
现在,难度升级。这是一段更长的密文,而且它不是简单的移位1:
GUR FUVSG VF ABG BAR
如果尝试所有26种移位,工作量会很大。但这里存在一个“信息泄漏”,让我们可以更聪明地找到密钥,而不必暴力尝试所有可能。


仔细观察密文。你发现了什么?密文中保留了空格,并且有一个单独的大写字母单词“GUR”和一个单独的小写字母单词“BAR”。
在英语中,常见的单个字母单词有哪些?大写的情况通常是“I”,小写的情况通常是“a”。我们可以利用这个线索进行推测。
例如,假设密文中的“V”对应明文中的“I”。那么,我们在解码环上从“V”向上寻找“I”,看看需要移位多少。你会发现,这正好是移位13。验证其他部分,整个密文“GUR FUVSG VF ABG BAR”在移位13后,会变成有意义的句子:“THE SHIFT IS NOT ONE”。
通过利用语言习惯(信息泄漏),我们极大地减少了破译所需的工作量。历史上,布莱切利园的破译专家也经常利用这类已知的明文模式或通信习惯来加速破译过程。
ROT13:一个有趣的应用
移位13(ROT13)在凯撒密码中有一个有趣的性质:因为字母表有26个字母,移位13等于移位-13,所以加密和解密是同一个操作。
在互联网早期(如80年代的新闻组时代),ROT13被用来轻微隐藏一些可能令人反感的内容(例如脏话笑话),以绕过简单的脏话过滤器。人们甚至熟练到可以直接阅读ROT13编码的文字。你可以访问 rot13.com 来体验这种古老的“加密”文化。
总结
本节课中我们一起学习了加密技术的基础。我们从明文、密文和密钥的核心概念出发,重点探讨了对称密钥加密,并以古老的凯撒密码为例进行了详细说明。通过动手使用“秘密解码环”,我们实践了加密、解密以及暴力破译的过程。最后,我们还了解到,即使加密算法本身没有数学缺陷,信息泄漏(如语言模式、通信习惯)也可能严重削弱其安全性。这些基础知识为我们理解更复杂的现代加密技术做好了准备。
050:完整性与数字签名 🔐









在本节课中,我们将要学习信息安全中的另一个核心概念:完整性。上一节我们介绍了使用凯撒密码实现保密性,本节中我们来看看如何确保信息在传输过程中没有被篡改,以及如何验证信息的来源。




从保密性到完整性
保密性意味着隐藏信息,不希望第三方(如“Eve”)看到明文。但仅靠保密性是不够的。我们还需要确保接收到的信息确实是发送者发出的原始信息,并且在传输过程中没有被修改。这就是完整性。
在物理世界中,我们使用签名或蜡封来确保文件的来源和完整性。但在数字世界中,我们需要一种不同的技术。
密码学哈希函数
实现数字完整性的核心技术是密码学哈希函数。它是一种计算机算法,可以将任意长度的数据(消息)转换成一个固定长度的、看似随机的字符串,称为摘要或哈希值。
哈希函数的核心特性是:
- 确定性:相同的输入总是产生相同的输出。
- 快速计算:给定输入,能快速计算出哈希值。
- 抗碰撞性:很难找到两个不同的输入产生相同的哈希值。
- 雪崩效应:输入的微小改变(即使只改一个字符)会导致输出的哈希值发生巨大、不可预测的变化。
- 单向性:从哈希值无法逆向推导出原始输入。
我们可以用以下公式表示哈希函数:
digest = hash_function(message)
常见的哈希函数算法包括 MD5、SHA-1、SHA-256 等。随着密码学研究的深入,一些早期算法(如 MD5、SHA-1)已被发现存在弱点,因此对于高安全场景,推荐使用更强大的算法如 SHA-256。
以下是哈希函数特性的一个示例:
- 输入
"The red fox jumps over the blue dog",SHA-1 输出特定哈希值。 - 仅将
"fox"改为"fox",输入变为"The red fox jumps over the blue dog",SHA-1 输出会变得完全不同。
哈希函数的应用:密码存储
哈希函数的一个直接应用是安全地存储用户密码。
以下是其工作原理:
- 用户注册:当用户创建密码(例如
"fluffy")时,系统并不存储密码本身。 - 计算哈希:系统将密码通过哈希函数(如 SHA-256)运行,得到一个哈希值(例如
"2c5f...e1a3")。 - 存储哈希:系统仅将这个哈希值存入数据库。
- 用户登录:用户再次输入密码时,系统对输入的密码进行相同的哈希计算。
- 验证匹配:系统将计算出的哈希值与数据库中存储的哈希值进行比较。如果两者匹配,则密码正确。



这种方法的好处是,即使数据库泄露,攻击者也只能获得密码的哈希值,而很难反向破解出原始密码,从而保护了用户在其它使用相同密码的网站上的安全。










正因为系统不存储明文密码,所以任何可信的系统都不应该、也无法通过邮件告诉你忘记的密码是什么,只能提供“重置密码”的功能。







实现消息完整性:数字签名

现在,我们将哈希函数用于更广泛的场景:为任何消息创建数字签名,以验证其来源和完整性。这就像医生在电子处方上签名一样。
我们从一个简单的方法开始:使用共享密钥的签名。

假设发送者(Alice)和接收者(Bob)预先在一个安全环境中约定了一个只有他们俩知道的共享密钥(例如 "Santa")。







签名生成过程(由 Alice 完成):
- 将共享密钥附加到原始消息末尾:
message_with_secret = message + secret - 对整个字符串计算哈希值:
digest = hash(message_with_secret) - 将计算得到的
digest附加到原始消息(不包含密钥)后,发送给 Bob。
message_to_send = message + digest
验证过程(由 Bob 完成):
- 接收消息后,将末尾的
digest分离出来。 - 在剩余的消息后面加上共享密钥
secret。 - 对
message + secret计算哈希值,得到local_digest。 - 比较
local_digest和接收到的digest。- 如果两者匹配,则证明消息确实来自 Alice,且未被篡改。
- 如果不匹配,则说明消息要么不是来自 Alice,要么在传输中被修改过。






关键点:因为哈希函数具有雪崩效应和单向性,任何中间人如果不知道 secret,都无法在修改消息后伪造出一个能通过验证的 digest。






让我们看一个例子:
- 消息:
"eat more ovaltine" - 密钥:
"Santa" - 签名步骤:计算
hash("eat more ovaltineSanta")得到摘要"abc123...",发送"eat more ovaltine abc123..."。 - 验证步骤:接收后,计算
hash("eat more ovaltineSanta"),得到"abc123...",与接收的摘要匹配,验证成功。



如果攻击者将消息改为 "eat less ovaltine",接收方计算 hash("eat less ovaltineSanta") 会得到完全不同的摘要(如 "def456..."),与接收的摘要 "abc123..." 不匹配,从而立即发现消息被篡改。








本节总结
本节课中我们一起学习了:
- 完整性的概念:确保信息未被篡改并来自声称的发送者。
- 密码学哈希函数:将任意数据映射为固定长度摘要的单向函数,是数字签名的基石。
- 哈希函数的应用:安全存储密码,避免明文泄露风险。
- 数字签名(共享密钥方式):通过将共享密钥与消息一起哈希,生成一个可验证的签名,接收方可用相同的密钥和流程验证消息的完整性和真实性。
我们目前介绍的方法都依赖于通信双方预先共享一个密钥。然而,在像互联网这样开放的环境中,为每对通信者提前安全地分发密钥是不现实的。在下一讲中,我们将探讨如何在不安全通道上建立安全通信,即非对称加密和公钥基础设施,这将解决密钥分发的根本难题。
051:安全思维模式
概述
在本节课中,我们将学习计算机安全专家布鲁斯·施奈尔所阐述的安全思维模式。这是一种独特的思考方式,它要求我们从攻击者的角度审视系统,思考如何使其失效,而不仅仅是使其运行。我们将探讨这种思维模式的重要性、如何培养它,以及它在广阔的安全领域中的应用。
正文
布鲁斯·施奈尔认为,计算机安全是当前计算领域最令人兴奋的部分,因为它包含了一个其他领域所没有的关键要素:对抗关系。无论是图形学、操作系统还是其他领域,通常没有对手在每一步都试图阻挠你。而安全领域则存在这种对抗,这使其充满变化、激动人心,并融合了心理学、经济学、计算科学、法律与政策等多学科知识。只要人类社会存在善意与恶意的行为者,对安全的需求就不会消失。
上一节我们介绍了安全领域的对抗性本质,本节中我们来看看这种对抗性所要求的核心思维方式。
安全在很大程度上是一种思维模式,一种看待世界的方式。传统的“黑客”思维是巧妙地将东西组合在一起使其工作。但安全专家的思维则不同:他们会思考如何转动某个部件,系统就会停止工作。当建造者说“别那样做”时,安全专家会回应:“不,我是攻击者,我就可以那样做。我可以在最不合时宜的时刻,以导致系统最严重故障的方式去做。”你必须学会这样思考:不是思考如何构建或让系统工作,而是思考如何使其失效,以及如何以精确的方式使其失效,从而造成特定的损害。
这种思维方式是一种习惯。有些人天生就会观察各种系统并思考如何破解它——走进商店看到收银系统,会想“我可以这样偷东西”;走进投票亭,会想“我可以这样破坏它”。他们可能不会真的去做,因为那是非法的,但他们会以这种方式思考。一旦具备了这种思维模式,剩下的就是学习具体领域的知识,无论是自动驾驶汽车、投票系统还是医疗设备,都是嵌入代码与现实世界、人与社会的交互。这些知识都是可以学习和教授的。
为了培养这种打破常规的思维,安全课程中会有一些特别的训练。以下是一个著名的教学案例:
我记得一门安全课上有这样一个作业:“明天来上课,写下圆周率π的前1000位数字。” 这个测试有两点关键:第一,你无法靠记忆背出1000位π,所以你必须“作弊”;第二,学生被期望去“作弊”,但如果被抓到作弊,就会不及格。这很有趣,它迫使你跳出框框思考:“我该怎么做?”学生们想出了各种作弊方法。我建议观看本课程的人去搜索一下相关文章,这是一个激发安全思维模式的绝佳方式。
那么,这种思维模式能通过正式课程教授吗?或许它更像是一种需要通过实践来锻炼的思考方式。参加越多的安全课程,就越能锻炼这种思维。许多黑客大会会举办“夺旗”竞赛,我记得早期有一个比赛,参赛者必须建立自己的私人网络,以减少网络延迟和“联邦违规”——这就是你参与的目的。通过攻破他人的系统,你能学到很多,尽管这可能涉及非法活动,并且不被社会广泛接受。这里存在着技术需求与社会规范之间的冲突。
我们的许多系统都是“黑箱”。你可以尝试破解自己的智能手机或电脑,并学到一些东西,但破解他人的设备可能“更有趣”。我希望学习是开放式的,跟随你的兴趣。安全领域包含众多子学科,我常被问到:应该学习取证、密码学、网络安全、协议、嵌入式设备还是工控系统?我的回答是:学习你感兴趣的东西。因为真正要学习的,是如何像安全专家一样思考。说实话,如果你得到一份工作,需要你负责VPN,你可以很快学会VPN技术,这并不难,难的是那种思维方式。所以,做你想做的。
我们现在认识到,市场对安全专家的需求远远大于供给。具备安全专业知识的人拥有可靠的职业前景,因为需求巨大而供给不足。
总结
本节课中,我们一起学习了布鲁斯·施奈尔所强调的安全思维模式。我们了解到,安全的核心在于对抗性,这要求我们从攻击者角度思考如何使系统失效,而不仅仅是使其工作。这种思维方式可以通过特殊训练(如“π记忆”测试)和实践(如安全课程、夺旗竞赛)来培养。安全领域广阔且分支众多,关键在于跟随自己的兴趣深入学习,掌握核心的思考方式,而不仅仅是具体技术。在当前需求旺盛的背景下,掌握这种思维模式将为你开启充满机遇的职业生涯。
052:公私钥与SSL协议 🔐





在本节课中,我们将要学习公钥加密技术。这是一种解决互联网通信中保密性问题的优雅方案,它允许我们在无需预先共享秘密的情况下,安全地交换信息。我们还将了解这项技术如何通过SSL/TLS协议(即HTTPS)被应用到日常的网络浏览中,保护我们的数据从离开电脑到抵达服务器的全过程。

上一节我们介绍了使用凯撒密码等传统方法实现保密性,以及使用基于共享秘密的消息摘要来确保完整性。这些方法都面临一个共同的核心问题:需要预先共享一个秘密。
共享秘密的困境 🤔
在互联网世界中,要求每个用户在与亚马逊等网站交易前,都必须亲自前往其总部获取一个共享秘密,这是不现实的。如果秘密丢失,更新过程也将非常困难。因此,安全系统需要能够在“一臂之遥”的距离上工作,即无需事先见面交换秘密。公钥加密正是为解决这一问题而提出的优雅方案。
公钥加密:一种非对称方案 🔑
公钥加密由迪菲和赫尔曼在1976年提出。它的核心在于使用两个不同的密钥,因此被称为非对称加密。这与我们之前学习的、使用同一把密钥进行加密和解密的对称加密不同。
以下是公钥加密的核心概念:
- 公钥:可以完全公开,无需任何保护。用于加密数据。
- 私钥:必须严格保密,由生成者自己保存。用于解密数据。
这两个密钥在数学上相关联,其关系是公开的,但对于足够长的密钥,从公钥推导出私钥在计算上极其困难。其美妙之处在于,公钥可以被自由分发甚至被拦截,这都无关紧要,因为只有配对的私钥才能解密用该公钥加密的信息。
背后的数学原理:质因数分解 🧮


公钥加密的安全性基于一个经典的数学难题:大整数的质因数分解。
生成密钥对的过程始于选择两个非常大的随机质数(可能有数百甚至上千位)。将这两个质数相乘得到一个巨大的合数。公钥和私钥便是通过一系列计算从这个合数及其原质数中推导出来的。





其计算不对称性的本质如下:
- 正向计算(加密/验证)容易:已知一个质数,求另一个质数(即做除法)是简单的。
- 逆向计算(解密/破解)困难:仅知道最终的合数,要求出原来的两个质因数(即分解),在计算上是极其困难的。




我们可以用一个公式化的例子来理解:
- 设
N = p * q,其中p和q都是大质数。 - 公钥和私钥由
N、p、q以及其他参数通过特定算法(如RSA)生成。 - 已知
N,求p和q是困难的。但已知p(或q)和N,求q(或p)则是简单的除法。
这种“单向”特性使得加密系统非常安全。我们并非无法破解,而是所需的计算量如此之大,以至于在现实时间尺度内“不切实际”。随着计算机能力增强,我们只需增加密钥长度即可维持安全性。

工作流程:以网购为例 🛒

让我们看看当你访问亚马逊网站输入信用卡信息时,公钥加密如何工作:
- 密钥分发:亚马逊服务器生成一对公钥和私钥。私钥被安全地保存在服务器上。当你连接网站时,亚马逊将其公钥发送给你的浏览器。这个过程是公开的,即使被攻击者“伊芙”截获也无妨。
- 加密数据:你的浏览器使用收到的亚马逊公钥,对你的信用卡号等敏感信息进行加密,生成一段密文。
- 传输密文:这段密文通过网络发送回亚马逊服务器。攻击者伊芙同样可以截获这段密文。
- 解密数据:亚马逊服务器使用其严格保密的私钥对密文进行解密,恢复出你的原始信用卡信息。
关键在于,攻击者伊芙同时拥有了公钥和密文,但由于缺乏私钥,她无法在可行的时间内解密信息。而亚马逊因为拥有私钥,可以轻松解密。
融入网络架构:SSL/TLS与HTTPS 🌐
公钥加密技术被完美地集成到了互联网的分层架构中,具体表现为安全套接字层(SSL) 或其继任者传输层安全协议(TLS),它们在应用层和传输层(TCP)之间增加了一个“迷你安全层”。
回顾一下网络分层模型(从上至下):
- 应用层(如HTTP)
- 传输层(TCP)
- 网络层(IP)
- 链路层
以下是SSL/TLS的工作方式:
- 对应用程序透明:你的浏览器(应用层)只是照常发送明文数据(如信用卡号)。
- 安全层介入:在数据交给TCP层发送之前,SSL/TLS层会接管这些数据,使用公钥加密等技术对其进行加密。
- 网络无感知:加密后的密文作为普通数据流,经由TCP、IP、链路层正常传输。路由器、交换机等网络设备完全不知道它们正在传输加密数据。
- 远端解密:密文到达亚马逊服务器后,首先由服务器的SSL/TLS层解密,还原为明文,再交给亚马逊的网页应用处理。
这种设计的优美之处在于,除了通信两端,整个网络基础设施都无需为支持加密而做任何改变。加密和解密只发生在你的电脑和服务器内部。你在浏览器地址栏看到的 https:// (而非 http://)就是该连接启用了SSL/TLS协议的标志。
安全边界与剩余风险 ⚠️
SSL/TLS(HTTPS)极大地提升了通信安全,它主要防范的是传输过程中的窃听风险,即攻击者“伊芙”在网络上拦截数据。它建立了从你的浏览器到服务器内部的一条安全通道。
然而,它并不能解决所有安全问题。主要剩余风险包括:
- 端点安全:如果你的电脑感染了恶意软件(病毒),它可能在数据被加密之前(即你在键盘输入时)就窃取了信息。同样,如果服务器被入侵,私钥或明文数据也可能泄露。
- 身份冒充:HTTPS保证了数据传输的保密性,但如何确保你连接的“https://www.amazon.com”就是真正的亚马逊,而不是一个伪造的钓鱼网站呢?这属于完整性或认证问题,需要依赖数字证书等机制来解决,这将是下一讲的内容。
作为用户,一个关键的安全习惯是:任何时候输入密码、信用卡号等敏感信息,都必须确认浏览器地址栏以 https:// 开头,而不仅仅是 http://。
本节课中我们一起学习了公钥加密的原理,它利用数学上的非对称性,允许通过公开渠道安全交换信息。我们还探讨了这一技术如何以SSL/TLS协议(HTTPS) 的形式嵌入互联网架构,在传输层之上为数据提供加密保护,有效防止了网络窃听。记住,HTTPS是保护网络通信保密性的基石,但务必结合良好的端点安全习惯(如防病毒)并注意网站的身份真实性。下一讲,我们将探讨如何确认你正在与真实的网站通信。
053:Diffie-Hellman与Merkle密钥交换
在本节课中,我们将要学习密码学中一项革命性的技术——Diffie-Hellman密钥交换。这项技术解决了在不安全信道上安全共享密钥的难题,是现代安全通信的基石之一。我们将了解其核心思想、工作原理以及它与Merkle贡献之间的关系。
概述:密钥交换的难题
在上一节中,我们讨论了对称加密需要双方拥有相同的密钥。然而,如何在不安全的信道上(如互联网)安全地传递这个初始密钥,本身就是一个巨大的挑战。本节中,我们来看看Diffie-Hellman密钥交换协议是如何巧妙地解决这个“鸡生蛋还是蛋生鸡”的问题的。

核心思想:单向函数与公开信息
Diffie-Hellman密钥交换的核心依赖于一种称为“单向函数”的数学概念。单向函数的特点是正向计算容易,但逆向推算极其困难。

一个经典的类比是颜色混合:
- 将黄色和蓝色混合得到绿色是容易的。
- 但看到绿色后,想精确还原出原始的黄色和蓝色是几乎不可能的。
在数学上,Diffie-Hellman协议使用模幂运算作为其单向函数。其安全性基于离散对数问题的计算困难性。

Diffie-Hellman密钥交换流程

以下是Diffie-Hellman密钥交换的标准步骤,假设通信双方是Alice和Bob。
- 公开参数协商:首先,Alice和Bob公开协商两个数:一个大质数
p和一个原根g。这两个数是公开的,即使被窃听者Eve获取也无妨。 - 生成私有密钥:接着,双方各自生成一个保密的私有数字。
- Alice选择私有密钥
a。 - Bob选择私有密钥
b。
- Alice选择私有密钥
- 计算并交换公开密钥:双方用自己的私有密钥和公开参数进行计算,生成公开密钥并发送给对方。
- Alice计算公开密钥
A = g^a mod p,并发送A给Bob。 - Bob计算公开密钥
B = g^b mod p,并发送B给Alice。
- Alice计算公开密钥
- 计算共享密钥:收到对方的公开密钥后,双方用自己的私有密钥进行计算,最终得到相同的共享密钥
s。- Alice计算
s = B^a mod p = (g^b)^a mod p = g^(ab) mod p。 - Bob计算
s = A^b mod p = (g^a)^b mod p = g^(ab) mod p。
- Alice计算

现在,Alice和Bob拥有了一个相同的共享密钥 s,而窃听者Eve虽然看到了公开的 p, g, A, B,但由于无法从这些信息中高效地推导出 a 或 b(离散对数难题),因此也无法计算出共享密钥 s。

Merkle的贡献
需要指出的是,虽然这个协议以Whitfield Diffie和Martin Hellman的名字命名,但Ralph Merkle在公钥密码学的概念上做出了至关重要的早期贡献。他的工作为Diffie和Hellman指明了方向,因此有时这也被称为“Diffie-Hellman-Merkle”密钥交换,以表彰三位先驱的共同努力。

总结
本节课中我们一起学习了Diffie-Hellman密钥交换协议。我们明白了它如何利用单向函数的数学特性,允许双方通过公开对话生成一个共享的私有密钥,从而完美解决了在不安全信道上初始化加密通信的难题。这项诞生于1976年的发明,为现代网络安全(如HTTPS、SSH、VPN等)奠定了坚实的基础。
054:完整性与CA认证 🔐
在本节课中,我们将要学习如何确保网络通信的完整性,即如何确认我们正在与正确的服务器进行对话。我们将深入探讨数字证书和证书颁发机构的工作原理,了解它们如何与公钥加密技术结合,共同构建一个可信赖的网络环境。

上一节我们介绍了如何使用安全套接层和公钥加密技术来确保通信的机密性。本节中我们来看看如何确保通信的完整性,即如何验证服务器的身份。
身份验证的挑战
现在,我们有了使用安全套接层和公钥加密技术来确保机密性的方法。唯一剩下的问题是:我们正在和谁对话?我们是否真的在与我们以为的那个服务器对话?我们真的在和亚马逊对话吗?我们真的在和Coursera对话吗?我们如何知道?
如果你现在看一下浏览器顶部,通常当它显示你有一个安全连接时,你可以点击这里查看一些信息,这被称为证书信息。
数字证书与签名公钥
HTTPS协议包含公钥的概念。当我们建立连接时,会获取一个公钥。但公钥有两种:一种是服务器自己生成并发送给我们的普通公钥;另一种是由第三方证书颁发机构签名和验证的公钥。
以下是Coursera的证书信息,它由GoDaddy证书颁发机构认证。这意味着我们不仅从Coursera获取证书,实际上我们获取的是由GoDaddy签名的证书。GoDaddy已经核实了Coursera的身份,确认“你必须是Coursera的首席执行官,否则我不会给你这个签名的私钥”。因此,获取私钥签名是一个过程,也是一种确保你正在与你认为的对象对话的方式。这被称为数字证书,也可以理解为签名私钥。
完整性与数字签名
现在,如果我们回过头来讨论完整性,我们想知道我们正在和谁对话。因此,我们有了签名的概念。签名是一种让你知道正在与正确对象对话的方式。
例如,如果有人来到你的办公室说:“嗨,我是Chuck博士”,他留着胡子,头发有些花白。你可以说:“嘿,如果你真的是Chuck博士,给我看看你的纹身。”这样你就会知道,很少有人既长得像这样,又有这个纹身。所以,这是我的私钥,这是我私钥的签名。这就像我的消息摘要。如果有人声称是Chuck博士,但他们不会有这个纹身。这就是Chuck博士,这就是我的消息摘要。
证书颁发机构
一个普通私钥和一个由这些指定第三方认证的私钥之间存在区别。这些指定的第三方被称为证书颁发机构。
你可能会说“我是一个证书颁发机构”。然而,有些证书颁发机构比其他机构更可靠。它们是可信的第三方。
它们是如何开始的呢?有些机构比其他机构更受信任,而我们越信任它们,它们就越能发挥作用。所以,并非每个人都能成为可信的机构。你不能随便成为一个可信的颁发机构。
VeriSign是众多可信机构之一,也是最古老、最受欢迎、最昂贵的机构之一。获取证书签名可能相当昂贵,便宜的可能几百美元,贵的可能需要数千美元。VeriSign是其中最古老、最受尊敬的证书颁发机构之一。
获取签名证书的过程
其核心理念是:我有一个名为 online.doctorchuck.com 的网站,我在那里教授Python课程并做其他事情。我想要一个安全证书,因为我会处理用户数据,我希望显得可靠并拥有安全证书。
因此,我生成了一对公钥和私钥,然后将其发送给一个证书颁发机构。我付钱给他们,然后他们发回一个已签名的私钥。现在你可能会说,这有点邪恶或者真的很贵,因为他们所做的只是在我的私钥中改变或添加几个比特。但他们承担着很大的责任,优秀的机构拥有很高的信誉,他们不希望丢失信息。他们需要花时间验证身份,确认“你真的是Dr. Chuck.co的所有者吗?”他们不会将Dr. Chuck.co的签名证书交给除真正所有者之外的任何人。因此,他们会花时间检查以确保是真正的所有者,通过查看注册数据等方式来做到这一点。验证所有这些身份是有成本的,有点像Coursera上的签名认证轨道。
信任的建立
那么你可能会问:谁来决定信任哪个证书颁发机构?我们使用证书颁发机构来决定是否信任Amazon.com、Coursera.org或Drchuck.com等。我们如何决定信任哪个证书颁发机构呢?
事实证明,苹果、微软、Linux和其他操作系统供应商在你购买计算机或安装操作系统时,会预装一部分内容。这部分内容实际上是一个列表,包含了选定证书颁发机构的公钥。
如果你深入查看你的计算机内部(这是我的Mac),你可以看到被苹果作为操作系统制造商包含在内的公司。你会看到VeriSign是那些被预装在苹果Macintosh中的公司之一。这意味着来自VeriSign的证书将被识别。
浏览器与操作系统的内置信任
因此,你的浏览器和操作系统内置了某些证书颁发机构(如VeriSign)的预建公钥证书。这是苹果、微软和Linux对VeriSign寄予的巨大信任。这是因为多年来,VeriSign赢得了这种信任。
VeriSign不会未经检查就发放证书。如果VeriSign未经检查就将Amazon.com的证书发放给某人,他们将失去很多信誉,然后微软可能会将其移除,说“VeriSign似乎变得有点不靠谱,他们似乎无法处理安全问题”。但他们做到了,所以他们仍然保留在其中。这是一个有趣的现象,他们有动力保持高安全性,他们有动力做好工作,因为一旦他们失败,就会失去很多信誉和尊重,VeriSign品牌的价值以及我们对VeriSign的所有尊重都会受损。
验证服务器身份
我们提到了公钥加密。公钥在传输。我即将输入我的信用卡号,所以我们现在要解决的问题是:这真的是亚马逊的密钥吗?这真的是亚马逊的公钥吗?我的意思是,我通过连接到服务器获得了公钥,它声称是Amazon.com。但是,我相信它声称是Amazon.com吗?这就是完整性问题,这就是安全问题——我相信吗?除了它声称代表Amazon.com之外,它真的有VeriSign的“纹身”吗?它真的是Amazon.com的公钥吗?
我们也可以使用公钥进行签名。基本上,VeriSign自己有一对公钥和私钥。VeriSign的公钥现在就存在于你的浏览器中。他们使用私钥对亚马逊的证书进行加密,类似于生成消息摘要,然后创建一个摘要并将其附加到证书上。所以,一个证书会说“我是Amazon.com”,然后后面会说“哦,是的,VeriSign用VeriSign的私钥签署了这个”。因此,VeriSign的私钥被用来签署亚马逊的证书。
证书签名流程详解
这或许通过一个示意图来解释最容易。以下是亚马逊如何获得由VeriSign签名的公钥的流程:
- 初始设置:VeriSign在一个安全的地方生成一对公钥和私钥,并安全存储私钥。然后他们将公钥交给苹果、微软和Linux。
- 预装公钥:这些操作系统供应商将VeriSign的公钥捆绑预装在你的笔记本电脑中。所以,你购买的笔记本电脑在出厂时就内置了来自供应商的公钥。
- 亚马逊生成密钥对:亚马逊说:“我想进行电子商务,我希望能够使用SSL并拥有一个经过认证的私钥。”于是,亚马逊在其服务器内部生成一对公钥和私钥。这个私钥永远不会离开亚马逊的服务器。生成足够随机的公钥和私钥需要一些时间,有时需要几分钟,通过查看所有大质数然后挑选一个来生成。
- 发送公钥:然后,亚马逊将其公钥传输给VeriSign。在传输过程中,它可能被看到,但这没关系,因为它只是公钥。所以它实际上可以通过互联网发送,最常见的方式就是通过互联网发送。
- VeriSign签名:在VeriSign的服务器内部,VeriSign使用其私钥计算一个消息摘要,然后基本上添加一个签名。这个签名说:“哦,这是我从亚马逊收到的亚马逊公钥,我已经验证了发送者的身份,现在我,VeriSign先生,已经签署了它。”当然,这就像消息摘要一样,是附加在公钥比特上的信息。
- 发回签名证书:然后,这个带有签名的公钥被打包在一起,发送回亚马逊。现在,亚马逊拥有的不仅仅是一个普通的公钥,而是一个声明“我是Amazon.com”并且VeriSign现在断言我确实是本人的公钥。
窃听者无能为力

同样,窃听者伊芙看到了这个传输。谁在乎呢?这只是一个公钥。其中不包含VeriSign的私钥,私钥从未离开过VeriSign的服务器。签名是公开信息,你可以使用VeriSign的公钥来验证签名是否正确,但你无法伪造签名。所以伊芙可以看到这个,伊芙什么也得不到。她什么也得不到。所以亚马逊现在有了一个已签名且经过认证的私钥。
用户验证与安全通信
接下来会发生什么?迟早,可能是几小时、几天或几个月后,你在你的笔记本电脑上决定买些鞋子。所以,你通过浏览器使用HTTPS连接连接到Amazon.com。
然后发生的是:亚马逊向你发送其公钥。当然,伊芙一直在窃听。伊芙看到它经过。但这毫无价值,因为它只是加密密钥,不是解密密钥。即使它被签名了,伊芙看到了,但她无法用这些信息做任何事情。
在你的笔记本电脑内部,你有来自供应商(苹果或Macintosh等)的VeriSign公钥。因此,你可以用这个公钥去查看那个签名,就像我们之前处理消息摘要一样,你可以说:“是的,这很好。这确实必须是由VeriSign签署的。”如果你的电脑非常谨慎,它实际上可以去向VeriSign查询,发送信息说:“嘿,你验证过这个吗?”然后VeriSign也可以验证它。但实际上你不需要连接,因为你已经有了公钥。你知道那个消息摘要正确的唯一方式是,如果VeriSign的私钥被用来生成该消息摘要,就像我们在另一个例子中使用的简单签名机制一样。这是可验证的,它来自这个私钥。现在,如果有人入侵并窃取了私钥,那就是另一回事了。但只要私钥是安全且未被泄露的,生成那个消息摘要的唯一方式就是拥有该私钥。
完成安全交易
现在,你处于一个可以放心交易的状态。你看到HTTPS,你可以点击那个小图标,看到它是由VeriSign签署的。你可以确信VeriSign断言那个密钥确实来自亚马逊。现在是时候加密你的信用卡号,并通过加密连接将其发送给亚马逊了。
因为除非你相信HTTPS是正常的,否则你不会发送加密信息。如果你的浏览器弹出一个提示说“等等,这个证书看起来有点可疑,它声称来自Amazon.com,但它不是由我信任的签名机构签署的”,你就不会发送数据。
你发送的数据被加密了,伊芙一直在监视,但因为它是用公钥加密的,除非伊芙拥有超级计算机并花费数月时间,否则她无能为力。然后,当然,亚马逊使用其私钥解密它。私钥派上用场了。
让我重新描述一下:数据进来了,伊芙在监视,但无能为力。因为他们没有足够的计算能力,伊芙没有足够的计算机,而且你的密钥足够大。所以亚马逊然后使用其私钥解密,最终再次得到你的明文。
总结安全机制
如果你仔细思考整个过程,伊芙一直在监视整个时间:我们发送了公钥,我们签名并返回了公钥,然后我们将公钥发送到你的笔记本电脑,我们验证了公钥。整个过程中,伊芙都在监视所有这些信息,但她无力破解。如果你问我,这真是相当聪明。我们可以感谢Diffie、Hellman和Merkle。这非常聪明,因为伊芙看到了所有东西。想象一下,如果德国人在二战时有这个技术,那该多酷。当然,他们没有计算机,所以会很困难。现在想太多也没用。
核心概念总结
所以,我们有了这个叫做证书颁发机构的东西,它是一个可信的第三方,负责签署这些证书。它是一个对公钥进行数字签名的实体,以便我们公众有一种方法来验证Amazon.com证书确实来自Amazon.com。
如果你把所有这些加在一起,我们有了基本的公钥加密技术,确保数据可以在互联网上从你的计算机传出并加密传输到另一端。这只是公钥加密的作用。然后,我们有了这个第三方证书颁发机构,你的应用程序可以用它来验证收到的证书。因此,SSL(安全套接层)和证书颁发机构的结合,使我们能够高度确信,当我们与某个对象对话时,我们知道我们真的在与它对话。这是一种相当非侵入式的安全措施。如果你的浏览器弹出一个提示消息,意味着它收到了一个证书,但没有可用来验证的证书颁发机构信息,那么除非你确切知道发生了什么,否则这不是输入敏感信息的好时机。
课程内容回顾
这为我们这几讲的结论做了铺垫。最后这几讲是关于消息机密性的,即保护内容不被泄露。我们为此使用了加密和解密技术。然后我们有了消息摘要和签名技术,我们签署了消息,签署了证书,签署了许多东西,这些都很重要。我们讨论了共享密钥和秘密密钥(对称加密),双方需要事先约定一个用于加密和解密的密钥;以及公钥私钥(非对称加密),其中一个密钥用于加密,另一个密钥用于解密,并且你可以自由展示加密密钥,因为它几乎不泄露信息(虽然从数学上讲有可能,但解密非常困难)。


本节课中我们一起学习了公钥加密和证书颁发机构如何共同工作,以确保网络通信的机密性和完整性。我们了解了数字证书的签发流程、浏览器如何内置信任,以及整个体系如何抵御窃听攻击。希望你觉得这些内容有价值,我们网络上再见。
055:密码系统构建 🛡️
在本节课中,我们将学习密码学如何在实际中提供保护,以及构建安全系统时面临的挑战。我们将探讨密码学的作用、其局限性,以及为何简单性对安全至关重要。
上一节我们介绍了密码学作为数学基础的概念,本节中我们来看看密码学如何在实际系统中应用,以及为何实现过程比数学本身更复杂。
从斯诺登披露的文件中我们了解到,广泛应用的密码学确实给美国国家安全局带来了麻烦,尤其是在大规模应用时。美国国家安全局进行了大量密码分析工作,并攻破了许多系统。然而,设计精良、实现完善的密码学确实能阻碍他们。理解其原理很重要。
如果美国国家安全局想进入我的电脑,他们就能进入我的电脑,这一点毫无疑问。他们会入侵我的电脑,并且拥有大量工具来实现这一点。如果他们没进入我的电脑,只有两种可能:一是这违法,而美国国家安全局遵守法律;二是我在他们的优先名单上排名不够高。
密码学的作用是迫使攻击者,无论是美国国家安全局、中国政府、网络罪犯还是其他任何人,都必须制定一个优先目标列表。根据他们的预算,他们会按列表顺序行动。我们的希望是,你不在那个列表上,或者你的位置低于他们的预算线。
以下是密码学带来的关键转变:
- 没有密码学时,像美国国家安全局这样的组织可以批量收集所有人的数据。
- 有了密码学,他们就被迫进行针对性攻击。
这非常有价值。这意味着联邦调查局会追捕罪犯,美国国家安全局会追捕外国势力的代理人,中国政府会追捕他们想要监视的美国官员,网络犯罪分子只会攻击我们中的少数人,而我们其余的人则受到保护。这使得密码学成为一个非常重要的工具。
然而,密码学本身并不直接提供安全。因为密码学是数学。当我们说“我们信任密码学”时,我们实际上是在说“我们信任数学”。我认为有充分理由说我相信数学。我所了解的关于密码学的一切都告诉我,数学是可靠的。当然,未来会有密码学进步,有些东西会被攻破,但总体而言,数学是有效的。
但数学没有能动性。数学不能做任何事情。它只是纸上的方程式。为了让数学发挥作用,程序员必须拿起这些数学公式,编写成代码,并将该代码嵌入到一个程序中,再将这个程序嵌入到某个更大的系统中,最后把这个更大的系统放到带有操作系统的计算机上,连接到网络,并由用户使用。而所有这些环节都会引入不安全因素。
当美国国家安全局攻破密码学时,绝大多数情况下,他们攻破的不是数学本身,而是其他环节。他们攻破的是实现、软件、网络,或者软件运行的硬件。他们总是在其他地方找到突破口。我们一次又一次地吸取这个教训:数学是有效的,但围绕它构建的一切要困难得多。
这里有一个重要的推论:复杂性是安全最大的敌人。上述环节增加了复杂性。系统越复杂,安全性就越差,因为系统中会出现更多漏洞,你会在某个地方犯更多错误。我们一次又一次地从对投票系统、嵌入式系统、手机消息系统、电子邮件系统的分析中看到,问题总是出在密码学之外的某个地方,是设计者、实现者、编码者或用户犯的错误。
因此,系统越简单,它们就越安全。美国国家标准与技术研究院正在做的是,尽可能围绕这些组件建立标准。他们有一个加密算法的标准——AES(高级加密标准)。这是一个公开的过程,多个团队提交算法,整个社区共同挑选出一个获胜者。这不是高层指定的,也没有秘密标准。AES算法是我们大多数人认为应该成为AES的算法。实际上有几个我们认为是不错的候选者,他们最终选择了一个。但这个过程赢得了很多信任,因为它是一个非常公开、开放的国际过程。新的安全散列标准SHA-3也是类似的过程。
作为一名密码学家,参与这个过程真的很有趣。我认为这就像一场精彩的密码学“撞车大赛”。我们都把自己的算法放进擂台,互相攻击,最后站着的那个获胜。情况差不多就是这样。我们都会发表论文分析彼此的算法,最后剩下的一个获胜。
但这只是美国国家标准与技术研究院工作的一小部分。他们还有随机数生成标准、密钥协商标准、不同协议的标准。他们试图标准化这些组件,以便实现者少犯错误。但仍然有很多东西是无法标准化的。而那些更大的、无法标准化的部分,正是你仍然会发现大多数漏洞的地方。我相信这也是美国国家安全局发现其大多数漏洞的地方。
最近我们了解到,用于保护许多VPN和互联网连接的密钥协商协议存在漏洞。如果你查看那个漏洞所在,是因为在代码中采用了一个捷径,允许进行大规模预计算。数学本身是完美的。如果你想制定一个糟糕的标准,就把它弄得超级复杂,那样你就是在内置攻击向量。这就是为什么互联网工程任务组制定互联网标准的常规流程对安全并不真正有效,因为那些标准是妥协的产物。为了让大家满意,加入所有选项;为了让系统尽可能全面,加入尽可能多的灵活性。这恰恰与安全背道而驰。安全需要尽可能少的选项,尽可能简单。你不想要妥协,你想要一个团队胜出。因为那个团队有一个自成一体的愿景。当你把这块、那块和另一块拼凑在一起时,总会有一些你没注意到的交互,而那个交互可能就是攻破你系统的关键。
本节课中我们一起学习了密码学的实际作用:它迫使攻击者进行针对性攻击,从而保护大多数人。我们认识到密码学本身是可靠的数学,但安全系统的构建充满了挑战,因为实现、软件、硬件和网络等环节都会引入漏洞。复杂性是安全的大敌,因此设计应追求简单。标准化的努力有助于减少错误,但无法覆盖所有层面。最后,我们了解了密码学领域的对抗性本质,即通过不断分析和攻破彼此的设计来共同推动整个领域向前发展。
056:毕业典礼 🎓
在本节课中,我们将一起回顾密歇根大学《互联网历史、技术和安全》课程的毕业典礼环节。查尔斯·塞弗伦斯博士(Dr. Charles Severance)将主持仪式,并邀请印第安纳大学的库尔特·贝克(Kurt Bch)作为毕业演讲嘉宾。本节内容将整理并翻译演讲的核心思想,旨在为学习者提供一个关于学习与成长的总结。
上一节我们完成了课程内容的学习,本节中我们来看看毕业典礼上的寄语与总结。
查尔斯·塞弗伦斯博士欢迎大家参加毕业典礼,并对坚持完成课程并获得证书的学习者表示感谢。按照传统,他邀请了库尔特·贝克作为毕业演讲嘉宾。
库尔特·贝克发表了演讲。他首先说明这将是一场“PC”演讲,并解释这有两层含义:一是“政治正确”(Politically Correct),二是关于“可能的课程”(Possible Courses),即人生可能选择的道路。
以下是演讲中提出的两组核心概念,每组包含四个关键词,旨在指导学习者未来的学习与生活。
第一组是四个以“P”开头的词:
- 热情(Passion):课程关乎你的热情与兴趣,无论它是在舒适区内还是略有挑战,都是在寻找人生的“元素”。
- 目标(Purpose):仅有热情不够,你需要有目标,并朝着它努力。
- 坚持(Persistence):完成一门慕课(MOOC)需要坚持、毅力或恒心。
- 趣味(Playfulness):在学习过程中保持一点趣味性也很重要。
第二组是四个以“C”开头的词:
- 选择(Choice):参与并完成这门课程是你自主做出的选择。
- 承诺(Commitment):你不仅选择了,更承诺去完成它。
- 联结(Connect):在线课程关乎联结与关系,希望你不只完成了课程,还建立了新的联系和可能的人生路径。
- 完成(Completion):你完成了一门课程,可能会获得证书,然后继续人生旅程。
库尔特·贝克总结道,如果在未来的课程中能牢记这八个原则,可能会获得更多成功。他祝贺所有学习者不仅注册了课程,更完成了多个甚至全部模块,这不仅是一张课程证书,更是作为开放学习者的“人生证书”。
查尔斯博士对库尔特专程前来表示感谢。随后,他主持了象征性的毕业证书颁发仪式。
他幽默地提到,就像现实中的毕业典礼一样,大家将获得一份“虚拟”的证书。学习者可以自行打印课程证书或徽章。他邀请学习者在屏幕前完成“领取”仪式,并再次祝贺大家。
查尔斯博士最后感谢了大家付出的时间、坚持和承诺,并希望未来能在网络课堂上再见。
本节课中我们一起学习了毕业典礼的核心内容。库尔特·贝克在演讲中提炼了成功学习的八个关键原则:热情、目标、坚持、趣味、选择、承诺、联结和完成。查尔斯·塞弗伦斯博士则通过一个温馨的仪式,祝贺所有学习者完成了这段学习旅程。这不仅是对一门课程的总结,更是鼓励大家将在此获得的动力、联系与证书,转化为开启未来更多可能性的起点。

浙公网安备 33010602011771号