一切要从RFC793说起。TCP之所以能被广泛应用,首先是因为它是一个标准化的协议。TCP协议由RFC793定义,虽然在那之后不断有新的RFC对TCP进行扩展和修补,但是从来没有一份新的RFC能顶替RFC793的地位。所以,要学习TCP协议,RFC793是一个绕不过去的经典。

RFC全称是Request For Comments,是IETF(Internet Engineering Task Force)的正式文档。IETF是一家标准组织,它制定了Internet(也就是我们说的互联网)的整体协议体系。凡是经过IETF评审认可的标准都发布为带编号的RFC文档,在IETF的网站上可查。RFC793的HTML版本可以在https://tools.ietf.org/html/rfc793.html查看到。

随着协议的不断发展进化,原有发布的RFC可能因为年代久远导致跟具体的实现不相符合,或者不再适合当前的环境了,这时候就会有一个新的与时俱进的RFC被发布出来,以替换原来的RFC,并且原来的RFC就会被标注为废弃(Obsoleted)。RFC793一直屹立不倒,可谓经典中的经典。

RFC793的作者叫Jon Postel,此人也算是Internet的一个传奇人物,可以看作亲手把IETF这个标准组织带大的人。Postel有一句名言:“Be liberal in what you accept, and conservative in what you send.”。可以用一句古话来翻译这句英文,那就是:“严于律已,宽以待人“。这也奠定了TCP君子般的性格,对自己要发送的数据尽量保证其正确,不引起别人的麻烦;对接受的数据尽量大度,能接受则予以接受,不能接受也要保证自己能够正常工作。

想要更多了解Jon Postel其人,可以前往这个网页http://www.postel.org/postel.html。Internet Society没有都会颁发以他命名的奖项“Postel Service Award“,来奖励为Internet作出突出贡献的人或组织。

需要注意的是,RFC793描述的是TCP协议,而不是TCP的实现。TCP有很多实现,如Linux上的TCP协议栈,或者Windows上的TCP协议栈。这些实现之间有非常大的差别,但是由于都是遵循了同一的标准,有着相同的模型和机制,所以不同的TCP实现之间可以互通互联。阅读协议本身会带来许多好处,可以帮你建立TCP的理论模型,帮你了解许多TCP在设计上的约束,让你知其然也知其所以然。

(完)