計算機網絡 數據鏈路層(一)

計算機網絡(五)

學習計算機網絡過程中的心得體會以及知識點的整理,方便我自己查找,也希望可以和大家一起交流。

—— 數據鏈路層 ——

數據鏈路層使用的信道主要有以下兩種類型:

  • 點對點信道。這種信道使用一對一的點對點通信方式
  • 廣播信道。這種信道使用一對多的廣播通信方式,因此過程比較複雜。廣播信道上連接的主機很多,因此必須使用專用的共享信道協議來協調這些主機的數據發送。
    數據鏈路層
    數據鏈路層

1. 使用點對點信道的數據鏈路層

1.1 數據鏈路和幀

  • 鏈路 (link) 是一條無源的點到點的物理線路段,中間沒有任何其他的交換結點。
    • 一條鏈路只是一條通路的一個組成部分。
  • 數據鏈路 (data link) 除了物理線路外,還必須有通信協議來控制這些數據的傳輸。若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。
    • 現在最常用的方法是使用適配器(即網卡)來實現這些協議的硬件和軟件。
    • 一般的適配器都包括了數據鏈路層和物理層這兩層的功能。
  • 也有人採用另外的術語。這就是把鏈路分爲物理鏈路和邏輯鏈路。
  • 物理鏈路就是上面所說的鏈路。
  • 邏輯鏈路就是上面的數據鏈路,是物理鏈路加上必要的通信協議。
  • 早期的數據通信協議曾叫作通信規程 (procedure)。因此在數據鏈路層,規程和協議是同義語。
    數據鏈路層
  • 常常在兩個對等的數據鏈路層之間畫出一個數字管道,而在這條數字管道上傳輸的數據單位是幀。
    數據鏈路層
  • 數據鏈路層不必考慮物理層如何實現比特傳輸的細節。甚至還可以更簡單地設想好像是沿着兩個數據鏈路層之間的水平方向把幀直接發送到對方。

1.2 三個基本問題

  • 數據鏈路層協議有許多種,但有三個基本問題則是共同的。這三個基本問題是:
    (1) 封裝成幀
    (2) 透明傳輸
    (3) 差錯控制
1.2.1 封裝成幀
  • 封裝成幀 (framing) 就是在一段數據的前後分別添加首部和尾部,然後就構成了一個幀。確定幀的界限。
  • 首部和尾部的一個重要作用就是進行幀定界
    數據鏈路層
  • 當數據是由可打印的 ASCII 碼組成的文本文件時,幀定界可以使用特殊的幀定界符。
  • 控制字符 SOH (Start Of Header) 放在一幀的最前面,表示幀的首部開始。另一個控制字符 EOT (End Of Transmission) 表示幀的結束。

數據鏈路層

1.2.2 透明傳輸
  • 如果數據中的某個字節的二進制代碼恰好和 SOH 或 EOT 一樣,數據鏈路層就會錯誤地“找到幀的邊界”。
    數據鏈路層
    ※解決方法字節填充 (byte stuffing) 或字符填充 (character stuffing)。
  • 發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC” (其十六進制編碼是 1B)。
  • 接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符。
  • 如果轉義字符也出現在數據當中,那麼應在轉義字符前面插入一個轉義字符 ESC。當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。
    數據鏈路層
1.2.3 差錯控制
  • 在傳輸過程中可能會產生比特差錯:1 可能會變成 0 而 0 也可能變成 1。
  • 在一段時間內,傳輸錯誤的比特佔所傳輸比特總數的比率稱爲誤碼率 BER (Bit Error Rate)。
  • 誤碼率與信噪比有很大的關係。
  • 爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各種差錯檢測措施。

在數據鏈路層傳送的幀中,廣泛使用了循環冗餘檢驗 CRC 的檢錯技術。

  • 在發送端,先把數據劃分爲組。假定每組 k 個比特。
  • 假設待傳送的一組數據 M = 101001(現在 k = 6)。我們在 M 的後面再添加供差錯檢測用的 n 位冗餘碼一起發送。
1.2.3.1 冗餘碼的計算
  • 用二進制的模 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) 位。

1.2.3.2 循環冗餘檢驗的原理說明

數據鏈路層

1.2.3.3 幀檢驗序列 FCS
  • 在數據後面添加上的冗餘碼稱爲幀檢驗序列 FCS (Frame Check Sequence)。
  • 循環冗餘檢驗 CRC 和幀檢驗序列 FCS 並不等同。
  • CRC 是一種常用的檢錯方法,而 FCS 是添加在數據後面的冗餘碼。
  • FCS 可以用 CRC 這種方法得出,但 CRC 並非用來獲得 FCS 的唯一方法。

