OSI體系結構——數據鏈路層詳解

前言

數據鏈路層是OSI參考模型中的第二層,介乎於物理層和網絡層之間。數據鏈路層在物理層提供的服務的基礎上向網絡層提供服務,數據鏈路層是對物理層傳輸原始比特流的功能的加強,將物理層提供的可能出錯的物理連接改造成爲邏輯上無差錯的數據鏈路,使之對網絡層表現爲一無差錯的線路。爲達到這一目的,數據鏈路必須具備一系列相應的功能。本文就數據鏈路層具有的功能進行相關介紹。


一、 數據鏈路的概念以及相關基礎知識

OSI體系結構——數據鏈路層詳解

上圖爲兩臺主機通過互聯網進行通信時數據鏈路層所處的地位。

本文只關心在協議棧中水平防線的各數據鏈路層。當H1向H2發送數據時,我們可以想象數據就是在數據鏈路層從左向右水平傳送的。於是在數據鏈路層的層面上,有如下鏈路:H1鏈路層→R1鏈路層→R2鏈路層→R3鏈路層→H2鏈路層

由此,我們引出了一些基本概念:

鏈路(link):一條無源的物理線路段,中間沒有其他的交換結點。一條鏈路只是一條通路的一個組成部分。

數據鏈路(date link):除了物理線路外,還必須有通信協議來控制這些數據的傳輸。若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。

現如今,最常用的方法就是使用網絡適配器(網卡)來實現這些要求,一般網卡包含了數據鏈路層和物理層兩層的功能。

數據在信道中傳輸,其在數據鏈路層中的數據單元叫做幀。
數據鏈路層把網絡層交下來的數據封裝成幀發送到鏈路上,並將收到的幀中的數據取出,交給上層的網絡層。

若是隻考慮點對點信道的數據鏈路層協議,我們可以簡單的採用下圖所示的模型:
OSI體系結構——數據鏈路層詳解

點對點信道的數據鏈路層在進行通信時主要步驟如下:

(1)信源的數據鏈路層將網絡層交下來的IP數據報添加首部和尾部封裝成幀。
(2)信源把封裝好的幀發送給信宿的數據鏈路層
(3)若信宿的數據鏈路層接收到的幀無差錯,則將收到的幀取出首部和尾部,還原爲IP數據報,交給網絡層;若幀存在錯誤,則丟棄。


二、幀傳輸的三大問題

數據鏈路層協議有許多中,但有三個基本問題是共同的,分別爲封裝成幀、透明傳輸、差錯檢驗。

1、 封裝成幀

封裝成幀(framing)就是在一段數據的前後分別添加首部和尾部,這樣就構成了幀。接收端在收到物理層上交的比特流後,可以根據首部、尾部的標記,從收到的比特流中識別幀的開始和結束。首部和尾部一個重要的作用就是幀定界,此外,首部和尾部還有許多必要的控制信息。在發送幀時,是從幀的首部開始發送的。各數據鏈路層對幀首部和幀尾部的格式有明確的規定。爲提高幀的傳輸效率,應當使幀的數據部分長度儘可能大於首部和尾部的長度。當然,數據部分也不能過於龐大,對此,各數據鏈路層規定了所能傳送的幀的數據部分長度上限——最大傳輸單元MTU(Maximum Transfer Unit)。

封裝成幀示意圖:
OSI體系結構——數據鏈路層詳解
當數據是由可打印的ASCII碼組成的文本文件時,幀定界符可以使用特殊的幀定界符。

注:ASCII碼是7位編碼,一共可組成128個不同的ASCII嗎,其中可打印的95個,不可打印的控制字符33個。將控制字符SOH(start of header)放在幀的最前面表示幀的開始;將EOT(end of transmission)放在幀的末尾表示幀的結束。這裏SOH和EOT都是控制字符的名稱,它們的十六進制編碼爲01 、04。

在傳輸過程中出現差錯時,幀定界符的作用更加明顯。假如發送端在尚未發送完一個幀時出現故障,中斷了發送。由於使用了幀定界符,接收端檢測不到EOT故判定爲不完整的幀,從而丟棄。

2、 透明傳輸

定義:指不管所傳數據是什麼樣的比特組合,都應當能夠在鏈路上傳送。當所傳數據中的比特組合恰巧與某一個控制信息完全一樣時,就必須採取適當的措施,使接收方不會將這樣的數據誤認爲是某種控制信息。這樣才能保證數據鏈路層的傳輸是透明的。

