陆怀民对DNS的理解,则来自三十年后,是经过了几十年工业界验证和演进的整套域名解析体系,包括缓存、分层架构、区域传输、DNS over TCP/53、ANY的滥用问题、DNSSEC等等……
每一样技术最终长成什么样子,踩过哪些坑,他全都清楚。
换句话说,他比DNS的设计者Paul Mockapetris本人更了解DNS。
即便他只写一个最简版,也足以让当时的所有方案相形见绌。
第263章 抢占未来网络标准
晚上,陆怀民回到宿舍时,书包里多了厚厚一沓期刊,都是关于计算机领域的。
他把那几本期刊往书桌上一摞,从抽屉里翻出个新笔记本。
随后在扉页写下一行字:
“DNS设计手记,1982年1月”
写完之后,他放下钢笔,慢慢靠到椅背上,开始从头梳理这件事。
表面上看,域名系统解决的问题很单纯:
把人类好记的名字翻译成机器能理解的数字地址。
现在运行的HOSTS.TXT做的就是这么一件事,SRI每周更新一次,各网点管理员定期下载,它相当于一张每周更新的静态通讯录。
但陆怀民比这个时代的任何人都清楚,真正要解决的问题远不止这些。
首先,是规模。谁也无法想象十年之后,接入网络的主机会从几百台暴涨到几百万台,一张简单的表根本不可能覆盖。
其次,是命名的冲突。HOSTS.TXT是单一名字空间,所有主机名都在同一个袋子里。所有人都想给自己的机器起名叫‘Sunrise’,但同一个名字只能归属一台主机。
还有,是管理的分权。大学里的计算机系想管自己的机器,凭什么还要给斯坦福的NIC打电话申请?这不合理。
最重要的是时延问题。HOSTS.TXT是离线文件,任何解析都是本地查表,域名系统将会需要网络请求。
如何设计一个查询协议,让解析器能够快速找到一个可能在全球范围内的权威服务器,这本身就是一个需要认真思考的问题。
DNS域名系统完美解决了上述所有的痛点,从1983年设计出来,它的核心架构用到今天四十多年基本没变。
绝大多数软件十几年就淘汰重写,DNS底层规范还在工作,适配了 IPv6、手机、海量网站,这种设计水平极其罕见。
没有 DNS,上网要背一堆数字 IP。
万维网、浏览器、电子邮件全部很难普及。
可以说:没有 DNS,互联网只会停留在科研小圈子,不会走进普通人家里。
陆怀民拿着钢笔,开始在笔记本上设计DNS的完整分布式体系架构。
DNS域名的核心是倒置的树形结构。
根节点在最上面,下面是一级一级的域。
这些前辈们会花好多年才摸索出来的设计,而陆怀民可以直接把它写进草案第一版。
他越写越快,笔记本一页页翻过去,结构图、报文格式、状态机、算法伪代码……在五个小时里就写满了二十多页。
良久之后,陆怀民搁下钢笔,揉着发酸的手腕,目光落在摊开的笔记本上。
二十多页,写得密密麻麻。
但光有纸面方案不够。
要让整个ARPANET(互联网的前身)社区认真对待这个方案,必须提供一份能跑通的可运行代码。
用事实说话,是网络协议领域几十年来雷打不动的铁律。
RFC编辑委员会(注:负责发布ARPANET/互联网所有协议、标准、设计思路的公开文档集),每年收到的协议提议数以百计,但真正能成为标准的,几乎没有一个是纯纸面的设计。
每一个协议背后,都有一份在真实主机上跑过的代码实现,有一组能够验证它确实工作的实验数据。
而且这份代码必须跑在Unix上。
因为目前ARPANET的研发社区,几乎就是一个Unix社区。
而宿舍里只有这台刚买的IBM PC,运行的是微软的 DOS环境,事实上并不联网,而DNS本质上是一个网络协议,不能在单机上实现真正意义上的验证。
陆怀民并不气馁。他拿起钢笔,在新的一页顶部写下四个字:“实施路径”。
首先,可以先在IBM PC上做协议文档和概念原型。
具体来说,用DOS下的汇编语言或者C语言编译器,写一个简化版的DNS解析器。
这个原型不需要真正联网,只需要验证核心算法的正确性。
然后再借Unix环境移植。
把第一阶段的逻辑代码用真正的C语言重写,编译成Unix下的可执行程序,再接入ARPANET验证。
最后就是整合资料,发表文章、开源代码。
整个研究过程并不复杂,设计思路是现成的,很适合在课余搞出来。
现在主要是要解决Unix环境问题,而且必须能接入ARPANET。
陆怀民想到了一个地方。
亚琛工大计算中心。
德国大学的计算中心通常拥有全校最强大的计算机资源和网络接入。
像亚琛工大这样的理工科重镇,计算中心必定有接入欧洲学术研究网络的能力。
如果他能申请到一个计算中心的账号,就可以在Unix环境下运行自己的程序。
第二天一早,陆怀民照常先去了WZL。
他现在手头没有项目,主要是给其他项目组打打下手。
中午,陆怀民抽空去了一趟计算机科学系和计算中心。
亚琛工大的计算中心位于校园东南角,是一栋四层建筑,陆怀民先是去了二楼的主终端室。
这里一共有四排终端,陆怀民透过窗户看去,有几个学生正在终端前工作。
进门处是一块公告栏,上面贴着各种上机培训的教学材料。
他注意到其中一份材料,标题是《分时系统用户手册》,下面小字标注着“仅限计算中心主系统用户使用”。而其他院系学生使用需要导师推荐信,原因计算中心的资源很紧张。
然后陆怀民又去了三楼的开放教学区。
亚琛工大计算中心在冬季学期开设了几门面向全校的选修课,BASIC程序设计、Unix导论、数据库概论,全部都在这栋楼的几个房间里上课。
课程公告板上贴着一张大课表,有些课程已经开课,有些还开放注册。
陆怀民把课程公告板上的相关信息和自己能申请到的可能路径,一一记在了笔记本上。
第二天,陆怀民提前约了个时间,去了奥斯特教授的办公室。
“Herr Lu?进来。”奥斯特教授正坐在窗边给一盆天竺葵浇水,听见敲门声,头也不抬地应了一声。
陆怀民推门进去,在办公桌前站定。
“教授,我有一件事想请您帮忙。”
“说。”奥斯特教授放下浇水壶,转过身来。
陆怀民把来意简单说了一遍:
“我想申请亚琛工大计算中心的分时账号。我最近对计算机网络产生了兴趣,课余时间,想用校计算中心的Unix系统做一些研究。”陆怀民斟酌着措辞,说道:
“我知道这不是我们课题组的传统方向,但我觉得值得一试。”
他顿了顿,又补充道:
“我去了解过了,其他院系博士生使用计算中心资源需要导师推荐,教授,我想请您帮我写一封推荐信,可以吗?”
奥斯特教授听了,微微颔首,道:
“Herr Lu,我儿子跟我说了。”
陆怀民一怔。
“马丁说,你从他那里订了一台IBM PC,前两天已经送到了,”奥斯特教授走到办公桌后坐了下来:
“他还在我面前把你夸了一通,说你是个有远见的人。”
陆怀民有些不好意思:“主要对这块感兴趣,马丁先生的见识我也很佩服。”
“我不会阻止你。”奥斯特教授摆了摆手:
“计算机是数控的电脑。你今天跑来跟我说要申请计算中心的账号,这很好。我一直认为,未来的数控系统,计算机技术会占越来越大的比重。我们做机床的人,要是不懂计算机,迟早要吃大亏。”
他说着,重新坐回办公桌前,从抽屉里抽出一张印着WZL抬头的信笺纸,拿起钢笔。
“推荐信我现在就写。不过有一点我要提醒你。计算中心的账号管理很严格。博士生申请,批准了之后拿到的也只是一个初级账号。权限小,CPU小时数有限,高峰时段还要排队。你刚去的时候,不要指望它能做太多事。”
“我明白。”陆怀民点头道,“先申请下来,慢慢来。”
奥斯特教授点点头,下笔如飞。
不到五分钟,推荐信写完了。教授签上名,又盖了自己的印章,然后把信递过来。
“去吧。计算中心在校园东南角。把信交给前台,填一张申请表,他们会告诉你后续流程。”
陆怀民双手接过推荐信,郑重道谢,转身准备离开。
“对了,Herr Lu。”教授叫住了他。
陆怀民转过身。
“如果计算中心那边遇到什么困难,随时跟我说。”教授看着他,添了一句,“我们实验室和计算中心有几个合作课题。真要是权限不够,我可以想办法。”
陆怀民点头致意,转身离开。
从WZL到计算中心,步行大约十分钟。
陆怀民拿着推荐信走到计算中心前台时,一个留着齐耳短发的中年女管理员正在电话里和什么人争执着备份磁带的事。他等了一会儿,对方挂了电话,脸上余怒未消,但还是勉强朝他笑了笑:
“有什么事?”
“你好,我想申请一个UNIX分时系统账号。”陆怀民用德语说明来意,双手递上推荐信和学生证。
管理员接过信和学生证,拆开扫了一眼,又抬头看了看他,脸上的表情缓和了一些。
“你运气不错。”她说:
“寒假(欧洲的寒假一般指圣诞节和元旦连起来的假期)刚结束,这学期的用户注册窗口要到月底。如果你再晚几天来,就只能等下个季度了。这是申请表,到那边填,填完了交给我。另外,上机资格培训是必须参加的,你下周二有空吗?”
“有空。”陆怀民答道。
“那好。我已经帮你登记了。下周二上午九点,一楼培训室,两个小时的入门培训。培训结束之后有个小测试,不难,但必须通过。通过之后账号才能激活。”
陆怀民接过申请表,走到旁边填好,交回给管理员。
“回去吧。”管理员把申请表和推荐信装进一个牛皮纸文件夹里,在封面上写了几个字,然后抬起头叮嘱道:
“下周二见。你是WZL今年的第一个新用户。别迟到。”