12.1 概述

Linux优秀的网络功能和它严密科学的设计思想是分不开的。在分析Linux网络内容之前,我们先大体上了解一下网络部分的设计思想及其特点,这对于我们后面的分析很有帮助:

1.Linux的网络部分沿用了传统的层次结构。网络数据从用户进程传输到网络设备要经过四个层次,如图12.1所示:

                 

12.1 Linux网络层次模型

每个层次的内部,还可以再细分为多层次。数据的传输过程只能依照层次的划分,自顶向下进行,不能跨越其中的某个或某些层次,这就使得网络传输只能有一条而且是唯一的一条路径,这样做的目的就是为了提高整个网络的可靠性和准确性。

 

2 . Linux对以上网络层次的实现采用了面向对象的设计方法,层次模型中的各个层次被抽象为对象,这些对象是:

 

 

   网络协议(protoal)

网络协议是一种网络语言,它规定了通信双方之间交换信息的一种规范,它是网络传输的基础。

   套接字 (socket)

一个套接字就是网络中的一个连接,它向用户提供了文件的I/O,并和网络协议紧密地联系在一起,体现了网络和文件系统、进程管理之间的关系,它是网络传输的入口。

   设备接口(device and interface)

网络设备接口控制着网络数据由软件——硬件——软件的过程,体现了网络和设备的关系,它是网络传输的桥梁。

   网络缓冲区(network buffers)

网络中的缓冲器叫做套接字缓冲区(sk_buff。它是一块保存网络数据的内存区域,体现了网络和内存管理之间的关系,它是网络传输的灵魂。

这四个对象之间的关系请看图12.2

 

12.2 Linux的网络对象及其之间的关系

 

从上图我们可以看出:这四个对象之间的关系是非常紧密的,其中套接字缓冲区的作用非常重要,它和其他三个对象均有关系。本章下面的部分将对这四个对象及其之间的关系做详细的介绍。

Linux网络部分为了提高它整体上的兼容性,每一个核心对象都包含了很多种类,为了便于对网络内核的分析,每一个对象我们只选择最常用的一种详细说明,其他种类从略。