OSI體系結構——數據鏈路層詳解
解決方法:字節填充(byte stuffing)或字符填充(character stuffing)

發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入轉義字符“ESC”,接收端的數據鏈路層在將數據發往網絡層之前刪除這個轉義字符。如果轉義字符也出現在數據中,那麼將在轉義字符前再插入一個轉義字符。

OSI體系結構——數據鏈路層詳解

3、 差錯檢測

現實應用中,數據在傳輸過程中可能產生錯誤,比如“1”可能變爲“0”等,這種差錯叫做比特差錯。一段時間內,傳輸錯誤的比特佔所傳輸比特綜述的比率稱爲誤碼率BER(bit error rate)。爲了保證數據傳輸可靠性,在傳輸數據時必須採用各種各樣的差錯檢測措施,目前數據鏈路層廣泛使用的是循環冗餘校驗CRC(cyclic redundancy check)。

下面我們通過一個簡單的例子來說明循環冗餘校驗的原理。

在發送端,先把數據劃分爲組。假定每組 k 個比特。

假設待傳送的一組數據 M = 101001(現在 k = 6)。我們在 M 的後面再添加供差錯檢測用的 n 位冗餘碼一起發送。

用二進制的模 2 運算進行 2n 乘 M 的運算,這相當於在 M 後面添加 n 個 0。

得到的 (k + n) 位的數除以事先選定好的長度爲 (n + 1) 位的除數 P,得出商是 Q 而餘數是 R,餘數 R 比除數 P 少 1 位,即 R 是 n 位。

將餘數 R 作爲冗餘碼拼接在數據 M 後面發送出去。

例:現在 k = 6, M = 101001。
設 n = 3, 除數 P = 1101,
被除數是 2nM = 101001000。
模 2 運算的結果是:商 Q = 110101,餘數 R = 001。
把餘數 R 作爲冗餘碼添加在數據 M 的後面發送出去。發送的數據是:2nM + R 。即:101001001,共 (k + n) 位。

OSI體系結構——數據鏈路層詳解

接收端把接收到的數據以幀爲單位進行CRC檢驗:把收到的每個幀都除以同樣的除數P(模二運算),然後檢查得到的餘數R。

餘數R存在的可能性:
若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受。
若餘數 R≠0,則判定這個幀有差錯,就丟棄。

注:數據鏈路層若僅使用CRC技術,則只能做到對幀的無差錯接收,因爲CRC只具有檢錯能力,不具備糾錯能力。


三、點對點協議PPP

在通信線路質量較差的年代,在數據鏈路層使用可靠傳輸協議曾是一種好辦法。對於點對點的鏈路,目前使用最廣泛的是協議是PPP(point-to-point protocol)。互聯網用戶通常需要連接到某個ISP才能接入到互聯網,PPP協議就是用戶與ISP進行通信時所使用的的數據鏈路層協議。

當然,PPP協議不提供使用序號和確認的可靠傳輸

在數據鏈路層出現差錯的概率不大時,使用比較簡單的 PPP 協議較爲合理。

在因特網環境下,PPP 的信息字段放入的數據是 IP 數據報。數據鏈路層的可靠傳輸並不能夠保證網絡層的傳輸也是可靠的。

幀檢驗序列 FCS 字段可保證無差錯接受。

PPP協議有三個組成部分:
(1) 一個將 IP 數據報封裝到串行鏈路的方法。
(2) 用來建立、配置和測試數據鏈路連接的鏈路控制協議 LCP (Link Control Protocol)。
(3) 網絡控制協議 NCP (Network Control Protocol)。

PPP協議的幀格式

OSI體系結構——數據鏈路層詳解
PPP首部的第四個字段是2字節的協議字段。
當協議字段爲0x0021時,PPP幀的信息字段就是IP數據報。
當協議字段爲0xC021時,PPP幀的信息字段是PPP鏈路控制協議的LCP數據。
當協議字段爲0x8021時,PPP幀的信息字段爲網絡層的控制數據。

PPP協議的透明傳輸

當信息字段中出現和標誌字段一樣的比特組合(0x7E)時,就必須採取一些措施:
當 PPP 用在同步傳輸鏈路時,協議規定採用硬件來完成比特填充(和 HDLC 的做法一樣)。
當 PPP 用在異步傳輸時,就使用一種特殊的字符填充法。

