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

前言算法

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


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

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

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

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

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

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

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

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

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

如果只考慮點對點信道的數據鏈路層協議,咱們能夠簡單的採用下圖所示的模型:
OSI體系結構——數據鏈路層詳解編碼

點對點信道的數據鏈路層在進行通訊時主要步驟以下:操作系統

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


2、幀傳輸的三大問題

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

一、 封裝成幀

封裝成幀(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故斷定爲不完整的幀,從而丟棄。

二、 透明傳輸

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

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

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

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

三、 差錯檢測

現實應用中,數據在傳輸過程當中可能產生錯誤,好比「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只具備檢錯能力,不具有糾錯能力。


3、點對點協議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體系結構——數據鏈路層詳解


4、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 次仍不能成功,則中止重傳而向上報錯。

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

集線器

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

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

須要說明的幾點:

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

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

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

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

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

交換機

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

OSI體系結構——數據鏈路層詳解
優勢:
使原來屬於不一樣碰撞域的以太網上的計算機可以進行跨碰撞域的通訊。

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

缺點:

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

若是不一樣的碰撞域使用不一樣的數據率,那麼就不能用集線器將它們互連起來。

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

早期使用網橋,如今使用以太網交換機

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

交換機特色:

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

每一個接口都直接與一個單臺主機或另外一個以太網交換機相連,而且通常都工做在全雙工方式。

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

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

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

6、以太網的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 字節之間。

無效的幀會被直接丟棄掉,以太網不負責重傳丟棄的幀。
相關文章
相關標籤/搜索