Linux内核中struct net_protocol的early_demux字段解析
背景问题
在内核版本4.19.0-25
的头文件中,struct net_protocol
结构体的定义未显式包含early_demux
字段。然而,在内核版本4.19
的源代码中可以看到tcp_protocol
实例化时却对该字段进行了赋值:
static struct net_protocol tcp_protocol = { .early_demux = tcp_v4_early_demux, .early_demux_handler = tcp_v4_early_demux, .handler = tcp_v4_rcv, .err_handler = tcp_v4_err, // ...其他字段 };
这种表面上的矛盾需要结合内核实现细节来解释。
early_demux
的作用
early_demux
(早期解复用)是内核网络协议栈中的一种性能优化机制,其核心目标是在数据包处理的早期阶段(如IP层)快速确定对应的传输层协议和Socket,从而减少后续处理开销。具体功能包括:
-
快速定位目标Socket
在数据包进入协