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

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