tags: 計算機網路, title: 計算機網路第三篇【資料鏈路層】
資料鏈路的概念以及相關基礎知識
資料鏈路層使用的通道主要有以下兩種型別:
- 點對點通道。這種通道使用一對一的點對點通訊方式。
- 廣播通道。這種通道使用一對多的廣播通訊方式,因此過程比較複雜。廣播通道上連線的主機很多,因此必須使用專用的共享通道協議來協調這些主機的資料傳送。
資料鏈路層只關注資料在鏈路層流通的情況:
資料鏈路和幀
資料鏈路 (data link) 除了物理線路外,還必須有通訊協議來控制這些資料的傳輸。若把實現這些協議的硬體和軟體加到鏈路上,就構成了資料鏈路。
- 現在最常用的方法是使用介面卡(即網路卡)來實現這些協議的硬體和軟體。
- 一般的介面卡都包括了資料鏈路層和物理層這兩層的功能。
也有人採用另外的術語。這就是把鏈路分為物理鏈路和邏輯鏈路。
- 物理鏈路就是上面所說的鏈路。
- 邏輯鏈路就是上面的資料鏈路,是物理鏈路加上必要的通訊協議。
資料鏈路層傳送的是幀
資料鏈路層不必考慮物理層如何實現位元傳輸的細節。甚至還可以更簡單地設想好像是沿著兩個資料鏈路層之間的水平方向把幀直接傳送到對方。
資料鏈路層的三個基本問題
- 封裝成幀
- 透明傳輸
- 差錯控制
封裝成幀
封裝成幀 (framing) 就是在一段資料的前後分別新增首部和尾部,然後就構成了一個幀
首部和尾部的一個重要作用就是進行幀定界。
對於定界而言,我們可以使用控制字元進行幀定界
當資料是由可列印的 ASCII 碼組成的文字檔案時,幀定界可以使用特殊的幀定界符。
例子:
控制字元 SOH (Start Of Header) 放在一幀的最前面,表示幀的首部開始。另一個控制字元 EOT (End Of Transmission) 表示幀的結束。
透明傳輸
當然了,我們有可能會想到當我們的首部和尾部在資料中就已經出現的時候,那麼我們的幀怎麼定界呢???
解決方法:位元組填充 (byte stuffing) 或字元填充 (character stuffing)。
- 傳送端的資料鏈路層在資料中出現控制字元**“SOH”或“EOT”的前面插入一個轉義字元“ESC” (其十六進位制編碼是 1B)。**
- 接收端的資料鏈路層在將資料送往網路層之前刪除插入的轉義字元。
- 如果轉義字元也出現在資料當中,那麼應在轉義字元前面插入一個轉義字元 ESC。當接收端收到連續的兩個轉義字元時,就刪除其中前面的一個。
差錯檢測
在傳輸過程中可能會產生位元差錯:1 可能會變成 0 而 0 也可能變成 1。在一段時間內,傳輸錯誤的位元佔所傳輸位元總數的比率稱為誤位元速率 BER (Bit Error Rate)
- 誤位元速率與訊雜比有很大的關係
- 為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢測措施。
迴圈冗餘檢驗
在資料鏈路層傳送的幀中,廣泛使用了迴圈冗餘檢驗 CRC 的檢錯技術。
- 在傳送端,先把資料劃分為組。假定每組 k 個位元。
- 假設待傳送的一組資料 M = 101001(現在 k = 6)。我們在 M 的後面再新增供差錯檢測用的 n 位冗餘碼一起傳送。
- 用二進位制的模 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) 位。
接收端對收到的每一幀進行 CRC 檢驗
- (1) 若得出的餘數 R = 0,則判定這個幀沒有差錯,就接受 (accept)。
- (2) 若餘數 R 0,則判定這個幀有差錯,就丟棄。
但這種檢測方法並不能確定究竟是哪一個或哪幾個位元出現了差錯。
只要經過嚴格的挑選,並使用位數足夠多的除數 P,那麼出現檢測不到的差錯的概率就很小很小。
幀檢驗序列 FCS
在資料後面新增上的冗餘碼稱為幀檢驗序列 FCS (Frame Check Sequence)。
迴圈冗餘檢驗 CRC 和幀檢驗序列 FCS 並不等同。
- CRC 是一種常用的檢錯方法,而 FCS 是新增在資料後面的冗餘碼。
- **FCS 可以用 CRC 這種方法得出,但 CRC 並非用來獲得 FCS 的唯一方法。 **
差錯檢測只是保證在傳輸過程中幀無差錯
僅用迴圈冗餘檢驗 CRC 差錯檢測技術只能做到無差錯接受 (accept)。
“無差錯接受”是指:“凡是接受的幀(即不包括丟棄的幀),我們都能以非常接近於 1 的概率認為這些幀在傳輸過程中沒有產生差錯”
在資料鏈路層使用 CRC 檢驗,能夠實現無位元差錯的傳輸,但這還不是可靠傳輸。
要做到“可靠傳輸”(即傳送什麼就收到什麼)就必須再加上確認和重傳機制。
PPP協議
上面也已經說了,資料鏈路使用的通道主要有以下兩種型別,一種是廣播,一種就是點對點。
對於點對點的鏈路,目前使用得最廣泛的資料鏈路層協議是點對點協議 PPP (Point-to-Point Protocol)。
使用者使用撥號電話線接入網際網路時, 使用者計算機和 ISP 進行通訊時所使用的資料鏈路層協議就是 PPP 協議。
PPP 協議有三個組成部分:
- (1) 一個將 IP 資料包封裝到序列鏈路的方法。
- (2) 鏈路控制協議 LCP (Link Control Protocol)。
- (3) 網路控制協議 NCP (Network Control Protocol)。
PPP協議幀的格式
PPP 幀的首部和尾部分別為 4 個欄位和 2 個欄位。 標誌欄位 F = 0x7E (符號“0x”表示後面的字元是用十六進位制表示。十六進位制的 7E 的二進位制表示是 01111110)。 地址欄位 A 只置為 0xFF。地址欄位實際上並不起作用。 控制欄位 C 通常置為 0x03。 PPP 是面向位元組的,所有的 PPP 幀的長度都是整數字節。
PPP協議透明傳輸的問題
與上面在通道傳輸的資料一樣、PPP協議也是要解決透明傳輸的問題,來確保我們的幀的定界。
- 當 PPP 用在同步傳輸鏈路時,協議規定採用硬體來完成位元填充(和 HDLC 的做法一樣)。
- 當 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 釋放資料鏈路層連線。最後釋放的是物理層的連線。
可見,PPP 協議已不是純粹的資料鏈路層的協議,它還包含了物理層和網路層的內容。
介面卡(網路卡)作用
網路介皮膚又稱為通訊介面卡 (adapter) 或網路介面卡 NIC (Network Interface Card),或“網路卡”。
介面卡的重要功能:
- 進行序列/並行轉換。
- 對資料進行快取。
- 在計算機的作業系統安裝裝置驅動程式。
- 實現乙太網協議。
區域網拓撲結構
CSMA/CD協議
CSMA/CD 含義:載波監聽多點接入 / 碰撞檢測 (Carrier Sense Multiple Access with Collision Detection) 。
- “多點接入”表示許多計算機以多點接入的方式連線在一根匯流排上。
- “載波監聽”是指每一個站在傳送資料之前先要檢測一下匯流排上是否有其他計算機在傳送資料,如果有,則暫時不要傳送資料,以免發生碰撞。
- 匯流排上並沒有什麼“載波”。因此, “載波監聽”就是用電子技術檢測匯流排上有沒有其他計算機傳送的資料訊號。
- 匯流排上的每一個工作的計算機都能檢測到 B 傳送的資料訊號。
- 由於只有計算機 D 的地址與資料幀首部寫入的地址一致,因此只有 D 才接收這個資料幀。
- 其他所有的計算機(A, C 和 E)都檢測到不是傳送給它們的資料幀,因此就丟棄這個資料幀而不能夠收下來。
- 在具有廣播特性的匯流排上實現了一對一的通訊。
碰撞檢測
由於電磁波在匯流排上的傳播速率是有限的,當某個站監聽到匯流排是空閒時,也可能匯流排並非真正是空閒的。
- A 向 B 發出的資訊,要經過一定的時間後才能傳送到 B。
- B 若在 A 傳送的資訊到達 B 之前傳送自己的幀 (因為這時 B 的載波監聽檢測不到 A 所傳送的資訊),則必然要在某個時間和 A 傳送的幀發生碰撞。
- 碰撞的結果是兩個幀都變得無用。
所以需要在傳送期間進行碰撞檢測,以檢測衝突。
“碰撞檢測”就是計算機邊傳送資料邊檢測通道上的訊號電壓大小。
當幾個站同時在匯流排上傳送資料時,匯流排上的訊號電壓擺動值將會增大(互相疊加)。 當一個站檢測到的訊號電壓擺動值超過一定的門限值時,就認為匯流排上至少有兩個站同時在傳送資料,表明產生了碰撞。 所謂“碰撞”就是發生了衝突。因此“碰撞檢測”也稱為“衝突檢測”
每一個正在傳送資料的站,一旦發現匯流排上出現了碰撞,就要立即停止傳送,免得繼續浪費網路資源,然後等待一段隨機時間後再次傳送
使用 CSMA/CD 協議的乙太網不能進行全雙工通訊而只能進行雙向交替通訊(半雙工通訊),因為了碰撞了幀就無效了。
當傳送資料的站一旦發現發生了碰撞時:
- (1) 立即停止傳送資料;
- (2) 再繼續傳送若干位元的人為干擾訊號 (jamming signal),以便讓所有使用者都知道現在已經發生了碰撞。
工作過程:
- (1) 準備傳送。但在傳送之前,必須先檢測通道。
- (2) 檢測通道。若檢測到通道忙,則應不停地檢測,一直等待通道轉為空閒。若檢測到通道空閒,並在 96 位元時間內通道保持空閒(保證了幀間最小間隔),就傳送這個幀。
- (3) 檢查碰撞。在傳送過程中仍不停地檢測通道,即網路介面卡要邊傳送邊監聽。這裡只有兩種可能性:
- ①傳送成功:在爭用期內一直未檢測到碰撞。這個幀肯定能夠傳送成功。傳送完畢後,其他什麼也不做。然後回到 (1)。
- ②傳送失敗:在爭用期內檢測到碰撞。這時立即停止傳送資料,並按規定傳送人為干擾訊號。介面卡接著就執行指數退避演算法,等待 r 倍 512 位元時間後,返回到步驟 (2),繼續檢測通道。但若重傳達 16 次仍不能成功,則停止重傳而向上報錯。
集線器與交換機
集線器
採用雙絞線的乙太網採用星形拓撲,在星形的中心則增加了一種可靠性非常高的裝置,叫做集線器 (hub)。
- 集線器是使用電子器件來模擬實際電纜線的工作,因此整個系統仍然像一個傳統的乙太網那樣執行。
- 使用集線器的乙太網在邏輯上仍是一個匯流排網,各工作站使用的還是 CSMA/CD 協議,並共享邏輯上的匯流排。
- 集線器很像一個多介面的轉發器,工作在物理層。
- 集線器採用了專門的晶片,進行自適應串音回波抵消,減少了近端串音。
交換機
使用多個集線器可連成更大的、多級星形結構的乙太網。
優點
- 使原來屬於不同碰撞域的乙太網上的計算機能夠進行跨碰撞域的通訊。
- 擴大了乙太網覆蓋的地理範圍。
缺點
- 碰撞域增大了,但總的吞吐量並未提高。
- 如果不同的碰撞域使用不同的資料率,那麼就不能用集線器將它們互連起來。
擴充套件乙太網更常用的方法是在資料鏈路層進行。
- 早期使用網橋,現在使用乙太網交換機
- 當網橋收到一個幀時,並不是向所有的介面轉發此幀,而是先檢查此幀的目的 MAC 地址,然後再確定將該幀轉發到哪一個介面,或把它丟棄。
交換機特點:
- 乙太網交換機實質上就是一個多介面的網橋。
- 通常都有十幾個或更多的介面。
- 每個介面都直接與一個單臺主機或另一個乙太網交換機相連,並且一般都工作在全雙工方式。
- 乙太網交換機具有並行性。
- 能同時連通多對介面,使多對主機能同時通訊。
- 相互通訊的主機都是獨佔傳輸媒體,無碰撞地傳輸資料。
- 乙太網交換機是一種即插即用裝置,其內部的幀交換表(又稱為地址表)是通過自學習演算法自動地逐漸建立起來的。
- 轉發速率要比使用軟體轉發的網橋快很多。
交換機的交換方式
儲存轉發方式
- 把整個資料幀先快取後再進行處理。
直通 (cut-through) 方式
- 接收資料幀的同時就立即按資料幀的目的 MAC 地址決定該幀的轉發介面,因而提高了幀的轉發速度。
- 缺點是它不檢查差錯就直接將幀轉發出去,因此有可能也將一些無效幀轉發給其他的站。
乙太網交換機執行自學習演算法自動維護交換表
具體過程:
A 先向 B 傳送一幀,從介面 1 進入到交換機。 交換機收到幀後,先查詢交換表,沒有查到應從哪個介面轉發這個幀。 交換機把這個幀的源地址 A 和介面 1 寫入交換表中,並向除介面1以外的所有的介面廣播這個幀。 C 和 D 將丟棄這個幀,因為目的地址不對。只 B 才收下這個目的地址正確的幀。這也稱為過濾。 從新寫入交換表的專案 (A, 1) 可以看出,以後不管從哪一個介面收到幀,只要其目的地址是A,就應當把收到的幀從介面1轉發出去。 B 通過介面 3 向 A 傳送一幀。 交換機查詢交換表,發現交換表中的 MAC 地址有 A。表明要傳送給A的幀(即目的地址為 A 的幀)應從介面1轉發。於是就把這個幀傳送到介面 1 轉發給 A。顯然,現在已經沒有必要再廣播收到的幀。 交換表這時新增加的專案 (B, 3),表明今後如有傳送給 B 的幀,就應當從介面 3 轉發出去。 經過一段時間後,只要主機 C 和 D 也向其他主機傳送幀,乙太網交換機中的交換表就會把轉發到 C 或 D 應當經過的介面號(2 或 4)寫入到交換表中。
歸納:
- 交換機收到一幀後先進行自學習。查詢交換表中與收到幀的源地址有無相匹配的專案。
- 如沒有,就在交換表中增加一個專案(源地址、進入的介面和有效時間)。
- 如有,則把原有的專案進行更新(進入的介面或有效時間)。
- 轉發幀。查詢交換表中與收到幀的目的地址有無相匹配的專案。
- 如沒有,則向所有其他介面(進入的介面除外)轉發。
- 如有,則按交換表中給出的介面進行轉發。
- 若交換表中給出的介面就是該幀進入交換機的介面,則應丟棄這個幀(因為這時不需要經過交換機進行轉發)。
乙太網交換機的這種自學習方法使得乙太網交換機能夠即插即用,不必人工進行配置,因此非常方便。
PPPoE是什麼意思
- PPPoE (PPP over Ethernet) 的意思是“在乙太網上執行 PPP”,它把 PPP 協議與乙太網協議結合起來 —— 將 PPP 幀再封裝到乙太網中來傳輸。
- 現在的光纖寬頻接入 FTTx 都要使用 PPPoE 的方式進行接入。在 PPPoE 彈出的視窗中鍵入在網路運營商購買的使用者名稱和密碼,就可以進行寬頻上網了。
- 利用 ADSL 進行寬頻上網時,從使用者個人電腦到家中的 ADSL 調變解調器之間,也是使用 RJ-45 和 5 類線(即乙太網使用的網線)進行連線的,並且也是使用 PPPoE 彈出的視窗進行撥號連線的。
MAC地址
在區域網中,硬體地址又稱為實體地址,或 MAC 地址。
MAC地址組成:
- IEEE 802 標準規定 MAC 地址欄位可採用 6 位元組 ( 48位) 或 2 位元組 ( 16 位) 這兩種中的一種。
- IEEE 的註冊管理機構 RA 負責向廠家分配地址欄位 6 個位元組中的前三個位元組 (即高位 24 位),稱為組織唯一識別符號。
- 地址欄位 6 個位元組中的後三個位元組 (即低位 24 位) 由廠家自行指派,稱為擴充套件唯一識別符號,必須保證生產出的介面卡沒有重複地址。
生產介面卡時,6 位元組的 MAC 地址已被固化在介面卡的 ROM,因此,MAC 地址也叫做硬體地址 (hardware address)或實體地址。
“MAC地址”實際上就是介面卡地址或介面卡識別符號 EUI-48。
介面卡檢查MAC
所有的介面卡都至少能夠識別前兩種幀,即能夠識別單播地址和廣播地址。
以混雜方式 (promiscuous mode) 工作的乙太網介面卡只要**“聽到”有幀在乙太網上傳輸就都接收下來。**
MAC 幀的格式
常用的乙太網 MAC 幀格式有兩種標準 :
- DIX Ethernet V2 標準(最常用)
- IEEE 的 802.3 標準
無效的MAC幀
- 資料欄位的長度與長度欄位的值不一致;
- 幀的長度不是整數個位元組;
- 用收到的幀檢驗序列 FCS 查出有差錯;
- 資料欄位的長度不在 46 ~ 1500 位元組之間。
- 有效的 MAC 幀長度為 64 ~ 1518 位元組之間。
無效的幀會被直接丟棄掉,乙太網不負責重傳丟棄的幀。
如果您覺得這篇文章幫助到了您,可以給作者一點鼓勵