【注意】
(1) 若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受 (accept)。
(2) 若餘數 R  0,則判定這個幀有差錯,就丟棄。

  • 但這種檢測方法並不能確定究竟是哪一個或哪幾個比特出現了差錯。
  • 只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。
1.2.3.4 注意問題
  • 僅用循環冗餘檢驗 CRC 差錯檢測技術只能做到無差錯接受 (accept)。
  • “無差錯接受” 是指:“凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認爲這些幀在傳輸過程中沒有產生差錯”。也就是說:“凡是接收端數據鏈路層接受的幀都沒有傳輸差錯”(有差錯的幀就丟棄而不接受)。
  • 要做到 “可靠傳輸”(即發送什麼就收到什麼)就必須再加上確認和重傳機制。
  • 應當明確,“無比特差錯”與“無傳輸差錯”是不同的概念。
  • 在數據鏈路層使用 CRC 檢驗,能夠實現無比特差錯的傳輸,但這還不是可靠傳輸。
  • 我們介紹的數據鏈路層協議都不是可靠傳輸的協議。

2. 點對點協議 PPP

2.1 PPP 協議的特點

  • 對於點對點的鏈路,目前使用得最廣泛的數據鏈路層協議是點對點協議 PPP (Point-to-Point Protocol)。
  • 用戶使用撥號電話線接入互聯網時, 用戶計算機和 ISP 進行通信時所使用的數據鏈路層協議就是 PPP 協議。
  • PPP 協議在1994年就已成爲互聯網的正式標準。
    數據鏈路層
2.1.1 PPP 協議應滿足的需求
  • 簡單 —— 這是首要的要求。
  • 封裝成幀 —— 必須規定特殊的字符作爲幀定界符。
  • 透明性 —— 必須保證數據傳輸的透明性。
  • 多種網絡層協議 —— 能夠在同一條物理鏈路上同時支持多種網絡層協議。
  • 多種類型鏈路 —— 能夠在多種類型的鏈路上運行。
  • 差錯檢測 —— 能夠對接收端收到的幀進行檢測,並立即丟棄有差錯的幀。
  • 檢測連接狀態 —— 能夠及時自動檢測出鏈路是否處於正常工作狀態。
  • 最大傳送單元 —— 必須對每一種類型的點對點鏈路設置最大傳送單元 MTU 的標準默認值,促進各種實現之間的互操作性。
  • 網絡層地址協商 —— 必須提供一種機制使通信的兩個網絡層實體能夠通過協商知道或能夠配置彼此的網絡層地址。
  • 數據壓縮協商 —— 必須提供一種方法來協商使用數據壓縮算法。
2.1.2 PPP 協議的組成
  • PPP 協議有三個組成部分:
  • 一個將 IP 數據報封裝到串行鏈路的方法。
  • 鏈路控制協議 LCP (Link Control Protocol)。
  • 網絡控制協議 NCP (Network Control Protocol)。

2.2 PPP 協議的幀格式

  • PPP 幀的首部和尾部分別爲 4 個字段和 2 個字段。
  • 標誌字段 F = 0x7E (符號“0x”表示後面的字符是用十六進制表示。十六進制的 7E 的二進制表示是 01111110)。
  • 地址字段 A 只置爲 0xFF。地址字段實際上並不起作用。
  • 控制字段 C 通常置爲 0x03。
  • PPP 是面向字節的,所有的 PPP 幀的長度都是整數字節。
    數據鏈路層
2.2.1 透明傳輸問題
  • 當 PPP 用在同步傳輸鏈路時,協議規定採用硬件來完成比特填充(和 HDLC 的做法一樣)。
  • 當 PPP 用在異步傳輸時,就使用一種特殊的字符填充法。
2.2.2 字符填充
  • 將信息字段中出現的每一個 0x7E 字節轉變成爲 2 字節序列 (0x7D, 0x5E)。
  • 若信息字段中出現一個 0x7D 的字節, 則將其轉變成爲 2 字節序列 (0x7D, 0x5D)。
  • 若信息字段中出現 ASCII 碼的控制字符(即數值小於 0x20 的字符),則在該字符前面要加入一個 0x7D 字節,同時將該字符的編碼加以改變。
