上一小節,我們通過一個虛構的協議,初步認識了數據鏈路層的工作原理。數據鏈路層主要解決由若干主機組成的本地網絡的通訊問題,尋址 和 復用分用 思想在其中發揮着關鍵作用。
數據鏈路層有一個非常重要的協議—— 以太網協議 。接下來,我們一起來揭開它的神秘面紗!
使用以太網協議進行通信的主機間,必須通過某種介質直接相連。通信介質可以是真實的物理設備,如網線、網卡等;也可以是通過虛擬化技術實現的虛擬設備。
以太網幀
在以太網中,數據通信的基本單位是 以太網幀 ( frame ),由 頭部 ( header )、數據 ( data )以及 校驗和 ( checksum )三部分構成:
請注意,這圖中的單位為字節,而不是比特了。
頭部
以太網幀頭部包含 3 個字段,依次是:
- 目的地址 ,長度是 6 字節,用於標記數據由哪台機器接收;
- 源地址 ,長度也是 6 字節,用於標記數據由哪台機器發送;
- 類型 ,長度是 2 字節,用於標記數據該如何處理,
0x0800
表示該幀數據是一個 IP 包(后續章節介紹)。
除了字段長度有所拓展之外,以太網幀跟我們虛構出來的協議如出一轍。對了,我們注意到一點小差異——在以太網幀中, 目的地址 放在最前面。 這其中有什么特殊考慮嗎?
確實是有的。接收方收到一個以太網幀后,最先處理 目的地址 字段。如果發現該幀不是發給自己的,后面的字段以及數據就不需要處理了。基礎網絡協議影響方方面面,設計時處理效率也是一個非常重要的考量。
數據
數據 可以是任何需要發送的信息,長度可變, 46 至 1500 字節均可。
上層協議報文,例如 IP 包,可以作為數據封裝在以太網幀中,在數據鏈路層中傳輸。因此,數據還有另一個更形象的稱謂,即 負荷 ( payload )。請自行腦補數據 搭載 在以太網幀這個交通工具上旅行的畫面。
校驗和
由於物理信號可能受到環境的干擾,網絡設備傳輸的比特流可能會出錯。一個以太網幀從一台主機傳輸到另一台主機的過程中,也可能因各種因素而出錯。那么當主機收到以太網幀時,如何確定它是完好無損的呢?
答案是: 校驗和 。我們可以用諸如 循環冗余校驗 ( CRC )算法,為以太網幀計算校驗和。如果以太網幀在傳輸的過程出錯,校驗和將發生改變。
注意到,以太網幀最后面有一個 4 字節字段,用於保存校驗和。發送者負責為每個以太網幀計算校驗和,並將計算結果填寫在校驗和字段中;接收者接到以太網幀后,重新計算校驗和並與校驗和字段進行對比;如果兩個校驗和不一致,說明該幀在傳輸時出錯了。
【小菜學網絡】系列文章首發於公眾號【小菜學編程】,敬請關注: