上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.1 Socket Buffer设计概述
在这一章和下一章中,我们将会介绍Linux内核网络体系结构实现的两个最重要的数据结构:Socket Buffer数据结构sk_buff和网络设备数据结构net_device。这两个数据结构所包含的数据域比较多,是网络子系统中两个较复杂的数据结构。一开始就逐一学习数据结构的组成和数据域的含义是一项非常枯燥的任务,要全部理解和记住它们所有的数据域也比较困难,为什么我们仍然要在本书的开始部分就花大量的篇幅对这两个数据结构的数据域进行详细分析呢?因为数据结构是理解程序运行方式和状态的关键因素。
什么是数据结构?它是系统中各个实体,如网络数据包、网络设备在内核中的符号描述和抽象,它表示了这些实体的属性和运行时间变化过程。程序的运行就是:读取数据结构的相关数据域,获取实体的属性,根据它们的当前值来分析数据包/网络设备的状态;修改数据结构的数据域或更新某些数据域的值来对数据包/网络设备作处理。数据结构设计得是否合理在很大程度上决定了:程序体系结构是否清晰;操作是否灵活;是否具备可扩展性。所以要理解Linux内核网络体系结构的设计思想和实现原理,首先应掌握代表网络子系统中各个实体的重要数据结构。