2.2.3 零比特填充
  • PPP 協議用在 SONET/SDH 鏈路時,使用同步傳輸(一連串的比特連續傳送)。這時 PPP 協議採用零比特填充方法來實現透明傳輸。
  • 在發送端,只要發現有 5 個連續 1,則立即填入一個 0。
  • 接收端對幀中的比特流進行掃描。每當發現 5 個連續1時,就把這 5 個連續 1 後的一個 0 刪除。
    數據鏈路層
2.2.4 不提供使用序號和確認的可靠傳輸
  • PPP 協議之所以不使用序號和確認機制是出於以下的考慮:
  • 在數據鏈路層出現差錯的概率不大時,使用比較簡單的 PPP 協議較爲合理。
  • 在因特網環境下,PPP 的信息字段放入的數據是 IP 數據報。數據鏈路層的可靠傳輸並不能夠保證網絡層的傳輸也是可靠的。
  • 幀檢驗序列 FCS 字段可保證無差錯接受。

2.3 PPP 協議的工作狀態

  • 當用戶撥號接入 ISP 時,路由器的調制解調器對撥號做出確認,並建立一條物理連接。
  • PC 機向路由器發送一系列的 LCP 分組(封裝成多個 PPP 幀)。
  • 這些分組及其響應選擇一些 PPP 參數,並進行網絡層配置,NCP 給新接入的 PC 機分配一個臨時的 IP 地址,使 PC 機成爲因特網上的一個主機。
  • 通信完畢時,NCP 釋放網絡層連接,收回原來分配出去的 IP 地址。接着,LCP 釋放數據鏈路層連接。最後釋放的是物理層的連接。
  • 可見,PPP 協議已不是純粹的數據鏈路層的協議,它還包含了物理層和網絡層的內容。

數據鏈路層

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

3.1 局域網的數據鏈路層

  • 局域網最主要的特點是:
    • 網絡爲一個單位所擁有;
    • 地理範圍和站點數目均有限。
  • 局域網具有如下主要優點
    • 具有廣播功能,從一個站點可很方便地訪問全網。局域網上的主機可共享連接在局域網上的各種硬件和軟件資源。
    • 便於系統的擴展和逐漸地演變,各設備的位置可靈活調整和改變。
    • 提高了系統的可靠性、可用性和殘存性。
3.1.1 局域網拓撲結構

數據鏈路層

3.1.2 媒體共享技術
  • 靜態劃分信道
    • 頻分複用
    • 時分複用
    • 波分複用
    • 碼分複用
  • 動態媒體接入控制(多點接入)
    • 隨機接入
    • 受控接入 ,如多點線路探詢 (polling),或輪詢。
3.1.3 以太網的兩個標準
  • DIX Ethernet V2 是世界上第一個局域網產品(以太網)的規約。
  • IEEE 802.3 是第一個 IEEE 的以太網標準。
  • DIX Ethernet V2 標準與 IEEE 的 802.3 標準只有很小的差別,因此可以將 802.3 局域網簡稱爲“以太網”。
  • 嚴格說來,“以太網”應當是指符合 DIX Ethernet V2 標準的局域網 。
3.1.4 數據鏈路層的兩個子層
  • 爲了使數據鏈路層能更好地適應多種局域網標準,IEEE 802 委員會就將局域網的數據鏈路層拆成兩個子層:
    • 邏輯鏈路控制 LLC (Logical Link Control)子層;
    • 媒體接入控制 MAC (Medium Access Control)子層。
  • 與接入到傳輸媒體有關的內容都放在 MAC子層,而 LLC 子層則與傳輸媒體無關。
  • 不管採用何種協議的局域網,對 LLC 子層來說都是透明的。
    數據鏈路層
  • 由於 TCP/IP 體系經常使用的局域網是 DIX Ethernet V2 而不是 802.3 標準中的幾種局域網,因此現在 802 委員會制定的邏輯鏈路控制子層 LLC(即 802.2 標準)的作用已經不大了。
  • 很多廠商生產的適配器上就僅裝有 MAC 協議而沒有 LLC 協議。
3.1.5 適配器的作用
  • 網絡接口板又稱爲通信適配器 (adapter) 或網絡接口卡 NIC (Network Interface Card),或“網卡”。
  • 適配器的重要功能:
    • 進行串行/並行轉換。
    • 對數據進行緩存。
    • 在計算機的操作系統安裝設備驅動程序。
    • 實現以太網協議。
      數據鏈路層