字符填充

將信息字段中出現的每一個 0x7E 字節轉變成爲 2 字節序列 (0x7D, 0x5E)。

若信息字段中出現一個 0x7D 的字節, 則將其轉變成爲 2 字節序列 (0x7D, 0x5D)。

若信息字段中出現 ASCII 碼的控制字符(即數值小於 0x20 的字符),則在該字符前面要加入一個 0x7D 字節,同時將該字符的編碼加以改變。

零比特填充

PPP 協議用在 SONET/SDH 鏈路時,使用同步傳輸(一連串的比特連續傳送)。這時 PPP 協議採用零比特填充方法來實現透明傳輸。

在發送端,只要發現有 5 個連續 1,則立即填入一個 0。

接收端對幀中的比特流進行掃描。每當發現 5 個連續1時,就把這 5 個連續 1 後的一個 0 刪除。
OSI體系結構——數據鏈路層詳解

PPP協議的工作狀態

PPP鏈路的起始和終止狀態一定是鏈路靜止(link dead)。這時用戶個人電腦和ISP的路由器之間並不存在物理層的連接。
當用戶個人電腦通過調制解調器呼叫路由器時,路由器能夠檢測到調制解調器發出的載波信號。在雙方建立了物理層連接後,PPP就進入鏈路建立(link establish)的狀態,其目的是建立鏈路層的LCP連接。
建立起LCP連接後即開始發送LCP的配置請求幀(configure-request)。這是PPP幀,其協議字段置爲LCP對應的代碼,而信息字段包含特定的配置請求。

鏈路的另一端可以發送以下幾種響應中的一種:

配置確認幀(configure-ack):所有選項都接受
配置否認幀(configure-nak):所有選項都理解但不能接受
配置拒絕幀(configure-reject):選項中部分無法識別或不能接受,需要協商

OSI體系結構——數據鏈路層詳解

PPPoE

PPPoE (PPP over Ethernet) 的意思是“在以太網上運行 PPP”,它把 PPP 協議與以太網協議結合起來 —— 將 PPP 幀再封裝到以太網中來傳輸。

現在的光纖寬帶接入 FTTx 都要使用 PPPoE 的方式進行接入。在 PPPoE 彈出的窗口中鍵入在網絡運營商購買的用戶名和密碼,就可以進行寬帶上網了。

利用 ADSL 進行寬帶上網時,從用戶個人電腦到家中的 ADSL 調制解調器之間,也是使用 RJ-45 和 5 類線(即以太網使用的網線)進行連接的,並且也是使用 PPPoE 彈出的窗口進行撥號連接的。

使用廣播信道的數據鏈路層

廣播信道可以進行一對多的通信。局域網就是使用的廣播信道。局域網最主要的優點是:
具有廣播功能,從一個站點可以很方便的訪問全網。局域網上的主機可共享連接在局域網上的各種硬件和軟件資源。
便於系統的擴展和逐漸演變,各設備的位置可靈活調整和改變。
提高了系統的可靠性、可用性和生存性。

局域網可以使用多種傳輸媒體,其中雙絞線最便宜。當然,局域網的工作層次跨越了數據鏈路層和物理層。因爲局域網內的設備都是共用一個信道,共享信道要着重考慮的問題就是如何使衆多的用戶能夠合理而方便的共享通新媒體資源。在技術上有兩種方法來解決:

靜態劃分信道:如在物理層中曾提到的頻分複用等技術,用戶只要分配到了信道就不會和其他用戶產生衝突。但這種劃分信道的代價較高,不適合局域網使用。

動態媒體接入控制:又稱爲多點接入,可分爲隨機接入和受控接入兩類。隨機接入的特點是所有的用戶可以隨機的發送信息。但如果恰巧有兩個或更多的用戶在同一時刻都發送信息,那麼共享媒體上就要產生碰撞(衝突),使得所有的用戶發送都失敗。受控接入的特點是用戶不能隨機的發送信息,用戶必須服從一定的控制。典型的代表有令牌環網和集中控制的多點線路的輪詢。

IEEE 802委員會把局域網的數據鏈路層拆分成兩個子層,即邏輯鏈路控制LLC(logical link control)和媒體接入控制MAC(medium access control)。與接入到傳輸媒體有關的內容都放在MAC子層,不管採用何種傳輸媒體,對於LLC子層來說都是透明的。

OSI體系結構——數據鏈路層詳解

