1.5 参考实现
我们在1.3节中看到,拥塞控制是一个理论联系实际的话题,尽管有大量的文献资料在研究拥塞控制算法的数学属性,但拥塞控制同时也是一个高度实用的技术。据估计,TCP 连接承载了互联网上85%的流量,这些连接基于在各种可以想象得到的操作系统(例如Linux、Windows、MacOS、iOS、Android)中运行的TCP软件实现。实际上,我们在本书中讨论的拥塞控制机制的规范就出现在操作系统内核代码中,通常用C语言实现。理论定义了这些代码的抽象模型,但代码具象化了算法。
当实现本身就是规范时,引出了另一个问题:哪一种实现才是权威的;哪一个可以作为参考实现?答案是当前占主导地位的开源实现。这里最早的例子是Unix的 Berkeley Software Distribution (BSD) 发行版本。实际上,Jacobson和Karels提出的最初拥塞控制算法是1988年BSD 4.3 Tahoe版本拥有的一个显著特性。BSD Unix 与 TCP 拥塞控制算法之间的这种联系非常紧密,以至于后续拥塞控制算法的变种都按照BSD的发布版本名来命名:例如,TCP Tahoe,以及后来的TCP Reno。
更多阅读:S.J. Leffler, M.K. McKusick, M.J. Karels, and J.S Quarterman. The Design and Implementation of the 4.3 BSD UNIX Operating System. Addison-Wesley. January 1989.
BSD 及其衍生版本至今仍在继续发展(尤其是 FreeBSD),但最终在 2000 年初它被 Linux 超越,后者已经成为事实上的开源且占主导地位的基于 Unix 的操作系统。本书中描述的所有 TCP 拥塞控制算法都存在于 Linux 内核中并且可以选择激活。Linux中的实现成为了这些算法成为了参考实现。所以,现在评估 TCP 拥塞控制机制需要基于运行在Linux 的 TCP 发送方和接收方之间的实际流量。这引发了一个开放性的思考,应该基于什么样的流量来评估(速率,时间长短),以及在一个什么样的网络上来进行评估(网络带宽,延时)?(注,这里想表达的是评估TCP拥塞控制机制的方法,可以参考3.4)
观察运行在实际互联网中 TCP 连接的行为,往往可以获得有价值的视角,但“互联网”本身在时间和空间上的极大差异,使得进行受控实验几乎不可能。因此,当前的最佳实践是在隔离但“具有代表性的网络拓扑”上运行一系列“具有代表性的数据流”。至于什么是“具有代表性”,并没有一个明确的标准,所以实验结果永远不会是明确的。但是,使用这种方法收集的信息数据,一直在这些年推动拥塞控制技术的发展进步。
在本书中,我们将使用第3章描述的实验方法论,来描述各种算法的行为并帮助大家建立对于算法的主观认知,同时这个过程展示了拥塞控制为什么是一个充满挑战和趣味的问题场景。
Berkeley Unix
任何学习互联网的人都应该感谢BSD Unix 在互联网的成功中所扮演的角色。Unix是在1970年代初由AT&T贝尔实验室首创的,而 BSD Unix 是由 DARPA 投资支持的一个开源 Unix 实现版本,这个版本包括了最初的 TCP/IP 协议栈,并且这个版本最终被证明是具有革命性的。
在当时,互联网的成功并非是必然的。许多人只是将其视为一个研究,它在当时也没有获得太多计算机和电信行业的支持。正是因为大学(及其学生)能够访问一个开源的互联网协议栈,并且能够在低成本的硬件上运行它,TCP/IP 才能够存活并发展。通过开源软件和低成本硬件来播种变革性技术,已被证明是一种强大的策略,其中BSD是一个早期的成功案例。
Last updated