标题:
Linux Netfilter实现机制和扩展技术-IP Packet Flowing
[打印本页]
作者:
look_w
时间:
2018-4-18 17:39
标题:
Linux Netfilter实现机制和扩展技术-IP Packet Flowing
1. IP Packet FlowingIP协议栈是Linux操作系统的主要组成部分,也是Linux的特色之一,素以高效稳定著称。Netfilter与IP协议栈是密切结合在一起的,要想理解Netfilter的工作方式,必须理解IP协议栈是如何对报文进行处理的。下面将通过一个经由IP Tunnel传输的TCP报文的流动路径,简要介绍一下IPv4协议栈(IP层)的结构和报文处理过程。
IP Tunnel是2.0.x内核就已经提供了的虚拟局域网技术,它在内核中建立一个虚拟的网络设备,将正常的报文(第二层)封装在IP报文中,再通过TCP/IP网络进行传送。如果在网关之间建立IP Tunnel,并配合ARP报文的解析,就可以实现虚拟局域网。
我们从报文进入IP Tunnel设备准备发送开始。
1.1报文发送ipip模块创建tunnel设备(设备名为tunl0~tunlx)时,设置报文发送接口(hard_start_xmit)为ipip_tunnel_xmit(),流程见下图:
图1 报文发送流程
1.2 报文接收报文接收从网卡驱动程序开始,当网卡收到一个报文时,会产生一个中断,其驱动程序中的中断服务程序将调用确定的接收函数来处理。以下仍以IP Tunnel报文为例,网卡驱动程序为de4x5。流程分成两个阶段:驱动程序中断服务程序阶段和IP协议栈处理阶段,见下图:
图2 报文接收流程之驱动程序阶段
图3 报文接收流程之协议栈阶段
如果报文需要转发,则在上图红箭头所指处调用ip_forward():
图4 报文转发流程
从上面的流程可以看出,Netfilter以NF_HOOK()的形式出现在报文处理的过程之中。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0