TCP/IP 系列文章
網(wǎng)絡(luò)基礎(chǔ)知識(一)
TCP/IP基礎(chǔ)知識(二)
物理層(三)
數(shù)據(jù)鏈路層(四)
IP 協(xié)議(五)
IP 協(xié)議相關(guān)技術(shù)(六)
TCP與UDP(七)
一、數(shù)據(jù)鏈路層
1.1 數(shù)據(jù)鏈路層概覽
數(shù)據(jù)鏈路層位于物理層和網(wǎng)絡(luò)層之間,其設(shè)計的初衷就是順利為網(wǎng)絡(luò)層提供數(shù)據(jù)服務(wù),不考慮可靠性,可靠性的部分由傳輸層的TCP協(xié)議實現(xiàn)。在數(shù)據(jù)鏈路層中,數(shù)據(jù)不再像物理層那樣以 0、1 序列的形式存在,它們被分割為一個一個的 “幀” ,然后再進行傳輸。

如上圖中,箭頭表示數(shù)據(jù)的具體流動方向和過程。其中路由器負責(zé)路由轉(zhuǎn)發(fā)(需要最高層到網(wǎng)絡(luò)層進行 IP 協(xié)議的分析)。
數(shù)據(jù)鏈路的信道主要有兩種模式:點對點信道和廣播信道。前者使用一對一的點對點通信方式;后者使用一對多的廣播通信方式,過程比較復(fù)雜。針對上圖我們也可以在邏輯上將整個通信過程看成是兩端數(shù)據(jù)鏈路層之間點對點的通信,如下圖。

1.2 數(shù)據(jù)鏈路和鏈路的區(qū)別
- 鏈路的是指從一個結(jié)點到相鄰結(jié)點的一段物理線路,其中沒有任何其他的交換結(jié)點。
- 數(shù)據(jù)鏈路則是指在物理線路上添加上控制數(shù)據(jù)傳輸?shù)膮f(xié)議的硬件和軟件。因此數(shù)據(jù)鏈路是比鏈路更為深刻的內(nèi)涵。
1.3 數(shù)據(jù)鏈路層具體過程
數(shù)據(jù)鏈路層的數(shù)據(jù)傳輸單元為“幀”,數(shù)據(jù)鏈路層的任務(wù)是將上層的數(shù)據(jù)封裝成幀交給物理層傳輸和分析物理層提交的數(shù)據(jù)幀,提取出上層數(shù)據(jù)交給網(wǎng)絡(luò)層。

具體過程如下:
- 1、信源的數(shù)據(jù)鏈路層把網(wǎng)絡(luò)層交下來的 IP 數(shù)據(jù)報添加首部和尾部封裝成幀。如何封裝成幀,請看 1.4 小節(jié)。
- 2、信源把封裝好的數(shù)據(jù)幀發(fā)送給信宿的數(shù)據(jù)鏈路層;
- 3、若新宿的數(shù)據(jù)鏈路層收到的幀無差錯,則從收到的幀中提取出IP數(shù)據(jù)報上交給網(wǎng)絡(luò)層,否則丟棄這個幀;
1.4 封裝成幀
數(shù)據(jù)鏈路層的主要工作是添加一個幀頭部和幀尾部,不同的數(shù)據(jù)鏈路層協(xié)議可能格式不同,但是基本格式都差不多。

