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