現在我們先從一般的概念上討論計算機是如何接入到局域網上的。

計算機與局域網的連接是通過適配器進行的,適配器又叫網絡接口卡NIC(network interface card)。適配器和局域網之間通過電纜或雙絞線以串行傳輸的方式進行通信。當然對於現在的計算機,主板上已經嵌入了這種適配器,不再單獨使用網卡了。

適配器的重要功能:
1.進行串行/並行轉換。
2.對數據進行緩存。
3.在計算機的操作系統安裝設備驅動程序。
4.實現以太網協議。  

OSI體系結構——數據鏈路層詳解


四、CSMA/CD協議

CSMA/CD 含義:載波監聽多點接入 / 碰撞檢測 (Carrier Sense Multiple Access with Collision Detection) 。

最早的以太網是將許多計算機連接到總線上,但總線是以廣播通信方式。爲實現一對一的通信,可以使每臺計算機的適配器擁有一個與其他適配器都不同的地址。在發送數據幀時,幀的首部寫明接收站的地址,這樣可以實現一對一的通信。

下面介紹幾個基本概念:
“多點接入”表示許多計算機以多點接入的方式連接在一根總線上。

“載波監聽”是指每一個站在發送數據之前先要檢測一下總線上是否有其他計算機在發送數據,如果有,則暫時不要發送數據,以免發生碰撞。
總線上並沒有什麼“載波”。因此, “載波監聽”就是用電子技術檢測總線上有沒有其他計算機發送的數據信號。

碰撞檢測

由於電磁波在總線上的傳播速率是有限的,當某個站監聽到總線是空閒時,也可能總線並非真正是空閒的。

A 向 B 發出的信息,要經過一定的時間後才能傳送到 B。

B 若在 A 發送的信息到達 B 之前發送自己的幀 (因爲這時 B 的載波監聽檢測不到 A 所發送的信息),則必然要在某個時間和 A 發送的幀發生碰撞。

碰撞的結果是兩個幀都變得無用。

所以需要在發送期間進行碰撞檢測,以檢測衝突。

OSI體系結構——數據鏈路層詳解

“碰撞檢測”就是計算機邊發送數據邊檢測信道上的信號電壓大小。

當幾個站同時在總線上發送數據時,總線上的信號電壓擺動值將會增大(互相疊加)。
當一個站檢測到的信號電壓擺動值超過一定的門限值時,就認爲總線上至少有兩個站同時在發送數據,表明產生了碰撞。
所謂“碰撞”就是發生了衝突。因此“碰撞檢測”也稱爲“衝突檢測”

每一個正在發送數據的站,一旦發現總線上出現了碰撞,就要立即停止發送,免得繼續浪費網絡資源,然後等待一段隨機時間後再次發送

使用 CSMA/CD 協議的以太網不能進行全雙工通信而只能進行雙向交替通信(半雙工通信),因爲了碰撞了幀就無效了。

當發送數據的站一旦發現發生了碰撞時:
(1) 立即停止發送數據;

(2) 再繼續發送若干比特的人爲干擾信號  (jamming signal),以便讓所有用戶都知道現在已經發生了碰撞。

OSI體系結構——數據鏈路層詳解

工作過程:

(1) 準備發送。但在發送之前,必須先檢測信道。

(2) 檢測信道。若檢測到信道忙,則應不停地檢測,一直等待信道轉爲空閒。若檢測到信道空閒,並在 96 比特時間內信道保持空閒(保證了幀間最小間隔),就發送這個幀。

(3) 檢查碰撞。在發送過程中仍不停地檢測信道,即網絡適配器要邊發送邊監聽。

這裏只有兩種可能性:

①發送成功:在爭用期內一直未檢測到碰撞。這個幀肯定能夠發送成功。發送完畢後,其他什麼也不做。然後回到 (1)。

②發送失敗:在爭用期內檢測到碰撞。這時立即停止發送數據,並按規定發送人爲干擾信號。適配器接着就執行指數退避算法,等待 r 倍 512 比特時間後,返回到步驟 (2),繼續檢測信道。但若重傳達 16 次仍不能成功,則停止重傳而向上報錯。

五、局域網中的集線器與交換機

集線器

傳統以太網最初使用的是粗同軸電纜,後來演進到使用比較便宜的細同軸電纜,最後發展爲使用更便宜更靈活的雙絞線。這種以太網採用星型拓撲,並在拓撲的中心使用了可靠性非常高的集線器。

