在本文中,我沒有嚴格按照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的問題在于,你加入了主從的約束,就少了通用性。實際上任何事情,加入一點約束,就會喪失一點通用性。