vlambda博客
学习文章列表

Go语言中实现的RFC xxx是个啥?


如果你打开Go语言的文档页 https://golang.google.cn/pkg/ ,搜索RFC这个关键字,会发现有16个之多。


从上图可以看到,Go语言的MD5是基于RFC 1321实现的,SHA1是基于RFC 3174实现的。


那么是什么是RFC呢?RFC后的编码又是什么意思?


我们打开维基百科,看到如下关于RFC的描述:

请求意见稿(英语:Request for Comments,缩写:RFC),又翻译作意见征求,意见请求,请求评论[1]是由互联网工程任务组(IETF)发布的一系列备忘录。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件,以编号排定

https://zh.wikipedia.org/wiki/RFC


看到了吧,这是一个非常NB的规范,互联网的协议基本上都是属于这个规范中的,比如TCP/IP等。


RFC 后的编号是一个唯一编码,用于标记是哪个RFC,并且唯一不可变更。


最开始的RFC是在1969年,而且只用于记录阿帕网的开发使用,还不像现在这么正式的规范文档,其实那时候互联网都没有。


然后呢,就有一些美国的学校加入,大家都写一些,在各个研究员之间传阅。有点像私董会内部传阅机密小纸条的感觉。


然后就是IETF、IAB加入,开始领导起草、审阅和发布工作,所以我们现在看到的很多RFC规范前面都有组织的名字,比如HTTP/2的RFC 7540


Go语言中实现的RFC xxx是个啥?

这表示是由IETF这个组织对该协议审核并达成了共识。


IETF还算是比较新的,年代久远一些的RFC会有这样的组织「Network Working Group」,比如我们常见的MD5 RFC 1321:

Go语言中实现的RFC xxx是个啥?


在我上面HTTP/2协议的截图中,可以看到有一列Category,代表该RFC归属哪个分类。


Category(目录)分为“Standard Track”(标准)、“Informational”(信息性的)、“Experimental”(实验性的)、“Best Current Practice”(当前最佳实践)。它们之间的区别有时候比较模糊,但可以确信的是,如果是由 IETF 制作的,肯定经过了大量的审核。不过要注意,Informational 和 Experiment 并不属于标准,即便是经过 IETF 批准发布的。


RFC其实类似我们现在说的日志,一旦存档就不能改变,哪怕一个字都不行,所以你可以看到IPv4和IPv6是两个RFC,IPv6并不是基于IPv4的修订,相应的HTTP/2也一样。


所以呢,我们要找到一份最新的,最具有价值的文档很重要,这里同样以IPv6为例,如果你通过Google搜索的话,你可以会找到这份RFC 1883关于IPv6的协议。

https://datatracker.ietf.org/doc/html/rfc1883


但是请注意,当你看这份协议的时候,在顶部开头会有 Obsoleted by: 2460的字样,这里的意思就是说,当前这份1883的文档你别看了,去看RFC 2460这份吧。

Go语言中实现的RFC xxx是个啥?


当你打开了 RFC 2460这份文档后, https://datatracker.ietf.org/doc/html/rfc2460  ,这里又有一个 Obsoleted by: 8200,发现还不是最新的,笑哭了,继续找吧,去看这份RFC 8200的大爷  。



当你点击超链接,打开 https://datatracker.ietf.org/doc/html/rfc8200 的时候,终于发现没有了Obsoleted by,终于找到最新的关于IPv6的协议定义了,这时候就可以以这份为准了。


这里呢,还要注意一个小细节,就是文档里的 Update By,后面跟着一堆协议。这个是什么意思呢?意思就是如果你看2460这份文档,一定要记得去看下5095, 5722, 5871, 6437, 6564, 6935, 6946, 7045, 7112这几份RFC文档,它们是关联的。


我国呢也贡献过RFC提议的,最早可以追溯到1996年,清华大学向IETF提交的适应不同国家和地区中文编码的汉字统一传输标准,被IETF通过后编号为RFC 1922,成为中国大陆第一个被认可为RFC文件的提交协议


标准协议可以看这里,https://datatracker.ietf.org/doc/html/rfc1922  牛逼轰轰。


总之呢,RFC为互联网做出了很大的贡献,如果你在编写一些协议的实现,可以去参考相应的RFC规范,有助于理解和使用,比如 JSON Web Token (JWT)的RFC 7519。


精彩推荐







扫码关注


分享、点赞、在看就是最大的支持