走進科學之計算機網絡-數據鏈路層-硬核掃盲
繼續硬核學習計算機網絡系列!
本文承接:
本文的聚焦點主要在於數據鏈路層間數據的傳輸,事實上,在數據在兩個節點間的傳輸,應該是發送端從應用層到物理層,中間以物理再到網絡層,網絡層到物理層,接收端從物理層到應用層這個過程的
數據鏈路層涉及的基本概念
數據鏈路層的信道類型
數據鏈路層使用的信道主要有以下兩種類型:
- 點對點信道:這種信道使用一對一的點對點通信方式
- 廣播信道:這種信道使用一對多的廣播通信方式,因此過程比較複雜,廣播信道上連接的主機很多,因此必須使用專用的共享信道協議來協調這些主機的數據發送
鏈路與數據鏈路
鏈路(link):是一條點到點的物理線路段,中間沒有任何其他的交換結點。
一條鏈路只是一條通路的一個組成部分。數據鏈路(data link) 除了物理線路外,還必須有通信協議來控制這些數據的傳輸。若把實現這些協議的硬件和軟件加到鏈路上,就構成了數據鏈路。
現最常用的方法是使用適配器(即網卡)來實現這些協議的硬件和軟件
幀
數據鏈路層傳送的是幀
三個基本問題
封裝成幀
封裝成幀(framing)就是在一段數據的前後分別添加首部和尾部,然後就構成了一個幀,首部和尾部的一個重要作用就是進行幀定界
試想:幀還未發送完,發送端出了問題,只能重發該幀,接收端卻收到了前面的“半截子幀”,它會拋棄嗎?
答案當然是會的,在幀首位都會有開始符和結束符,如果接收端沒有接收到結束符,自然會認定接收到的是一個無效幀
但是,如果數據段中有一段數據與結束符是一樣的呢?接收端讀取到的時候,判定是一個結束符,那這個幀一樣是無效的,如何做?
解決方案-字節填充法
發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”(其十六進制編碼是 1B)
接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符
如果轉義字符也出現數據當中,那麼應在轉義字符前插入一個轉義字符。當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個
差錯檢驗
傳輸過程中可能會產生比特差錯:1 可能會變成 0 而 0 也可能變成 1
在一段時間內,傳輸錯誤的比特佔所傳輸比特總數的比率稱爲誤碼率 BER (Bit Error Rate),誤碼率與信噪比有很大的關係
爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各種差錯檢測措施
循環冗餘檢驗CRC
在數據鏈路層傳送的幀中,廣泛使用了循環冗餘檢驗 CRC 的檢錯技術
在發送端,先把數據劃分爲組。假定每組 k 個比特。假設待傳送的一組數據 M = 101001(現在 k = 6)。我們在 M 的後面再添加供差錯檢測用的 n 位冗餘碼一起發送
收端對收到的每一幀進行 CRC 檢驗
若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受(accept)
若餘數 R !=0,則判定這個幀有差錯,就丟棄在數據後面添加上的冗餘碼稱爲幀檢驗序列 FCS (Frame Check Sequence)
具體計算這裏就不展開了,後面如果寫到計算機組成原理的博文,會詳細說明
點對點信道的數據鏈路層PPP
點對點信道的數據鏈路層,數據的傳輸主要基於PPP協議
現在全世界使用得最多的數據鏈路層協議也是點對點協議 PPP (Point-to-Point Protocol)。
用戶使用撥號電話線接入因特網時,一般都是使用 PPP 協議
PPP協議應該滿足的要求:
- 簡單(這是首要的要求)
- 封裝成幀
- 透明性
- 多種網絡層協議
- 多種類型鏈路
- 差錯檢測
- 檢測連接狀態
- 最大傳送單元
- 網絡層地址協商
- 數據壓縮協商
PPP協議不需要滿足的要求:
- 糾錯 (循環冗餘也無法實現糾錯)
- 流量控制
- 序號
- 多點線路
- 半雙工或單工鏈路
PPP協議的組成
1992 年制訂了 PPP 協議。經過 1993 年和 1994 年的修訂,現在的 PPP 協議已成爲因特網的正式標準[RFC 1661]
PPP 協議有三個組成部分
如圖所示:
數據鏈路層協議可以用於異步串行或同步串行介質,使用LCP(鏈路控制協議)建立並維護數據鏈路連接
網絡控制協議(NCP)允許在點到點連接上使用多種網絡層協議
PPP協議幀格式
PPP 有一個 2 個字節的協議字段:
0x0021 — 信息字段就是IP 數據報。
0xC021 — 信息字段是 PPP 鏈路控制數據
0x8021 — 表示這是網絡控制數據
0xC023 — 信息字段是安全性認證PAP
0xC025 — 信息字段是LQR
0xC223 — 信息字段是安全性認證CHAP
標誌字段 F = 0x7E (符號“0x”表示後面的字符是用十六進制表示。十六進制的 7E 的二進制表示是 01111110)
地址字段 A 只置爲 0xFF。地址字段實際上並不起作用
控制字段 C 通常置爲 0x03
PPP 是面向字節的,所有的 PPP 幀的長度都是整數字節
問題:信息字段中出現了標誌字段的值,可能會被誤認爲是“標誌”,怎麼辦?
字節填充
將信息字段中出現的每個 0x7E 字節轉變成爲 2 字節序列(0x7D, 0x5E)
若信息字段中出現一個 0x7D 的字節, 則將其轉變成爲 2 字節序列(0x7D, 0x5D)
若信息字段中出現 ASCII 碼的控制字符(即數值小於 0x20 的字符),則在該字符前面要加入一個 0x7D 字節,同時將該字符的編碼加以改變
零比特填充方法
PPP 協議用在 SONET/SDH 鏈路時,是使用同步傳輸(一連串的比特連續傳送)
這時 PPP 協議採用零比特填充方法來實現透明傳輸:
在發送端,只要發現有 5 個連續 1,則立即填入一個 0。接收端對幀中的比特流進行掃描。每當發現 5 個連續1時,就把這 5 個連續 1 後的一個 0 刪除
PPP不使用序號和確認機制
原因如下:
- 在數據鏈路層出現差錯的概率不大時,使用比較簡單的 PPP 協議較爲合理
- 在因特網環境下,PPP 的信息字段放入的數據是 IP 數據報,數據鏈路層的可靠傳輸並不能夠保證網絡層的傳輸也是可靠的
- 幀檢驗序列 FCS 字段可保證無差錯接受
PPP協議的工作狀態
當用戶撥號接入 ISP 時,路由器的調制解調器對撥號做出確認,並建立一條物理連接
PC 機向路由器發送一系列的 LCP 分組(封裝成多個 PPP 幀)
這些分組及其響應選擇一些 PPP 參數,和進行網絡層配置,NCP 給新接入的 PC機分配一個臨時的 IP 地址,使 PC 機成爲因特網上的一個主機
通信完畢時,NCP 釋放網絡層連接,收回原來分配出去的 IP 地址,接着,LCP 釋放數據鏈路層連接。最後釋放的是物理層的連接
廣播信道的數據鏈路層
廣播信道用於局域網-多臺機器連成一個網
局域網
局域網最主要的特點是:網絡爲一個單位所擁有,且地理範圍和站點數目均有限
局域網具有如下的一些主要優點:
- 具有廣播功能:從一個站點可很方便地訪問全網局域網上的主機,可共享連接在局域網上的各種硬件和軟件資源
- 便於系統的擴展和逐漸地演變,各設備的位置可靈活調整和改變
- 提高了系統的可靠性、可用性和生存性
共享通信媒體
共享通信媒體分靜態劃分信道和動態媒體接入控制(多點接入)
靜態劃分信道使用的技術有:頻分複用、時分複用、波分複用、碼分複用(詳細看我物理層的文章)
動態媒體接入控制(多點接入)又分爲隨機接入(主要被以太網採用!)與受控接入 ,如多點線路探詢(polling),或輪詢。(目前已不被採用)
以太網(局域網的一部分)
最初的以太網是將許多計算機都連接到一根總線上,當初認爲這樣的連接方法既簡單又可靠,因爲總線上沒有有源器件
由於只有計算機 D 的地址與數據幀首部寫入的地址一致,因此只有 D 才接收這個數據幀
這種模式採用CSMA/CD協議
載波監聽多路訪問/碰撞檢測 -以太網使用的CSMA/CD協議
CSMA/CD 表示 Carrier Sense Multiple Access with Collision Detection
多路訪問:表示許多計算機以多點接入的方式連接在一根總線上
載波監聽:是指每一個站在發送數據之前先要檢測一下總線上是否有其他計算機在發送數據,如果有,則暫時不要發送數據,以免發生碰撞
碰撞檢測
計算機邊發送數據邊檢測信道上的信號電壓大小
- 當幾個站同時在總線上發送數據時,總線上的信號電壓擺動值將會增大(互相疊加)
- 當一個站檢測到的信號電壓擺動值超過一定的門限值時,就認爲總線上至少有兩個站同時在發送數據,表明產生了碰撞
- 所謂“碰撞”就是發生了衝突。因此**“碰撞檢測”也稱爲“衝突檢測”**
檢測到碰撞後:
- 在發生碰撞時,總線上傳輸的信號產生了嚴重的失真,無法從中恢復出有用的信息來.
- 每一個正在發送數據的站,一旦發現總線上出現了碰撞,就要立即停止發送,免得繼續浪費網絡資源,然後等待一段隨機時間後再次發送
電磁波在總線上的有限傳播速率的影響
當某個站監聽到總線是空閒時,也可能總線並非真正是空閒的
A 向 B 發出的信息,要經過一定的時間後才能傳送到 B
B 若在 A 發送的信息到達 B 之前發送自己的幀(因爲這時 B 的載波監聽檢測不到 A 所發送的信息),則必然要在某個時間和 A 發送的幀發生碰撞
碰撞的結果是兩個幀都變得無用
CSMA/CD重要特性
- 使用 CSMA/CD 協議的以太網不能進行全雙工通信而只能進行雙向交替通信(半雙工通信)
- 每個站在發送數據之後的一小段時間內,存在着遭遇碰撞的可能性,這種發送的不確定性使整個以太網的平均通信量遠小於以太網的最高數據率
爭用期
最先發送數據幀的站,在發送數據幀後至多經過時間兩倍的端到端往返時延,就可知道發送的數據幀是否遭受了碰撞,這段時間稱爲爭用期
經過爭用期這段時間還沒有檢測到碰撞,才能肯定這次發送不會發生碰撞
對於 10 Mb/s 以太網,在爭用期內可發送512 bit,即 64 字節
由於一檢測到衝突就立即中止發送,這時已經發送出去的數據一定小於 64 字節
以太網規定了最短有效幀長爲 64 字節,凡長度小於 64 字節的幀都是由於衝突而異常中止的無效幀
以太網及其擴展
以太網的兩個標準
DIX Ethernet V2 :世界上第一個局域網產品(以太網)的規約
IEEE 的 802.3 標準
以太網與數據鏈路層的兩個子層
爲了使數據鏈路層能更好地適應多種局域網標準,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 協議
以太網提供的服務
以太網提供的服務是不可靠的交付,即盡最大努力的交付
當接收站收到有差錯的數據幀時就丟棄此幀,其他什麼也不做。差錯的糾正由高層來決定
如果高層發現丟失了一些數據而進行重傳,但以太網並不知道這是一個重傳的幀,而是當作一個新的數據幀來發送
集線器(hub)
傳統以太網最初是使用粗同軸電纜,後來演進到使用比較便宜的細同軸電纜,最後發展爲使用更便宜和更靈活的雙絞線
不用電纜而使用無屏蔽雙絞線
每個站需要用兩對雙絞線,分別用於發送和接收
這種以太網採用星形拓撲,在星形的中心則增加了一種可靠性非常高的設備,叫做集線器(hub)
集線器是使用電子器件來模擬實際電纜線的工作,因此整個系統仍然像一個傳統的以太網那樣運行。集線器使用了大規模集成電路芯片,因此這樣的硬件設備的可靠性已大大提高了
使用集線器的以太網在邏輯上仍是一個總線網,各工作站使用的還是 CSMA/CD 協議,並共享邏輯上的總線
集線器很像一個多接口的轉發器,工作在物理層
以太網信道利用率
以太網的信道被佔用的情況:
爭用期長度爲端到端傳播時延的兩倍,檢測到碰撞後不發送干擾信號
幀長爲 L (bit),數據發送速率爲 C (b/s),因而幀的發送時間爲
L/C = T0 (s)
一個幀從開始發送,經可能發生的碰撞後,將再重傳數次,到發送成功且信道轉爲空閒(時爲止,是發送一幀所需的平均時間
在以太網中定義了參數 a,它是以太網單程端到端時延與幀的發送時間 T0 之比
要提高以太網的信道利用率,就必須減小 時延 與 T0 之比
理想情況下的極限信道利用率 Smax爲:
MAC
在局域網中,硬件地址又稱爲物理地址,或 MAC 地址
802 標準所說的“地址”嚴格地講應當是每一個站的“名字”或標識符
- IEEE 的註冊管理機構 RA 負責向廠家分配地址字段的前三個字節(即高位 24 位(總48位))
- 地址字段中的後三個字節(即低位 24 位)由廠家自行指派,稱爲擴展標識符,必須保證生產出的適配器沒有重複地址
- 一個地址塊可以生成224個不同的地址。這種 48 位地址稱爲 MAC-48,它的通用名稱是EUI-48
- “MAC地址”實際上就是適配器地址或適配器標識符EUI-48
MAC的檢查
適配器從網絡上每收到一個 MAC 幀就首先用硬件檢查 MAC 幀中的 MAC 地址
如果是發往本站的幀則收下,然後再進行其他的處理,否則就將此幀丟棄,不再進行其他的處理
發往本站的幀”包括以下三種幀:
- 單播(unicast)幀(一對一)
- 廣播(broadcast)幀(一對全體)
- 多播(multicast)幀(一對多)
MAC幀格式
同步碼告訴接收者要接收MAC幀了,用來迅速實現 MAC 幀的比特同步,爲了達到比特同步,在傳輸媒體上實際傳送的要比 MAC 幀還多 8 個字節
類型字段用來標誌上一層使用的是什麼協議,以便把收到的 MAC 幀的數據上交給上一層的這個協議
數據字段的正式名稱是 MAC 客戶數據字段
最小長度 64 字節 -18 字節的首部和尾部 = 數據字段的最小長度()48當數據字段的長度小於 46 字節時,應在數據字段的後面加入整數字節的填充字段,
以保證以太網的 MAC 幀長不小於 64 字節
無效MAC幀的判定
- 幀的長度不是整數個字節
- 用收到的幀檢驗序列 FCS 查出有差錯(循環冗餘校驗不通過)
- 數據字段的長度不在 46 ~ 1500 字節之間
對於檢查出的無效 MAC 幀就簡單地丟棄。以太網不負責重傳丟棄的幀
幀間最小間隔
幀間最小間隔爲 9.6 s,相當於 96 bit 的發送時間
一個站在檢測到總線開始空閒後,還要等待 9.6 微妙才能再次發送數據
這樣做是爲了使剛剛收到數據幀的站的接收緩存來得及清理,做好接收下一幀的準備
以太網的擴展與優化歷程
使用集線器:
優點:
- 使原來屬於不同碰撞域的局域網上的計算機能夠進行跨碰撞域的通信
- 擴大了局域網覆蓋的地理範圍
缺點:
- 碰撞域增大了,但總的吞吐量並未提高
- 如果不同的碰撞域使用不同的數據率,那麼就不能用集線器將它們互連起來
使用網橋:
網橋工作在數據鏈路層,它根據 MAC 幀的目的地址對收到的幀進行轉發
網橋具有過濾幀的功能:當網橋收到一個幀時,並不是向所有的接口轉發此幀,而是先檢查此幀的目的 MAC 地址,然後再確定將該幀轉發到哪一個接口
網橋能有效切割碰撞域:
優點:
- 過濾通信量
- 擴大了物理範圍
- 提高了可靠性
- 可互連不同物理層、不同 MAC 子層和不同速率(如10 Mb/s 和 100 Mb/s 以太網)的局域網
缺點:
- 存儲轉發增加了時延
- 在MAC 子層並沒有流量控制功能
- 具有不同 MAC 子層的網段橋接在一起時時延更大
- 網橋只適合於用戶數不太多(不超過幾百個)和通信量不太大的局域網,否則有時還會因傳播過多的廣播信息而產生網絡擁塞,這就是所謂的廣播風暴
透明網橋
目前使用得最多的網橋是透明網橋(transparent bridge)
“透明”是指局域網上的站點並不知道所發送的幀將經過哪幾個網橋,因爲網橋對各站來說是看不見的
透明網橋是一種即插即用設備,其標準是 IEEE 802.1D
交換機
網橋的升級版