linux,ip协议栈源代码分析,pdf

上传人:F****n 文档编号:90806120 上传时间:2019-06-19 格式:DOCX 页数:19 大小:30.82KB
返回 下载 相关 举报
linux,ip协议栈源代码分析,pdf_第1页
第1页 / 共19页
linux,ip协议栈源代码分析,pdf_第2页
第2页 / 共19页
linux,ip协议栈源代码分析,pdf_第3页
第3页 / 共19页
linux,ip协议栈源代码分析,pdf_第4页
第4页 / 共19页
linux,ip协议栈源代码分析,pdf_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《linux,ip协议栈源代码分析,pdf》由会员分享,可在线阅读,更多相关《linux,ip协议栈源代码分析,pdf(19页珍藏版)》请在金锄头文库上搜索。

1、linux,ip协议栈源代码分析,pdf篇一:Netfilter源代码分析详解一、概述1. Netfilter/IPTables框架简介Netfilter/IPTables是继的IPfwadm、的IPchains之后,新一代的Linux防火墙机制。Netfilter采用模块化设计,具有良好的可扩充性。其重要工具模块IPTables连接到Netfilter的架构中,并允许使用者对数据报进行过滤、地址转换、处理等操作。Netfilter提供了一个框架,将对网络代码的直接干涉降到最低,并允许用规定的接口将其他包处理代码以模块的形式添加到内核中,具有极强的灵活性。2. 主要源代码文件Linux内核版本

