計算機網絡-數據鏈路層筆記
數據鏈路層的位置、功能和服務
爲什麼需要數據鏈路層?
- 物理層傳輸可能出現誤碼:差錯控制 Error Control
- 接收方要防止數據來的太快太多:流量控制 Flow Control
- 廣播信道中傳輸信息,需要尋址(Addressing)和介質訪問控制(Media access control)
數據鏈路層的位置和功能
- 數據鏈路層負責將數據以可靠、高效的方式從一個節點傳送到鏈路上相鄰的另一個節點
- 數據單位:幀 frame
- 功能:
功能 | 封裝成幀(Packetizing) | 尋址(Addressing) | 差錯控制(Error control) | 流量控制(Flow control) | 介質訪問控制(Media access control) |
---|---|---|---|---|---|
目的 | 從物理層收到的比特流中分離出幀 | 確保收到的數據與發出的一致 | 不能讓慢速的接收方被快速的發送方淹沒 |
分組(包)和幀 Packets vs. Frames
逐跳通信
hop-to-hop communication 兩設備之間沒有其他數據鏈路層及以上的設備,只有傳輸介質和物理接口
適配器通信 Adapters Communicating
- 發送方:將packet封裝成幀;加檢錯碼,實現可靠傳輸;流量控制
- 接收方:尋找錯誤,檢查是否可靠傳輸;流量控制;將幀還原成packet,傳送到上一層
- 數據鏈路層功能在網卡(NIC)中實現:
提供給網絡層的服務
- 數據傳輸
- 無連接的服務:Connectionless services
服務類型 | 無確認無連接的服務 Unacknowledged connectionless service | 有確認無連接的服務 Acknowledged connectionless service |
---|---|---|
服務特點 | 沒有確認(ACK)和邏輯連接 | 對收到的每一幀都由確認(ACK) |
適用場景 | 多數LAN提供這種服務 | 在不可靠信道上使用 |
具體應用 | 信道質量極好如光纖,還有近距離通信,還有對實時性要求很高的服務,如VOIP, 視頻直播 | 無線系統 |
- 有確認面向連接的服務 Acknowledged connection-oriented service
服務類型 | 有確認面向連接的服務 |
---|---|
服務特點 | 預先建立一個連接,每個幀都被編號,確保可靠傳輸 |
適用情景 | 可靠性要求高且有一定可分配資源的情景 |
具體應用 | ATM |
成幀 Framing
- 在點到點鏈路上從A節點向B節點發送遺傳比特給主機B
- B節點必須能夠準確識別哪些比特組成一幀(一幀從哪裏開始,到哪裏結束)
- 要求:拆分比特流
- 約束條件(拆分結果需要滿足):簡單(接收方容易實現)、獨立於代碼(與傳輸的消息內容無關)、高效(使用的信道帶寬儘量少)、健壯性(不易出錯,出錯後易重新同步)
- 方法:字符計數法(Character count)、字符填充法(Flag byte with byte stuffing)、比特填充法(Starting and ending flags, with bit stuffing)、物理層編碼違例法(Physical layer coding violations)
字符計數法
- 在幀的頭部用一個字段(field)來說明幀內的字符個數
- 傳輸差錯可能導致數值被篡改
字符填充法(透明傳輸)
- 用一個標誌字節(flag)來標記幀的開始和結束
- 和所用的8位字符集相關
- 如果數據中包含和標誌(flag)相同的字節,則在該字節前加轉義字符ESC
比特填充法
- 幀中包含的比特數是任意的(不需要是8的整數倍)
- 起始/結束標記(flag):0111,1110
- 比Byte stuffing效率高
- 在原始數據連續5個1後加0
- 在HDLC中應用
- 容易遇到的問題
Tips:1比特誤碼最多影響2幀,容易恢復
物理層編碼違例法
- 在編碼方案由冗餘時,可以採用物理層編碼違例法(效率較高,但對物理層編碼有要求)
- 例如LAN使用的曼徹斯特編碼
- 每個有效的二進制位在信號中間都有跳變
- 信號中間沒有跳變的編碼,如高-高和低-低,用於標記幀的開始和結束
差錯控制 Error control
差錯類型
- 幀丟失:發送端傳出的幀沒有到達接受端(噪聲影響或在隊列中被丟棄)
- 幀損壞:某些比特出錯
單比特差錯與突發差錯 Single-bit Error and Burst Error
差錯檢測方法
- 奇偶校驗 Parity check:能檢測出單比特錯誤;單個奇偶校驗位性能:可檢出奇數個比特反轉錯誤,其他情況漏檢率50%
- 交錯檢驗 Parity Check for Blocks
編碼(n個校驗位):每個數據塊是一個矩陣;一次發送一行;對每一列計算一個奇偶校驗位
性能:可檢測出長度爲n的突發差錯;對於長度爲n+1的突發差錯,如果恰好第一個和最後一個比特被翻轉,而中間的比特都正確,這種無法檢測出來;如果發生更長的突發差錯,無法檢測出的概率爲 - 循環冗餘校驗 Cyclic Redundancy Check(CRC):可以檢測出一些突發錯誤
- 校驗和 Checksum
循環冗餘校驗CRC
發送方:
- 除法原理
- 被除數,將比特串看作多項式係數,例如
- 除數,最少兩位
- 做除法,得到的餘數爲校驗碼,校驗碼的長度一定小於除數
- 計算校驗位的算法如下:
1.將左移位(是的最高次冪)
2.用構成的比特串除以
3.從比特串中減去餘數,得到
接收方:驗證校驗位 - 如果出現傳輸差錯,到達的不是,而是
- 接收方計算,由於,結果取決於
- 如果差錯恰好對應於包含因子的多項式,將無法檢測出來;其他差錯都能被檢測出來
CRC檢錯能力分析: - 個校驗位能檢測出長度小於等於的全部突發差錯
- 能夠檢測出兩個獨立的單比特差錯
- 能夠檢測出所有奇數個翻轉差錯
- 對於其他長度大於的突發差錯,無法檢測出壞幀的概率爲
差錯糾正方法
- 前向糾錯 Forward Error Correction(FEC)
- 重傳糾錯 Automatic Repeat reQuest(ARQ)一般在可靠介質使用
糾錯碼:漢明距離 Hamming Distance
ECC(Error Correcting Code)將冗餘信息加入到待發送的信息中
- 漢明距離 Hamming Distance:兩個碼字中對應比特的值不同的數目,例如1000 1001和1011 0001,漢明距離爲3
- 要檢測出比特差錯,編碼的漢明距離至少爲
- 要糾正比特差錯,編碼的漢明距離至少是
- 校驗位的個數,例:要糾正單比特差錯,需要幾個校驗位?
設爲消息位的位數,爲校驗位的位數,
一共有個合法消息,與一個合法消息距離爲1的非法碼字有個,因此一共有個碼字
漢明碼
將碼字的各比特編號,最左端的爲1號,以此類推
- 校驗位:編號爲2的冪次(1,2,4,8…)的位置對應的比特;每個校驗位負責對一些比特(數據位)(包括校驗位本身)進行奇偶校驗
- 數據位:非二進制冪次的編號位置(3,5,6…)放數據位
例子:待校驗的消息‘A’(100,0001)
數據位的編號:3,5,6,7,9,10,11
四個校驗位:位置編號1,2,4,8(偶校驗)
發送前編碼
流量控制 Flow control
目的:防止發送方發送過快導致接收方沒有能力接收
流量控制分類
- 反饋控制(Feedback-based flow control):接收方向發送方回傳信息,表示允許更多信息發送或者指明當前情況,分爲停等協議(Stop-and-Wait: Sending one frame at a time)和滑動窗口協議(Sliding Window: Sending several frames at a time)
- 速率控制(Rate-based flow control):協議內置機制限制發送方的發送速率,不需要接收方的反饋
以下協議的假設
- 物理層網絡層數據鏈路層相互獨立,不會互相影響
- A向B傳輸數據,用的是可靠的,面向連接的服務
- 機器不會故障
烏托邦單工協議(A Utopian Simplex Protocol) 協議1
假設:
- 單工信道
- 信道無差錯
- 接收方有無限大的緩存
則,不需要差錯控制和流量控制
無差錯信道上的單工停止等待協議(A Simplex Stop-and-Wait Protocol for an Error-Free Channel) 協議2
假設:
- 單工信道
- 信道無差錯
- 接收方的緩存有限
則無需差錯控制,但需要流量控制
流量控制,停等(Stop-and-wait) - 發送方發出一幀,停下來等待
- 接收方發揮一個ACK
- 發送方接收到ACK後,發送下一幀
如果幀損壞,接收方檢測出錯誤後不反饋,發送方在超時後重傳
如果幀丟失,發送方在超時後重傳
帶重傳的ACK(A Simplex Protocol for a Noisy Channel) 協議3
假設:
- 單工信道
- 信道不可靠
- 接收方的緩存有限
- ACK和幀都需要序號,僅一位即可,僅區分前後
- 有超時和重傳機制
實際上是在協議2的基礎上添加了幀序號和超時重傳機制
滑動窗口協議
- 全雙工信道
- 允許捎帶應答(piggybacking)
- 允許一次發送多個數據幀
- 在收到ACK之前,發送方最多可以發送W個幀(W爲發送窗口大小)
- 接收方也許可以緩存多個幀
- 序號循環使用(n bits)
捎帶確認(piggybacking):延緩發送ACK,當網絡層有新數據要發送時,將其加入到新數據中一起發送
捎帶確認的優點:有效利用帶寬,降低接收方處理壓力
捎帶確認的缺點:延緩發送ACK,要延緩多久?需要添加確認定時器 Ack Timer
發送窗口與接收窗口
發送窗口:窗口內的序號代表着已發送但未收到ACK,發送窗口大小
接收窗口:窗口內的序號代表允許接收
一比特滑動窗口協議(A One-Bit Sliding Window Protocol) 協議4
- 發送窗口和接收窗口大小都爲1
- 問題:效率很低
Go Back N協議 協議5
基於滑動窗口技術:
- 發送窗口大小大於1,接收窗口大小爲1
- 如果接收方檢測到差錯,將丟棄出錯幀及後續所有到達的幀,知道正確收到重發的原出錯幀
累積ACK:Go Back N協議不需要對每個幀都回復ACK
收到ACK代表前面的所有傳送數據都正確到達接收方
最大發送窗口問題
使用n位序號,窗口大小不可以到達,原因如下:
當發送方發送完發送窗口內的所有 幀,在未收到ACK之前,接收方正確收到所有發送來的幀,接收窗口向前推移,此時,對於n位序號,有着如下約束:
選擇重傳協議(A Protocol Using Selective Repeat) 協議6
- 只有拒絕的幀才重傳
- 後續的無錯幀將被接收方接收並緩存(目的是減少重傳)
- 接收方因此必須維護較大的緩存
- 設計更加複雜
窗口大小的要求:
- 最大窗口大小不超過序號範圍的一半
- 發送窗口大小大於等於接收窗口大小
- 一般實現方法
接收方的緩存要求:緩存數量=窗口大小,與序號範圍無關
相較於協議5,添加設置了ACK定時器和NAK幀
ACK定時器 | 幀定時器 |
---|---|
設置時長較短 | 設置時長較長 |
只有一個 | 很多 |
NAK幀:收到NAK幀,就重傳該幀
滑動窗口協議性能計算(重點!!!)
幀傳輸模型:
傳輸時間(Transfer Time)和環回時間(Round Trip Time)
- 傳輸時間():接收方收到整個幀用的時間
- 環回時間(RTT):如果數據幀和ACK的傳輸路徑不同,RTT可能不是單程時延的兩倍
無差錯停等協議的性能
- 成功傳輸一個數據幀的時間爲
- :從開始發送到收到ACK的時間
- :發送一個數據幀的時間按
- :從發送方到接收方的傳播時間
- :處理時間
- :ACK的發送時間
假設:處理時間和ACK發送時間忽略不計
- 信道利用率
線路利用率計算:
- 信道容量: bps
- 幀長: bits
- 環回時延: sec
- 線路利用率
如果,則利用率低於50%
有差錯停等協議的性能
有傳輸差錯
- :一幀出錯的概率
- :幀傳輸的次數
無差錯滑動窗口協議的性能
發送時間歸爲單位1,則傳輸時延是
- 情形1:,爲發送窗口大小
- 情形2:
- 信道利用率
- 滑動窗口的信道利用率是的函數
帶寬時延積(Bandwidth-delay product):在單位傳播時延的時間內,信道可以容納多少位數據
- 捎帶確認:必須加上反向數據幀的發送時延