仅有理论而无实例只是纸上谈兵,unix的流机制是很妙的机制,但是unix流究竟是如何实现以及如何使用的呢,虽然unix流已经提出了很久很久,但是时至今日它也没有普遍被使用,出了solaris和windows等操作系统外,几乎没有什么系统在使用它,当今世上操作系统无非也就几家独大,按照不失一般性的分类,首先就是windows,然后是linux以及几家的unix,如solaris和各种bsd以及darvin,然后就是各家小诸侯了,不足挂齿,在几家大的中,独有windows和solaris吸取了unix的流思想,其余的好像都是比拼内功的结果,丝毫不在乎整体架构,只是在细节上略胜一筹,比如通读linux源码就会发现,里面有十分糟糕的算法,也有十分美妙的,显然不是一伙人所为,各个开发者都在各行其是,于是便失去了整体的美感,结果就是效率的提升,这也许就是GNU的绝美的地方吧(虽solaris10以及微软的开发框架也开源,但却是在不同license下的开源,和linux不可同日而语)。从windows内核来解析流之美,众人可阅读很多资料,可是unix自身的流实现,却只能纵览system V以后后商用unix实现,最可观的当属solaris了,以我比较熟悉的openvpn为例,在打开且初始化tun/tap设备的时候,openvpn会调用open_tun,需要初始化整个虚拟设备的协议栈,于是linux和solaris就分道扬镳了,在linux中,实现如下:
void open_tun (...)
{
...//linux的实现就不多说了,本质上就是初始化内核的tun设备而已
}
由于linux并没有实现unix的流机制,因此linux只是简单的调用虚拟网卡设备的open例程以及TUNSETIFF的ioctl例程,及结果无非就是“直接”初始化虚拟网卡设备的协议栈以备后用。看看solaris的实现:
void open_tun (...)
{
...
if (tt->type == DEV_TYPE_TAP) {
ip_node = "/dev/ip";
if (!dev_node)
dev_node = "/dev/tun";
...
}
...
if_fd = open (dev_node, O_RDWR, 0);
ioctl (if_fd, I_PUSH, "ip");
...
}
很明显,solaris的方式比linux更好,它直接将ip协议“压”在了虚拟网卡设备之上,于是就相当于实现了虚拟网卡设备的tcp/ip协议栈,不光是可以压入ip协议模块,还可以压入诸如arp,icmp等的一切协议处理模块,unix的流机制可以对任何的IO数据实行过滤,其关键在于一个I_PUSH/I_POP命令参数的使用,在用户空间通过ioctl就可以完成如此底层的协议整合,多么灵活,多么美妙啊!采用unix流的方式无需直接初始化整个协议栈,而是可以再流模块被压入的时刻再初始化之。
分享到:
相关推荐
unix安全架构 下面是一些个人的经验的总结,我相信对于是否受到入侵的UNIX或者UNIX-clone(freebsd,openbsd,netbsd, linux,etc)都是有用的:
你应该读这本书,如果你是一位经验丰富的Unix程序员...你应该读这本书,如果你是一个应用程序架构师考虑平台或实施战略的主要市场或垂直应用。这将有助于您了解Unix的优势,作为一个开发平台和开源Unix传统的开发方法。
Unix 基础,学习Unix的必备知识,从架构到文件系统,再到基本命令
Linux平台替换UNIX架构实践.pptx
管道 UNIX允许一个程序的输出作为另外一个程序输入,多个程序串起来看起来好象一条管道一样。通过各个简单任务的组合,就可以完成更大更复杂的任务,并极大提高了操作的方便性。后来DOS操作系统也借鉴并提供了这种...
UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册UNIX用户手册
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。 Linux能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承...
(提醒:系统在执行多任务时,CPU在某一时刻只能执行一个任务,但UNIX操作系统将CPU时间分片,并把这些时间片分别安排给多个进程,因为CPU运行很快,在操作者看来,所有程序(进程)都在同时运行。)
dos2unix,unix2dos,mac2unix,unix2mac
导致系统运行迟缓的...有了这些信息,您应该可以判断 UNIX 系统之所以运行迟缓,到底是因为负载过重(CPU 超负荷使用)、物理内存太少(大量的交换工作),还是存在失控进程(单个进程占用大量的 CPU 时间)的问题。
unix程序员手册,适合新手入门,方便查阅!
本书分三个阶段介绍UNIX,首先是一个入门指南,然后介绍基本使用方法,最后讲解特殊的应用程序。在第一部分中,将向读者介绍如何使用命令行界面和图形用户界面进行基本操作。在第二和第三部分中,集中介绍执行文件...
UNIX插头问题UNIX插头问题UNIX插头问题UNIX插头问题UNIX插头问题UNIX插头问题UNIX插头问题UNIX插头问题
Unix手册 Unix手册 unix 用户手册 unix 用户手册 unix 用户手册
UNix操作手册UNix操作手册UNix操作手册UNix操作手册UNix操作手册
Unix 内核源码剖析 北京邮电大学出版社 本书针对1975年由贝尔实验室A发布的UNIX第6版(Sixth Edition Unix,此后简称为 UNIX V6)的内核源代码进行解说。面向的读者主要是计算机专业的学生,以及从事计 算机相关...
cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操作环境,或者从unix到windows的...
scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,unix操作系统简介scounix,...
本书分三个阶段介绍UNIX,首先是一个入门指南,然后介绍基本使用方法,最后讲解特殊的应用程序。在第一部分中,将向读者介绍如何使用命令行界面和图形用户界面进行基本操作。在第二和第三部分中,集中介绍执行文件...
IBM 的信息高可用性持续访问关键业务数据,IBM信息系统部署白皮书