深入解析Linux网络编程:数据结构、系统调用与数据包处理
1. Linux网络架构概述
Linux内核支持多种不同的网络架构,TCP/IP只是其中之一。它实现了多种网络数据包调度算法,并且包含了一些程序,使得系统管理员可以直接在内核层面轻松设置路由器、网关、防火墙,甚至是一个简单的万维网服务器。当前的代码Net - 4受原始伯克利Unix实现的启发,是Linux网络的第四个主要版本。与VFS不同,网络代码是分层组织的,每层都与相邻层有明确的接口。由于网络传输的数据不可重用,因此无需缓存。为了提高效率,Linux避免在各层之间复制数据,原始数据存储在一个足够大的内存缓冲区中,以包含每层所需的控制信息。
1.1 主要网络数据结构
1.1.1 网络架构
网络架构描述了特定计算机网络的组成方式,它定义了一组层,每层都有明确的目的,层内的程序通过共享的规则和约定(即协议)进行通信。Linux支持大量不同的网络架构,部分如下表所示:
| 名称 | 网络架构和/或协议族 |
| — | — |
| PF_APPLETALK | Appletalk |
| PF_BLUETOOTH | Bluetooth |
| PF_BRIDGE | 多协议网桥 |
| PF_DECnet | DECnet |
| PF_INET | IPS的IPv4协议 |
| PF_INET6 | IPS的IPv6协议 |
| PF_IPX | Novell IPX |
| PF_LOCAL, PF_UNIX | Unix域套接字(本地通信) |
| PF_PACKET | IPS的