? ? 今天我在QQ上和一位小黃鴨問(wèn)好絮蒿,鴨兄也十分友好的對(duì)我進(jìn)行了回復(fù)摘能。這讓我不禁好奇,我在成都敲打下的“hello”躏敢,是如何通過(guò)我們現(xiàn)在的無(wú)線網(wǎng)絡(luò)傳輸?shù)竭h(yuǎn)在河南度♂假的鴨兄那邊呢商佛?對(duì)此筆者作了一系列的調(diào)查喉钢,最終本文從字符串“hello”的角度,對(duì)這一問(wèn)題進(jìn)行闡述良姆。
? ? 本文擬從以下幾個(gè)方面解答該問(wèn)題:
一肠虽、hello去哪了
二、IEEE 802協(xié)議體系
三玛追、無(wú)線局域網(wǎng)協(xié)議802.11
四税课、總結(jié)
? ? 相信有人會(huì)問(wèn)闲延,802.11協(xié)議只是很多通信協(xié)議的一種。并且互聯(lián)網(wǎng)協(xié)議還有很多韩玩,比如TCP/IP的協(xié)議慨代,作者為什么不說(shuō)呢?那是因?yàn)椋?/p>
一啸如、hello去哪了
1.1 編碼方式
? ??在電腦眼里,任何類(lèi)型的數(shù)據(jù)氮惯,都是01的二進(jìn)制數(shù)字叮雳。大小寫(xiě)英文字符、阿拉伯?dāng)?shù)字以及一些常? 用的標(biāo)點(diǎn)妇汗、運(yùn)算符號(hào)等都使用以8位二進(jìn)制數(shù)為基礎(chǔ)的ASCII碼表示帘不。以“hello”為例,它總共有5個(gè)字母杨箭,則需要40位二進(jìn)制數(shù)字:
01101000 01100101 01101100 01101100 01101111
?? ?勤勞的作者還從網(wǎng)上截了ASCII碼的圖寞焙。值得注意的是,上表中01二進(jìn)制用16進(jìn)制來(lái)表示了互婿。這是一個(gè)很討巧的做法捣郊,因?yàn)?位十六進(jìn)制的數(shù)(0~9,A,B,C,D,E,F)恰好可以使用4位二進(jìn)制表達(dá)慈参,極大的減少了表示的繁瑣程度呛牲。
? ? 另外,為了能夠表示其他比如中國(guó)驮配,日本的文字和“♂”符號(hào)娘扩,機(jī)智的美國(guó)人提出了一套稱(chēng)為Unicode的標(biāo)準(zhǔn)方案,使用16位的二進(jìn)制數(shù)字壮锻,囊括了世界上幾乎所有的文字琐旁。我們常見(jiàn)的utf-8編碼模式,就是來(lái)源于此猜绣。
? ? 計(jì)算機(jī)以一個(gè)8位二進(jìn)制數(shù)為單位計(jì)算內(nèi)存灰殴,單位的名稱(chēng)為“Byte”。事實(shí)上掰邢,“hello”字符串只是一個(gè)體量很小的數(shù)據(jù)验懊。“hello”只占據(jù)5 Byte的數(shù)據(jù)尸变,而我與小黃鴨的對(duì)話截圖义图,占據(jù)8045 Byte的內(nèi)存。B站上的視頻“更衣室的對(duì)決”召烂,有32.9MB即32900000 Byte的內(nèi)存碱工。這些數(shù)據(jù),或大或小,都是在遵守了互聯(lián)網(wǎng)協(xié)議的情況下怕篷,通過(guò)互聯(lián)網(wǎng)历筝,進(jìn)入我的手機(jī)。
1.2 數(shù)據(jù)的封裝
? ? 光光編碼一段“hello”是無(wú)法發(fā)送給小黃鴨的廊谓。電腦還需要知道發(fā)送者(我的QQ賬號(hào))梳猪,發(fā)送時(shí)間,和發(fā)送對(duì)象(小黃鴨的QQ賬號(hào))等蒸痹。封裝好之后的數(shù)據(jù)hello2.0(這么說(shuō)是不嚴(yán)謹(jǐn)?shù)拇好郑欢也皇荙Q的程序員,只能瞎JB亂猜了)叠荠,便整裝待發(fā)匿沛,準(zhǔn)備發(fā)送到騰訊的服務(wù)器。同時(shí)QQ程序告訴操作系統(tǒng)榛鼎,需要發(fā)送hello2.0到騰訊服務(wù)器逃呼。
? ? 我電腦的操作系統(tǒng)立刻查詢(xún)自己所在的局域網(wǎng),找到路由器的ip地址者娱。然后在hello2.0數(shù)據(jù)上加入了自己的MAC地址抡笼,騰訊的地址以及其他一些控制信息網(wǎng)絡(luò)信息,將hello3.0發(fā)送給路由器黄鳍。路由器經(jīng)過(guò)網(wǎng)關(guān)蔫缸,將hello3.0發(fā)送到騰訊服務(wù)器。
? ? 由于我在登錄QQ的時(shí)候际起,已經(jīng)實(shí)現(xiàn)ping過(guò)騰訊的服務(wù)器拾碌,知道到達(dá)騰訊服務(wù)器的路由路線是怎么樣的,所以按照這個(gè)路線街望,我的hello3.0就可以直接發(fā)送到騰訊服務(wù)器了校翔。騰訊服務(wù)器經(jīng)過(guò)重重解碼,發(fā)現(xiàn)這條消息的內(nèi)容是我對(duì)小黃鴨說(shuō)“hello”灾前,于是又將這個(gè)消息發(fā)送給小黃鴨防症。
?? ?騰訊的QQ服務(wù)器眾多,上圖只是選擇一個(gè)隨便百度到的地址219.133.49.171哎甲。感興趣的讀者可以使用管理員權(quán)限打開(kāi)cmd窗口蔫敲,輸入tracert 219.133.49.171,看看運(yùn)行結(jié)果和我的是不是一樣的炭玫。
?? ?第一列表示路由的次數(shù)奈嘿,在每次路由時(shí),都會(huì)發(fā)出3個(gè)TTL包吞加,所以第二裙犹、三尽狠、四列表示的都是到達(dá)這個(gè)路由的時(shí)間,3個(gè)時(shí)間會(huì)由于網(wǎng)絡(luò)波動(dòng)而有一定偏差叶圃,但是大體上量級(jí)不變袄膏。第五列表示到達(dá)的ip地址,其中掺冠,192.168.0.1沉馆,192.168.1.1是本地局域網(wǎng)的地址,筆者猜測(cè)192.168.0.1是路由器接收筆記本電腦信號(hào)的地址德崭,192.168.1.1是局域網(wǎng)內(nèi)另外一個(gè)設(shè)備(或者網(wǎng)關(guān))斥黑。100.64.0.1是神秘的保留地址。 182.150.19.165是四川省成都市的地址接癌,171.208.199.81是四川省遂寧市的,202.97.29.41是北京市的扣讼,119.147.220.78缺猛,14.17.0.18, 14.17.2.138是廣東省深圳市的地址椭符,219.133.49.171是廣東省深圳市寶安區(qū)的荔燎。
? ? 綜上所述,我發(fā)送的hello消息销钝,從成都出發(fā)有咨,經(jīng)過(guò)遂寧,北京蒸健,最后到達(dá)深圳座享,直至深圳市寶安區(qū)的騰訊服務(wù)器,走的還是挺遠(yuǎn)的吼似忧。
1.3 網(wǎng)絡(luò)模型
? ? 上述發(fā)送hello的過(guò)程渣叛,在計(jì)算機(jī)工程中,可以使用OSI七層模型表示(TCP/IP使用的是五層模型盯捌,實(shí)際上它將OSI最上面3層合并成了一層名為“應(yīng)用層”)淳衙,如下圖所示。
思考題:這些由大寫(xiě)英文表示的協(xié)議分別有什么作用?? ?
? ? 在應(yīng)用層中饺著,我登錄QQ使用了TCP和HTTP協(xié)議箫攀。在表示層中我對(duì)hello字符串進(jìn)行編碼封裝形成hello2.0。接著操作系統(tǒng)會(huì)在會(huì)話層激活發(fā)送函數(shù)幼衰,同時(shí)生成hello3.0靴跛。然后在傳輸層,我的hello3.0通過(guò)UDP協(xié)議(高貴的QQ會(huì)員則使用了TCP協(xié)議)將數(shù)據(jù)發(fā)送出去渡嚣。值得一提的是汤求,我們的數(shù)據(jù)要從筆記本電腦先經(jīng)過(guò)鏈路層和物理層通過(guò)無(wú)線電波傳送至路由器俏险,然后再經(jīng)過(guò)數(shù)據(jù)鏈路層到達(dá)位于網(wǎng)絡(luò)層的路由器,接著才能在網(wǎng)絡(luò)中遨游扬绪。
? 再來(lái)回顧先前我給小黃鴨發(fā)送消息的過(guò)程竖独,首先我在應(yīng)用層封裝了hello字符串,加上了發(fā)送者和接收者挤牛。接下來(lái)在傳輸層我加上了TCP協(xié)議的內(nèi)容莹痢,網(wǎng)絡(luò)層我加上了IP協(xié)議的內(nèi)容,接下來(lái)我在數(shù)據(jù)鏈路層加上了以太網(wǎng)的內(nèi)容墓赴。最終我的hello字符串穿上了一層又一層的馬甲竞膳,開(kāi)始在互聯(lián)網(wǎng)上流通。
? ? 值得一提的是诫硕,以太網(wǎng)作用于指有線的通信坦辟,即通過(guò)網(wǎng)線或者光纖傳播。然而章办,很多情況下筆記本電腦都是通過(guò)WiFi連接到路由器锉走,而WiFi使用的并非以太網(wǎng)協(xié)議,而是802.11協(xié)議藕届。
二挪蹭、IEEE 802協(xié)議體系
? ? 首先有一個(gè)問(wèn)題,為什么要協(xié)議休偶?為什么不可以直接把一個(gè)字符串發(fā)出去梁厉,卻非要這么繁瑣的加上這么多首部?計(jì)算機(jī)的協(xié)議可以和人類(lèi)社會(huì)中的法律作類(lèi)比踏兜,兩者的目標(biāo)都是為了讓整個(gè)系統(tǒng)有序而高效的運(yùn)行词顾。如果沒(méi)有TCP協(xié)議,就無(wú)法確認(rèn)數(shù)據(jù)被正確的送達(dá)碱妆,如果沒(méi)有IP協(xié)議计技,數(shù)據(jù)就無(wú)法知道即將去哪里,如果沒(méi)有以太網(wǎng)協(xié)議山橄,多個(gè)設(shè)備的數(shù)據(jù)傳輸可能就會(huì)發(fā)生沖突垮媒。換句話說(shuō),協(xié)議不僅不是來(lái)阻礙系統(tǒng)的航棱,恰恰相反睡雇,協(xié)議服務(wù)于系統(tǒng),促進(jìn)系統(tǒng)的健康饮醇,有效它抱,高效,穩(wěn)定的運(yùn)行的朴艰。
? ? 802系列協(xié)議观蓄,專(zhuān)門(mén)用于局域網(wǎng)標(biāo)準(zhǔn)混移。著名的802.11,802.3等協(xié)議侮穿,均出于此歌径。下圖是該協(xié)議族的主要分布。802.1負(fù)責(zé)定義局域網(wǎng)的體系亲茅,結(jié)構(gòu)回铛。802.2負(fù)責(zé)定義邏輯鏈路子層(LLC)。802.3是以太網(wǎng)介質(zhì)訪問(wèn)控制協(xié)議克锣。802.5規(guī)定了令牌環(huán)網(wǎng)的介質(zhì)訪問(wèn)控制規(guī)范茵肃。802.11規(guī)定了無(wú)線局域網(wǎng)的介質(zhì)訪問(wèn)控制協(xié)議及物理層技術(shù)規(guī)范。
? ? 和其他協(xié)議一樣袭祟, 正是由802協(xié)議族的一系列的規(guī)定验残,我們的網(wǎng)絡(luò)世界和通信世界才變得有序,高效巾乳。每個(gè)人才得以高速的訪問(wèn)網(wǎng)絡(luò)資源而不發(fā)生沖突您没。
三、無(wú)線局域網(wǎng)協(xié)議802.11
IEEE協(xié)會(huì)于1997年推出第一個(gè)版本的802.11協(xié)議想鹰。稍有無(wú)線電基礎(chǔ)的人都知道紊婉,電磁波有不同的頻率药版,同時(shí)在通信領(lǐng)域有不同的調(diào)制方式辑舷,單一的協(xié)議無(wú)法覆蓋所有的頻段和所有的調(diào)制方式。同時(shí)通信速率的大小與通信質(zhì)量槽片,硬件設(shè)施等是一個(gè)權(quán)衡何缓,所以于是隨著技術(shù)的進(jìn)步和硬件設(shè)備的不斷發(fā)展,IEEE之后又陸續(xù)推出了802.11a还栓,802.11b等一系列協(xié)議碌廓,規(guī)定了通信速率,適用于不同的頻段和調(diào)制方式等剩盒。
? 這里有必要澄清一下WiFi與802.11協(xié)議的關(guān)系谷婆。1999年工業(yè)界成立了WiFi聯(lián)盟,致力于解決符合802.11標(biāo)準(zhǔn)產(chǎn)品的生產(chǎn)和維護(hù)問(wèn)題辽聊。從這個(gè)角度上講纪挎,WiFi是一個(gè)組織,而不是一個(gè)信號(hào)跟匆。自成立以后异袄,WiFi組織制定了一系列的802.11標(biāo)準(zhǔn),例如802.11g玛臂,802.11e烤蜕,802.11f封孙,802.11n等。我們?nèi)粘J褂玫穆酚善饕埠梅碛謾C(jī)上的“WiFi”信號(hào)也好房蝉,都只是是遵循了802.11協(xié)議族的電磁波信號(hào)而已。
3.1 802.11協(xié)議特色
? ? 如下圖所示避诽,hello字符串從作為終端的筆記本電腦傳送到路由器盏浇。由于筆記本電腦和路由器之間沒(méi)有網(wǎng)線連接,所以原本的以太網(wǎng)協(xié)議802.3無(wú)法使用蚀瘸,只能使用802.11的無(wú)線網(wǎng)協(xié)議狡蝶。由于有線通信和無(wú)線通信的區(qū)別,相比于以太網(wǎng)贮勃,802.11協(xié)議有如下特征贪惹。
?沖突檢測(cè) CSMA/CA
?? ??? ?? ? 在以太網(wǎng)協(xié)議中,沖突檢測(cè)就已經(jīng)存在了寂嘉。其名稱(chēng)為CSMA/CD(Carrier Sense Multiple Access/Collision Detection)奏瞬,它的作用是為了防止有線通信中的信號(hào)沖突;在無(wú)線情況下泉孩,沖突的檢測(cè)存在“Near/Far”現(xiàn)象硼端。這是由于要檢測(cè)沖突,設(shè)備必須能夠一邊接收數(shù)據(jù)信號(hào)寓搬,一邊傳輸數(shù)據(jù)信號(hào)珍昨,而這在無(wú)線系統(tǒng)中是辦不到的。于是802.11協(xié)議就對(duì)CSMA/DA作了一些調(diào)整句喷,采用了新的協(xié)議CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance)或者DCF(Distributed Coordination Function)镣典。
?? ??? ?? ? 首先需要解釋一下為什么會(huì)沖突。信息想要完整的從一端傳達(dá)到另一端唾琼,需要信號(hào)有良好的信噪比兄春。通常信噪比要保證信息的功率是噪聲的10倍以上(實(shí)際的工程中信噪比使用db作為單位)。假設(shè)我和小黃鴨都想把自己的信息(分別為hello和fa♂q)發(fā)送給小灰貓锡溯「嫌撸可是當(dāng)小灰貓想聽(tīng)明白我發(fā)送了什么時(shí),小黃鴨的信息就成了噪聲祭饭;當(dāng)小灰貓想聽(tīng)清小黃鴨說(shuō)了什么時(shí)芜茵,我的信息就成了噪聲。當(dāng)我和小黃鴨發(fā)送信號(hào)的功率相等時(shí)甜癞,則無(wú)論哪種情況夕晓,信噪比都是1。
?? ??? ?? ? CSMA/CD工作的基本原則是:發(fā)送數(shù)據(jù)前悠咱,先偵聽(tīng)信道是否空閑蒸辆,若空閑征炼,則立即發(fā)送數(shù)據(jù)。若信道忙碌躬贡,則等待一段時(shí)間至信道中的信息傳輸結(jié)束后再發(fā)送數(shù)據(jù)谆奥。若在上一段信息發(fā)送完畢后,同時(shí)有2個(gè)以上的節(jié)點(diǎn)提出發(fā)送請(qǐng)求拂玻,則判定為沖突酸些。若偵聽(tīng)到?jīng)_突,則立即停止發(fā)送數(shù)據(jù)檐蚜,等待一段隨機(jī)時(shí)間魄懂,再重新嘗試。當(dāng)重新嘗試超過(guò)了一定的次數(shù)后闯第,該節(jié)點(diǎn)就會(huì)放棄發(fā)送數(shù)據(jù)市栗。
?? ??? ?? ? 總的原則是:先聽(tīng)后發(fā),邊發(fā)邊聽(tīng)咳短,沖突停發(fā)填帽,隨機(jī)延遲后重新發(fā)。
?? ??? ?? ? 如上圖所示咙好,在T1時(shí)刻篡腌,我率先發(fā)送了hello。在T2時(shí)刻勾效,當(dāng)我還在發(fā)送hello時(shí)嘹悼,小黃鴨也想發(fā)信息,可是他檢測(cè)到了我正在發(fā)送hello葵第,所以他先等待绘迁,暫不發(fā)送合溺。T3時(shí)刻卒密,當(dāng)小黃鴨要發(fā)送消息時(shí),正巧有個(gè)小灰貓也想發(fā)送消息棠赛,則雙方都檢測(cè)出了沖突哮奇,于是都選擇暫不發(fā)送。等待一段隨機(jī)時(shí)間后睛约,比如像上圖那樣鼎俘,小黃鴨的等待時(shí)間正好小于小灰貓的等待時(shí)間,于是小黃鴨就可以先于小灰貓發(fā)送消息辩涝。
?? ??? ?? ? 可以發(fā)現(xiàn)贸伐,想要實(shí)現(xiàn)上述的功能,不論是我怔揩,小黃鴨捉邢,還是小灰貓脯丝,都不得不在發(fā)送時(shí)還具備偵聽(tīng)功能,而這在無(wú)線設(shè)備中是很難實(shí)現(xiàn)的伏伐。CSMA/CA使用了ACK(Acknowlege)信號(hào)來(lái)保證數(shù)據(jù)的有效傳輸宠进。同時(shí)在發(fā)送之前,默認(rèn)可能會(huì)和別的節(jié)點(diǎn)沖突藐翎,所以一開(kāi)始就增加一個(gè)隨機(jī)等待時(shí)間材蹬。
?? ??? ?? ? 如上圖所示,我想發(fā)送hello時(shí)吝镣,必須先等待一段時(shí)間堤器。小黃鴨收到hello消息后,會(huì)向我發(fā)送一個(gè)ACK信號(hào)以讓我確認(rèn)末贾,我已經(jīng)成功的發(fā)送了消息吼旧。但是,這一切的前提是小灰貓不說(shuō)話未舟。如果在小黃鴨接收我的消息時(shí)圈暗,小灰貓也給小黃鴨發(fā)送消息,那么小黃鴨就無(wú)法接收到我的hello消息裕膀,它也不會(huì)發(fā)送ACK給我员串。當(dāng)我在一定時(shí)間內(nèi)沒(méi)有接收到ACK消息后,我就會(huì)重新發(fā)送hello消息昼扛。
?? ??? ?? ? 不難發(fā)現(xiàn)寸齐,當(dāng)小灰貓非常頻繁的向小黃鴨發(fā)送消息時(shí),我發(fā)送消息的效率就會(huì)非常低抄谐。這是因?yàn)槊祓校覜](méi)有意識(shí)到還有一只小灰貓?jiān)诤托↑S鴨說(shuō)話。換句話說(shuō)蛹含,小灰貓對(duì)我而言是“隱藏”的毅厚,這就涉及到了“隱藏節(jié)點(diǎn)”的問(wèn)題(hidden node)。在802.11協(xié)議中浦箱,有一個(gè)專(zhuān)門(mén)的RTS/CTS選項(xiàng)(Ready To Send/Clear To Send)吸耿,用來(lái)處理這種問(wèn)題。
“隱藏結(jié)點(diǎn)”問(wèn)題
?? ??? ?? ? 如上圖所示酷窥,藍(lán)色的圈表示我的信號(hào)可以傳播的距離咽安,紅色的圈圈表示小黃鴨的信號(hào)可以傳播的距離。顯然蓬推,小黃鴨既可以接收我的信息妆棒,也可以接收小灰貓的信息。而我由于只能接收到小黃鴨的信息,所以小灰貓對(duì)我來(lái)說(shuō)是“隱藏”的糕珊。
?? ??? ?? ? 這時(shí)我向小黃鴨發(fā)送了RTS信號(hào)蛋铆,告訴小黃鴨,我要向他發(fā)送數(shù)據(jù)放接。小黃鴨接收到了我的RTS信號(hào)后刺啦,如果它同意了我的發(fā)送請(qǐng)求,就會(huì)向我發(fā)送一個(gè)CTS信號(hào)纠脾,告訴我可以發(fā)送數(shù)據(jù)玛瘸,同樣在通信范圍的小灰貓聽(tīng)見(jiàn)了這個(gè)CTS信號(hào),就會(huì)暫停向小黃鴨發(fā)送數(shù)據(jù)苟蹈。之后我就開(kāi)始發(fā)送數(shù)據(jù)糊渊。當(dāng)小黃鴨接收完我發(fā)送的數(shù)據(jù)之后,就會(huì)向先前一樣慧脱,向我發(fā)送一個(gè)ACK信號(hào)渺绒,告訴我我已經(jīng)成功的發(fā)送了數(shù)據(jù)。同時(shí)小灰貓接收到了ACK之后菱鸥,又獲得了發(fā)送數(shù)據(jù)的權(quán)力宗兼。
?? ??? ?? ? 為了方便起見(jiàn),在上圖中省略了等待一段隨機(jī)時(shí)間的表示氮采。RTS信號(hào)有點(diǎn)像把有用的信道“預(yù)約”了一樣殷绍。雖然RTS/CTS信號(hào)占據(jù)一定的發(fā)送間隔,但是由于它們相比于數(shù)據(jù)包來(lái)講鹊漠,封包很兄鞯健(RTS/CTS分別為20字節(jié)和14字節(jié),數(shù)據(jù)包可以到達(dá)2346個(gè)字節(jié))躯概,所以對(duì)整個(gè)通信系統(tǒng)的性能影響也不是很大登钥。
?? ??? ?? ? 值得注意的是,這和TCP/IP中的三次握手協(xié)議是兩碼事娶靡。
數(shù)據(jù)校驗(yàn)??
在802.11協(xié)議中牧牢,每一個(gè)在無(wú)線網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)包都被附加上了校驗(yàn)位以保證它在傳送的時(shí)候沒(méi)有出現(xiàn)錯(cuò)誤,這和以太網(wǎng)中通過(guò)上層TCP/IP協(xié)議來(lái)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)有所不同固蛾。
包分片/組裝
?? ??? ?? ? 包分片的功能允許大的數(shù)據(jù)包在傳送的時(shí)候被分成較小的部分分批傳送结执。這在網(wǎng)絡(luò)十分擁擠或者存在干擾的情況下(大數(shù)據(jù)包在這種情況下傳送非常容易遭到破壞)是一個(gè)非常有用的特性度陆。這項(xiàng)技術(shù)大大減少了許多情況下數(shù)據(jù)被重傳的概率艾凯,從而提高了無(wú)線網(wǎng)絡(luò)的整體性能。
?? ??? ?? ? MAC子層負(fù)責(zé)將收到的被分片的大數(shù)據(jù)包進(jìn)行重新組裝懂傀,對(duì)于上層協(xié)議來(lái)講趾诗,這個(gè)分片的過(guò)程是完全透明的。
3.2 數(shù)據(jù)的發(fā)送
?? ?當(dāng)走出網(wǎng)卡到達(dá)數(shù)據(jù)鏈路層時(shí),原本的以太網(wǎng)協(xié)議(通過(guò)數(shù)據(jù)包中的以太網(wǎng)首部和以太網(wǎng)尾部體現(xiàn))無(wú)法在無(wú)線傳輸時(shí)使用恃泪,所以會(huì)有專(zhuān)門(mén)的硬件設(shè)備將數(shù)據(jù)轉(zhuǎn)換成802.11格式郑兴。
? ? 如上圖所示,當(dāng)硬件設(shè)備接收到來(lái)自上層的以太網(wǎng)數(shù)據(jù)包時(shí)贝乎,會(huì)根據(jù)該數(shù)據(jù)包的內(nèi)容情连,為其加上802.11格式的協(xié)議頭。同時(shí)览效,由于需要依賴(lài)于邏輯鏈路層協(xié)議却舀,所以還要為其添加邏輯鏈路層協(xié)議頭SNAP。接著確定是否使用RTS/CTS以及是否需要加密和分片锤灿。最終挽拔,將數(shù)據(jù)包放入緩存內(nèi),等待驅(qū)動(dòng)程序去發(fā)送但校。
3.3 數(shù)據(jù)的接收
? ? 數(shù)據(jù)的接收是發(fā)送的逆向行為螃诅,如下圖所示。首先接收硬件會(huì)不斷統(tǒng)計(jì)環(huán)境中的無(wú)線信號(hào)強(qiáng)度状囱,從而判斷當(dāng)前無(wú)線網(wǎng)絡(luò)的質(zhì)量术裸。當(dāng)硬件接收到數(shù)據(jù)幀時(shí),會(huì)從802.11協(xié)議頭中提取該數(shù)據(jù)包的類(lèi)型亭枷,分片穗椅,加密等信息。同時(shí)將數(shù)據(jù)寫(xiě)入緩存奶栖,接收下一個(gè)數(shù)據(jù)包以便對(duì)分片的信息進(jìn)行重組匹表。最后,將完整的數(shù)據(jù)包封裝成以太網(wǎng)的形式交至上層網(wǎng)絡(luò)宣鄙。
四袍镀、總結(jié)
? ? 當(dāng)我們?cè)诰W(wǎng)路上和別人閑聊的背后,實(shí)際上涉及了大量的基礎(chǔ)設(shè)施和算法冻晤。一串文本苇羡,遠(yuǎn)遠(yuǎn)沒(méi)有一串文本這么簡(jiǎn)單。幸運(yùn)的是我們完全不需要考慮這么多細(xì)節(jié)鼻弧,辛勤勞動(dòng)的程序員哥哥們和工程師姐姐們(互文預(yù)警设江,這里不是說(shuō)程序員都是哥哥,工程師都是姐姐)早就為我們做好了搭橋鋪路的準(zhǔn)備工作攘轩。技術(shù)從來(lái)不是高高在上的皇帝叉存,它只是在我們看不到的地方默默服務(wù)于我們的生活。
?? ?網(wǎng)絡(luò)通信是一門(mén)內(nèi)容十分豐富的領(lǐng)域度帮。除開(kāi)那些涉及作者知識(shí)盲區(qū)的內(nèi)容歼捏,本文所描述的種種技術(shù)協(xié)議稿存,都僅僅停留在一個(gè)抽象的,簡(jiǎn)化的理論層面瞳秽。任何一部分內(nèi)容瓣履,展開(kāi)下去,都可以成為一個(gè)單獨(dú)的方向练俐,比如網(wǎng)卡的設(shè)計(jì)袖迎,路由器的設(shè)計(jì),數(shù)據(jù)鏈路層協(xié)議的代碼書(shū)寫(xiě)等腺晾。這些工作瓢棒,都不可能僅僅通過(guò)一個(gè)人的能力來(lái)完成的。
? ? 事實(shí)上丘喻,任何現(xiàn)代的工程項(xiàng)目或者系統(tǒng)脯宿,只要是稍具規(guī)模,都不可以以一人之力來(lái)完成泉粉。
? ? 那些號(hào)稱(chēng)以一人之力完成一個(gè)項(xiàng)目一個(gè)系統(tǒng)的连霉,不是大忽悠,就是民科嗡靡。