計算機網絡-數據鏈路層筆記

計算機網絡-數據鏈路層筆記

數據鏈路層的位置、功能和服務

爲什麼需要數據鏈路層?

  • 物理層傳輸可能出現誤碼:差錯控制 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個校驗位):每個數據塊是一個k×nk\times{n}矩陣;一次發送一行;對每一列計算一個奇偶校驗位
    在這裏插入圖片描述
    性能:可檢測出長度爲n的突發差錯;對於長度爲n+1的突發差錯,如果恰好第一個和最後一個比特被翻轉,而中間的比特都正確,這種無法檢測出來;如果發生更長的突發差錯,無法檢測出的概率爲2n2^{-n}
  • 循環冗餘校驗 Cyclic Redundancy Check(CRC):可以檢測出一些突發錯誤
  • 校驗和 Checksum

循環冗餘校驗CRC

發送方:

  • 除法原理
  • M(x)M(x)被除數,將比特串看作多項式係數,例如1101=x3+x2+x01101=x^3+x^2+x^0
  • G(x)G(x)除數,最少兩位
  • 做除法,得到的餘數爲校驗碼,校驗碼的長度一定小於除數
  • 計算校驗位的算法如下:
    1.將M(x)M(x)左移rr位(rrG(x)G(x)的最高次冪)
    2.用構成的比特串除以G(x)G(x)
    3.從比特串中減去餘數,得到T(x)T(x)
    在這裏插入圖片描述
    接收方:驗證校驗位
  • 如果出現傳輸差錯,到達的不是T(x)T(x),而是T(x)+E(x)T(x)+E(x)
  • 接收方計算[T(x)+E(x)]G(x)\frac{[T(x)+E(x)]}{G(x)},由於T(x)G(x)=0\frac{T(x)}{G(x)}=0,結果取決於E(x)G(x)\frac{E(x)}{G(x)}
  • 如果差錯E(x)E(x)恰好對應於包含G(x)G(x)因子的多項式,將無法檢測出來;其他差錯都能被檢測出來
    CRC檢錯能力分析:
  • rr個校驗位能檢測出長度小於等於rr的全部突發差錯
  • 能夠檢測出兩個獨立的單比特差錯
  • 能夠檢測出所有奇數個翻轉差錯
  • 對於其他長度大於rr的突發差錯,無法檢測出壞幀的概率爲2r2^{-r}

差錯糾正方法

  • 前向糾錯 Forward Error Correction(FEC)
  • 重傳糾錯 Automatic Repeat reQuest(ARQ)一般在可靠介質使用

糾錯碼:漢明距離 Hamming Distance

ECC(Error Correcting Code)將冗餘信息加入到待發送的信息中

  • 漢明距離 Hamming Distance:兩個碼字中對應比特的值不同的數目,例如1000 1001和1011 0001,漢明距離爲3
  • 要檢測出tt比特差錯,編碼的漢明距離至少爲t+1t+1
  • 要糾正tt比特差錯,編碼的漢明距離至少是2t+12t+1
  • 校驗位的個數,例:要糾正單比特差錯,需要幾個校驗位?
    mm爲消息位的位數,rr爲校驗位的位數,n=m+rn=m+r
    一共有2m2^m個合法消息,與一個合法消息距離爲1的非法碼字有nn個,因此一共有(n+1)2m(n+1)2^m個碼字(n+1)2m2n(n+1)2^m\le{2^n}(m+r+1)2r\Longrightarrow(m+r+1)\le{2^r}

漢明碼

將碼字的各比特編號,最左端的爲1號,以此類推

  • 校驗位:編號爲2的冪次(1,2,4,8…)的位置對應的比特;每個校驗位負責對一些比特(數據位)(包括校驗位本身)進行奇偶校驗
  • 數據位:非二進制冪次的編號位置(3,5,6…)放數據位
    例子:待校驗的消息‘A’(100,0001)
    數據位的編號:3,5,6,7,9,10,11
    四個校驗位:位置編號1,2,4,8(偶校驗)
    在這裏插入圖片描述
    發送前編碼3=1+25=1+46=2+47=1+2+43=1+2,5=1+4,6=2+4,7=1+2+49=1+810=2+811=1+2+89=1+8,10=2+8,11=1+2+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,發送窗口大小1W2n1\le{W}\le{2^n}
接收窗口:窗口內的序號代表允許接收

一比特滑動窗口協議(A One-Bit Sliding Window Protocol) 協議4

在這裏插入圖片描述

  • 發送窗口和接收窗口大小都爲1
  • 問題:效率很低

Go Back N協議 協議5

基於滑動窗口技術:

  • 發送窗口大小大於1,接收窗口大小爲1
  • 如果接收方檢測到差錯,將丟棄出錯幀及後續所有到達的幀,知道正確收到重發的原出錯幀

累積ACK:Go Back N協議不需要對每個幀都回復ACK

