計算機網絡學習三:數據鏈路層

 

1 基本概念

 

(1) 數據鏈路層(Data Link Layer)是OSI模型的第二層,負責建立和管理節點間的鏈路。

 

(2) 數據鏈路層的最基本的功能是向該層用戶提供透明的和可靠的數據傳送基本服務。透明性是指該層上傳輸的數據的內容、格式及編碼沒有限制,也沒有必要解釋信息結構的意義;可靠的傳輸使用戶免去對丟失信息、干擾信息及順序不正確等的擔心。在物理層中這些情況都可能發生,在數據鏈路層中必須用糾錯碼來檢錯與糾錯。數據鏈路層是對物理層傳輸原始比特流的功能的加強,將物理層提供的可能出錯的物理連接改造成爲邏輯上無差錯的數據鏈路,使之對網絡層表現爲一無差錯的線路。如果您想用盡量少的詞來記住數據鏈路層,那就是:“幀和介質訪問控制”。

 

(3) 在計算機網絡中由於各種干擾的存在,物理鏈路是不可靠的。因此,這一層的主要功能是在物理層提供的比特流的基礎上,通過差錯控制、流量控制方法,使有差錯的物理線路變爲無差錯的數據鏈路,即提供可靠的通過物理介質傳輸數據的方法。該層通常又被分爲介質訪問控制(MAC)和邏輯鏈路控制(LLC)兩個子層。

 

MAC子層的主要任務是解決共享型網絡中多用戶對信道競爭的問題,完成網絡介質的訪問控制;

LLC子層的主要任務是建立和維護網絡連接,執行差錯校驗、流量控制和鏈路控制。

 

(4) 數據鏈路層的具體工作是接收來自物理層的位流形式的數據,並封裝成幀,傳送到上一層;同樣,也將來自上層的數據幀,拆裝爲位流形式的數據轉發到物理層;並且,還負責處理接收端發回的確認幀的信息,以便提供可靠的數據傳輸。

 

 

 

 

2 數據鏈路層使用的信道

 

802.3(局域網)是共享介質的,而廣域網是專用的(通常是點對點的)不存在介質衝突的問題。

 

(1) 點對點信道

點對點信道使用一對一的點對點通信方式。這裏是指數據鏈路層使用的信道一種類型,在這種信道上最常用點對點協議PPP。

 

(2) 廣播信道

廣播信道使用一對多的廣播通信方式,因此過程比較複雜。廣播信道上連接的主機很多,因此必須使用專門的共享信道協議來協調這些主機的數據發送。

 

 

 

 

3 數據鏈路層的協議數據單元(幀(Frame))

 

數據鏈路層的多種協議共同遵守三個基本原則:

 

3.1 封裝成幀

 

(1) 發送端把網絡層交下來的IP數據報添加首部和尾部,封裝成幀接收端在收到物理層上交的比特流後,根據首尾的標記,識別幀的開始和結束,將中間的數據部分上交給網絡層。

 

 

 

注意:爲了提高幀的傳輸效率,應當使幀的數據部分長度儘可能大於首部和尾部的長度。但是,每一種鏈路層協議都規定了幀的數據部分的長度上限——最大傳送單元MTU(Maximum Transfer Unit)。

 

(2)當數據是由可打印的95個ASCII碼組成的文本文件時,幀的定界可以用特殊的幀定界符。首部爲SOH(00000001),尾部爲EOT(00000100)。

 

 

 

 

注意:當數據在傳輸中出現差錯時,幀定界符的作用更加明顯。假定發送端在尚未發完一個幀時突然出現故障,中斷了發送。但隨後很快又恢復正常,於是重新從頭開始發送剛纔未發送完的幀。由於使用了幀定界符,在接收端就知道前面收到的數據時個不完整的幀(只有首部SOH,沒有傳輸結束符EOT),必須丟棄。而後面收到的數據有明顯的幀定界符(SOH和EOT),因此這是一個完整的幀,應當收下。

 

 

 

3.2 透明傳輸

 

透明傳輸表示無論什麼樣比特組合的數據都能通過數據鏈路層。

 

由於幀的開始和結束的標記是使用專門指明的控制字符,因此,所傳輸的數據中的任何8比特的組合一定不允許和用作幀定界的控制字符的比特編碼一樣,否則就會出現幀定界的錯誤。

 

(1) 當傳送的幀使用文本文件組成的幀時(文本文件中的字符都是從鍵盤上輸入的),其數據部分顯然不會出現像SOH或EOT這樣的幀定界控制字符。可見不管從鍵盤上輸入什麼字符都可以放在這樣的幀中傳輸過去,因此這樣的傳輸就是透明傳輸。

 

(2) 當數據部分是非ASCII碼的文本文件時(如二進制代碼的計算機程序或圖像等),情況就不同了,如果數據中的某個字符的二進制代碼恰好和SOH或EOT這種控制字符一樣,數據鏈路層就會錯誤地找到幀的邊界,把部分幀收下(誤認爲是完整的幀),而把剩下的那部分數據丟棄(這部分找不到幀定界控制字符SOH)。這樣的幀的傳輸顯然就不是透明傳輸。

 

 

 

(a) 問題分析

爲了解決透明傳輸的問題,就必須設法使數據中可能出現的控制字符”SOH”和”EOT”在接收端不被解析爲控制字符。

 

(b) 解決方法(字節填充)

