做程序员的,很难不与各种标准打交道,比如想成为网络方面的专家,那就不得不把各种 RFC 标准吃透,因为绝大多数网络标准都是由 RFC 文档定义的,比如 HTTP 协议,TLS 协议等。
而大部分程序员通常很少看原汁原文的标准文档,因为标准往往枯燥乏味,信息量极大,动辄一个简简单单的概念就要好几十页 PDF 论述。但有的时候了解一个问题,寻找标准文档往往是效率最高且最准确的选择,比如之前写 HTTPS 抓包解析各个字段的含义,几乎就是照着 TLS 的标准文档一点点翻译就成文了,网上几乎找不到任何一篇能与之媲美的。同时,了解这些标准背后的组织,还是非常有借鉴意义的,你会发现一个能被全世界功能认可的标准,其生产流程是多么严谨,标准中的任何一个词的用法,都会影响全世界,所以这种变态的严谨性,已经成为了一种美感。比如 ISO 标准,发布了之后就不能修改,如果想要修改只能将原来的标准标记为撤回状态,重新写一篇新的,而每个 ISO 标准从一开始的提出到最后被全世界认可,都需要将近三年的时间。International Organization for Standardization简称 ISO,是一个独立的非政府国际组织,拥有 166 个国家标准机构的成员,共同分享知识,以及制定国际化的标准,总部在瑞士的日内瓦。分享知识就是顺带手的工作了,发布发布文和研究成果之类的,最主要的工作还是制定国际标准。在上方 Standards 标签上可以搜索我们想看的标准文件。我们试着搜搜,计算机网络教材中常提到的 OSI 七层模型,包括物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,就是 ISO 组织发布的一个标准。PS:哈哈,OSI 是 ISO 发布的标准,这俩词恰好有点绕,你可别弄混了。OSI 模型的标准号是 7498,所以我们直接搜这个号。可以看到,完整的 OSI 模型标准分为四个部分,我们打开第一部分(The Basic Model)并下载下来,就可以看到我们熟悉的七层模型描述,当然整个文件的信息量是非常大的。回过头来看,每个文件的后面还有两个数字,拿第一个文件来说,后面有这样两个数字:其中 STAGE 表示这个标准处于哪个阶段,因为总不可能一上来就发布成为全球认准的标准,得有一个不断审核修订的过程,而这个过程是贼他喵的麻烦,需要经历好多个阶段。可以看到一共有这么多个阶段,而当前这个 OSI 模型处于 90.93 阶段,这个表示International Standard Confirmed我们再看看,一开始的时候处于 00.00 阶段,就是刚刚收到一份标准提议,之后慢慢经过投票、审核、出版,还有可能有撤回阶段,整个过程非常漫长,一个标准从一开始提出到最终国际认可,可能需要三年的时间。认可后的标准,就不可以再修改了,如果想要修改,需要把原有的改为撤回状态,再重新出一个新的标准。从生命周期这一部分说明可以看到,可以看到 OSI 模型就经历了一次这样的修改。而再看修改之前的这个 1984 年发布的标准,其 STAGE 已经是 95.99 了,也就是
Withdrawal of International StandardInternational Classification for Standards这个分类是一级一级的,最前面的 35 表示信息技术大类。由此也可以看出 ISO 并不仅仅是计算机相关的,还包括环境、自然科学、农业、化工等等共 97 个大分类。而 35 这个信息技术大分类下,还分为很多小类,其中 35.100 就表示 OSI 模型了。感兴趣的话还可以看看其他分类,比如我们说字符集的时候经常念叨的 ISO-8859-1,其实就是在 35.040.10 这个字符集分类下的一个标准。由此我们也可以学学人家的做法,首先通过 STAGE 这组状态机表示一个标准所处的状态,这可比我们平时开发时“提出需求-需求评审-开发-测试-上线-验收”这种简单的状态机要更复杂。然后再通过 ICS 这样的三级分类,涵盖了各个领域的各种细分标准。此外,每个标准的撰写都有严格的格式要求,具体可以去官网下载。我想如果平时开发时的各种文档有这样的规范管理,那开发之间可以减少很多由于文档不规范导致的效率低下了。如果有读者参与过制定或投票类似的标准文档,可一定要联系我,我也好奇更多有趣的知识呢。