3.2 CSMA/CD 協議

  • 最初的以太網是將許多計算機都連接到一根總線上。當初認爲這樣的連接方法既簡單又可靠,因爲總線上沒有有源器件。
    數據鏈路層
  • CSMA/CD 含義:載波監聽多點接入 / 碰撞檢測 (Carrier Sense Multiple Access with Collision Detection) 。
  • 多點接入”表示許多計算機以多點接入的方式連接在一根總線上。
  • 載波監聽”是指每一個站在發送數據之前先要檢測一下總線上是否有其他計算機在發送數據,如果有,則暫時不要發送數據,以免發生碰撞。
  • 總線上並沒有什麼“載波”。因此, “載波監聽”就是用電子技術檢測總線上有沒有其他計算機發送的數據信號。
3.2.1 以太網兩種重要的措施

爲了通信的簡便,以太網採取了兩種重要的措施:
(1) 採用較爲靈活的無連接的工作方式

  • 不必先建立連接就可以直接發送數據。
  • 對發送的數據幀不進行編號,也不要求對方發回確認。
  • 這樣做的理由是局域網信道的質量很好,因信道質量產生差錯的概率是很小的。

(2) 以太網發送的數據都使用曼徹斯特 (Manchester) 編碼
數據鏈路層

3.2.2 碰撞檢測
  • “碰撞檢測”就是計算機邊發送數據邊檢測信道上的信號電壓大小。
  • 當幾個站同時在總線上發送數據時,總線上的信號電壓擺動值將會增大(互相疊加)。
  • 當一個站檢測到的信號電壓擺動值超過一定的門限值時,就認爲總線上至少有兩個站同時在發送數據,表明產生了碰撞。
  • 所謂“碰撞”就是發生了衝突。因此“碰撞檢測”也稱爲“衝突檢測”
    數據鏈路層
    數據鏈路層
3.2.3 CSMA/CD 協議特點
  • 使用 CSMA/CD 協議的以太網不能進行全雙工通信而只能進行雙向交替通信(半雙工通信)
  • 每個站在發送數據之後的一小段時間內,存在着遭遇碰撞的可能性。
  • 這種發送的不確定性使整個以太網的平均通信量遠小於以太網的最高數據率。

※爭用期

  • 最先發送數據幀的站,在發送數據幀後至多經過時間 **2τ(兩倍的端到端往返時延)**就可知道發送的數據幀是否遭受了碰撞。
  • 以太網的端到端往返時延 2τ 稱爲爭用期,或碰撞窗口
  • 經過爭用期這段時間還沒有檢測到碰撞,才能肯定這次發送不會發生碰撞。
3.2.4 二進制指數類型退避算法 (truncated binary exponential type)
  • 發生碰撞的站在停止發送數據後,要推遲(退避)一個隨機時間才能再發送數據。
    • 基本退避時間取爲爭用期 2。

    • 從整數集合[0,1,…, (2k 1)]中隨機地取出一個數,記爲 r。重傳所需的時延就是 r 倍的基本退避時間。

    • 參數 k 按下面的公式計算:

      k = Min[重傳次數, 10]

    • 當 k  10 時,參數 k 等於重傳次數。

    • 當重傳達 16 次仍不能成功時即丟棄該幀,並向高層報告。

3.2.5 爭用期長度
  • 10 Mbit/s 以太網取 51.2 s 爲爭用期的長度。
  • 對於 10 Mbit/s 以太網,在爭用期內可發送 512 bit,即 64 字節。
  • 這意味着:
  • 以太網在發送數據時,若前 64 字節沒有發生衝突,則後續的數據就不會發生衝突。

當發送數據的站一旦發現發生了碰撞時:

  1. 立即停止發送數據;
  2. 再繼續發送若干比特的人爲干擾信號 (jamming signal),以便讓所有用戶都知道現在已經發生了碰撞。
    數據鏈路層

3.3 使用集線器的星形拓撲

  • 採用雙絞線的以太網採用星形拓撲,在星形的中心則增加了一種可靠性非常高的設備,叫做集線器 (hub)。
    數據鏈路層
  • 1990年 IEEE 制定出星形以太網 10BASE-T 的標準 802.3i。
    數據鏈路層