在這裏插入圖片描述
收到ACK代表前面的所有傳送數據都正確到達接收方

最大發送窗口問題

使用n位序號,窗口大小不可以到達2n2^n,原因如下:
當發送方發送完發送窗口內的所有 幀,在未收到ACK之前,接收方正確收到所有發送來的幀,接收窗口向前推移,此時,對於n位序號,有着如下約束:WT2n1W_T\le{2^n-1}

選擇重傳協議(A Protocol Using Selective Repeat) 協議6

  • 只有拒絕的幀才重傳
  • 後續的無錯幀將被接收方接收並緩存(目的是減少重傳)
  • 接收方因此必須維護較大的緩存
  • 設計更加複雜

窗口大小的要求:

  • 最大窗口大小不超過序號範圍的一半WT+WR2nW_T+W_R\le{2^n}
  • 發送窗口大小大於等於接收窗口大小WTWRW_T\ge{W_R}
  • 一般實現方法WT=WR=2n1W_T=W_R=2^{n-1}

接收方的緩存要求:緩存數量=窗口大小,與序號範圍無關
相較於協議5,添加設置了ACK定時器和NAK幀

ACK定時器 幀定時器
設置時長較短 設置時長較長
只有一個 很多

NAK幀:收到NAK幀,就重傳該幀

滑動窗口協議性能計算(重點!!!)

幀傳輸模型:

在這裏插入圖片描述
α=tprop/ttran\alpha=t_{prop}/t_{tran}

傳輸時間(Transfer Time)和環回時間(Round Trip Time)

  • 傳輸時間(txfrt_{xfr}):接收方收到整個幀用的時間txfr=ttran+tprop+tqueue/switchingt_{xfr}=t_{tran}+t_{prop}+t_{queue/switching}ttran=number of frame bits(bits)data rate(bps)t_{tran}=\frac{number\ of\ frame\ bits(bits)}{data\ rate(bps)}tprop=link length(m)vprop(m/s)t_{prop}=\frac{link\ length(m)}{v_{prop}(m/s)}
  • 環回時間(RTT):如果數據幀和ACK的傳輸路徑不同,RTT可能不是單程時延的兩倍

無差錯停等協議的性能

  • 成功傳輸一個數據幀的時間爲TFT_FTF=ttran+tprop+tproc+tack+tprop+tprocT_F=t_{tran}+t_{prop}+t_{proc}+t_{ack}+t_{prop}+t_{proc}
  • TFT_F:從開始發送到收到ACK的時間
  • ttrant_{tran}:發送一個數據幀的時間按
  • tpropt_{prop}:從發送方到接收方的傳播時間
  • tproct_{proc}:處理時間
  • tackt_{ack}:ACK的發送時間

假設:處理時間tproct_{proc}和ACK發送時間tackt_{ack}忽略不計

  • 信道利用率U=ttran2tprop+ttran=11+2αU=\frac{t_{tran}}{2t_{prop}+t_{tran}}=\frac{1}{1+2\alpha}α=tprop/ttran\alpha=t_{prop}/t_{tran}

線路利用率計算:

  • 信道容量:bb bps
  • 幀長:ll bits
  • 環回時延:RR sec
  • 線路利用率lblb+R=ll+bR\frac{\frac{l}{b}}{\frac{l}{b}+R}=\frac{l}{l+bR}
    如果l<bRl<bR,則利用率低於50%

有差錯停等協議的性能

有傳輸差錯

  • pp:一幀出錯的概率
  • NrN_r:幀傳輸的次數
  • α=tpropttran\alpha=\frac{t_{prop}}{t_{tran}}
  • Nr=i=1ipi1(1p)=11pN_r=\sum_{i=1}^\infty{i}p^{i-1}(1-p)=\frac{1}{1-p}
  • U=ttranNr(ttran+2tprop)=1p1+2αU=\frac{t_{tran}}{N_r(t_{tran}+2t_{prop})}=\frac{1-p}{1+2\alpha}

無差錯滑動窗口協議的性能

發送時間歸爲單位1,則傳輸時延是α\alpha

  • 情形1:W2α+1W\ge{2}\alpha+1WW爲發送窗口大小
    在這裏插入圖片描述
  • 情形2:W<2α+1W<2\alpha+1
    在這裏插入圖片描述
  • 信道利用率U={1,W大於等於2α+1W2α+1,W小於2α+1U=\begin{cases} 1, & \text {W大於等於2α+1} \\ \frac{W}{2\alpha+1}, & \text{W小於2α+1} \end{cases}
  • 滑動窗口的信道利用率是α\alpha的函數
    在這裏插入圖片描述

帶寬時延積(Bandwidth-delay product):在單位傳播時延的時間內,信道可以容納多少位數據
在這裏插入圖片描述

  • 捎帶確認:必須加上反向數據幀的發送時延U=W2α+2=W2(α+1)U=\frac{W}{2\alpha+2}=\frac{W}{2(\alpha+1)}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章