本文我们来关注一下硬件接口。
声明
在本文中,我没有严格按照IEEE 802来描述,比如我将以太网IEEE 802.3和IEEE 802.11混合在一起,并将后者看成前者的扩展(也有人说802.11是802.3的杀手...),事实上我这么理解是有道理的,因为毕竟是802.3独领风骚得时候,才有了802.11的舞台,而且二者现如今在一起非常融洽,不信看看自家的无线路由器。所以我把以太网(IEEE 802.3)和WIFI(IEEE 802.11)当成了一家亲。我之所以避开IEEE 802是因为它是一套局域网标准,内容特别多,并且太复杂,而且里面很多的技术都已经被以太网淘汰了。本文的目的在于展望未来的互联设备间通信的硬件技术,并不局限于局域网,所以我用了另一个标准,不再严格遵循IEEE 802,相反,我将USB,蓝牙,红外,以太网,WIFI放在一个锅里翻炒。
历史,现状以及展望
还记得炫耀自己的手机有红外功能的年代吗?现在还在使用蓝牙吗?说到底,使用这些技术无非就是为了数据传输,曾经我使用USB+Tap网卡技术线连接两台PC机实现IP互通(自己不要试哦,不懂USB硬件原理会烧板子的),也曾经听说我刚工作时的师父在上世纪90年代用鼠标线或者串口联网,那时好象还没有Tap虚拟网卡驱动,但是已经有了虚拟网卡思想,因此自己写一个驱动即可,不管是师父为了玩游戏折腾的,还是我为了消磨时间折腾的,都是为了解决“缺一根线”的问题,很多的联网游戏或者别的什么联网程序是不能修改的,它们使用socket接口编写,使用标准的TCP/IP协议封装数据包,但是老式的机器上可能没有网卡,那么很显然,有什么用什么,一般老式机器都有串口,有PS/2口,那么找来手册,编写一个串口,PS/2的IO库,从虚拟网卡将包取出,调用库的IO接口即可。缺一根线就补一根线,以太网卡快速成了PC机的标配,不出所料,如今以太网和WIFI正在迅速替换所有的“为了数据通信而存在的”线缆!
数据的逻辑封装和实际传输的分离是根本,而逻辑封装协议族已经有了第一把交椅,那就是TCP/IP协议族,谁跟它配合的好,谁就能成为实际物理传输领域的王者。有了TCP/IP,以太网便可以成长在一个靠老大罩着的环境,言外之意就是不需要自己实现高层,只关注传输即可,因此也就造就了它简单的特性,而这正是它最大的优势。
我几乎可以肯定,以太网的优势正在越来越明显,而WIFI则完全且完美地适配到了以太网的下层,作为以太网的一个延伸,将其延展到了任何可以到达的地方,为什么以太网如此成功?正是因为它的简单性,它几乎没有自己的上层协议,而是直接接在了标注TCP/IP下面的数据链路层,它完成且仅仅完成了数据传输的功能!
蓝牙除了底层的链路层以及PHY之外,独立实现了自己的和TCP/IP并列的高层协议栈,却仅仅适用于局域范围,它和TCP/IP的功能在某部分是重合的,但是却远远没有TCP/IP成功,最终这种功能重复性的实现会将蓝牙标准拖垮。蓝牙技术极其复杂,是由爱立信牵头,大量无线移动领域的巨头参与的完全从无到有的无线传输解决方案,注意它是一个自成体系的独立系统,因此按照OSI模型,它应该覆盖所有的层,而实际上确实如此,然而蓝牙技术的分层是模糊的,层与层之间的关系非常模糊,耦合性非常高,帧结构以及行为及其复杂,在分层模型早已胜利的今天,它的缺陷也非常明显。蓝牙也不是不好,只是因为它不是最好,蓝牙比较可取的一点就是配对机制以及自组织微型网络,要比802.11 WIFI灵活,不过WIFI也在持续改进中。
USB技术,在上世纪90年代外设爆发的年代出生,以即插即用优势著称(事实上,以太网不也是即插即用的吗?),对于ISA和PCI而言,支持USB的设备是个杀手,但是USB同时也继承了很多ISA和PCI的特性,比如部署拓扑以及角色定位,USB是主从模式的,为级联星型拓扑,本质上说,它的目的和作用和ISA/PCI是一样的,就是连接外设,USB的优势只是更方便的连接外设,它主要依靠四针接口的两端两根稍长的5V供电针,这样就可以以下方式实现热插拔:1.在插入前,电源先接通,数据线再接通,使软件开始工作的时候电平稳定;2.在拔下的时候,数据线先断开,软件先停止工作。
USB的目的并不是解决设备互联问题,而是解决外设和主机的互联问题,但是这明显是前一个问题的子问题。设备互联问题包含了外设与主机的互联,并且不再区别主从关系,岂不更好?USB在实现了它最初的初衷以后,便开始了其完美的优化历程,不管是USB还是以太网,都没有一开始便跳入那美丽的优化陷阱,都是先有一个最简单最基本的能用的版本,在体系稳定后才开始提速,USB经过了12Mpbs,240Mpbs/480Mpbs,5Gpbs/10Gpbs这些阶段,以太网和它很像,经历了10Mpbs,100Mpbs,10000Mpbs这些阶段,在速率提升上二者的加速度几乎是一致的,在定位上,以太网一直以来都是主要用于TCP/IP网络,但是当人们把外设和主机的连接也抽象成设备互联的数据传输时,就会发现以太网也可以做到这些,最终以太网能否统一所有的互联设备的数据传输我们不得而知,但是我对此持乐观态度(后文详解) 。当然从观感上,你不能说以太网线不能放在女孩子的包包里面从而拒绝它,你也不能指望用一根双绞线连接鼠标和键盘。实际上,双绞只是网线的一个形式,旨在抵消干扰,在短距离内,也可以做得更美观,另外,不是有WIFI么...
在我们看待以太网技术的时候(WIFI只是它的延伸),我们发现它的帧结构及其简单,并且它越来越多的将精力集中在硬件上,即PHY,在10M以太网的年代,CSMA/CD还是一项标准技术,我们可以说它是一个协议,相信计算机系的同学们都知道这个,但是还有谁能完整表述它呢?事实上,随着全双工交换式以太网的出现,CSMA/CD已经不再需要,冲突域集中在了交换机内部的背板矩阵,随着更快速芯片和更大容量的存储器的出现,冲突域几乎可以忽略不计了,即它消失了。如今千兆,万兆以太网迅速蚕食着一切,正是因为它集中解决传输问题而丝毫不涉及高层的软件协议栈,门槛极低,真的就是即插即用!当我们需要实现一套蓝牙系统的时候,你需要做很多东西,可是从来没有人说过要实现一套以太网系统,对于以太网,需要的只是一块网卡,然后自己做一根线,或者直接搞一个无线网卡和一个AP...对于以太网,所有高层逻辑直接由TCP/IP负责。
以太网可以统一互联设备间的设备传输?包括主机之间的互联传输,键盘鼠标和主机之间通信,数码相机和手机之间通信,诸如此类?前文说了我对此持乐观态度。现如今已经越来越多的数据传输技术使用TCP/IP了,比如Intel NetEffect的iWARP/RDMA技术,我们看到,RDMA,是的,远程的内存访问,另外,IPMI技术。以太网技术作为TCP/IP使用最广的链路层,甚至包含一部分PHY层,这是一个绝佳的机会。注意,此处我们不涉及一公里以远的地方,因为那是运营商的天下,它们有自己的技术并且不受我们控制,比如ATM,全光环等。以太网技术只专注传输,这可让它适应任何需要传输的环境,除了TCP/IP之外,它可以和任意的高层协议接口。是的,以太网是TCP/IP带大的,但是并不是唯一属于TCP/IP,以太网衍生出来的WIFI可以和键盘鼠标协议接口,它的简单保证了它的低功耗,低延迟,而我们知道,键盘鼠标并不使用TCP/IP(当然它们完全可以用),那么怎么办呢?很简单,键盘鼠标的通用高层协议只要能解析WIFI帧里面的载荷内容即可,正如TCP/IP的IP层可以解析以太帧的载荷内容为一个IP数据报一样。如果使用蓝牙键盘,就不得不设置一个完整蓝牙栈在设备里面,由于蓝牙栈包含的内容太多,就显得笨重,层之间的模糊且复杂的关系导致你甚至很难裁减掉不需要的内容或者独立优化单独的模块,而WIFI只管传输,这样就可以有一个轻量级的通用驱动在上面负责上层逻辑,它可以因设备的能力而有所不同。
现在,我们知道了蓝牙技术太复杂,有一个全套的协议栈,USB技术定位太明确,而以太网/WIFI技术简单-只负责传输,通用-不分主从,使得它占有优势,到此为止,我还没有说红外技术,事实上,它如今只存在于遥控器等不多的场合,还记得10年前买一个诺基亚手机,向别人炫耀你的红外功能吗(我就炫耀过)?现如今,你的iPhone上支持红外吗?
看我文章多了的人,会认为我是一个一元化本原论者,但实际上正好相反,所以我才崇尚“做且仅做好一件事”。我并不看好重复实现的东西。在重复的实现上,我希望它们能大一统。然而现实是在向习惯和兼容性妥协,而主导习惯还有势力和实力,这就是现实,所以USB,蓝牙,红外,...以太网,WIFI,这些都会长期共存。理想中的情况当然是,设备上出厂自带一个WIFI接口就够了!
USB无线网卡的尴尬
我们看到过USB无线网卡(非3G卡),如果将WIFI模块当成一个设备的话,USB就纯粹成了一个连接器,那么是否可以说USB和WIFI不在一个层次呢?非也!这就是数据传输领域的分层封装原则,在该原则下,一个蓝牙帧可以封装在IP数据报中,同样的一个以太帧也可以封装在串口行规程中,同属于TCP/IP/以太网领域的,一个以太帧也可以封装在IP数据报里,主要看你怎么看待被封装的数据了。USB无线网卡的情况就是这种情况。
不在同一层次的USB和WIFI之间不存在竞争,相反它们是协作关系,这体现了分层的好处,底层作为一个接口只关注上层载荷的格式而不关注其内容,对于USB无线网卡来讲,同一个USB接口可以焊接一个TP-LINK的网卡,也可以焊接一个其它厂商的网卡。
后记:USB连接两台PC的问题
USB是主从模式的,一般意义上,PC被定义为主设备,提供5V电压,如果两边都是PC,由于供电线需要构成一个本地回路才能工作,这就可能烧毁主板,关键就是供电回路问题。我是怎么做到USB线联网呢?我是在淘宝上买了一根特殊的USB线,具体怎么实现的没有深究,无外乎接地反转之类的。
USB主从模式的初衷是为了将外设这类从设备连接到主机这种庞然大物主设备上,然而正如你看到的那样,目前的情况是,庞然大物已经越来越少,桌面PC被使用的越来越少,更多的是同样大小的小型设备,手机,平板,....好多年前,以太网的双绞线也有本地回路问题(烧不毁板子,只是脉冲无法发送和接收,双绞线没有单独的供电线,电压随着脉冲发生,因此为了构成回路,线的一端发送脉冲,另一端必须接收脉冲),因此那时规定,连接同种设备需要交叉线,即1-3,2-6线序对调(详见568A,568B标准),可是后来在PHY层实现了自动协商,不管交叉线还是直连线都可以用于任何支持自协商的网卡了。USB的问题在于,你加入了主从的约束,就少了通用性。实际上任何事情,加入一点约束,就会丧失一点通用性。