4 利用系统提供Module: Netfilter
4.1 Netfilter简介
参考 http://www.ibm.com/developerworks/cn/linux/l-ntflt/index.html
Netfilter是从2.4内核引入的,与Linux中的TCP/IP协议族紧密结合,提供了对网络功能的扩展功能。下面分别从报文发送和报文接收两个流程介绍Netfilter,Netfilter以NF_HOOK()的形式出现在报文处理的过程之中。
4.2 IP报文发送接收介绍
在介绍Netfilter之前,先要介绍一下Linux中网络报文的发送、接收、中转过程,这里以IP报文为例。
4.2.1报文发送
采用ipip模块发送IP Tunnel报文为例, 从net/ipv4/ipip.c::ipip_tunnel_xmit()开始,到net/core/dev.c::dev_queue_xmit()
4.2.2 报文接收
报文接收从网卡驱动开始,当网卡报文接收从网卡驱动程序开始,当网卡收到一个报文时,会产生一个中断,其驱动程序中的中断服务程序将调用确定的接收函数来处理。以下仍以IP Tunnel报文为例。流程分成两个阶段:驱动程序中断服务程序阶段和IP协议栈处理阶段:
报文接收流程之驱动程序阶段
报文接收流程之协议栈阶段
如果报文需要转发,则在上图红箭头所指处调用ip_forward():
4.2.3报文转发流程