在 Linux 内核的网络协议栈中,struct proto
和 struct proto_ops
是两个关键的结构体,它们分别承担不同层次的网络协议操作。尽管两者在功能上存在一定的重叠,但它们的角色、调用场景和设计目标有本质区别。本文将通过代码分析、调用流程和设计思想,深入探讨二者的差异与协作机制。
1. 核心定义与用途
1.1 struct proto
:传输层协议的核心实现
struct proto
定义了传输层协议的具体操作,如 TCP、UDP 等协议的连接管理、数据收发逻辑。每个协议(如 TCP、UDP)会实例化一个 proto
结构体,填充协议特有的函数指针。例如:
struct proto tcp_prot = { .name = "TCP", .connect = tcp_v4_connect, .sendmsg = tcp_sendmsg, .recvmsg = tcp_recvmsg, .close = tcp_close, // ... 其他函数指针 };
-
核心作用:实现协议逻辑(如三次握手、拥塞控制)。
-
操作对