本文是在通过对4.4BSD-lite版本中的部分源代码的学习基础上,重点研究了BSD实现中的数据结构和函数功能,从而分析 Berkeley联网程序的代码实现TCP/IP协议栈的架构。由于时间和篇幅有限,本文对接口层进行了详细分析,对其他协议层进行了总体分析,通过分析对BSD协议栈架构思想形成了初步的了解。
在BSD实现中,操作系统的内核中联网代码被分成三层组织:接口层、协议层和插口层。在内核之外,操作系统向应用层提供网络编程API,应用程序可以通过API函数的操作,完成对内核协议的数据传输和控制。网络编程API是在用户空间实现的,函数内部通过系统调用来操作应用层无法直接调用的协议。在BSD实现中接口层、协议层和插口层的分层结构于标准OSI模型的对应关系如图所示。
接口层位于BSD协议栈的底部,BSD协议栈主要针对以太网接口、SLIP接口和环回接口三种网络接口,接口层为网络接口提供驱动程序。在操作系统初始化时,接口层初始化程序会初始化接口层数据结构,其中包括以太网接口、SLIP接口和环回接口对应的数据结构。