OSI體系結構——數據鏈路層詳解

需要說明的幾點:

集線器是使用電子器件來模擬實際電纜線的工作,因此整個系統仍然像一個傳統的以太網那樣運行。

使用集線器的以太網在邏輯上仍是一個總線網,各工作站使用的還是 CSMA/CD 協議,並共享邏輯上的總線。

集線器很像一個多接口的轉發器,工作在物理層,它的每個接口只是簡單地轉發比特,不進行碰撞檢測。

集線器採用了專門的芯片,進行自適應串音回波抵消,減少了近端串音。

OSI體系結構——數據鏈路層詳解

交換機

使用多個集線器可連成更大的、多級星形結構的以太網。

OSI體系結構——數據鏈路層詳解
優點:
使原來屬於不同碰撞域的以太網上的計算機能夠進行跨碰撞域的通信。

擴大了以太網覆蓋的地理範圍。

缺點:

碰撞域增大了,但總的吞吐量並未提高。

如果不同的碰撞域使用不同的數據率,那麼就不能用集線器將它們互連起來。

擴展以太網更常用的方法是在數據鏈路層進行。

早期使用網橋,現在使用以太網交換機

當網橋收到一個幀時,並不是向所有的接口轉發此幀,而是先檢查此幀的目的 MAC 地址,然後再確定將該幀轉發到哪一個接口,或把它丟棄。

交換機特點:

以太網交換機實質上就是一個多接口的網橋,通常都有十幾個或更多的接口。

每個接口都直接與一個單臺主機或另一個以太網交換機相連,並且一般都工作在全雙工方式。

以太網交換機具有並行性。能同時連通多對接口,使多對主機能同時通信。

相互通信的主機都是獨佔傳輸媒體,無碰撞地傳輸數據。

以太網交換機是一種即插即用設備,其內部的幀交換表(又稱爲地址表)是通過自學習算法自動地逐漸建立起來的。轉發速率要比使用軟件轉發的網橋快很多。

六、以太網的MAC層

MAC層的硬件地址

在局域網中,硬件地址又稱爲物理地址,或 MAC 地址。

MAC地址組成:

IEEE 802 標準規定 MAC 地址字段可採用 6 字節 ( 48位) 或 2 字節 ( 16 位) 這兩種中的一種。

IEEE 的註冊管理機構 RA 負責向廠家分配地址字段 6 個字節中的前三個字節 (即高位 24 位),稱爲組織唯一標識符。

地址字段 6 個字節中的後三個字節 (即低位 24 位) 由廠家自行指派,稱爲擴展唯一標識符,必須保證生產出的適配器沒有重複地址。

OSI體系結構——數據鏈路層詳解

生產適配器時,6 字節的 MAC 地址已被固化在適配器的 ROM,因此,MAC 地址也叫做硬件地址 (hardware address)或物理地址。

“MAC地址”實際上就是適配器地址或適配器標識符 EUI-48。

我們知道適配器有過濾功能。當適配器從網絡每收到一個MAC幀就先用硬件檢查MAC幀中的目的地址。如果是發往本站的則收下,然後再進行其他處理。若不是發往本站的,則將此MAC幀丟棄。這樣不會浪費主機處理器和內存資源。

“發往本站”包括以下三種幀:
單播幀(一對一):即收到的幀的MAC地址與本站的硬件地址相同。
廣播幀(一對全體):即發送給本局域網上所有站點的幀(全1地址)。
多播幀(一對多):即發送給本局域網上一部分站點的幀。

所有的適配器都至少能夠識別前兩種幀,即能夠識別單播地址和廣播地址。

以混雜方式 (promiscuous mode) 工作的以太網適配器只要“聽到”有幀在以太網上傳輸就都接收下來。

MAC幀的格式

常用的以太網 MAC 幀格式有兩種標準 :

DIX Ethernet V2 標準(最常用)

IEEE 的 802.3 標準

MAC幀結構示意圖:
OSI體系結構——數據鏈路層詳解

無效的MAC幀:
數據字段的長度與長度字段的值不一致;

幀的長度不是整數個字節;

用收到的幀檢驗序列 FCS 查出有差錯;

數據字段的長度不在 46 ~ 1500 字節之間。

有效的 MAC 幀長度爲 64 ~ 1518 字節之間。

無效的幀會被直接丟棄掉,以太網不負責重傳丟棄的幀。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章