unix流架构到底是个什么东西
来源:互联网 发布:windows locale命令 编辑:程序博客网 时间:2024/06/10 07:41
仅有理论而无实例只是纸上谈兵,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流架构到底是个什么东西
- "架构"到底是个什么东西?
- JavaBean到底是个什么东西?
- blog到底是个什么东西?
- HttpModule到底是个什么东西
- Lucene到底是个什么东西
- 钱到底是个什么东西?
- JavaBean到底是个什么东西
- HttpModule到底是个什么东西
- 夏令时到底是个什么东西?
- JavaBean到底是个什么东西
- c++类到底是个什么东西
- HTML 5到底是个什么东西
- 硬盘到底是个什么鬼东西
- AJAX学习-到底是个什么东西
- HBase到底是个什么东西
- 堆栈到底是个什么东西?
- Swoole到底是个什么东西?
- 如何把VS2008上编的debug、release程序在没装VS的xp机器上运行
- opengl函数库介绍
- 如何发布应用到app world(二)
- opengl函数库介绍
- vim多窗口操作shortcut
- unix流架构到底是个什么东西
- Web UI设计命名规范
- PHP网站开发方案(开发新人必读)
- 为什么我空间的积分
- sss
- Warning: #1366 Incorrect string value 内容被截取或不能正常操作数据库
- 毕业设计总结
- 中医最牛的53个秘方
- 图说苹果、Flash和H[1].264