Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2039806
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类: BSD

2010-07-04 22:48:30

研究BSD也已经有一段时间了,总感觉应该写点儿什么,可唯恐自己的理解不够深刻,误导大家。随着时间的推移,热情也在消退,一些以前有过的想法也逐渐忘记了,也许是时候写点儿什么了,只是为了记录下自己的一点点儿理解,错误和偏颇在所难免,请读者自辩。

研究BSD是从BSD系列的防火墙开始的,在BSD的世界里面主要有三个防火墙实现:ipfilter,ipfw/dummynet,pf/altq。ipfilter因为许可证的缘故已经渐渐退出了主流,Solaris代码中还有其身影,ipfw是FreeBSD的默认防火墙,pf是OpenBSD的默认防火墙,其中FreeBSD无愧是BSD的集大成者,它也将pf移植到了自身之中,不过其开发进步固然比不上OpenBSD的pf。dummynet和altq分别是对应的QoS实现,还有一种说法是ipfw是dummynet的组成部分。

相较pf,ipfw多少有些显得不够成熟,可能和其历史的出身(网络模拟)有关。ipfw的TCP状态因为缺少了对TCP序列号的校验,在某种程度上,不能算是全状态防火墙,这导致:黑客可以通过发送特定的RST包,删除防火墙对某条连接的跟踪状态,而序列号不必在窗口之内,攻击难度相对降级。pf是个比较整体的解决方案:同步防火墙状态,提供了较为高级的可靠性;可以将数据包转发到用户空间,使其可以用tcpdump查看;可以将流统计数据以兼容netflow v5的格式输出;pf内建了负载均横机制。pf还有一个比较好的功能就是synproxy,临渊羡鱼不如退而结网,因此我实现了,并且努力将其推入官方内核。也大幅度的提高了性能,不过看来其并行性似乎仍然没有太大提升。在并行化方面,pf可以考虑用hash表替代红黑树索引状态表,并且考虑用FreeBSD的read-mostly lock或者是类似Linux的RCU机制优化读写锁。关于优化,FreeBSD的优化经验表明以后的优化重点是:以cache为中心进行设计;尽可能并行化;充分利用硬件的功能,减轻CPU负担。

从QoS来讲,,并成功port到了Linux和Windows平台,不过其仍然不支持层级调度,仍然无法和altq同日而语。

说了这么多,也来讲讲Linux。Linux的防火墙部分是netfilter/iptables,QoS部分是tc,负载均横部分是lvs,这几个组件比BSD的同类组件来说,更为强大。但是,这几个组件之间多少也有些功能上的重叠,比如说:tc的分类部分和iptables的raw table;lvs的连接跟踪和netfilter的连接跟踪。不过这也带来某种程度的灵活性,因为各个组件相对独立。性能上来说,因为我没有实际测试过,所以不好臆测,但是,大家都在努力,Linux方面因为社区成员较为活跃,即使不领先,也不至于落后吧?
阅读(5044) | 评论(0) | 转发(0) |
0

上一篇:从统计代码行数说开

下一篇:accept filter

给主人留下些什么吧!~~