LVS源码分析二---模块组织

本文解析了IPVS(Linux内核的IP虚拟服务器子系统)的内部结构,包括其支持的不同连接调度算法及传输层协议。介绍了每种连接调度算法如何作为独立内核模块实现,并探讨了对TCP、UDP、AH、ESP协议的支持方式。

版权:自由转载,说明出处,保留原作者名,保留文章的完整性,需要商业用途,请联系作者me.
韩波 GameProgramHack@yahoo.com.cn  2010.01.02 深圳市龙岗区坂田镇XXX小山村。
 
ipvs相关代码
include/linux/ip_vs.h
include/net/ip_vs.h
net/netfilter/ipvs/目录下共23个文件。

从Makefile分析。
http://www.linuxvirtualserver.org/zh/index.html文中提到的各种连接调度算法。每一种算法
分别独立实现为一个内核模块:ip_vs_rr.o,ip_vs_wrr.o,ip_vs_lc.o,ip_vs_wlc.o,ip_vs_lblc.o,ip_vs_lblcr.o,ip_vs_dh.o,ip_vs_sh.o,ip_vs_sed.o,ip_vs_nq.o.共对应了10个C文件。
每一个C文件主要实现属于自己调度算法的struct ip_vs_scheduler结构,在模块初始化的时候注册到ipvs系统中,
在模块卸载的时候,从ipvs系统中注销掉自己。

 

ipvs目前支持的传输层协议tcp,udp,ah,esp四种,tcp,udp很常见,ah,esp属于IPsec协议族的协议。相信了解
IPsec VPN的人对这很熟悉。其中对应的ip_vs_proto_udp.c,ip_vs_proto_tcp.c,ip_vs_proto_ah_esp.c共3个C文件。
主要实现各自协议的struct ip_vs_protocol数据结构。

 

连接调度算法每一个种算法都设计为独立内核模块,可以在运行时动态的按需加载。然而对传输层协议的支持没有设计为独立的内核模块,不可以运行时决定支持那种协议。而是在编译的时候决定的。编译的时候配置了支持某种传输层协议。在Makefile中会把对应的.o静态连接到ip_vs.o中:
ip_vs_proto-objs-y :=
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_TCP) += ip_vs_proto_tcp.o
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_UDP) += ip_vs_proto_udp.o
ip_vs_proto-objs-$(CONFIG_IP_VS_PROTO_AH_ESP) += ip_vs_proto_ah_esp.o
并且在ip_vs_proto.c文件
ip_vs_protocol_init函数中把对应的传输层协议注册到ip_vs系统中:
#ifdef CONFIG_IP_VS_PROTO_TCP
 REGISTER_PROTOCOL(&ip_vs_protocol_tcp);
#endif
#ifdef CONFIG_IP_VS_PROTO_UDP
 REGISTER_PROTOCOL(&ip_vs_protocol_udp);
#endif
#ifdef CONFIG_IP_VS_PROTO_AH
 REGISTER_PROTOCOL(&ip_vs_protocol_ah);
#endif
#ifdef CONFIG_IP_VS_PROTO_ESP
 REGISTER_PROTOCOL(&ip_vs_protocol_esp);
#endif

 

ip_vs_ftp.o是ip_vs的应用helper,对应ip_vs_ftp.c.由ftp协议猜想可能是用来解决关联连接的问题。如果是为了解决关联连接问题,这里可以看到ipvs并不完善,其实还有很多工作需要做。比如netfilter中处理关联连接除了支持ftp外,已经支持了h323,pptp等其他很多协议。

 

剩下9个文件是ip_vs.o的必选文件。我这里为了与以上各部门区分,称他们为ip_vs_core.下面主要的精力会集中分析ip_vs_core.

 

                                                                                 广告过后,精彩等着你... ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值