3.4 以太網的信道利用率

  • 多個站在以太網上同時工作就可能會發生碰撞。
  • 當發生碰撞時,信道資源實際上是被浪費了。因此,當扣除碰撞所造成的信道損失後,以太網總的信道利用率並不能達到 100%
  • 假設 τ 是以太網單程端到端傳播時延。則爭用期長度爲 2τ,即端到端傳播時延的兩倍。檢測到碰撞後不發送干擾信號。
  • 設幀長爲 L (bit),數據發送速率爲 C (bit/s),則幀的發送時間爲 T0 = L/C (s)。
  • 一個站在發送幀時出現了碰撞。經過一個爭用期 2 後,可能又出現了碰撞。這樣經過若干個爭用期後,一個站發送成功了。假定發送幀需要的時間是 T0。
    數據鏈路層

注意到,成功發送一個幀需要佔用信道的時間是 T0 + τ,比這個幀的發送時間要多一個單程端到端時延τ。
這是因爲當一個站發送完最後一個比特時,這個比特還要在以太網上傳播。
在最極端的情況下,發送站在傳輸媒體的一端,而比特在媒體上傳輸到另一端所需的時間是 τ 。

  • 在理想化的情況下,以太網上的各站發送數據都不會產生碰撞(這顯然已經不是 CSMA/CD,而是需要使用一種特殊的調度方法),即總線一旦空閒就有某一個站立即發送數據。
  • 發送一幀佔用線路的時間是 T0 + τ,而幀本身的發送時間是 T0。於是我們可計算出理想情況下的極限信道利用率 Smax 爲:
    數據鏈路層
    【特別說明】
  • 只有當參數 a 遠小於 1 才能得到儘可能高的極限信道利用率。
  • 據統計,當以太網的利用率達到 30%時就已經處於重載的情況。很多的網絡容量被網上的碰撞消耗掉了。

3.5 以太網的 MAC 層

3.5.1 MAC 層的硬件地址
  • 在局域網中,硬件地址又稱爲物理地址,或 MAC 地址
  • 802 標準所說的“地址”嚴格地講應當是每一個站的“名字”或標識符
3.5.1.1 有48位的 MAC 地址
  • IEEE 802 標準規定 MAC 地址字段可採用 6 字節 ( 48位) 或 2字節 (16位) 這兩種中的一種。
  • IEEE 的註冊管理機構 RA 負責向廠家分配地址字段 6 個字節中的前三個字節 (即高位 24 位),稱爲組織唯一標識符。
  • 地址字段 6 個字節中的後三個字節 (即低位 24 位) 由廠家自行指派,稱爲擴展唯一標識符,必須保證生產出的適配器沒有重複地址。
    數據鏈路層
  • 一個地址塊可以生成 224 個不同的地址。這種 48 位地址稱爲 MAC-48,它的通用名稱是 EUI-48。
  • 生產適配器時,6 字節的 MAC 地址已被固化在適配器的 ROM,因此,MAC 地址也叫作硬件地址 (hardware address)或物理地址。
  • “MAC地址”實際上就是適配器地址或適配器標識符 EUI-48。
3.5.1.2 單站地址,組地址,廣播地址
  • IEEE規定地址字段的第一字節的最低位爲 I/G 位。I/G 表示 Individual / Group。
  • 當 I/G位=0 時,地址字段表示一個單站地址
  • 當 I/G位=1 時,表示組地址,用來進行多播(以前曾譯爲組播)。此時,IEEE 只分配地址字段前三個字節中的23位。
  • 當 I/G 位分別爲 0 和 1 時,一個地址塊可分別生成 224 個單個站地址和 224 個組地址。
  • 所有 48 位都爲 1 時,爲廣播地址。只能作爲目的地址使用。
3.5.2 MAC 幀的格式
  • 常用的以太網 MAC 幀格式有兩種標準 :
    • DIX Ethernet V2 標準
    • IEEE 的 802.3 標準
  • 最常用的 MAC 幀是以太網 V2 的格式。
    數據鏈路層
    數據鏈路層
    數據鏈路層
    數據鏈路層
    數據鏈路層
3.5.3 無效的 MAC 幀
  • 數據字段的長度與長度字段的值不一致;
  • 幀的長度不是整數個字節;
  • 用收到的幀檢驗序列 FCS 查出有差錯;
  • 數據字段的長度不在 46 ~ 1500 字節之間。
  • 有效的 MAC 幀長度爲 64 ~ 1518 字節之間。

對於檢查出的無效 MAC 幀就簡單地丟棄。以太網不負責重傳丟棄的幀。

後續內容查看《計算機網絡 數據鏈路層(二)》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章