發送端的數據鏈路層在數據中出現控制字符”SOH”和”EOT”的前面插入一個轉義字符”ESC”(其十六進制編碼是1B)。而在接收端的數據鏈路層在將數據送往網絡層之前刪除這個插入的轉義字符。這種方法稱爲字節填充(byte stuffing)或字符填充(character stuffing)。如果轉義字符也出現在數據當中,那麼解決方法仍然是在轉義字符的前面插入一個轉義字符。因此,當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。

 

 

 

3.3 差錯檢測

 

傳輸差錯:可分爲兩大類,一類就是最基本的比特差錯,另一類就是收到的幀並沒有出現比特錯誤,但卻出現了幀丟失、幀重複或幀失序。

 

(1) 比特差錯:就是比特在傳輸過程中可能會產生差錯,即1可能會變成0,0可能會變成1。比特差錯是傳輸差錯中的一種。

 

(a) 問題分析

爲了保證數據傳輸的可靠性,在計算機網絡傳輸數據時,必須採用各種檢測措施。

 

(b) 解決方法

目前在數據鏈路層廣泛使用了循環冗餘檢驗CRC(Cyclic Redundancy Check)的檢測技術。

 

注:在數據鏈路層使用CRC檢驗,能夠實現無比特差錯的傳輸,但這還不是可靠傳輸。

 

