- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux内核层网络编程框架的研究
Linux内核层网络编程框架的研究
摘要:对于普通的网络应用程序Linux可以通过用户层网络编程实现,但是对于一些特殊要求用户层网络编程无法实现,必须通过内核层网络编程。Linux内核在内核可加载模块机制的基础上在网络协议栈的网络层实现了NetFilter机制和sk_buff网络数据包内存操作机制。通过将三种机制结合起来可以实现对流经本地主机的网络数据包的各种操作。
关键词:Linux;内核可加载模块;NetFilter;sk_buff
中图分类号:B82文献标识码:A文章编号:1674-7712 (2014) 08-0000-01
Linux网络编程包括用户层网络编程和内核层网络编程,对于普通的网络应用程序可以通过用户层网络编程实现,但是对于一些特殊要求用户层网络编程无法实现,必须通过内核层网络编程。Linux内核为实现内核网络编程在内核可加载模块机制的基础上,在网络协议栈的网络层实现了NetFilter机制和sk_buff网络数据包内存操作机制。通过内核可加载模块机制可以将针对网络数据包操作的函数挂载到NetFilter框架的检查点上,从而实现对流经本地主机的网络数据包的各种操作。
一、Linux内核可加载模块编程
Linux操作系统可以分为用户空间和内核空间,在内核空间编写程序和在用户空间编写程序有很大的区别[11]。典型的用户空间应用程序有一个main()函数作为函数执行的入口点,而内核程序需要一个初始化函数和一个清理函数,在向内核空间插入模块时调用初始化函数,卸载模块时调用清理函数。Linux内核编程通常用可加载模块的方式,与直接编译内核相比可加载内核模块的方便性表现在不用重新编译内核、可动态加载卸载和便于调试。
内核模块编程的基本架构包括五部分:初始化函数、清除函数、描述信息声明、可导出符号表和加载模块,其中初始化函数和清除函数是不可或缺的部分。初始化函数在使用insmod命令的时候自动调用进行模块的初始化,主要是资源申请。清除函数在使用rmmod命令的时候自动调用进行模块退出之前的清理工作,主要是状态重置和资源释放。描述信息声明用来描述模块许可证声明、作者、用途、版本号、别名等信息。可导出符号表与用户空间编程时的库类似,内核模块中也可以调用其他模块中的函数或例程,或者允许其他模块调用本模块中的函数。导出的符号必须在文件的全局可见,不能将局部的符号导出。需要导出的变量要在函数体外进行声明,不需要导出的变量和函数等内核符号可以用static进行声明从而对内核的安全性有一定的保证。用户空间的应用函数可以接受用户的参数,Linux内核模块在加载的时候也可以通过加载参数部分来加载参数。在内核模块函数中可以调用printk()函数,然后通过dmesg命令查看内核输出日志文件便于调试。
二、Linux内核网络编程
Linux网络编程分为用户层网络编程和内核层网络编程。用户层网络编程即为套接字编程。套接字编程又分为标准套接字编程和原始套接字编程,标准套接字包括流式套接字和数据报套接字,其涵盖了一般应用层次的TCP/IP应用,几乎所有的应用程序都可以使用这两类套接字来实现。但是当要发送自定义的IP包时,或者监听网络上的数据包时,以及实现自定义的协议时,标准套接字无法实现需要使用原始套接字,原始套接字主要应用在底层网络编程。Linux为研究网络安全在内核层提供了网络编程框架NetFilter。利用NetFilter框架可以在内核层对进出主机的网络数据包进行监听、捕获、修改等所有操作,可以实现防火墙、VPN、NAT、信息加密解密等。
现行实际网络协议簇标准是TCP/IP协议簇,TCP/IP协议簇自上而下分为应用层、传输层、网络层和数据链路层。网络层存在IPv4和IPv6两种协议栈,NetFilter在Linux内核的IPv4和IPv6协议栈都有相应的实现,本文主要分析IPv4环境下的NetFilter的实现,IPv4协议栈为了实现对NetFilter框架的支持,在IP数据包的传递过程中设置了5个检查点,通过在检查点上挂处理载函数可以完成对网络数据包的各种的处理,这5个检查点的分布如图1所示。
图1
通过观察可以发现进出主机的网络数据包共有三条路径:接收网络数据包路径、转发网络数据包路径和发送网络数据包路径。当一个网络数据包从网络到达主机的网络层时首先经过NF_IP_PRE_ROUTING检查点,当检查点的处理函数处理完数据包之后会查询本地路由表,如果修改后的网络数据包是发送给本地主机的则将网络数据包交给NF_IP_LOCAL_IN检查点,当检查点的处理函数处理完数据包之后会将数据包交付给传输层协议。如果修改后的数据包不是发送给本地主机的且主机允许路由的条
您可能关注的文档
最近下载
- SYT 5547-2000螺杆钻具使用、维修和管理.pdf
- 第三方产品节能环保ccc证书---服务器.docx VIP
- 一种连续酶解制备蛋白肽的系统及工艺.pdf VIP
- (高清版)B-T 40815.2-2021 电气和电子设备机械结构 符合英制系列和公制系列机柜的热管理 第2部分:强迫风冷的确定方法.pdf VIP
- 2025幼儿园园级家委会ppt全新 .pdf VIP
- PEP人教版六年级下册英语全册导学案.pdf VIP
- 鲁科版六年级上生物思维导图.pptx
- 电商运营方案电商运营方案.pptx VIP
- 计数型MSA测量系统分析报告(模板).xls VIP
- 发展低空经济课件.pptx VIP
文档评论(0)