KTCPVS实现
附件 | 大小 |
---|---|
ktcpvs_impl.jpg | 13.92 KB |
在Linux 内核2.4中,我们用内核线程(Kernel thread)实现Layer-7交换服务程序,并把所有的程序封装在可装卸的KTCPVS模块。KTCPVS的主要功能模块如图6.4所示:当KTCPVS模块被加载到内核中时,KTCPVS主内核线程被激活,并在/proc文件系统和setsockopt上挂接KTCPVS的内核控制程序,用户空间的管理程序tcpvsadm通过setsockopt函数来设置KTCPVS服务器的规则,通过/proc文件系统把KTCPVS服务器的规则读出。基于内容调度的模块被做成可装卸的模块(Loadable Module),不同的网络服务可以使用不同的基于内容调度模块,如HTTP和RTSP等。另外,系统的结构灵活,用户也可以为自己不同类型的网络服务编写相应的模块。
图6.4:KTCPVS系统的主要功能模块
可以通过tcpvsadm命令使得KTCPVS主线程生成多个子线程监听在某个端口。这组子线程可以接受来自客户的请求,通过与其绑定的基于内容的调度模块获得能处理当前请求的服务器,并建立一个TCP连接到该服务器,将请求发到服务器;子线程获得来自服务器的响应结果后,再将结果返回给客户。所有的请求和响应数据处理都是在操作系统的内核中进行的,所以没有用户空间与核心空间的切换开销和内存复制的开销,其处理开销比用户空间的TCP Gateway小很多。