<接上文>
前面三篇文章讲述了互联网设计之初需要满足的需求。当我们再次看一遍之后,发现他们只是提供了一些原则性的东西,距离可以运行的设备和软件还很远。
就像产品开发一样,上面的原则是输入的模糊需求。我们收到了需求之后就应该是概要设计,即使用什么协议模型才能达到这些需求。从开始到现在,我们还没有触碰到协议的技术层面,因为从架构到实现,还需要很多的事情要做。另外一点是,实现有两个方面,一个是能够正确的实现协议,另一个是满足需要的性能。
从网络整体结构来看,它包括两个部分,一部分可以被称作主机(现在可以包括电脑,手机,各种用户终端设备),一部分可以被称之为网关(现在直连用户的为网关,中间IP转发设备被称为路由器)。由于网络设计的原则是将复杂的协议处理放在主机部分,因此主机部分的实现就是一个重要方面。虽然主机的硬件种类多种多样,但是他们运行的操作系统却只有那么几个,到目前依然还在使用的有UNIX, Linux, Windows, Mac/iOS这几种。因此在这些操作系统上实现网络协议栈即是一个主要方面。
当然,我们是从现在的角度来看问题,难免有幸存者偏差倾向。但是我们可以通过分析这些操作系统网络协议栈的共性,来探讨网络本身的发展。主机网络协议的核心是对于用户的接口,现在看来是BSD socket统治了世界。即使是Linux这种处处皆文件的设计哲学,在网络部分也还是使用了BSD socket的接口。Mac/iOS的网络协议来自BSD类协议栈,Windows的网络协议栈因为是闭源的,目前还不清楚,但是WinSock的接口和BSD socket接口也是有一定类似之处的。
这篇论文还提到网络编址为了提升效率,最开始使用了变长地址的方式。但是由于这种设计会导致中间网络的实现复杂,最终被放弃了。这也间接说明网络最初的设计重点不在于中间设备,而是终端设备。但是随着互联网的发展,网络规模成指数级增长,中间网络设备的发展也变成了另一个重点议题了。此处还提到了TTL字段对于路由功能的考虑,因为路由协议没有如何终止的标志,所以TTL作为一种终止方法被设计出来。但是现在的TTL早已和路由功能的关系不大了。
其实说了这么多,我们真正的主角,面向连接的可靠传输协议,也就是现在互联网中占统治地位的TCP协议还没有登场。至于它的设计思想,我们还是下篇文章再分析吧。
<未完待续>