2、:Netfilter主文件:net/core/Netfilter主头文件:include/linux/IPv4相关:c文件:net/ipv4/netfilter/*.c头文件:include/linux/netfilter_include/linux/netfilter_ipv4/*.hIPv4协议栈主体的部分c文件,特别是与数据报传送过程有关的部分: ip_,ip_,ip_,ip_等二、Netfilter/IPTables-IPv4总体架构Netfilter主要通过表、链实现规则,可以这么说,Netfilter是表的容器,表是链的容器,链是规则的容器,最终形成对数据报处理规则的实现。 详细地

3、说,Netfilter/IPTables的体系结构可以分为三个大部分:1. Netfilter的HOOK机制Netfilter的通用框架不依赖于具体的协议,而是为每种网络协议定义一套HOOK函数。这些HOOK函数在数据报经过协议栈的几个关键点时被调用,在这几个点中,协议栈将数据报及HOOK函数标号作为参数,传递给Netfilter框架。对于它在网络堆栈中增加的这些HOOK,内核的任何模块可以对每种协议的一个或多个HOOK进行注册,实现挂接。这样当某个数据报被传递给Netfilter框架时,内核能检测到是否有任何模块对该协议和HOOK函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,

4、这样这些模块就有机会检查、修改、丢弃该数据报及指示Netfilter将该数据报传入用户空间的队列。这样,HOOK提供了一种方便的机制:在数据报通过Linux内核的不同位置上截获和操作处理数据报。2. IPTables基础模块IPTables基础模块实现了三个表来筛选各种数据报,具体地讲,内核提供的这三种数据报的处理功能是相互间独立的模块,都基于Netfilter的HOOK函数和各种表、链实现。这三个表包括:filter表,nat表以及mangle表。3. 具体功能模块1.1. 数据报过滤模块2. 连接跟踪模块(Conntrack)3. 网络地址转换模块(NAT)4. 数据报修改模块(mangl

5、e)5. 其它高级功能模块于是,Netfilter/IPTables总体架构如图24896_所示三、HOOK的实现1. Netfilter-IPv4中的HOOKNetfilter模块需要使用HOOK来启用函数的动态钩接,它在IPv4中定义了五个HOOK(位于文件include/linux/netfilter_,Line 39),分别对应0-4的hooknum简单地说,数据报经过各个HOOK的流程如下:数据报从进入系统,进行IP校验以后,首先经过第一个HOOK函数NF_IP_PRE_ROUTING进行处理;然后就进入路由代码,其决定该数据报是需要转发还是发给本机的;若该数据报是发被本机的,则该数

6、据经过HOOK函数NF_IP_LOCAL_IN处理以后然后传递给上层协议;若该数据报应该被转发则它被NF_IP_FORWARD处理;经过转发的数据报经过最后一个HOOK函数NF_IP_POST_ROUTING处理以后,再传输到网络上。本地产生的数据经过HOOK函数NF_IP_LOCAL_OUT 处理后,进行路由选择处理,然后经过NF_IP_POST_ROUTING处理后发送出去。总之,这五个HOOK所组成的Netfilter-IPv4数据报筛选体系如图24896_: (注:下面所说Netfilter/IPTables均基于IPv4,不再赘述)详细地说,各个HOOK及其在IP数据报传递中的具体位

7、置如图24896_NF_IP_PRE_ROUTING数据报在进入路由代码被处理之前,数据报在IP数据报接收函数ip_rcv (位于net/ipv4/ip_,Line379)的最后,也就是在传入的数据报被处理之前经过这个HOOK。在ip_rcv 中挂接这个HOOK之前,进行的是一些与类型、长度、版本有关的检查。经过这个HOOK处理之后,数据报进入ip_rcv_finish (位于net/ipv4/ip_,Line306),进行查路由表的工作,并判断该数据报是发给本地机器还是进行转发。在这个HOOK上主要是对数据报作报头检测处理,以捕获异常情况。 涉及功能(优先级顺序):Conntrack、man

8、gle、DNATNF_IP_LOCAL_IN目的地为本地主机的数据报在IP数据报本地投递函数ip_local_deliver (位于net/ipv4/ip_,Line290)的最后经过这个HOOK。经过这个HOOK处理之后,数据报进入ip_local_deliver_finish (位于net/ipv4/ip_,Line219)这样,IPTables模块就可以利用这个HOOK对应的INPUT规则链表来对数据报进行规则匹配的筛选了。防火墙一般建立在这个HOOK上。涉及功能:mangle、filter、SNAT、ConntrackNF_IP_FORWARD目的地非本地主机的数据报,包括被NAT修改

9、过地址的数据报,都要在IP数据报转发函数ip_forward (位于net/ipv4/ip_,Line73)的最后经过这个HOOK。经过这个HOOK处理之后,数据报进入ip_forward_finish (位于net/ipv4/ip_,Line44)另外,在net/ipv4/中的ipmr_queue_xmit 函数(Line1119)最后也会经过这个HOOK。(ipmr为多播相关,估计是在需要通过路由转发多播数据时的处理)这样,IPTables模块就可以利用这个HOOK对应的FORWARD规则链表来对数据报进行规则匹配的筛选了。涉及功能:mangle、filterNF_IP_LOCAL_OUT

10、本地主机发出的数据报在IP数据报构建/发送函数ip_queue_xmit (位于net/ipv4/ip_,Line339)、以及ip_build_and_send_pkt (位于net/ipv4/ip_,Line122)的最后经过这个HOOK。(在数据报处理中,前者最为常用,后者用于那些不传输有效数据的SYN/ACK包)经过这个HOOK处理后,数据报进入ip_queue_xmit2 (位于net/ipv4/ip_,Line281)另外,在ip_build_xmit_slow (位于net/ipv4/ip_,Line429)和ip_build_xmit (位于net/ipv4/ip_,Line6

11、38)中用于进行错误检测;在igmp_send_report (位于net/ipv4/,Line195)的最后也经过了这个HOOK,进行多播时相关的处理。这样,IPTables模块就可以利用这个HOOK对应的OUTPUT规则链表来对数据报进行规则匹配的筛选了。涉及功能:Conntrack、mangle、DNAT、filterNF_IP_POST_ROUTING所有数据报,包括源地址为本地主机和非本地主机的,在通过网络设备离开本地主机之前,在IP数据报发送函数ip_finish_output (位于net/ipv4/ip_,Line184)的最后经过这个HOOK。经过这个HOOK处理后,数据报进

12、入ip_finish_output2 (位于net/ipv4/ip_,Line160)另外,在函数ip_mc_output (位于net/ipv4/ip_,Line195)中在克隆新的网络缓存skb时,也经过了这个HOOK进行处理。涉及功能:mangle、SNAT、Conntrack其中,入口为net_rx_action (位于net/core/,Line1602),作用是将数据报一个个地从CPU的输入队列中拿出,然后传递给协议处理例程。出口为dev_queue_xmit (位于net/core/,Line1035),这个函数被高层协议的实例使用,以数据结构struct sk_buff *sk

13、b的形式在网络设备上发送数据报。2. HOOK的调用HOOK的调用是通过宏NF_HOOK实现的,其定义位于include/linux/,Line122:#define NF_HOOK /) / /: nf_hook_slow, , , , , )这里先调用list_empty函数检查HOOK点存储数组nf_hooks是否为空,为空则表示没有HOOK注册,则直接调用okfn继续处理。如果不为空,则转入nf_hook_slow 函数。nf_hook_slow 函数(位于net/core/,Line449)的工作主要是读nf_hook数组遍历所有的nf_hook_ops结构,并调用nf_hookfn

14、 处理各个数据报。 即HOOK的调用过程如图24896_所示下面说明一下NF_HOOK的各个参数:pf:协议族标识,相关的有效协议族列表位于include/linux/,Line178。对于IPv4,应该使用协议族PF_INET;篇二:TCP IP 协议栈分析与实现实验报告课程名称: TCP/IP 协议栈分析与实现 学生姓名: 专业: 信息工程 学号:同组学生姓名:无 实验地点 指导老师: 刘飚 实验日期:20XX年3月25日实验一:实验项目名称:一、实验目的和要求:学习 Linux 内核的通用链表的设计原理,熟练掌握 Linux 内核通用链表的使用。二、实验内容1. 掌握 Linux 通用链

15、表的创建2. 掌握通用链表增加元素、删除元素和遍历链表的方法。 三、实验要求1. 待创建的链表头变量名为 user_queue。2. 作为链表的宿主节点类型定义如下:struct user int id;/* user id */struct list_head list;3.针对上述 user_queue 链表,要求以队列方式向其中依次添加 10 个类型为 struct user 的宿主节点,并要求这 10 个宿主节点的 id 依次为 1-104. 依次遍历输出这 10 个宿主节点的 id5. 从队列中删除首个宿主节点,然后依次遍历该队列并输出余下各宿主节点的 id 值四、实现原理Linux 的内核源文件 提供了所有的链表定义、各类操作接口及其实现。其中

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号