改进及优化Linux网络协议栈文档格式.docx
《改进及优化Linux网络协议栈文档格式.docx》由会员分享,可在线阅读,更多相关《改进及优化Linux网络协议栈文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
TONGHao,CHENXing-shu,YANHong
(CollegeofComputerScience,SichuanUniversityChendu610064
AbstractFocusingontheX86platform,thispaperanalyzesthetheoryofLinuxnetworkprotocolstackand
themechanismoffirewallunderthisarchitecture,TheproblemsofdesigningtheLinuxprotocolstackandconfiguringsecurenetworkplatformarepointedout.ThenweintroduceanewLinuxnetworkprotocolstackwhichisbasedonthenetworkhardwareporttransmissionandtheseparationoftransmissionportandmanagerialport.BytestingandcomparingtotraditionalLinuxprotocolstack,thistechnologycangreatlyimprovetheperformanceofsecurenetworkplatformanditmakesthedesignofsecurenetworkproductsmorecompactnessandorthogonality.
KeywordsLinux;
network;
port;
stack
收稿日期:
2007−05−30
基金项目:
国家242信息安全计划项目(2005C47;
2006电子发展基金(信部运634号;
四川省科技攻关项目(06GG0618
作者简介:
童浩(1971−,男,硕士生,主要从事信息安全、计算机网络方面的研究;
陈兴蜀(1968−,女,博士,副教授,主要从事信息安全方面的研究;
严宏(1984−,男,硕士,主要从事信息安全、计算机网络方面的研究.
目前国内广泛使用X86+Linux作为网络防火墙或其他类似安全设备的开发平台。
X86架构采用了通用CPU和PCI总线接口,具有很高的灵活性和可扩展性;
Linux作为开放源代码的操作系统,开发者具
有良好的开发环境和系统源码支持。
基于该平台的
产品功能主要由软件实现,可以根据用户的需求灵
活调整功能模块,因此它一直作为网络安全设备开
发的主要平台。
X86+Linux架构的缺点:
X86通用的计算平台
结构层次较多,不易优化;
Linux作为通用的操作系统,更多考虑的是系统的通用性,没有对应用作进一步的性能优化。
该平台往往作为防火墙低端产品的开发平台[1]。
随着CPU性能的不断提升,总线结构的不断发展[2],X86+Linux平台上的网络安全产品逐步向高端发展。
为与硬件平台发展相适应,本文针对Linux操作系统,特别是对Linux网络协议栈进行了优化与改进,提高了系统的处理能力,使之能适应网络安全发展的需求。
1网络安全设备实现及存在的问题
许多网络安全设备通常会采用Linux网络协议栈中的netfilter框架[3]来实现。
它将一个网卡作为内网口,另一个网卡作为外网口,当数据从网口进入协议栈后,通过桥方式或路由方式实现数据包的转发。
在数据包的转发路径上,通过netfilter框架上的钩子点(PreRouting、Forward、PostRouting实现对数据包的审查与处理[4]。
网络安全平台的功能模块可分类为两大部分:
网络数据的审查处理模块与网络数据的寻址路由模块。
审查处理模块可通过在netfilter框架中注册钩子函数,以实现对网络数据包的审查处理[5];
寻址路
电子科技大学学报第36卷1494
由模块由协议栈中路由判决模块和桥判决模块[6]来实现,用户根据设备工作的不同环境配置确定设备是路由模式还是桥模式。
路由模式和桥模式都是解决数据包从哪个接口进入设备,又应由哪个接口输出的问题。
这些工作与网络安全设备所关注的数据包的安全审查处理无关。
由于每个数据包都需要进行寻址路由,当数据流量较大时,寻址路由操作及相关的路由表、mac地址表的更新工作需花费大量的机器处理时间。
对于大多数网络安全设备而言,网络安全平台设备的数据从一个端口流入,另一个端口流出,其流入端口和流出端口是固定的,并不需要寻址和路由。
对于这类具有固定的流入流出端口的网络安全平台而言,路由模块和桥模块完全是冗余的。
如果能裁剪掉这部分不必要的寻址操作,将大大提高系统运行的效率。
此外,网络安全设备在路由模式下往往需要对工作的环境进行相应的设置,而桥模式虽然称之为“透明模式”,但其透明性只是相对于用户而言,在设备内部仍然需要对多种协议进行配置,而这些配置对用户是不可见的,往往会给用户带来困惑。
如对网桥生成树STP协议的处理[7],当用户设置STP协议配置时,往往都没有考虑到工作在桥模式的网络安全设备也是一个桥设备,没有考虑到网络安全设备内部桥模式的生成树协议的设置状态也会对网络系统产生影响。
又如IGMP多播包的设置,平台内对于IGMP多播报文的配置设置甚至会影响到整个网络的正常运行。
这些设置都是在网络安全设备厂商构建时配置确定的,对用户不可见,用户也不能对这些参数进行修改。
这样的网络安全设备运行中往往会给网络带来各种奇怪的影响,而用户却根本不知道状况发生的原因。
同时,由于这样的系统构建十分复杂,容易给系统设计带来一些Bug。
如在Linux-2.6.17以前的版本中,支持构建Vlan网桥,但构建的Vlan桥中的STP生成树协议不能通过Vlan桥广播到其他的网络端口,会给需要Vlan及STP协议支持的网络造成混乱。
分析产生这些问题根源,是由于Linux通用的网络协议栈造成的。
由于Linux是一个通用的网络系统,没有考虑到网络安全设备转发数据的特殊需求。
理想的网络安全设备的工作模式应该是:
数据包进入→数据包审查处理→数据包送出,并不希望协议栈中除了网络安全功能以外的其他部分对转发的数据包进行处理及响应。
但在Linux协议栈中,只要目标地址是本机或者是与本机相关的多播、广播包,相应的模块就会作出响应。
这是因为到Linux协议栈中的所有与本机相关的数据包都会通过栈中的Input、Output链接到达本机中的相应模块。
本来只想通过设备进行转发的数据包中的一些多播、广播包也会通过协议栈到达网络安全设备本机。
而对这些数据包,特别是多播、广播包处理响应往往会影响到网络安全设备的正常运行;
同时设备对这些包的回应,反过来又会对网络产生影响。
在网络中,这样的多播、广播数据包是大量存在的,设备会给网络带来的许多不可预知的问题,使得基于传统的Linux协议栈构造的网络安全设备平台的兼容性受到很大的影响。
2建立快速转发机制
2.1实现原理及框架
实际应用中,许多网络安全设备并不都需要路由和网桥的功能,只需将数据包从一个网口接收,经审查处理后到另一网口转发即可,其输入接口与输出接口都已指定,没有必要对数据包的流向进行寻址。
应用中,由于每个到达Linux协议栈的数据包都需要通过路由或网桥模块,都需要对数据包进行路由或网桥处理,并且还伴随大量路由表和网桥表的更新工作,极大地降低了系统的性能。
对这类应用中的路由及网桥模块进行修改和裁减十分必要。
本文对传统的Linux网络协议栈进行了修改,建立了改进的网络安全平台协议栈。
根据平台需要,在原桥模块和路由模块的基础上,增加了一个面向端口的快速转发模块,如图1所示。
当数据包进入网络协议栈时,首先判断是否存在该网卡进行快速转发设置,若是,则进入快速转发模块,进行快速转发;
否则,数据上传,进入上层协议栈,进行桥处理或路由处理,上层协议栈仍然保持传统Linux协议栈不变,以保持兼容性。
为了防止网络安全设备与网络的相互影响,本文将网络安全设备的数据转发端口与设备管理端口分开。
对经由数据转发端口通过网络安全设备的数据包,不送入网络安全设备的上层协议(应用层进行处理。
因此,在设计转发模块时,不再提供Input和Output链入本机,防止了转发的数据包对设备内部参数设置的依赖,避免设备内部设置与网络的相互影响。
管理安全设备所需数据包,统一通过管理接口进行接收发送。
当需要对网络安全平台进行管理时,数据包从管理口进入本机时,首先判断接口有
第6期童浩等:
改进及优化Linux网络协议栈1495
无进行快速转发的设置,由于本文的管理口没有设置为快速转发接口,接口即将数据包转入传统网络
协议栈进行处理,不会影响平台本身接收与发送网络数据。
图1改进后的Linux网络协议栈
从理论上讲,在整个快速转发的模块中,对数据包的安全审查处理,只需要建立一个钩子(hook点,在该钩子点上注册审查处理模块就可以了。
但为与传统netfilter框架结构保持一致,本文定制了三个钩子点,注册在传统netfilter框架结构中的模块都可以不加修改地移植在这三个钩子点上。
2.2具体实现方法
在内核中建立快速转发虚拟设备fast_transfer(简称FT设备
FT设备中定义了快速转发的接口对,将FT设备加入用于网络设备管理的net_device[8]队列,通过编写ioctl命令对快速转发虚拟设备对进行初始化,确定快速转发的输入输出接口对。
当数据包到达指定网口时,首先判断快速转发设备是否存在,该网卡是否加入了快速转发的输入输出接口对,是则进入快速转发模块,遍历本文定制的netfilter钩子点,然后通过net_device数据结构取得将要转发的网卡接口,对数据包skb_buff中相应的参数进行设置,交由网卡进行发送,即实现数据包的快速转发[9],如图2所示。
图2数据快速转发流程图
电子科技大学学报第36卷
14963性能测试
本文对快速转发协议栈与传统协议栈的性能进行对比测试。
测试平台为:
双路IntelXeonProcessor3.0G、IntelE7520芯片组,Intel82571EB,PCI-E网络控制器。
测试方式:
Smartbits6000吞吐量项目[10]。
从图3的测试结果中可以看到,基于网络接口的快速转发协议栈效率明显高于其他两种方式。
Avg%passed(快速
Avg%passed(网桥
Avg%passed(路由
Framesize/B
PassedRate/(%
图3吞吐量对比图
在实际上线测试中(四川大学校园网,该设备实现了设备的透明上线与转发,不需要对设备周边环境的设置作任何改变。
4总结
本文对传统Linux协议栈进行了改进,实现对网络协议栈中基于端口的快速转发,使网络数据包转发处理更加简洁,提高了设备运行效率;
将实现转发接口与管理接口分离,在转发路径上不再提供到达本机的路径。
通过隔离,提高了网络安全设备在转发数据时的透明性,隔离了转发接口的广播包对设备本身的影响,消除了网络安全设备对转发数据响应带给网络的不可预测的影响;
同时在进行网络
安全功能设计时,只需考虑对网络数据包中感兴趣的内容审查处理,不用再考虑网络传送的数据包对本机的影响,更不用关注对网络安全平台中路由、桥等相关协议参数的设置。
在这样的协议栈上设计网络安全设备,可以更专注于相关安全功能模块的设计,使整个模块更加清晰、简洁,提高了整个网络安全支持平台的紧凑性和正交性。
参考文献
[1]李烨,张红旗,杜学绘,等.千兆防火墙技术分析和研究[J].微计算机信息,2006,22(33:
103-105.
[2]孟会,刘雪峰.PCIExpress总线技术分析[J].计算机工程,2006,32(23:
253-255.
[3]SCHUYMERBD,FEDCHIKN.Ebtables/iptablesinter-actiononaLinux−basedbridge[EB/OL].http:
//ebtables.2003-11-10.
[4]赵蔚.netfilter:
Linux防火墙在内核中的实现[EB/OL].l-netip,2002-12-01.[5]RUSELLR,WELTEH.Linuxnetfilterhackinghowto[EB/OL].filter.org/documentation/HOWTO/netfilter-hacking-HOWTO.html,2002-07-02.[6]WEHRLEK,PAHLKEF,RITTERH,etal.Linuxnetworkingarchitecture:
DesignandimplementationofnetworkprotocolsintheLinuxkernel[M].UpperSaddleRiver,NJ,USA:
PrenticeHall,2004.
[7]PERLMAND.网络互:
网桥.路由器.交换机和互联协议[M].高传善,译.北京:
机械工业出版社,2001.
[8]CORBETJ,KROAH-HARTMANG,RUBINIA.Linuxdevicedrivers[M].3rded.Sebastopol,CA,USA:
O'
ReillyMedia,Inc,2005.[9]BENVENUTIC.UnderstandingLinuxnetworkinternals[M].Sebatopol,CA,USA:
ReillyMedia,Inc,2005.
[10]SpirentCommunications.Smartapplicationsuserguide
[M/CD].AgouraRoadCalabasas,CA,USA:
2002.
编辑张俊