這里的數(shù)據(jù)部分,一般有一個最大程度,我們稱為MTU,在 MAC 物理地址里一般是1500個字節(jié)。這里要說的是,當(dāng)數(shù)據(jù)是由可打印的 ASC2 碼組成的文件時,可以使用特殊的幀定字符來標(biāo)明一個幀的開始和結(jié)束。比如使用 SOH(Start Of Header) - - 0x01 和 EOT(End Of Transmission) -- 0x04 來表示,這樣數(shù)據(jù)鏈路層就可以識別出幀的開始和結(jié)束部位。
二、數(shù)據(jù)鏈路相關(guān)技術(shù)
數(shù)據(jù)鏈路層中幾個重要的概念:分組交換、MAC 地址、根據(jù) MAC 地址轉(zhuǎn)發(fā)、錯誤檢測等。
2.1 分組交換
分組交換是指將較大的數(shù)據(jù)分割為若干個較小的數(shù)據(jù),然后依次發(fā)送。使用分組交換的原因是不同的數(shù)據(jù)鏈路有各自的最大傳輸單元(MTU: Maximum Transmission Unit)。不同的數(shù)據(jù)鏈路就好比不同的運輸渠道,一輛卡車(對應(yīng)通信介質(zhì))的載重量為 5 噸。那么通過卡車運送 20 噸的貨物就需要把這些貨物分成四部分,每份重 5 噸。如果運輸機的載重量是 30 噸,那么這些貨物不需要分割,直接一架運輸機就可以拉走。
以以太網(wǎng)(一種數(shù)據(jù)鏈路)為例,它的MTU是 1500 字節(jié),也就是通過以太網(wǎng)傳輸?shù)臄?shù)據(jù),必須分割為若干幀,每個幀的數(shù)據(jù)長度不超過 1500 字節(jié)。如果上層傳來的數(shù)據(jù)超過這個長度,數(shù)據(jù)鏈路層需要分割后再發(fā)送。
2.2 MAC地址
MAC 地址是被錄入到網(wǎng)卡 ROM 中的一串?dāng)?shù)字,長度為 48 比特,它在世界范圍內(nèi)唯一(不考慮虛擬機自定義 MAC 地址)。由于 MAC 地址的唯一性,它可以被用來區(qū)分不同的節(jié)點,一旦指定了 MAC 地址,就不可能出現(xiàn)不知道往哪個設(shè)備傳輸數(shù)據(jù)的情況。
2.3 幀的格式
關(guān)于幀的格式,這里以以太網(wǎng)幀為例說明。

如上圖,以太網(wǎng)幀最前端有一個前導(dǎo)碼,由數(shù)字0和1組合而成,表示以太網(wǎng)幀的開始,也是對端網(wǎng)卡能夠確保預(yù)期同步的標(biāo)志。前導(dǎo)碼的末尾是一個叫做 SFD 的域,值為 11 。在這個域之后是以太網(wǎng)的本體。

一臺網(wǎng)幀本體的前端是以太網(wǎng)的首部,公 14 個字節(jié)。分別是 6 個字節(jié)的目標(biāo) MAC 地址、6 個字節(jié)的源 MAC 地址以及 2 個字節(jié)的上層協(xié)議類型。緊隨其后的是數(shù)據(jù),一個數(shù)據(jù)幀能容納數(shù)據(jù)的范圍是 46 - 1500 字節(jié)。幀末尾是一個 4 個字節(jié)的 FCS(幀檢驗序列)。關(guān)于 FCS 看下面的 2.4。
2.4 錯誤檢測
現(xiàn)實的通信鏈路都不會是理想的,這就是說,傳輸過程中有可能1 變成 0 或 0 變成 1 ,這種情況就叫做比特差錯。數(shù)據(jù)鏈路層提供了循環(huán)冗余檢驗 CRC 方法來檢測比特差錯,其主要使用了幀檢驗序列 FCS 來檢測比特錯誤。發(fā)送數(shù)據(jù)前先計算幀的數(shù)據(jù)部分得出 FCS 添加在數(shù)據(jù)部分后,接收端收到數(shù)據(jù)后添加上 FCS 后計算驗證。
需要注意的是數(shù)據(jù)鏈路層并沒有向網(wǎng)絡(luò)層提供可靠傳輸服務(wù),傳輸差錯一類是比特差錯,還有一類是幀丟失、幀重復(fù)或幀失序。完整的傳輸錯誤控制是在TCP中實現(xiàn)的。
2.5 交換機自學(xué)過程
交換機是一種在數(shù)據(jù)鏈路層工作的網(wǎng)絡(luò)設(shè)備,它有多個端口,可以連接不同的設(shè)備。交換機根據(jù)每個幀中的目標(biāo) MAC 地址決定向哪個端口發(fā)送數(shù)據(jù),此時需要參考“轉(zhuǎn)發(fā)表”
轉(zhuǎn)發(fā)表并非手動設(shè)置,而是交換機自動學(xué)習(xí)得到的。當(dāng)某個設(shè)備向交換機發(fā)送幀時,交換機將幀的源 MAC 地址和接口對應(yīng)起來,作為一條記錄添加到轉(zhuǎn)發(fā)表中。這一過程就叫做自學(xué)過程。自學(xué)過程的詳細流程如下圖。
