协议森林1——小喇叭开始广播:以太网与WiFi
“小喇叭開始廣播啦”,如果你知道這個(gè),你一定是老一輩的人。“小喇叭”是五十年代到八十年代的兒童廣播節(jié)目。在節(jié)目一開始,都會(huì)有一段這樣的播音:“小朋友,小喇叭開始廣播了!” 聽到這里,收音機(jī)前的小朋友就興奮起來,準(zhǔn)備好聽節(jié)目了:這一期的內(nèi)容是連接層的以太網(wǎng)和 WiFi。它們分別是最常見的有線和無線通信方式。
小喇叭開始廣播啦
幀的格式
在連接層,信息以幀(frame)為單位傳輸。幀像信封一樣將數(shù)據(jù)(payload)包裹起來,并注明收信地址和送信地址。連接層實(shí)現(xiàn)了“本地社區(qū)”的通信。我們先來看看以太網(wǎng)的幀。幀是一段有限的 0/1 序列。它可以分為頭部、數(shù)據(jù)(Payload)和尾部三部分:
幀按照上面的順序從頭到尾依次被發(fā)送/接收。其中,頭部和尾部就是我們所謂的信封,把真正的數(shù)據(jù)包裹在中間。盡管頭部和尾部并不是我們真正想要傳輸?shù)臄?shù)據(jù),但它們是完成通信所必須的。
頭部
幀的最初 7 個(gè) byte 被稱為序言(preamble)。它的每個(gè)字節(jié)(byte)都是 0xAA(這里是十六進(jìn)制,也就是二進(jìn)制的 10101010)。通常,我們都會(huì)預(yù)定好以一定的頻率發(fā)送 0/1 序列(比如每秒 10bit)。如果接收設(shè)備以其他頻率接收(比如每秒 5bit),那么就會(huì)錯(cuò)漏掉應(yīng)該接收的 0/1 信息。但是,由于網(wǎng)卡的不同,發(fā)送方和接收方即使預(yù)訂的頻率相同,兩者也可能由于物理原因發(fā)生偏差。這就好像兩個(gè)人約好的 10 點(diǎn)見,結(jié)果一個(gè)人表快,一個(gè)人表慢一樣。序言是為了讓接收設(shè)備調(diào)整接收頻率,以便與發(fā)送設(shè)備的頻率一致,這個(gè)過程就叫做時(shí)鐘復(fù)原(recover the clock)。這就像在收聽廣播之前,調(diào)整轉(zhuǎn)鈕,直到聲音清晰。網(wǎng)卡會(huì)在接收序言的過程中不斷微調(diào)自己的接收頻率,直到自己“聽到”是…1010…。
時(shí)鐘調(diào)整好之后,我們等待幀的起始信號(hào)(SFD, start frame delimiter)。SFD 是固定的值 0xAB,也就是“10101011”這個(gè)二進(jìn)制序列。這個(gè) 0xAB 就好像“小喇叭開始廣播啦”一樣,提醒我們好節(jié)目就要上演了。幀的格式是固定的,每個(gè)部分有固定的字節(jié)數(shù)。所以一旦設(shè)備識(shí)別出起始信號(hào)后,就能分辨出數(shù)據(jù)的各個(gè)部分。
緊隨 SFD 之后的是 6 個(gè)字節(jié)的目的地(DST, destination)和 6 個(gè)字節(jié)的發(fā)出地(SRC, source)。這就像是信封上寫的目的地和發(fā)出地。這里寫在信封上的是本地人描述的地址,其實(shí)也就是 MAC 地址。每個(gè)物理設(shè)備都有一個(gè) MAC 地址,作為設(shè)備的序號(hào)。按照以太網(wǎng)的工作方式,MAC 地址只能在同一個(gè)以太網(wǎng)中被識(shí)別。 所以一個(gè)幀也只能在局域網(wǎng)內(nèi)傳輸。
頭部的最后一個(gè)區(qū)域是類型(Type),用以說明數(shù)據(jù)部分的類型。由于數(shù)據(jù)部分通常還包含有更高層的協(xié)議,所以所謂的類型實(shí)際上是更高層協(xié)議的種類,比如 0x0800 為 IPv4,0x0806 為 ARP。如果接收設(shè)備能理解該類型的網(wǎng)絡(luò)協(xié)議,可以進(jìn)一步解讀數(shù)據(jù)部分內(nèi)容。
數(shù)據(jù)
正如我剛才提到的,數(shù)據(jù)一般包含有符合更高層協(xié)議的數(shù)據(jù),比如 IP 包。連接層協(xié)議本身并不在乎數(shù)據(jù)是什么,它只負(fù)責(zé)傳輸。注意,數(shù)據(jù)尾部可能填充有一串 0(PAD 區(qū)域)。原因是數(shù)據(jù)需要超過一定的最小長度。
尾部
跟隨在數(shù)據(jù)之后的是校驗(yàn)序列(FCS, Frame Check Sequence)。校驗(yàn)序列是為了檢驗(yàn)數(shù)據(jù)的傳輸是否發(fā)生錯(cuò)誤。在物理層,我們通過一些物理信號(hào)來表示 0/1 序列,比如高壓/低壓,高頻率/低頻率等。但這些物理信號(hào)可能在傳輸過程中受到影響,以致于接收到的二進(jìn)制序列和發(fā)出的不一樣。如何來發(fā)現(xiàn)我們的數(shù)據(jù)是正確的呢?
一個(gè)方法是將數(shù)據(jù)發(fā)送兩遍,然后對(duì)比一下是否一樣。理論上,兩次犯相同錯(cuò)誤的幾率很低。如果兩次的數(shù)據(jù)不一樣,那就是在傳輸過程中出錯(cuò)了。但發(fā)送兩遍的方法降低了網(wǎng)絡(luò)的效率。而且逐一對(duì)比序列的每個(gè)字節(jié)的話,也需要耗費(fèi)不少時(shí)間。以太網(wǎng)采用了更加聰明的方法。幀的 FCS 區(qū)域利用了 CRC(Cyclic Redundancy Check)算法。在傳輸之前,發(fā)送方基于要傳輸?shù)臄?shù)據(jù)生成一個(gè)對(duì)應(yīng)的校驗(yàn)碼。接收方收到數(shù)據(jù)后,對(duì)比數(shù)據(jù)和校驗(yàn)碼,看它們是否還符合對(duì)應(yīng)關(guān)系,就能確定數(shù)據(jù)傳輸中是否發(fā)生錯(cuò)誤。
簡單的說,這就好像是一家飯店的老板雇傭了一個(gè)收銀員。老板擔(dān)心收銀員黑錢。可每天營業(yè)額很大,老板即使坐在旁邊看,也不能用記住收到的總數(shù)。所以他采取了一個(gè)聰明的辦法:只記住收到錢的最后一位,比如收到 19 元,老板記住 9。當(dāng)有新的進(jìn)賬,比如 13,尾數(shù)為 3,他就將新的尾數(shù)和舊的尾數(shù)相加,再記住和的尾數(shù)——也就是 2。當(dāng)收銀員交給老板錢的時(shí)候,老板只用看總額的最后一位是否和自己記的最后一位相同,就可以知道收銀員是否誠實(shí)了。如果說我們的數(shù)據(jù)是收銀的總額的話,我們的 FCS 就是老板記錄的尾數(shù)。如果兩者不相符,我們就知道數(shù)據(jù)在傳輸?shù)倪^程中出現(xiàn)錯(cuò)誤,不能使用。
FCS 在盯著
上面的比喻實(shí)際上是用營業(yè)總額不斷的除以 10,獲得最終的尾數(shù)。CRC 算法也相類似。n 位 CRC 算法取一個(gè) n bit 的因子,比如下面的 1011。數(shù)據(jù)序列結(jié)尾增加 n-1 個(gè) 0。因子與數(shù)據(jù)序列的不斷進(jìn)行 XOR 運(yùn)算,直到得到 n-1 位的余數(shù),也就是 100。該余數(shù)各位取反(011),然后存儲(chǔ)在 FCS 的位置。
上面例子用的是 4 位 CRC。在 Ethernet 中使用的因子為 32 位的,以達(dá)到更好的檢測(cè)效果。
以太網(wǎng)的集線器和交換器
上面我們都在圍繞著單一的幀來說明它的格式。我們現(xiàn)在要看看以太網(wǎng)是如何在多設(shè)備的網(wǎng)絡(luò)中工作的。以太網(wǎng)是現(xiàn)在最普遍的構(gòu)成局域網(wǎng)的方式。我們經(jīng)常用一根網(wǎng)線把設(shè)備接入局域網(wǎng)。以太網(wǎng)使用集線器或者交換器將幀從發(fā)出地傳送到目的地。一臺(tái)集線器或交換器上有多個(gè)端口,每個(gè)端口都可以用網(wǎng)線連接一臺(tái)計(jì)算機(jī)或其他設(shè)備。集線器和交換器是相互競(jìng)爭(zhēng)的設(shè)備。設(shè)計(jì)更加合理的交換器正在取代老一代的集線器,成為以太網(wǎng)的主流樞紐工具。
我們先來看比較古老的集線器。集線器上連有多個(gè)設(shè)備,每個(gè)設(shè)備都可以向集線器發(fā)送信息。想要發(fā)起通信的設(shè)備將數(shù)據(jù)封裝到幀中,再發(fā)送往集線器。集線器自己比較“懶”,只是簡單的把幀轉(zhuǎn)發(fā)到所有其他的端口。每臺(tái)計(jì)算機(jī)檢查自己的 MAC 地址是不是符合 DST。如果是,則處理幀。如果不是,則保持沉默。總的來說,集線器像一個(gè)失物招領(lǐng)的電臺(tái)。所有人都能聽到電臺(tái)的播報(bào),然后失主可以認(rèn)領(lǐng)。
集線器有明顯的缺陷:
交換器能克服集線器的缺陷。交換器也連接有多個(gè)設(shè)備。但集線器懶到只是隨手轉(zhuǎn)發(fā),交換器卻勤快的記錄下各個(gè)設(shè)備的 MAC 地址。當(dāng)幀發(fā)送到交換器時(shí),交換器會(huì)檢查幀的目的地,然后將幀只發(fā)送到對(duì)應(yīng)端口。此外,交換器允許多路同時(shí)通信。總之,交換器的工作方式更加主動(dòng),也更加聰明。由于交換器的優(yōu)越性,交換器基本上取代了集線器。但比較老的以太網(wǎng)還有可能在使用集線器。
WiFi
如今我們?nèi)ヒ粋€(gè)餐廳,或者去一個(gè)咖啡館,總會(huì)習(xí)慣性的連接上本地的 WiFi。畢竟,通訊公司所提供的 3G/4G 無線通信收費(fèi)太高,大量使用可能意味著天價(jià)賬單。WiFi 構(gòu)成的無線局域網(wǎng)能連接入有線網(wǎng)絡(luò),允許我們能以廉價(jià)的方式上網(wǎng)。WiFi 也因此成為使用最廣泛的無線通信方式。
WiFi 的最終實(shí)現(xiàn)是由多種技術(shù)合成的。這其中包含了好萊塢艷星海蒂·拉瑪?shù)奶l擴(kuò)頻技術(shù)。但真正成功專利的,是隸屬于澳大利亞政府的研究機(jī)構(gòu) CSIRO。嚴(yán)格的說,CSIRO 只是把已有的多項(xiàng)技術(shù)整合調(diào)優(yōu),最終提出最佳的通信方案。CSIRO 注冊(cè)專利的時(shí)間,甚至晚于 IEEE 出臺(tái)的關(guān)于無線網(wǎng)絡(luò)通信的 802.11 標(biāo)準(zhǔn)。無論如何,CSIRO 的技術(shù)被后來的 802.11a 采納。時(shí)至今日,CSIRO 依然會(huì)向每臺(tái) WiFi 設(shè)備收取專利費(fèi)。

