摘要

  • RFC 871 将 ARPANET 参考模型写成一组已经在工程实践中起作用的原则:让不同操作系统上的程序和数据能够协作,而不止是远程登录。
  • 其中最难画成方框的一条是对不同主机的公平:某台机器觉得可以删掉的协议步骤,可能正是另一台机器的身份验证入口。

免费收信的主意,差点把登录这道门一并拆了。Michael A. Padlipsky 在 1982 年 9 月的 RFC 871 里回忆,早期设计者想让电子邮件的接收方免于被收费,于是考虑让通过 FTP 接收来信时不必执行登录命令。有些操作系统听完却举手:这些命令除了启动计费,还负责身份验证。第一台机器上漂亮的简化,到了第二台机器就变成安全机制的缺口。文中记载的折中办法保留了主机要求登录的权利,并为来信公布一个共用的免费账户。

Padlipsky 把这种设计约束称为“公平”。当一项机制在设计者自己的系统上顺手,却严重扰乱同伴的系统,应该听能把它实际装进去的人说话。网络连接的是不同操作系统,协议要容纳它们各自已经承担的工作。图纸上的一条箭头可以越过差异;程序执行时,差异会带着账户、权限和进程一同回来。

这篇 RFC 写于 ISO 参考模型越来越常被当作网络架构起点的年代。Padlipsky 说,ARPANET Network Working Group 在建造协议时早有一套大体不成文的思路。他要把它从运行中的工作里重新梳理出来,用 ARPANET 自己的目标说明自己的结构。文章是参与者在 1982 年做的回顾,不是一份从项目第一天就摆在桌上的正式章程。

第一项目标是资源共享。远方用户登录一台主机只是其中一件事;不同主机上的程序和数据还应能彼此使用、合作。为此,运行中的进程需要通信。逻辑连接给这些交流一个有意义的地址:约定好的 socket 号码能指向已知服务,其他号码则留给实验和新功能。号码不只是把数据分流,还让使用者知道会找到什么服务。

异构终端带来了乘法题。如果每类主机都要认识每类终端,主机和终端种类一增加,适配工作就成倍增长。网络虚拟终端在中间放一个共同表达形式。每台主机只需把自己的本地方式与共同形式相互转换;文件传输也能借用这样的办法。各家机器不用背下所有邻居的私人方言,先学会共同语言即可。

分层也是为了让变化留在合适的地方。Padlipsky 把功能宽泛地归为网络接口、主机间通信和进程级应用三组,同一组里可以有不同协议。底层不必理解上层控制信息的内部含义,上层也不必知道底层每个齿轮怎样转。他反对把参考模型里的每一个方框,都读成数据必须依次穿过的实际关卡。图纸若成了命令,住同一层楼的两个人打招呼,都可能被要求先下到一楼再爬回来。

效率不仅是线路速率,还包括主机花掉的处理时间、内存和多余转换。公平又把目光带回操作系统的既有安排。Padlipsky 对 ISO 模型的一些解读批评尖锐,那是他在当年论争中的判断。FTP 来信的例子更扎实:删掉一步之前,要问哪台机器用它守着另一道门。让计费归零可以通过账户安排完成,身份验证的路径仍在。

RFC 871 最后留下三组功能和一套更难印在海报上的原则:共享资源、进程通信、逻辑连接、共同表达、效率以及照顾不同系统。图画得整齐很容易。让不同机器在图下继续安全地工作,才是参考模型要交的作业。