(2) 三個幀:[#1]-[#2]-[#3],假定在接收端收到的卻有可能出現的情況:

(a) 幀丟失:收到[#1]-[#3](丟失了[#2])。

(b) 幀重複:收到[#1]-[#2]-[#2]-[#3](收到兩個[#2])。

(c) 幀失序:收到[#1]-[#3]-[#2](後面發的幀反而先到達了接收端,這與一般的數據鏈路層傳輸概念不一樣)。

 

注意:OSI的觀點是必須把數據鏈路層做成是可靠傳輸的。因此在CRC檢測基礎上,增加了幀編號、確認和重傳機制。收到正確的幀就要向發送端發送確認。發送端在一定的期限內若沒有收到對方的確認,就認爲出現了差錯,因而就進行重傳,直到收到對方的確認爲止。

 

這種方法在歷史上曾經起到很好的作用。但現在的通信線路的質量已經大大提高了,由通信鏈路質量不好引起差錯的概率已經大大降低。

 

因特網廣泛使用的數據鏈路層協議都不適用確認和重傳機制,即不要求數據鏈路層向上層提供可靠傳輸的服務(因爲這要付出的代價太高,不合算)。如果在數據鏈路層傳輸數據時除了差錯並且需要進行改正,那麼改正差錯的任務就由上層協議(如,運輸層TCP協議)來完成。實驗證明,這樣可以提高通信效率。

 

 

 

 

4 點對點協議PPP(Point-to-Point Protocol)

 

因特網用戶需要連接到某個ISP(互聯網服務提供商)才能接入到因特網。PPP協議就是用戶計算機和ISP進行通信時所使用的數據鏈路層協議。

 

4.1 PPP協議功能

 

(1) 簡單:對數據鏈路層的幀不進行糾錯,不需要序號,不需要流量控制。

(2) 封裝成幀:加入幀界定符。

(3) 透明性:字節填充法。

(4) 多種網絡層協議:在同一條物理鏈路上同時支持多種網絡層協議(如IP和IPX等)的運行。

(5) 多種鏈路類型:PPP必須能夠在多種類型的鏈路上運行,例如串行或並行鏈路。

(6) 差錯檢測:接收方收到一個幀後進行CRC檢驗,若正確就收下這個幀,反之則丟棄。

(7) 檢測連接狀態:自動檢測鏈路是否處於正常工作狀態。

 

 

4.2 PPP協議組成

 

(1) 提供一個將IP數據報封裝到串行鏈路的方法。IP數據報在PPP幀中就是信息部分,長度受最大傳送單元MTU的限制。PPP支持異步鏈路(無奇偶校驗的8比特數據)和麪向比特的同步鏈路。

 

(2) 鏈路控制協議LCP(Link Control Protocol)

當線路不再需要時,挑出這些線路,測試它們,商議選擇,並仔細地再次釋放鏈路控制協議。

 

(3) 一套網絡控制協議NCP(Network Control Protocol)

其中每一個協議支持不同的網絡層協議,如IP、OSI的網絡層等。

 

 

 

4.3 PPP幀格式

 

(1) 首部

(a) 標誌字段F,固定爲0x7E,標誌一個幀的開始或結束。連續2個幀之間只需要一個標誌字段,如果出現連續兩個標誌字段,表示這是一個空幀。

(b) 地址字段A和控制字段C都是固定不變的,分別爲0xFF、0x03。

(c) 協議字段爲2字節,協議字段不同,後面信息部分表示的數據類型不同。

0x0021——信息字段是IP數據報

0xC021——信息字段是鏈路控制數據LCP

0x8021——信息字段是網絡控制數據NCP

0xC023——信息字段是安全性認證PAP

0xC025——信息字段是LQR

0xC223——信息字段是安全性認證CHAP

 

(2) 信息部分

長度不超過1500字節 。

 

(3) 字節填充法

(a) 當信息字段中出現0x7E時,將每一個0x7E字節轉變成2字節序列(0x7D,0x5E)。

(b) 若信息字段中出現一個0x7D的字節,則將其轉變成2字節序列(0x7D,0x5D)。

(c) 若信息字段中出現ASCII碼的控制字符(即數值小於0X20的字符),則該字符前面需要加入一個0x7D字節,同時將該字符的編碼加以改變(+20)。例如,出現0x03,就要把它轉爲2字節序列(0x7D,0x23)

(4) 0比特填充法

PPP協議用在SONET/SDH鏈路時,使用同步傳輸(一連串的比特連續傳送),此時使用0比特填充法。

(a) 在發送端掃描整個信息字段,當有5個1連續出現時,立即填入一個0,保證信息字段中不會出現6個連續1。

(b) 在接收端刪除連續5個1後面的0。

 

(5) 尾部

FCS:使用CRC的幀校驗序列。

 

 

4.4 PPP協議的工作狀態

 

(1) 當用戶撥號接入ISP後,就建立了一條從用戶PC機到ISP的物理連接。這時,用戶PC機向ISP發送一系列LCP分組(封裝成多個PPP幀),來建立LCP連接。這些分組及其響應選擇了PPP參數以及進行網絡層配置,NCP給新接入的用戶分配臨時IP地址。這樣用戶PC機就成爲因特網上一個有IP地址的主機了。

 

(2) 當用戶通信完畢後,NCP釋放網絡層連接,收回分配的臨時IP。LCP釋放數據鏈路層連接,最後釋放物理層連接。

 

(a) PPP鏈路的起始和終止狀態永遠是“鏈路靜止”狀態,這時用戶PC機和ISP的路由器之間不存在物理層的連接。

(b) 用戶PC機通過調制解調器呼叫路由器時,路由器檢測到調制解調器發出的載波信號。在雙方建立物理層連接後,PPP進入“鏈路建立”狀態,目的是建立鏈路層的LCP連接。

(c) LCP發送配置請求幀,協商一些配置選項,這是一個PPP幀,協議字段爲LCP對應代碼,信息字段包含特定的配置請求。

(d) 協商結束後雙方建立了LCP鏈路,進入“鑑別”狀態。發起通信的一方發送身份標識符合和口令。

(e) 鑑別成功或不需鑑別後,進入“網絡層協議”。PPP鏈路的兩端的網絡控制協議NCP,根據網絡層採用的協議不同,互相

交換網絡層特定的網絡控制分組。

(f) 網絡層配置完畢後,進入“鏈路打開”狀態,兩段的PPP端點可以互相發送分組。

(g) 數據傳輸結束後,由鏈路的一端發出中止請求LCP分組請求終止鏈路連接,在收到對方發來的終止確認LCP分組後,轉到“鏈路終止”狀態。

 

 

 

5 局域網的數據鏈路層

 

5.1 局域網最主要的特點

 

局域網最主要的特點:就是網絡爲一個單位所擁有,且地理範圍和站點數目均有限。

 

注:在局域網剛剛出現時,局域網比廣域網具有較高的數據率、較低的時延和較小的誤碼率。但隨着光纖技術在廣域網中普遍使用,現在的廣域網也具有很高的數據率和很低的誤碼率。

 

 

5.2 局域網的主要優點

 

(1)具有廣播功能,從一個站點可方便地訪問全網。局域網上的主機可共享連接在局域網上的各種硬件和軟件資源。

(2)便於系統的擴展和逐漸地演變,各設備的位置可靈活地調整和改變。

(3)提高系統的可靠性(reliability)、可用性(availibility)、生存性(survivability)。

 

 

5.3 局域網可按網絡拓撲進行分類

 

星形網:由於集線器(hub)的出現和雙絞線大量用於局域網中,星形以太網和多級星形結構的以太網獲得了非常廣泛的應用。

環形網: 最典型的就是令牌環形網(token ring),簡稱爲令牌環。

總線網:各站直接連在總線上。總線兩端的匹配電阻吸收在總線上傳播的電磁波信號的能量,避免在總線上產生有害的電磁波反射。總線網可使用兩種協議:(1)傳統以太網使用的CSMA/CD。(2)令牌傳遞總線網,即物理上是總線網而邏輯上是令牌環形網。前一種總線網現在已演變爲星形網,而後一種令牌傳遞總線網早已退出了市場。

樹形網: 樹形網是總線網的變形,都屬於使用廣播信道的網絡,但這主要用於頻分複用的寬帶局域網。

 

 

5.4 共享信道的方法

 

(1) 靜態劃分信道

(a) 如利用頻分複用、時分複用、波分複用和碼分複用等。用戶只要分配到了信道就不會和其他用戶發送衝突。 這種劃分信道的方法代價比較高,不適合於局域網使用。

 

(2) 動態媒體接入控制

(a) 隨機接入

隨機接入的特點是所有用戶可隨機地發送信息。但如果恰巧有兩個或更多的用戶在同一時刻發送信息,那麼在共享媒體上就要發生碰撞(即發生了衝突),使得這些用戶的發送都失敗。因此,必須有解決碰撞的網絡協議。

 

(b) 受控接入

受控接入的特點是用戶不能隨機地發送信息而必須服從一定的控制。這類的典型代表有分散控制的令牌環局域網和集中控制的多點線路探詢(polling)或稱爲輪詢。

 

注:廣播信道可以進行一對多的通信。局域網使用的就是廣播信道。局域網工作的層次已跨越了數據鏈路層和物理層。局域網不僅僅和數據鏈路層有關。

 

 

 

6. 以太網

 

6.1 以太網的兩個標準

 

6.1.1 DIX Ethernet V2

 

DIX Ethernet V2,是世界上第一個局域網產品的規約。

 

6.1.2 IEEE 802.3[W-IEEE802.3]

 

1983年制定了第一個IEEE的以太網標準IEEE 802.3,數據率爲10Mb/s。

802.3局域網對以太網標準中的幀格式作了很小的一點更動,但允許基於這兩種標準的硬件實現可以在同一局域網上互操作。

注:出於有關廠商在商業上的激烈競爭,IEEE 802委員會未能形成一個統一的、最佳的局域網標準,而是被迫制定了幾個不同的局域網標準,如802.4令牌總線網、802.5令牌環網等。

(1)爲了使數據鏈路層更好地適應不同的局域網標準,IEEE802委員會就把局域網的數據鏈路層拆成兩個子層,即邏輯鏈路控制子層LLC(Logical Link Control)和媒體接入控制子層MAC(Medium Access Control)。

(2)與接入到傳輸媒體有關的內容都放到MAC子層,而LLC子層則與傳輸媒體無關,不管採用何種傳輸媒體和MAC子層的局域網對LLC子層來來說都是透明的。

 

 

 

(3) LLC爲上層提供了處理任何類型MAC層的方法,例如,以太網IEEE802.3CSMA/CD或者令牌環IEEE802.5令牌傳遞(TokenPassing)方式。

(4) LLC是在高級數據鏈路控制(HDLC:High-LevelData-LinkControl)的基礎上發展起來的,並使用了HDLC規範的子集。LLC定義了三種數據通信操作類型:

類型1:無連接。該方式不保證發送的信息一定可以收到。

類型2:面向連接。該方式提供了四種服務:連接的建立、確認和數據到達響應、差錯恢復(通過請求重發接收到的錯誤數據實現)以及滑動窗口(係數:128)。滑動窗口用來提高數據傳輸速率。

類型3:無連接應答響應服務。

 

類型1的LLC無連接服務中規定了一種靜態幀格式,並允許在其上運行網絡協議。使用傳輸層協議的網絡協議通常會使用服務類型1方式。類型2的LLC面向連接服務支持可靠數據傳輸,運用於不需要調用網絡層和傳輸層協議的局域網環境。

 

 

 

 

6.2 適配器的作用

 

(1) 計算機與外界局域網的連接是通過通信適配器(adapter)。

(2) 適配器本來是在電腦主機箱內插入的一塊網絡接口板(或者是在筆記本電腦中插入一塊PCMCIA卡)。這種接口板又稱爲網絡接口卡NIC(Network Interface Card)或簡稱爲網卡。

(3) 適配器和局域網之間的通信是通過電纜或雙絞線以串行傳輸方式進行的,而適配器和計算機之間的通信則是通過計算機主板上的I/O總線以並行傳輸方式進行的。

(4) 適配器的一個重要功能就是要進行數據串行傳輸和並行傳輸的轉換。

(5) 由於網絡上的數據率和計算機總線上的數據率並不相同,所以在適配器中必須裝有對數據進行緩存的存儲芯片。

(6) 若在主板上插入適配器時,還必須把管理該適配器的設備驅動程序安裝在計算機的操作系統中。這個驅動程序以後就會告訴適配器,應當從存儲器的什麼位置上把多長的數據塊發送到局域網,或應當在存儲器的什麼位置上把局域網傳送過來的數據塊存儲下來。

(7) 適配器還要能夠實現以太網協議。

(8) 適配器接收和發送各種幀時不使用計算機的CPU。這時CPU可以處理其他任務。

(9) 當適配器收到有差錯的幀時,就把這個幀丟棄而不必通知計算機。

(10) 當適配器收到正確的幀時,它就使用中斷來通知該計算機並交付給協議棧中的網絡層。

(11) 當計算機要發送IP數據報時,就由協議棧把IP數據報向下交給適配器,組裝成幀後發送到局域網。

(12) 計算機的硬件地址——MAC地址,就在適配器的ROM中。

(13) 計算機的軟件地址——IP地址,就在計算機的存儲器中。

 

 

 

6.3 MAC幀格式

 

 

(1) 前2個字段分別爲6字節長的目的地址和源地址。

(2) 第3個字段是2字節的類型字段,標誌上一層使用的是什麼協議。

(3) 第4個字段是數據字段,長度在46到1500字節之間。若長度小於46字節,則在後面加入一個整數字節進行填充。

(4) 最後是4字節的幀檢驗序列FCS(使用CRC檢驗)。

(5) 當適配器沒有與比特流達成同步時,需要在MAC幀前面插入8字節。

 

 

 

 

7 以太網幀最小幀長與最大幀長

 

以太網的幀開銷是18字節,是“目的MAC(6)+源MAC(6)+Type(2)+CRC(4)”。以太網最小幀長爲64字節,那麼IP報文最小爲46字節,而局域網規定IP最大傳輸單元1500字節,實際上加上以太網幀的18字節,就是1518字節。

 

 

 

 

7.1 CSMA/CD協議

 

7.1.1 概述

 

CSMA/CD是英文carrier sense multiple access/collision detected 的縮寫,可把它翻成“載波監聽多路訪問/衝突檢測”,或“帶有衝突檢測的載波偵聽多路訪問”。

 

所謂載波監聽(carrier sense),意思就是以太網絡上的各個工作站在發送數據前,都要監聽總線上有沒有數據正在傳輸。若有數據傳輸 (稱總線爲忙),則不發送數據,需要等待;若無數據傳輸(稱總線爲空),可以立即發送準備好的數據。

 

所謂多路訪問(multiple access),意思就是以太網絡上的各個工作站在發送數據時,共同使用一條總線,且發送數據是廣播式的。

 

所謂衝突(collision),意思就是,若以太網上有兩個或兩個以上工作站同時發送數據,在總線上就會產生信號的衝突;多個工作站都同時發送數據,在總線上就會產生信號的衝突,哪個工作站接收到的數據都辨別不出真正的信息。這種情況稱衝突或者碰撞。

 

爲了減少衝突發生的影響,工作站在發送數據過程中還要不停地檢測自己發送的數據,檢測自己傳輸過程中有沒有其他工作站在發送數據,在傳輸過程中與其它工作站的數據發生衝突,這就是衝突檢測(collision detected)。

 

 

 

 

7.1.2 要點歸納

 

(1) 準備發送:適配器從網絡層獲得一個分組,加上以太網的首部和尾部,組成以太網幀,放入適配器的緩存中。但在發送之前,必須先檢測信道。

 

(2) 檢測信道:若檢測到信道忙,則應不停地檢測,一直等待信道轉爲空閒。若檢測到信道空閒,並在96比特時間內信道保持空閒(保證了幀間最小間隔),就發送這個幀。

 

(3) 在發送過程中仍不停地檢測信道,即網絡適配器要邊發送邊監聽。兩種情況

(a) 發送成功:在爭用期內一直未檢測到碰撞。這個幀肯定能夠發送成功。

(b) 發送失敗:在爭用期內檢測到碰撞。這時立即停止發送數據,並按規定發送人爲干擾信號。適配器接着就執行指數退避算法,等待r倍512比特時間後,返回到步驟(2),繼續檢測信道。但若重傳達16次仍不能成功,則停止重傳而向上報錯。

 

在使用CSMA/CD協議的以太網不可能進行雙向同時通信(全雙通信工),而只能進行雙向交替通信(半雙工通信)。此外以太網還採取一種強化碰撞的措施,就是當發送數據的站一旦發現發生了碰撞時,除了立即停止發送數據外,還要再繼續發送32比特或48比特的人爲干擾信號(jamming signal),以便讓所有用戶都知道現在已經發生了碰撞。以太網號規定了幀間最小間隔爲9.6μs,相當於96比特時間,這樣使得剛剛收到數據幀1的站接收緩存來得及清理,做好接收下一幀的準備。

 

 

 

 

7.2 以太網探測幀

 

當多個工作站均想向以太網發送數據時,如果總線處於忙的狀態,大家都等待,也不會有何爭議;但是如果總線處於空的狀態,而且工作站是依次監聽到空狀態,那麼各個工作站就會陸續向總線發送數據,A工作站發送的數據還未傳遞到另一個要發送數據的B工作站,那麼B工作站仍然認爲總線爲空的狀態,那麼B工作站也向總線注入數據;如果還有更多工作站向總線注入數據,原理一樣,只是更加複雜而已。

 

A工作站傳遞的數據與B工作站傳遞的數據就會在總線的某處發送衝突,導致此次數據發送失敗。那有什麼辦法可以提前判斷,使得工作站不必每次都源源不斷的向總線注入數據,其後又檢測到衝突,而重新等待,如此反覆,既浪費了寶貴的工作站資源與總線資源,又使得數據遲遲不能發送出去。

 

先了解下碰撞信號,就是連續的01010101或者10101010,十六進制就是55或AA。以太網實現原理是,假設某個工作站檢測到衝突發生,那就發送碰撞信號,使衝突更加明顯,使得所有工作站均能檢測到總線發生了衝突。

 

我們來看一下,假設A檢測到總線是空閒的,開始發數據包,盡力傳輸,當數據包還沒有到達B時,B也監測到總線是空閒的,開始發數據包,這時就會發生衝突。假設B 首先發現發生碰撞,開始發送碰撞信號。

 

這個碰撞信號會返回到 A,如果碰撞信號到達A時,A還沒有發完這個數據包,A就知道這個數據包發生了錯誤,就會重傳這個數據包。但如果碰撞信號會返回到A時,數據包已經發完, 則A不會重傳這個數據包。

 

以太網爲什麼要設計這樣的重傳機制。首先,以太網不想採用連接機制,這會降低傳輸效率,但他又想保證一定的傳輸效率。因爲以太網的重傳是微秒級,而傳輸層的重傳,如TCP的重傳達到毫秒級,應用層的重傳更達到秒級。我們可以看到越底層的重傳,速度越快,所以對於鏈路層發生的錯誤,以太網必須有重傳機制。

 

要保證以太網的重傳,必須保證A收到碰撞信號的時候,數據包沒有傳完,要實現這一要求,A和B之間的距離很關鍵,也就是說信號在A和B之間傳輸的來回時間 必須控制在一定範圍之內。

 

解決方法就是,每個想要發送數據的工作站,檢測到總線爲空狀態,在發送數據之前,先發送一個探測幀,探測幀的發送就圓滿的解決了上面的問題。而探測幀的長度既要達到最快速的傳遞到目的地,又要確保探測幀的傳遞時間足夠使得其他工作站能夠監聽到。這個探測幀的長度就是以太網規定的最小幀長,就是一個最小最長幀。

 

由於以太網傳遞的幀,歸根結底還是由比特流組成。上面提到的傳輸速率,其實就是工作站的發送速率,傳輸一個幀還是一個個的比特發送出去。即,工作站發送一個幀的第一個比特到達目的地,而此幀的最後一個比特正好發送出去。

 

 

 

 

7.3 碰撞槽時間

 

C代表光速,也就是20.3cm/ns(每納秒20.3釐米), C是30W。電子在銅介質(普通銅)中的移動速度是21W/s 。

 

假設公共總線媒體長度爲S,幀在媒體上的傳播速度爲0.7C(光速),網絡的傳輸率爲R(bps),幀長爲L(bps),tPHY爲某站的物理層時延;

 

則有:

 

碰撞槽時間=2S/0.7C+2tPHY

 

因爲Lmin/R=碰撞槽時間

 

所以:Lmin =(2S/0.7C+2tPHY )×R

 

Lmin 稱爲最小幀長度。

 

碰撞槽時間在以太網中是一個極爲重要的參數,有如下特點:

 

(1) 它是檢測一次碰撞所需的最長時間。

(2) 要求幀長度有個下限。(即最短幀長)

(3) 產生碰撞,就會出現幀碎片。

(4) 如發生碰撞,要等待一定的時間。t=rT。(T爲碰撞槽時間)

 

假設:A、B兩地之間通過一個單向傳送帶傳遞物品,傳送帶的傳輸速度是C(C代表光速),也就是20.3cm/ns(每納秒20.3釐米),A點有個人叫Marcia,她要把一車荔枝一串一串的發送給B點的那個人Allen,現在Marcia需要抉擇的是:我在傳送荔枝給Allen的時候,如果Allen同時也有荔枝傳給我,這個時候就會產生衝突,而衝突會把傳送中的荔枝撞碎,破碎的荔枝渣會通過傳送帶反送給我,我很想知道是哪一串荔枝被撞碎了,如何實現?一個辦法就是:在我收到荔枝碎片的時候,我仍舊在傳着這串荔枝!比如有很多串荔枝,第1串,第2串等,當我發送第3串荔枝的過程中,收了荔枝碎片,那肯定是第3串裏先發出的荔枝出現了碰撞,而不是第2串或第1串中的荔枝發生碰撞。

 

爲了實現這一點,假如Marcia到Allen點的距離是2500米(250000釐米),傳送帶上的荔枝每納秒20.3釐米,那麼一串荔枝中的第一個荔枝到達Allen點的用時就是250000除以20.3=12500納秒,在加上碎片返回的時間是12500納秒,等於25000納秒,這個時間就是一串荔枝在傳送帶上必須持續的時間。

 

Marcia高興的時候,往傳送帶上放荔枝的時候快,不高興的時候就慢。高興的時候每秒可以往傳送帶上放100Mbit個荔枝,換算一下,也就是說放一個荔枝用10納秒。不高興的時候每秒鐘只能往傳送帶上放10Mbit個,也就是說放一個荔枝用100納秒。

 

因爲一串荔枝必須持續的時間25000納秒,那麼對於不高興的時候,25000除以100=250個荔枝,這個結果就是一串荔枝的數量。所以,理論上一個10Mbit/s的以太網,最小幀長應該是250bit。但爲了確保Marcia在放荔枝的過程中不會被扎到手,放送荔枝間會有一定的延時,所以最小幀長被定義爲512bit(64字節)。

 

因爲一串荔枝必須持續的時間25000納秒,對於高興的時候,25000除以10=2500個荔枝,這個結果就是一串荔枝的數量。所以,理論上一個100Mbit/s的以太網,最小幀長應該是2500bit。但一個2500bit的幀又太大了,上層來的數據包不可能這麼大。所以我們只能縮短A點到B點的距離爲250米,一個荔枝在傳送帶上往返的時間也變成了2500納秒。這時用2500除以10=250個荔枝,這個結果就是一串荔枝的數量。所以,理論上一個100Mbit/s的以太網,最小幀長應該是250bit,網絡最大有效距離是250米。但爲了確保Marcia在放荔枝的過程中不會被扎到手,放送荔枝間會有一定的延時,所以幀長被定義爲512bit(64字節)。

 

由此可見,MAC層發送的速度越快,以太網的最大有效距離就越短。但對於1000Mb/s的吉比特以太網,MAC層有兩種選擇,要麼保留CSMA/CD,要麼不用它。若保留CSMA/CD協議,必須面臨碰撞檢測問題,這就要再一次減小網絡的最大有效傳輸距離到25米。當然您可以不縮短網絡的距離,而是增加一個幀的程度,就如我們開始分析100Mb/s以太網那樣,讓一個幀持續足夠長的時間。但因爲上層來的數據沒有這麼多,所以就需要在MAC層進行一些無用數據的填充來滿足這個要求。

 

 

 

 

7.3 最優衝突時間

 

下面我們來估計在最壞情況下,檢測到衝突所需的時間

 

(1) A和B是網上相距最遠的兩個主機,設信號在A和B之間傳播時延爲τ,假定A在t時刻開始發送一幀,則這個幀在t+τ時刻到達B,若B在t+τ-ε時刻開始發送一幀,則B在t+τ時就會檢測到衝突,併發出阻塞信號。

 

(2) 阻塞信號將在t+2τ時到達A。所以A必須在t+2τ時仍在發送纔可以檢測到衝突,所以一幀的發送時間必須大於2τ。

 

(3) 按照標準,10Mbps以太網採用中繼器時,連接最大長度爲2500米,最多經過4箇中繼器(以太網中使用中繼器的5-4-3-2-1原則),因此規定對於10Mbps以太網規定一幀的最小發送時間必須爲51.2μs。

 

(4) 51.2μs也就是512位數據在10Mbps以太網速率下的傳播時間,常稱爲512位時。這個時間定義爲以太網時隙。512位時=64字節,因此以太網幀的最小長度爲512位時=64字節。

 

 

 

 

7.4 以太網幀長

 

802.3-2002標準定了以太網的頭結構爲DA(6)+SA(6)+Len/Type(2)=14字節。幀校驗序列(FCS):4字節,使用CRC計算從目的MAC到數據域這部分內容而得到的校驗和。

 

以太網的幀開銷是18字節,是“目的MAC(6)+源MAC(6)+Type(2)+CRC(4)”。以太網最小幀長爲64字節,那麼IP報文最小爲46字節,而局域網規定IP最大傳輸單元1500字節,實際上加上以太網幀的18字節,就是1518字節。

 

IEEE定義了這個標準,一個碰撞域內,最遠的兩臺機器之間的round-trip time 要小於512bit time。(來回時間小於512位時,所謂位時就是傳輸一個比特需要的時間)。這也是我們常說的一個碰撞域的直徑。

 

512個位時,也就是64字節的傳輸時間,如果以太網數據包大於或等於64個字節,就能保證碰撞信號到達A的時候,數據包還沒有傳完。

 

這就是爲什麼以太網要最小64個字節,同樣,在正常的情況下,碰撞信號應該出現在64個字節之內,這是正常的以太網碰撞,如果碰撞信號出現在64個字節之後,叫 late collision。這是不正常的。

 

CISCO交換機有一種轉發方式叫fragment-free,叫無碎片轉發,他就是檢查64個字節之內有沒有錯誤,有的話不轉發,這樣就排除了正常的以太網錯誤包。

 

 

 

 

 

7.5 CSMA/CD和交換機

 

7.5.1 概述

 

以太網訪問控制用的是CSMA/CD,即載波偵聽多點接入/ 衝突檢測,是以廣播的方式將數據發送到所有端口;

 

交換機能主動學習端口所接設備的MAC地址,在獲知該端口的MAC 地址後,就會把傳送給目標設備的直接發送到該端口而不是廣播出去。

 

 

 

7.5.2 以太網交換機

 

之所以有CSMA/CD的存在,是因爲在早期的共享式以太網中,雙向的傳輸是在同一線路上進行的,而以太網是一種共享介質的廣播技術,所以同一時間只能有一面的信號在線路上,即要麼A往B發,要麼B往A發,如果AB同時發送數據或者線路上已有信號,那麼信號就會發生碰撞,繼而影響數據有效傳輸,爲了解決此一問題,纔有了CSMA/CD的技術。

 

隨着技術的發展,CSMA/CD在最初的以太網中具有的歷史和實踐的重要性在慢慢減弱,現在交換式以太網取代了共享式以太網,甚至於共享式以太網消失。這主要是因爲介質和交換技術的發展而造成的。

 

介質方面:

使用4對線的UTP,傳輸和接收各自使用一對,可以全雙工方式工作,這樣,一邊只管發,一邊只管收,因此就能夠避免碰撞了,光纖方面也可如此。

 

交換技術方面:

當兩個工作站需要通信時,交換技術在兩個站之間建立了一個點到點的虛鏈路,也叫做微分段,因此同樣也避免了碰撞了,這就是交換機使用的技術。

 

所以,從上面可以看出,以太網訪問控制機制和交換機工作原理並沒有相沖突的地方,只是隨着技術的發展,一些不必要的機制就慢慢不要了。

 

 

 

 

7.5.3 全雙工,半雙工與CSMA/CD的關係

 

以太網中到底何時使用CSMA/CD檢測機制來避免衝突,在於網絡處於什麼樣的工作模式(全雙工或者半雙工)下工作,網卡將自動與網絡接入設備(例如:交換機或者集線器)進行協商來判斷什麼時候使用CSMA/CD檢測機制避免衝突的發生。

 

大家都知道,以太網工作模式有兩種,一種是全雙工工作模式,一種是半雙工工作模式。我們看分析一下這兩個模式下到底是不是用CSMA/CD衝突檢測機制。

 

(1) 在全雙工工作模式下的以太網使用CSMA/CD檢測機制來避免衝突嗎?

 

在這一工作模式下的以太網是不需要使用CSMA/CD衝突檢測機制的。我們知道,全雙工工作模式下可以完成同時接收和發送數據。我們想想,網卡可能會在同一時刻發送兩個數據包嗎?這是不可能的。絕對不可能會出現在同一時刻網卡接收到兩個或兩個以上同時需要發送數據的請求,就連CPU也不可能同時做到在同一時刻處理兩個或兩個以上指令呀。這個時候,如果我們假設網卡啓用CSMA/CD機制來檢測衝突,請問他檢測哪一條衝突通道呢?我們可要知道,網卡在接收到需要發送的數據包後,就像排隊一樣一個一個往外發送,怎麼可能會衝突呢?

 

這個時候有人可能要問了,那接收呢?它可能會和接收的衝突呀?其實這麼想就錯了。全雙工工作模式下,我們將使用雙絞線中的2對線進行工作。一對用於發送,一對用於接收。那麼既然發送和接收是分開的2條鏈路,就不存在衝突的問題了。就像在高速公路上,有一個車道是由東往西行駛車道,一個車道是由西往東行駛車道。那麼,你說兩車對開,各行駛於各自的車道,有可能會衝撞嗎?所以,全雙工工作模式下是不需要使用CSMA/CD衝突檢測機制的。

 

 

 

(2) 在半雙工工作模式下的以太網使用CSMA/CD檢測機制來避免衝突嗎?

 

在這一工作模式下的以太網是需要使用CSMA/CD衝突檢測機制的。我們知道,半雙工模式下雖然可以實現在同一鏈路上進行發送和接收,但不是在同一時間。這就必須使用CSMA/CD衝突檢測機制來避免衝突的發生。半雙工工作模式的典型接入設備就是集線器。

 

 

 

(3) 我們都說交換機中有智能設備,如CPU和緩存。爲什麼工作在半雙工模式下的交換機,還會使用CSMA/CD呢?

 

這個問題問得特別好。其實大家想一想就知道了。我們先明白一點:交換機確實有CPU和緩存來調節數據包的輸出和接收,是不會發生衝突的。交換機只關心它的背板速率,關心的是整個帶寬。所以,在交換機內的數據包是絕對不會發生衝突的情況。只會發生是否出現網絡擁塞。這是和衝突沒有任何關聯的。

 

理解了這一點,我們再理解下一個問題:CSMA/CD偵聽包是有誰發出,什麼時候纔會發出呢?我們回憶一下CCNA的教程,其實,CSMA/CD偵聽包是由網卡發出的,並不是有交換機或者集線器發出的偵聽包。而且,網卡在發送數據前,纔會發送CSMA/CD偵聽包偵聽網絡是否暢通。

 

理解了這兩點,我們就好解釋了。對於CSMA/CD衝突檢測機制而言,交換機和集線器的偵聽對象是不完全相同的。在集線器中,每一個端口都同在一個衝突域中,CSMA/CD檢測的整個同處一個衝突域每一個端口的每一種狀態。它既偵聽網絡中正在發送的數據包,也真聽網絡中正在接收的數據包。因爲,它只有1條通道。就像總線一樣,所有數據都在同一個通道內跑。CSMA/CD必須偵聽到沒人使用,它才發送數據包。而交換機則不太相同。雖然每一個端口都是一個獨立的衝突域,端口之間並不相互衝突。可如果實在半雙工工作模式下,一個端口中的接收和發送就產生衝突了。這個時候,CSMA/CD衝突檢測機制將偵聽在這個端口上是否有數據正在被接收而佔用。所以,交換機在半雙工工作模式下工作,網卡同樣會啓用CSMA/CD衝突檢測機制來避免衝突的發生。

 

 

 

 

 

 

 

8 問題分析

 

(1) 爲什麼數據鏈路層要以幀爲單位來傳送數據呢?

因爲如果不以幀爲單位,就無法加入冗餘碼來進行差錯檢驗。

 

 

 

 

(2) 爲什麼標準以太網幀長度下限爲64字節?

 

以太網幀長度限制最小幀是爲了半雙工工作方式的碰撞檢測。

 

最早的以太網工作方式:載波多路複用/衝突檢測(CSMA/CD),因爲網絡是共享的,即任何一個節點發送數據之前,先要偵聽線路上是否有數據在傳輸,如果有,需要等待,如果線路可用,纔可以發送。

 

假設A發出第一個bit位,到達B,而B也正在傳輸第一個bit位,於是產生衝突,衝突信號得讓A在完成最後一個bit位之前到達A,這個一來一回的時間間隙slot time是57.6μs。

 

在10Mbps的網絡中,在57.6μs的時間內,能夠傳輸576個bit,所以要求以太網幀最小長度爲576個bits,從而讓最極端的碰撞都能夠被檢測到。這個576bit換算一下就是72個字節,去掉8個字節的前導符和幀開始符,所以以太網幀的最小長度爲64字節。

 

 

 

 

(3) 爲什麼標準以太網幀長度上限爲1518字節?

 

限制幀的最大長度是爲了避免一臺設備長時間佔用信道,所以在傳輸過程中一定要有機制強制一個設備停止傳輸,讓出信道的使用。

 

IP頭total length爲兩個byte,理論上IP packet可以有65535 byte,加上Ethernet Frame頭和尾,可以有65535 +14 + 4 = 65553 byte。如果在10Mbps以太網上,將會佔用共享鏈路長達50ms,這將嚴重影響其它主機的通信,特別是對延遲敏感的應用是無法接受的。

 

由於線路質量差而引起的丟包,發生在大包的概率也比小包概率大得多,所以大包在丟包率較高的線路上不是一個好的選擇。

 

但是如果選擇一個比較小的長度,傳輸效率又不高,拿TCP應用來說,如果選擇以太網長度爲218byte,TCP payload = 218 - Ethernet Header - IP Header - TCP Header = 218 - 18 - 20 - 20 = 160 byte

 

那有效傳輸效率= 160 / 218 = 73%

 

而如果以太網長度爲1518,那有效傳輸效率= 1460 / 1518 = 96%

 

通過比較,選擇較大的幀長度,有效傳輸效率更高,而更大的幀長度同時也會造成上述的問題,於是最終選擇一個折衷的長度:1518 byte ! 對應的IP packet 就是 1500 byte,這就是最大傳輸單元MTU的由來。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文轉自:

https://blog.csdn.net/charleslei/article/details/53147856

https://blog.csdn.net/qq1987924/article/details/7798684

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章