Linux 内核网络协议栈:从 Socket 类型到协议注册的深度解析
Linux 内核的网络协议栈是一个复杂而高效的体系,涉及多层次的协议处理与数据流转。本文通过分析核心数据结构(如 inetsw
数组、sock_type
枚举)和关键函数(如 inet_add_protocol
),深入探讨其工作原理与设计哲学。
一、Socket 类型与 sock_type
枚举
1.1 Socket 类型的定义
enum sock_type
定义了 Linux 支持的 Socket 类型,决定了通信的语义和行为:
-
常见类型:
-
SOCK_STREAM
:面向连接的可靠传输(如 TCP)。 -
SOCK_DGRAM
:无连接的数据报(如 UDP)。 -
SOCK_RAW
:直接操作网络层协议(如 IP)。
-
-
特殊类型:
-
SOCK_PACKET
:直接访问链路层帧(如以太网帧)
-