在本文中,我沒有嚴(yán)格按照IEEE 802來描述,比如我將以太網(wǎng)IEEE 802.3和IEEE 802.11混合在一起,并將后者看成前者的擴(kuò)展(也有人說802.11是802.3的殺手...),事實(shí)上我這么理解是有道理的,因?yàn)楫吘故?02.3 獨(dú)領(lǐng)風(fēng)騷得時候,才有了802.11的舞臺,而且二者現(xiàn)如今在一起非常融洽,不信看看自家的無線路由器。所以我把以太網(wǎng)(IEEE 802.3)和WIFI(IEEE 802.11)當(dāng)成了一家親。我之所以避開IEEE 802是因?yàn)樗且惶拙钟蚓W(wǎng)標(biāo)準(zhǔn),內(nèi)容特別多,并且太復(fù)雜,而且里面很多的技術(shù)都已經(jīng)被以太網(wǎng)淘汰了。本文的目的在于展望未來的互聯(lián)設(shè)備間通信的硬件技術(shù),并不局限于局域網(wǎng),所以我用了另一個標(biāo)準(zhǔn),不再嚴(yán)格遵循IEEE 802,相反,我將USB,藍(lán)牙,紅外,以太網(wǎng),WIFI放在一個鍋里翻炒。
歷史,現(xiàn)狀以及展望
還記得炫耀自己的手機(jī)有紅外功能的年代嗎?現(xiàn)在還在使用藍(lán)牙嗎?說到底,使用這些技術(shù)無非就是為了數(shù)據(jù)傳輸,曾經(jīng)我使用USB+Tap網(wǎng)卡技術(shù)線連接兩臺 PC機(jī)實(shí)現(xiàn)IP互通(自己不要試哦,不懂USB硬件原理會燒板子的),也曾經(jīng)聽說我剛工作時的師父在上世紀(jì)90年代用鼠標(biāo)線或者串口聯(lián)網(wǎng),那時好象還沒有 Tap虛擬網(wǎng)卡驅(qū)動,但是已經(jīng)有了虛擬網(wǎng)卡思想,因此自己寫一個驅(qū)動即可,不管是師父為了玩游戲折騰的,還是我為了消磨時間折騰的,都是為了解決“缺一根線”的問題,很多的聯(lián)網(wǎng)游戲或者別的什么聯(lián)網(wǎng)程序是不能修改的,它們使用socket接口編寫,使用標(biāo)準(zhǔn)的TCP/IP協(xié)議封裝數(shù)據(jù)包,但是老式的機(jī)器上可能沒有網(wǎng)卡,那么很顯然,有什么用什么,一般老式機(jī)器都有串口,有PS/2口,那么找來手冊,編寫一個串口,PS/2的IO庫,從虛擬網(wǎng)卡將包取出,調(diào)用庫的IO接口即可。缺一根線就補(bǔ)一根線,以太網(wǎng)卡快速成了PC機(jī)的標(biāo)配,不出所料,如今以太網(wǎng)和WIFI正在迅速替換所有的“為了數(shù)據(jù)通信而存在的”線纜!
數(shù)據(jù)的邏輯封裝和實(shí)際傳輸?shù)姆蛛x是根本,而邏輯封裝協(xié)議族已經(jīng)有了第一把交椅,那就是TCP/IP協(xié)議族,誰跟它配合的好,誰就能成為實(shí)際物理傳輸領(lǐng)域的王者。有了TCP/IP,以太網(wǎng)便可以成長在一個靠老大罩著的環(huán)境,言外之意就是不需要自己實(shí)現(xiàn)高層,只關(guān)注傳輸即可,因此也就造就了它簡單的特性,而這正是它最大的優(yōu)勢。
我?guī)缀蹩梢钥隙?,以太網(wǎng)的優(yōu)勢正在越來越明顯,而WIFI則完全且完美地適配到了以太網(wǎng)的下層,作為以太網(wǎng)的一個延伸,將其延展到了任何可以到達(dá)的地方,為什么以太網(wǎng)如此成功?正是因?yàn)樗暮唵涡裕鼛缀鯖]有自己的上層協(xié)議,而是直接接在了標(biāo)注TCP/IP下面的數(shù)據(jù)鏈路層,它完成且僅僅完成了數(shù)據(jù)傳輸?shù)墓δ?
藍(lán)牙除了底層的鏈路層以及PHY之外,獨(dú)立實(shí)現(xiàn)了自己的和TCP/IP并列的高層協(xié)議棧,卻僅僅適用于局域范圍,它和TCP/IP的功能在某部分是重合的,但是卻遠(yuǎn)遠(yuǎn)沒有TCP/IP成功,最終這種功能重復(fù)性的實(shí)現(xiàn)會將藍(lán)牙標(biāo)準(zhǔn)拖垮。藍(lán)牙技術(shù)極其復(fù)雜,是由愛立信牽頭,大量無線移動領(lǐng)域的巨頭參與的完全從無到有的無線傳輸解決方案,注意它是一個自成體系的獨(dú)立系統(tǒng),因此按照OSI模型,它應(yīng)該覆蓋所有的層,而實(shí)際上確實(shí)如此,然而藍(lán)牙技術(shù)的分層是模糊的,層與層之間的關(guān)系非常模糊,耦合性非常高,幀結(jié)構(gòu)以及行為及其復(fù)雜,在分層模型早已勝利的今天,它的缺陷也非常明顯。藍(lán)牙也不是不好,只是因?yàn)樗皇亲詈?,藍(lán)牙比較可取的一點(diǎn)就是配對機(jī)制以及自組織微型網(wǎng)絡(luò),要比802.11 WIFI靈活,不過WIFI也在持續(xù)改進(jìn)中。
USB技術(shù),在上世紀(jì)90年代外設(shè)爆發(fā)的年代出生,以即插即用優(yōu)勢著稱(事實(shí)上,以太網(wǎng)不也是即插即用的嗎?),對于ISA和PCI而言,支持USB的設(shè)備是個殺手,但是USB同時也繼承了很多ISA和PCI的特性,比如部署拓?fù)湟约敖巧ㄎ?,USB是主從模式的,為級聯(lián)星型拓?fù)?,本質(zhì)上說,它的目的和作用和ISA/PCI是一樣的,就是連接外設(shè),USB的優(yōu)勢只是更方便的連接外設(shè),它主要依靠四針接口的兩端兩根稍長的5V供電針,這樣就可以以下方式實(shí)現(xiàn)熱插拔:1.在插入前,電源先接通,數(shù)據(jù)線再接通,使軟件開始工作的時候電平穩(wěn)定;2.在拔下的時候,數(shù)據(jù)線先斷開,軟件先停止工作。
USB的目的并不是解決設(shè)備互聯(lián)問題,而是解決外設(shè)和主機(jī)的互聯(lián)問題,但是這明顯是前一個問題的子問題。設(shè)備互聯(lián)問題包含了外設(shè)與主機(jī)的互聯(lián),并且不再區(qū)別主從關(guān)系,豈不更好?USB在實(shí)現(xiàn)了它最初的初衷以后,便開始了其完美的優(yōu)化歷程,不管是USB還是以太網(wǎng),都沒有一開始便跳入那美麗的優(yōu)化陷阱,都是先有一個最簡單最基本的能用的版本,在體系穩(wěn)定后才開始提速,USB經(jīng)過了12Mpbs,240Mpbs/480Mpbs,5Gpbs/10Gpbs這些階段,以太網(wǎng)和它很像,經(jīng)歷了10Mpbs,100Mpbs,10000Mpbs這些階段,在速率提升上二者的加速度幾乎是一致的,在定位上,以太網(wǎng)一直以來都是主要用于TCP/IP網(wǎng)絡(luò),但是當(dāng)人們把外設(shè)和主機(jī)的連接也抽象成設(shè)備互聯(lián)的數(shù)據(jù)傳輸時,就會發(fā)現(xiàn)以太網(wǎng)也可以做到這些,最終以太網(wǎng)能否統(tǒng)一所有的互聯(lián)設(shè)備的數(shù)據(jù)傳輸我們不得而知,但是我對此持樂觀態(tài)度(后文詳解) 。當(dāng)然從觀感上,你不能說以太網(wǎng)線不能放在女孩子的包包里面從而拒絕它,你也不能指望用一根雙絞線連接鼠標(biāo)和鍵盤。實(shí)際上,雙絞只是網(wǎng)線的一個形式,旨在抵消干擾,在短距離內(nèi),也可以做得更美觀,另外,不是有WIFI么...
在我們看待以太網(wǎng)技術(shù)的時候(WIFI只是它的延伸),我們發(fā)現(xiàn)它的幀結(jié)構(gòu)及其簡單,并且它越來越多的將精力集中在硬件上,即PHY,在10M以太網(wǎng)的年代,CSMA/CD還是一項標(biāo)準(zhǔn)技術(shù),我們可以說它是一個協(xié)議,相信計算機(jī)系的同學(xué)們都知道這個,但是還有誰能完整表述它呢?事實(shí)上,隨著全雙工交換式以太網(wǎng)的出現(xiàn),CSMA/CD已經(jīng)不再需要,沖突域集中在了交換機(jī)內(nèi)部的背板矩陣,隨著更快速芯片和更大容量的存儲器的出現(xiàn),沖突域幾乎可以忽略不計了,即它消失了。如今千兆,萬兆以太網(wǎng)迅速蠶食著一切,正是因?yàn)樗薪鉀Q傳輸問題而絲毫不涉及高層的軟件協(xié)議棧,門檻極低,真的就是即插即用!當(dāng)我們需要實(shí)現(xiàn)一套藍(lán)牙系統(tǒng)的時候,你需要做很多東西,可是從來沒有人說過要實(shí)現(xiàn)一套以太網(wǎng)系統(tǒng),對于以太網(wǎng),需要的只是一塊網(wǎng)卡,然后自己做一根線,或者直接搞一個無線網(wǎng)卡和一個AP...對于以太網(wǎng),所有高層邏輯直接由TCP/IP負(fù)責(zé)。
以太網(wǎng)可以統(tǒng)一互聯(lián)設(shè)備間的設(shè)備傳輸?包括主機(jī)之間的互聯(lián)傳輸,鍵盤鼠標(biāo)和主機(jī)之間通信,數(shù)碼相機(jī)和手機(jī)之間通信,諸如此類?前文說了我對此持樂觀態(tài)度?,F(xiàn)如今已經(jīng)越來越多的數(shù)據(jù)傳輸技術(shù)使用TCP/IP了,比如Intel NetEffect的iWARP/RDMA技術(shù),我們看到,RDMA,是的,遠(yuǎn)程的內(nèi)存訪問,另外,IPMI技術(shù)。以太網(wǎng)技術(shù)作為TCP/IP使用最廣的鏈路層,甚至包含一部分PHY層,這是一個絕佳的機(jī)會。注意,此處我們不涉及一公里以遠(yuǎn)的地方,因?yàn)槟鞘沁\(yùn)營商的天下,它們有自己的技術(shù)并且不受我們控制,比如ATM,全光環(huán)等。以太網(wǎng)技術(shù)只專注傳輸,這可讓它適應(yīng)任何需要傳輸?shù)沫h(huán)境,除了TCP/IP之外,它可以和任意的高層協(xié)議接口。是的,以太網(wǎng)是 TCP/IP帶大的,但是并不是唯一屬于TCP/IP,以太網(wǎng)衍生出來的WIFI可以和鍵盤鼠標(biāo)協(xié)議接口,它的簡單保證了它的低功耗,低延遲,而我們知道,鍵盤鼠標(biāo)并不使用TCP/IP(當(dāng)然它們完全可以用),那么怎么辦呢?很簡單,鍵盤鼠標(biāo)的通用高層協(xié)議只要能解析WIFI幀里面的載荷內(nèi)容即可,正如 TCP/IP的IP層可以解析以太幀的載荷內(nèi)容為一個IP數(shù)據(jù)報一樣。如果使用藍(lán)牙鍵盤,就不得不設(shè)置一個完整藍(lán)牙棧在設(shè)備里面,由于藍(lán)牙棧包含的內(nèi)容太多,就顯得笨重,層之間的模糊且復(fù)雜的關(guān)系導(dǎo)致你甚至很難裁減掉不需要的內(nèi)容或者獨(dú)立優(yōu)化單獨(dú)的模塊,而WIFI只管傳輸,這樣就可以有一個輕量級的通用驅(qū)動在上面負(fù)責(zé)上層邏輯,它可以因設(shè)備的能力而有所不同。
現(xiàn)在,我們知道了藍(lán)牙技術(shù)太復(fù)雜,有一個全套的協(xié)議棧,USB技術(shù)定位太明確,而以太網(wǎng)/WIFI技術(shù)簡單-只負(fù)責(zé)傳輸,通用-不分主從,使得它占有優(yōu)勢,到此為止,我還沒有說紅外技術(shù),事實(shí)上,它如今只存在于遙控器等不多的場合,還記得10年前買一個諾基亞手機(jī),向別人炫耀你的紅外功能嗎(我就炫耀過)?現(xiàn)如今,你的iPhone上支持紅外嗎?
看我文章多了的人,會認(rèn)為我是一個一元化本原論者,但實(shí)際上正好相反,所以我才崇尚“做且僅做好一件事”。我并不看好重復(fù)實(shí)現(xiàn)的東西。在重復(fù)的實(shí)現(xiàn)上,我希望它們能大一統(tǒng)。然而現(xiàn)實(shí)是在向習(xí)慣和兼容性妥協(xié),而主導(dǎo)習(xí)慣還有勢力和實(shí)力,這就是現(xiàn)實(shí),所以USB,藍(lán)牙,紅外,...以太網(wǎng),WIFI,這些都會長期共存。理想中的情況當(dāng)然是,設(shè)備上出廠自帶一個WIFI接口就夠了!
USB無線網(wǎng)卡的尷尬
我們看到過USB無線網(wǎng)卡(非 3G卡),如果將WIFI模塊當(dāng)成一個設(shè)備的話,USB就純粹成了一個連接器,那么是否可以說USB和WIFI不在一個層次呢?非也!這就是數(shù)據(jù)傳輸領(lǐng)域的分層封裝原則,在該原則下,一個藍(lán)牙幀可以封裝在IP數(shù)據(jù)報中,同樣的一個以太幀也可以封裝在串口行規(guī)程中,同屬于TCP/IP/以太網(wǎng)領(lǐng)域的,一個以太幀也可以封裝在IP數(shù)據(jù)報里,主要看你怎么看待被封裝的數(shù)據(jù)了。USB無線網(wǎng)卡的情況就是這種情況。
不在同一層次的USB和WIFI之間不存在競爭,相反它們是協(xié)作關(guān)系,這體現(xiàn)了分層的好處,底層作為一個接口只關(guān)注上層載荷的格式而不關(guān)注其內(nèi)容,對于USB無線網(wǎng)卡來講,同一個USB接口可以焊接一個TP-LINK的網(wǎng)卡,也可以焊接一個其它廠商的網(wǎng)卡。
后記:USB連接兩臺PC的問題
USB 是主從模式的,一般意義上,PC被定義為主設(shè)備,提供5V電壓,如果兩邊都是PC,由于供電線需要構(gòu)成一個本地回路才能工作,這就可能燒毀主板,關(guān)鍵就是供電回路問題。我是怎么做到USB線聯(lián)網(wǎng)呢?我是在淘寶上買了一根特殊的USB線,具體怎么實(shí)現(xiàn)的沒有深究,無外乎接地反轉(zhuǎn)之類的。
USB主從模式的初衷是為了將外設(shè)這類從設(shè)備連接到主機(jī)這種龐然大物主設(shè)備上,然而正如你看到的那樣,目前的情況是,龐然大物已經(jīng)越來越少,桌面PC被使用的越來越少,更多的是同樣大小的小型設(shè)備,手機(jī),平板,....好多年前,以太網(wǎng)的雙絞線也有本地回路問題(燒不毀板子,只是脈沖無法發(fā)送和接收,雙絞線沒有單獨(dú)的供電線,電壓隨著脈沖發(fā)生,因此為了構(gòu)成回路,線的一端發(fā)送脈沖,另一端必須接收脈沖),因此那時規(guī)定,連接同種設(shè)備需要交叉線,即 1-3,2-6線序?qū)φ{(diào)(詳見568A,568B標(biāo)準(zhǔn)),可是后來在PHY層實(shí)現(xiàn)了自動協(xié)商,不管交叉線還是直連線都可以用于任何支持自協(xié)商的網(wǎng)卡了。 USB的問題在于,你加入了主從的約束,就少了通用性。實(shí)際上任何事情,加入一點(diǎn)約束,就會喪失一點(diǎn)通用性。