DataLinkLayer(數據鏈路層)
The Reference Model(參考模型)
layer | name |
---|---|
5 | Application layer |
4 | TransPort layer |
3 | NetWork layer |
2 | data link layer |
1 | physical layer |
Main Functionality(主要功能)
- 提供網絡層的接口
- 通過單向連接傳輸數據幀
- 處理傳輸過程中發生的錯誤
- 控制數據流,防止快速的發送方淹沒慢速的接受方
Data Link Layer Design Issues(數據鏈路層的設計問題)
Frames(幀)
1.數據鏈路層從網路層接受接受數據包
2.數據鏈路層會在將其發送到物理層之前,將這些數據包封裝成包
每一幀包括一個幀頭、一個幀尾、和一個有效荷載域(用於存放分組)
Relationship between packets and frames(包和幀的關系)
1.一個來自網絡層數據包變成數據鏈路層中的有效荷載域
2.數據鏈路層通過給這個包加上幀頭和幀尾,把這個包放到對應的幀中
Placement of the data link protocol(數據鏈路協議的位置)
1.一個WAN(廣域網)子網包含了好多路由器,它們通過租用點到點的電話線連接起來。
2.某一幀到達一個路由器的時候,硬件會首先檢查它是否有錯誤,然后將該幀傳遞給數據鏈路層軟件
3.數據鏈路層軟件檢查這一幀,看是否有自己期望的幀,如果有,就把包含有效載荷域中的分組交給路由軟件,接着路由軟件選擇正確的輸出線路,並且把分組向下傳遞給數據鏈路層軟件,然后數據鏈路層軟件把它發送出去,進過兩個路由器的數據流情況如圖。
4.路由代碼總是希望所有的工作都能正確的完成,也就是說,在每一條點到點線路上建立起可靠、有序的連接。它並不希望老是陷入到分組丟失的境地。如圖總虛線框所示,數據鏈路層使得不可靠的通信看起來更加完美,至少比原來更好,另一方面,盡管我們在每一個路由器中顯示了多份數據鏈路層軟件的版本,但是實際上,只有一份數據鏈路層軟件,它負責處理所有的線路,每條線路有不同的表和數據結構。
Possible Services(為網絡層提供的服務)
可能提供的服務
1.無確認的無連接服務
幀在無連接的情況下被傳送或者在錯誤恢復的情況下被傳送
例如: 以太網
無確認的無連接服務是指源機器向目標機器發送獨立的幀,目標機器並不對這些幀進行確認,事先並不建立邏輯連接,事后也不釋放邏輯連接,若由於線路上有噪聲導致某一幀丟失,則數據鏈路層不會檢測這種丟幀現象,也不會恢復,當錯誤率很低的時候,這一類服務是十分合適的比如語音傳遞,這種實時通信中數據遲到比數據損壞更不好,絕大多數LAN(局域網)在數據鏈路層上都是使用的無確認的無連接服務。
2.有確認的無連接服務
在必要的情況下,幀在重傳的情況下被傳送
例如:802.11
為了提供可靠性,引入了有確認的無連接服務,當提供這種服務的時候,仍然沒有使用邏輯連接,但是所發送的每一幀都需要單獨確認,這樣,發送發就知道每一幀是否已經正確的到達,如果有一幀在指定的時間內沒有到達的話,則發送方將再次發送該幀,這類服務尤其適合不可靠的新道,比如無線系統。
3.有確認的面向連接的服務
在幀被傳送之前,連接就已經建立起來了
這種服務是源機器和目標機器在傳輸之前首先建立一個連接,該連接上發送的每一幀都會被編號,數據鏈路層保證每一幀被真正接受到,而且它保證每一幀只被接受一次,並且所有的幀按正確的順序接收,相反,在無連接服務中,如果報文丟失了,則一個分組可能會發送多次,因而也會接受多次。於此相反,面向連接服務相當於為網絡層進程提供了一個可靠的位流。
Framing Methods(成幀方法)
Byte Count(字節計數法)
這種成幀方法利用頭部一個域來指定幀中的字節數。當目標端的數據鏈路層看到這個字符值的時候,它世道后面跟着多少字符,也就是知道該幀的結束在哪里。
但是這種方法的問題是,你前面錯了的話,你后面都錯,所以現在用的少了。
Flag bytes with byte stuffing(含字節填充的分界符法)
這種成幀方法考慮了錯誤之后同步的問題,它的做法是讓每一幀都用一些特殊的字節作為開始和結束,在過去,起始和結束字節是不同的,但是現在絕大多數的協議傾向於使用相同的字節,作為標志字節
但是這種方法也有一種很嚴重的問題,當標志字節的位模式出現在數據中,這個問題很容易發生,這種位模式往往會干擾幀的分界。解決這種問題的辦法是,發送方在這種偶爾出現的每個標志字符前面插入一個特殊的轉義字節ESC,接受端的數據鏈路層在將數據送給網絡層之前會刪除掉這種轉義字節。這種技術叫做字節填充技術
但是如果轉義字符也在數據中間怎么辦?答案是同樣用轉義字節來填充
Flag bits with bit stuffing(含位填充的分界標志法)
每一幀的開始和結束都有一個特殊的位模式,01111110實際上就是一個標志字節,當發送方的數據鏈路層碰到數據中5個連續的位1的時候,它自動在輸出流中填充一個位0,這種位填充機制與字節填充機制非常的相似,在字節填充機制中,當發送方看到數據中的標志字節的時候,它就在其前面填充一個轉義字符,然后傳送到輸出字節中。
當接收方看到5個連續輸入位1,並且后面是位0,它自動去掉該0位,就好像字節填充過程對於兩方計算機中的網絡完全透明一樣,位填充的過程也對網絡層完全透明。如果用戶數據包含了標志模式01111110,則該標志當做011111010來傳輸,但是存儲在接收方內存中的是0111110.
在為填充機制中,通過標志模式可以明確的識別出兩幀之間的邊界。因此如果接受方失去了幀同步,它只需要在輸入流中掃描標志序列即可,因為標志序列只可能出現在幀邊界上,永遠不可能出現在數據中。
Physical layer coding violations(物理層編碼違例法)
適用於物理介質上的編碼方法中包含冗余信息的網絡,LAN中用兩個物理位來編碼1位數據,通常1位是高-低電平對,0是低-高電平對,每一位數據位都有一個中間電平的越變,這使得接受方容易定位到邊界上。
Error Control(錯誤控制)
- 修復受到的錯誤的幀
- 要求接受方可以檢測出錯誤
- 通常下發送方會重新發送無確認的幀
- 使用計時器防止確認丟失
Flow Control(流控制)
- 防止快速的發送方發送的數據淹沒接受方
- 接受方提供它所能接受數據量的反饋
- 由於NIC以“線速”運行,因此在Link層中很少見
- 接收器可以盡快獲取數據
- 鏈接和傳輸層中的主題
Error Detection and Correction(錯誤的發現和糾正)
- 錯誤代碼為數據增加了結構冗余,因此可以檢測或糾正錯誤
- 錯誤檢測代碼
- 二維奇偶校驗
- 校驗和
- 循環冗余校驗碼
- 錯誤糾正碼
- 海明碼
- 二進制卷積碼
- 里德-所羅門和低密度奇偶校驗碼
- 數學復雜
- 廣泛用於實際系統
錯誤檢測
Hamming’s Work(海明碼的工作)
-
Codeword(碼字)
- m: data bits(m個數據位)
- n :redundancy bits (check bits)(冗余位也稱校驗位)
- 代碼將m位的數據轉換為m + r位的代碼字
-
基本的規則
- 對於漢明距離為d的任何兩個碼字,將一個碼字轉換為另一個碼字將需要d個單位錯誤
-
完整代碼的漢明距離
- 代碼中任何兩個代碼字之間所有可能的漢明距離的最小值
-
漢明距離
- 將一個有效碼字轉換為另一個有效碼字所需的最小位數的翻轉
- 兩個碼字之間的差值(按位數)
- 可以使用異或(XOR)來確定
- 例子
- 10位的4個碼字
- 0000000000, 0000011111, 1111100000, and 1111111111
- 漢明碼是5
- 將一個有效碼字轉換為另一個有效碼字所需的最小位數的翻轉
-
帶距離的代碼的界限
- 檢測d位錯誤
- 需要d + 1的距離
- 例如:上面的4個錯誤
- 更正d位錯誤
- 需要2d + 1位的距離
- 例如:上述2個錯誤
- 檢測d位錯誤
-
校正比檢測困難
- 糾正=檢測+糾正措施
-
檢錯特性
- 代碼的漢明距離d + 1需要檢測d個錯誤
- 通過檢測非法代碼字來檢測錯誤
-
例子
- 0000000000, 0000011111
1111100000, 1111111111 - 漢明距離5
- 檢錯能力:4個單位錯誤
- 原因:5個單位錯誤可能將一個有效代碼字轉換為另一個有效代碼字
- 0000000000, 0000011111
Parity(奇偶校驗)
-
將奇偶校驗位用於ASCII代碼
- 偶校驗:1011010→10110100
- 奇數校驗:1011010→10110101
-
奇偶校驗位被添加為數據位的模2和
- XOR-偶校驗
- 例如:1110000->11100001
- 檢測檢查總和是否錯誤,即是否存在錯誤
-
檢測奇數錯誤的簡單方法
- 示例:1錯誤→11100101
- 由於總和錯誤而被檢測到
- 示例:3個錯誤→11011001
- 由於總和錯誤而被檢測到
- 示例:2個錯誤→11101101
- 由於總和正確,因此未檢測到
- 示例:1錯誤→11100101
-
奇偶校驗位本身也可能發生錯誤
-
檢測隨機錯誤的可能性:½
-
交織N個奇偶校驗位可檢測高達N個的突發錯誤
- 每個奇偶校驗和是在不相鄰的位上進行的
- 甚至多達N個錯誤的突發仍然會使奇偶校驗正常工作
Checksum(校驗和)
- 定義
- 與消息相關聯的一組校驗位,無論其計算方式如何
- 通常放在消息的末尾
- 作為求和函數的補充
- 通過將整個接收到的碼字,數據位和校驗和相加來檢測錯誤
- 如果結果為零,則說明沒有檢測到錯誤
CRC(多項式編碼)
-
多項式代碼
- 又名 循環冗余校驗(CRC)
-
性質
-
多項式算術以模2進行(無進位或借位)
-
加法和減法與XOR相同
- 10011011 + 11001010 = 01010001
- 01010101 – 10101111 = 11111010
-
CRC校驗和計算
- G(x)
- 生成多項式
- 發送者和接收者都同意使用
- 高位和低位均為1
- G(x)度:r
- M(x)
- 帶有m位的幀
- 用度為m-1的多項式表示
- 比G(x)長
- G(x)
-
計算校驗和的算法
- 將r個零位附加到M(x)的低端,使其具有m + r個位的M’(x)
- 使用模2除法將M’(x)除以G(x)
- 從M’(x)減去余數使其成為M’(x)
-
結果M’(x)是要發送的校驗和幀
-
接收者可以將M’(x)除以G(x)
錯誤糾正
-
糾錯屬性
- 需要距離為2d + 1的代碼來糾正d個錯誤
- 通過將非法代碼字轉換為就漢明距離而言最接近的合法代碼字,可以糾正錯誤。
-
例
- 具有4個有效代碼字的代碼
- 0000000000,0000011111
- 1111100000、1111111111
- 漢明距離:5
- 糾錯能力:2個單位錯誤
- 原因:3個單位錯誤可能將一個碼字轉換為另一個
- 具有4個有效代碼字的代碼
Hamming Method(漢明碼方式)
- 一種糾正錯誤的方法
- 在發送者處
- 位從1開始從左到右編號
- 2的冪的位用作校驗位
- 1、2、4、8、16、32等
- 其余的充滿數據位
- 3、5、6、7、9、10、11等
- 每個校驗位強制某些位集合(包括其自身)的奇偶校驗為偶數(或奇數)
- 在發件人處(2)
- 每個數據位表示為2的冪的和
- 11 = 1 + 2 + 8
- 29 = 1 + 4 + 8 + 16
- 數據位有助於上述形式的表達式中出現的校驗位
- 位11有助於檢查位1、2和8
- 位29有助於檢查位1、4、8和16
- 在接收器處
- 以與發送方檢查相同的方式檢查每個校驗位(1)(2)3(4)567(8)9……
- 總結不能產生正確奇偶校驗的校驗位
- 結果表明數據位已更改,即錯誤
- 例
- 如果數據位11發生更改,即發生錯誤,則校驗位1、2和8將更改
- 例
- 在發送者處
- M:1001000
- 碼字:(1)(2)1(4)001(8)000
- 3 = 1 + 2; 5 = 1 + 4; 6 = 2 + 4; 7 = 1 + 2 + 4; 9 = 1 + 8; 10 = 2 + 8; 11 = 1 + 2 + 8
- (1)=1⊕0⊕1⊕0⊕0= 0
- (2)=1⊕0⊕1⊕0⊕0= 0
- (4)=0⊕0⊕1= 1
- (8)=0⊕0⊕0= 0
- 在發送者處
- 因此,代碼字= 00110010000
- 范例(2)
- 在接收器處
- 碼字= 00110010000
- (1)=(3)⊕(5)⊕(7)⊕(9)⊕(11)= 0
- (2)=(3)⊕(6)⊕(7)⊕(10)⊕(11)= 0
- (4)=(5)⊕(6)⊕(7)= 1
- (8)=(9)⊕(10)⊕(11)= 0
- 如果更改了數據位11,則檢查位1、2和8也已更改(1 + 2 + 8 = 11)
Burst Error(突發錯誤)
使用漢明碼糾正突發錯誤
Elementary Data Link Protocols(基本數據鏈接協議)
Link layer environment(鏈路層環境)
- 通常實現為NIC和OS驅動程序
- 網絡層(IP)通常是OS軟件
-
使用庫函數實現鏈路層協議
-
協議中需要遵循一些定義
-
在文件protocol.h中定義
Utopian simplex protocol(烏托邦單純形協議)
- 理想協議(p1)
- 沒有錯誤,接收者的運行速度與發送者一樣快
- 僅單向數據傳輸
- 既沒有錯誤也沒有流控制……
Stop-and-Wait protocol for error-free channel(無錯誤通道的停止等待協議)
- 協議(p2)確保發送方永遠不會超過接收方
- 接收器准備好后返回一個虛擬幀(ack)
- 一次僅顯示一幀,因此稱為停止等待
- 添加了流量控制
Stop-and-Wait protocol for noisy channel(嘈雜通道的停止等待協議)
- ARQ(自動重復請求)添加了錯誤控制
- 接收方以“ ack”幀答復已正確接收的幀
- 如果未收到預期的“ ack”,則發送方設置計時器並重新傳輸幀
- 為了確保正確性,必須對車架和車架進行編號
- 接收方需要區分重發(由於丟失的確認或早期計時器)和新幀
- 對於停止等待,兩個數字(使用1位)就足夠了
Sliding Window Protocols(滑動窗口協議)
Concept of Sliding Window(滑動窗口協議)
-
發件人維護它可以發送的幀窗口
- 它需要緩沖幀以進行可能的重發
- 窗口隨着下一個確認前進
-
接收方維護它可以接收的幀窗口
- 它需要保留到達的緩沖空間
- 窗口按順序到達
-
較大的窗口將啟用流水線以有效使用鏈接
- 停止等待(w = 1)對於長鏈接效率不高
- 最佳窗口(w)取決於帶寬延遲(BD)
- 使w≥2BD+ 1以實現高鏈路利用率
-
流水線導致錯誤/緩沖的不同設計選擇
- 后退-N
- 選擇性重復
A One-Bit Sliding Window Protocol(一位滑動窗口協議)
- 通過停止和等待雙向傳輸數據
- 搭載反向數據幀以提高效率
- 處理傳輸錯誤,流量控制,早期計時器
- 協議的兩種情況
- 由於重復傳輸,同時啟動[右]與正常[左]相比導致正確但緩慢的操作
- 由於重復傳輸,同時啟動[右]與正常[左]相比導致正確但緩慢的操作
A Protocol Using“Go Back N”(使用“返回N”的協議)
- 接收方僅接受/確認按順序到達的幀
- 接收方丟棄跟隨丟失/錯誤幀的幀
- 發件人超時並重新發送所有未完成的幀
-
由於錯誤而重新傳輸
- 接收方的窗口大小為1(a)
- 接收方的窗口大小很大(b)
-
在軟件中模擬多個計時器
- 排隊超時(a)
- 第一次超時后的情況(b)
A Protocol Using “Selective Repeat”(使用“選擇性重復”的協議)
- 接收器在接收窗口中的任何位置接受幀
- 累積確認表示最高有序幀
- NAK(負確認)會導致發送方在超時重新發送窗口之前重新發送丟失的幀
-
選擇性重復的權衡
- 由於在接收者處進行緩沖並在發送者處使用多個計時器,因此比Go-Back-N更復雜
- 由於僅重新傳輸丟失的幀(錯誤率低),因此可以更有效地利用鏈路帶寬
-
(a)窗口大小為7的初始情況
-
(b)在發送和接收了七個幀之后,但未確認
-
(c)窗口大小為4的初始情況
-
(d)在發送和接收四個幀之后,但未確認
- 為了正確起見,我們要求:序列號至少是窗口的兩倍
Example Data Link Protocols(示例數據鏈接協議)
Packet over SONET(SONET上的數據包)
- 通過SONET光纖鏈路承載IP數據包的方法
- 使用PPP(點對點協議)進行成幀
PPP (Point-to-Point Protocol)(PPP(點對點協議))
-
跨鏈路傳送數據包的一般方法
-
幀使用標志(0x7E)和字節填充
-
"無編號模式”(無連接的未確認服務)用於承載IP數據包
-
使用校驗和檢測錯誤
-
鏈接控制協議,可打開/關閉PPP鏈接
ADSL (Asymmetric Digital Subscriber Line)(ADSL(非對稱數字用戶線))
- 廣泛用於本地環路上的寬帶Internet
- ADSL從調制解調器(客戶)運行到DSLAM(ISP)
- IP數據包通過PPP和AAL5 / ATM發送(通過)
- PPP數據通過ATM信元以AAL5幀發送
- ATM是使用短的固定大小信元(53字節)的鏈路層
- 每個單元都有一個虛擬電路標識符
- AAL5是一種通過ATM發送數據包的格式
- PPP幀轉換為AAL5幀(PPPoA)
HDLC (High-level Data Link Control)(高級數據鏈接控制)
- 歷史
- SDLC(同步數據鏈接控制)
- 對於IBM大型機
- ADCCP(高級數據通信控制程序)
- ANSI標准
- HDLC(高級數據鏈接控制)
- ISO標准
- LAP(鏈接訪問過程)
- X.25網絡接口的CCITT標准
- SDLC(同步數據鏈接控制)
Data link layer in the Internet(互聯網中的數據鏈路層)
- 充當互聯網主機的個人計算機