天天看點

USB,藍牙,以太網,還是WIFI?

本文我們來關注一下硬體接口。

在本文中,我沒有嚴格按照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無線網卡(非3G卡),如果将WIFI子產品當成一個裝置的話,USB就純粹成了一個連接配接器,那麼是否可以說USB和WIFI不在一個層次呢?非也!這就是資料傳輸領域的分層封裝原則,在該原則下,一個藍牙幀可以封裝在IP資料報中,同樣的一個以太幀也可以封裝在序列槽行規程中,同屬于TCP/IP/以太網領域的,一個以太幀也可以封裝在IP資料報裡,主要看你怎麼看待被封裝的資料了。USB無線網卡的情況就是這種情況。

      不在同一層次的USB和WIFI之間不存在競争,相反它們是協作關系,這展現了分層的好處,底層作為一個接口隻關注上層載荷的格式而不關注其内容,對于USB無線網卡來講,同一個USB接口可以焊接一個TP-LINK的網卡,也可以焊接一個其它廠商的網卡。

USB是主從模式的,一般意義上,PC被定義為主裝置,提供5V電壓,如果兩邊都是PC,由于供電線需要構成一個本地回路才能工作,這就可能燒毀主機闆,關鍵就是供電回路問題。我是怎麼做到USB線聯網呢?我是在淘寶上買了一根特殊的USB線,具體怎麼實作的沒有深究,無外乎接地反轉之類的。

      USB主從模式的初衷是為了将外設這類從裝置連接配接到主機這種龐然大物主裝置上,然而正如你看到的那樣,目前的情況是,龐然大物已經越來越少,桌面PC被使用的越來越少,更多的是同樣大小的小型裝置,手機,平闆,....好多年前,以太網的雙絞線也有本地回路問題(燒不毀闆子,隻是脈沖無法發送和接收,雙絞線沒有單獨的供電線,電壓随着脈沖發生,是以為了構成回路,線的一端發送脈沖,另一端必須接收脈沖),是以那時規定,連接配接同種裝置需要交叉線,即1-3,2-6順序對調(詳見568A,568B标準),可是後來在PHY層實作了自動協商,不管交叉線還是直連線都可以用于任何支援自協商的網卡了。USB的問題在于,你加入了主從的限制,就少了通用性。實際上任何事情,加入一點限制,就會喪失一點通用性。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1394533

繼續閱讀