海蒂·拉瑪
WiFi 的工作方式與集線器連接下的以太網(wǎng)類似。一個(gè) WiFi 設(shè)備會(huì)向所有的 WiFi 設(shè)備發(fā)送幀,其它的 WiFi 設(shè)備檢查自己是否是目的地。我們已經(jīng)分析了這種通信方式的缺陷,特別是信息安全性的問題。由于每一臺(tái)設(shè)備都能接受到幀,所以 WiFi 傳輸?shù)男畔⒑苋菀妆桓`聽。但 WiFi 不能像以太網(wǎng)一樣更新?lián)Q代成交換器的工作方式。畢竟,WiFi 采取無線電信號(hào),難以像交換器一樣定向發(fā)送。WiFi 的安全性最終要通過加密的方法來彌補(bǔ)。
早期的有線等效加密(WEP)加密方法非常脆弱。美國聯(lián)邦調(diào)查局為了提高公眾安全意識(shí),曾在電視上示范如何破解 WEP 密碼。結(jié)果短短幾分鐘,WEP 密碼就被攻破。后來的 WPA (WiFi Protected Access)和 WPA2 (第二代的 WPA)加密一步步的提高了加密的安全性。但黑客依然有辦法攻破這些加密保護(hù),例如通過 Wi-Fi 保護(hù)設(shè)置(WPS)。WiFi 通信的安全性依然是現(xiàn)在計(jì)算機(jī)安全的一個(gè)熱點(diǎn)問題。
總結(jié)
我們深入了連接層協(xié)議的一些細(xì)節(jié)。連接層是物理與邏輯的接口,它的設(shè)計(jì)兼顧了物理需求(比如時(shí)鐘復(fù)原,CRC)和邏輯需求(比如地址、數(shù)據(jù))。由于連接層處于網(wǎng)絡(luò)邏輯的底層,有許多基于連接層的攻擊手法,這需要我們對(duì)連接層的工作方式有一定的了解,以設(shè)計(jì)出更好的網(wǎng)絡(luò)安全策略。
總結(jié)
以上是生活随笔為你收集整理的协议森林1——小喇叭开始广播:以太网与WiFi的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库持续_MySql数据库-
- 下一篇: 华为交换机同一vlan不同网段的通信