3.1 概述
鏈路(Link):是從一個結點到相鄰結點的一段物理線路,中間沒用任何其他的交換結點。
數據鏈路(Data Link):把實現通信協議的硬件和軟件加到鏈路上,就構成了數據鏈路。
數據鏈路層以幀為單位傳輸和處理數據。
數據鏈路層使用的信道主要有以下兩種類型:
- 點對點信道
- 這種信道使用一對一的點對點通信方式。
- 廣播信道
- 使用一對多的廣播通信方式
- 因此必須使用專用的共享信道協議來協調這些主機的數據發送。
注:不同數據鏈路層可能采用不同的數據鏈路層協議。
局域網屬於數據鏈路層
局域網雖然是個網絡,但在同一個局域網中,分組怎么從一台主機傳送到另一台主機,並不經過路由器轉發。
從整個互聯網來看,局域網仍屬於數據鏈路層的范圍。
3.2 封裝成幀
封裝成幀是指數據鏈路層將上層交付的協議數據單元添加幀頭和幀尾使之成為幀。
幀頭和幀尾中包含有重要的控制信息
問題來了,封裝成幀后還要將數據由比特轉為電信號提高傳輸媒體傳輸,接收方如何從物理層得到的比特流中提取出一個個的幀呢?
方法一:數據鏈路層使用幀頭幀尾實現幀定界,如PPP幀
方法二:物理層加前導碼,如以太網
幀到物理層以后,物理層為其添加前導碼(包括 前同步碼 和 幀開始定界符)
- 前同步碼:作用是使接收方的時鍾同步;
- 幀開始定界符:表明后面緊跟着的就是MAC幀
另外以太網還規定了幀間間隔為96比特時間,因此,MAC幀不需要幀結束定界符
我們希望數據鏈路層能實現透明傳輸,所謂透明傳輸,就是指數據鏈路層對上層交付的傳輸數據沒有任何限制,好像數據鏈路層不存在一樣。
問題來了,之前說到的幀定界符其實就是一個特定的比特串,如果在上層交付的PDU中,恰好也包含這個特定數值,那不就沒法正確定界了嗎。
這樣一來,數據鏈路層對上層交付的PDU就由限制,也就不能實現透明傳輸。
解決方法:
- 面向字節的物理鏈路使用字節填充 (byte stuffing) 或字符填充 (character stuffing);
- 發送端的數據鏈路層在數據中出現控制字符“SOH”或“EOT”的前面插入一個轉義字符“ESC”(其十六進制編碼是1B);
- 接收端的數據鏈路層在將數據送往網絡層之前刪除插入的轉義字符。
- 如果轉義字符也出現在數據當中,那么應在轉義字符前面插入一個轉義字符 ESC。當接收端收到連續的兩個轉義字符時,就刪除其中前面的一個。
- 面向比特的物理鏈路使用比特填充的方法實現透明傳輸;
- 在幀的數據部分,每遇到5個連續的比特1就在其后插入一個0,這樣就不會和幀定界符01111110重復了,接收方收到后每5個1去掉后面的0即可
為了提高幀的傳輸速率,應當使幀的數據部分的長度盡可能大些。
但是考慮到差錯控制等多種因素,每一種數據鏈路層協議都規定了幀的數據部分長度上限,即 最大傳送單元MTU(Maximum Transfer Unit)
3.3 差錯控制技術
實際的通信鏈路都不是理想的,比特在傳輸過程中可能會產生差錯:1可能會變成0,而0也可能變成1。這稱為比特差錯。
在一段時間內,傳輸錯誤的比特占所傳輸比特總數的比率稱為誤碼率BER(Bit Error Rate)。
使用差錯檢測碼來檢測數據在傳輸過程中是否產生了比特差錯,是數據鏈路層所要解決的重要問題之一。
下面介紹幾種常用的差錯檢測碼
奇偶校驗碼
在待發送的數據后面添加1位奇偶校驗位,使整個數據(包括所添加的校驗位在內)中“1"的個數為 奇數(奇校驗) 或 偶數(偶校驗)。
- 如果有奇數個位發生誤碼,則奇偶性發生變化,可以檢查出誤碼;
- 如果有偶數個位發生誤碼,則奇偶性不發生變化,不能檢查出誤碼(漏檢) ;
循環冗余校驗碼CRC
循環冗余校驗CRC(Cyclic Redundancy Check)
- 收發雙方約定好一個生成多項式G(x);
- 發送方基於待發送的數據 和 生成多項式 計算出 差錯檢測碼(冗余碼),將其添加到待傳輸數據的后面一起傳輸;
- 接收方通過生成多項式來計算收到的數據是否產生了誤碼。
計算CRC步驟:
- 構造被除數:在待發送數據后面添加生成多項式最高次個0
- 構造除數:生成多項式各項系數構成的比特串
- 做除法
- 檢查余數:余數的位數應該與生成多項式最高次相同,若不同則在前補0湊足位數。
- 將余數加到待發數據之后
驗證CRC步驟:
- 構造被除數:接收到的數據就是被除數
- 構造除數:生成多項式各項系數構成的比特串
- 做除法
- 檢查余數:余數為0,可認為傳輸過程無誤碼;否則可認為傳輸過程產生誤碼
小結:
- 檢錯碼只能檢測出幀在傳輸過程中出現了差錯,但並不能定位錯誤,因此無法糾正錯誤;
- 要想糾正傳輸中的差錯,可以使用冗余信息更多的糾錯碼進行前向糾錯。但糾錯碼的開銷比較大,在計算機網絡中較少使用;
- 循環冗余校驗CRC有很好的檢錯能力(漏檢率非常低),雖然計算比較復雜,但非常易於硬件實現,因此被廣泛應用於數據鏈路層;
- 幀校驗序列FCS便是添加在數據后面的冗余碼
- 在計算機網絡中通常采用檢錯重傳方式來糾正傳輸中的差錯,或者僅僅是丟棄檢測到差錯的幀,這取決於數據鏈路層向其上層提供的是可靠傳輸服務還是不可靠傳輸服務。
3.4 可靠傳輸
- 使用差錯檢測技術(例如循環冗余校驗CRC),接收方的數據鏈路層就可檢測出幀在傳輸過程中是否產生了誤碼(比特錯誤)
- 數據鏈路層向上層提供的服務類型:
- 不可靠傳輸服務:僅僅丟棄有誤碼的幀,其他什么也不做;
- 可靠傳輸服務:想辦法實現發送端發送什么,接收端就收到什么。
一般情況下,有線鏈路的誤碼率比較低,為了減小開銷,並不要求數據鏈路層向上提供可靠傳輸服務。即使出現了誤碼,可靠傳輸的問題可由其上層處理。
而無線鏈路易受干擾,誤碼率比較高,因此要求數據鏈路層必須向上層提供可靠傳輸服務。
擴展:
之前討論的差錯是比特差錯,其實比特差錯只是傳輸差錯的一種,傳輸差錯還包括分組丟失、分組失序、分組重復。
- 分組丟失:路由器輸入隊列快滿了,主動丟棄收到的分組
- 分組失序:數據並未按照發送順序依次到達接收端
- 分組重復:由於某些原因,有些分組在網絡中滯留了,沒有及時到達接收端,這可能會造成發送端對該分組的重發,重發的分組到達接收端,但一段時間后,滯留在網絡的分組也到達了接收端,這就造成分組重復的傳輸差錯
分組丟失、分組失序以及分組重復這些傳輸差錯,一般不會出現在數據鏈路層,而會出現在其上層。
因此可靠傳輸服務並不僅局限於數據鏈路層,其他各層均可選擇實現可靠傳輸。由於可靠傳輸的實現比較復雜,開銷也比較大,是否使用還是要取決於應用需求。
為實現可靠傳輸,下面介紹三種可靠傳輸協議
- 停止-等待協議SW
- 回退N幀協議GBN
- 選擇重傳協議SR
注:這三種可靠傳輸實現機制的基本原理並不僅限於數據鏈路層,可以應用到計算機網絡體系結構的各層協議中。
停止-等待協議
所謂停止-等待,就是發送方發送數據后需等到接收方的回應后才繼續發送數據。
- 接收端檢測到數據分組有誤碼時,將其丟棄並等待發送方的超時重傳。
- 一般可將重傳時間選為略大於 從發送方到接收方的平均往返時間;
- 但對於誤碼率較高的點對點鏈路,為使發送方盡早重傳,也可給發送方發送NAK分組。
- 為了讓接收方能夠判斷所收到的數據分組是否是重復的,需要給數據分組編號。
- 由於停止-等待協議的停等特性,只需1個比特編號就夠了,即編號0和1
- 為了讓發送方能夠判斷所收到的ACK分組是否是重復的,需要給ACK分組編號,所用比特數量與數據分組編號所用比特數量一樣。
- 數據鏈路層一般不會出現ACK分組遲到的情況,因此在數據鏈路層實現停止等待協議可以不用給ACK分組編號。
停止-等待協議的信道利用率
假設收發雙方之間是一條直通的信道
- TD:是發送方發送數據分組所耗費的發送時延
- RTT:是收發雙方之間的往返時間
- TA:是接收方發送確認分組所耗費的發送時延
- 信道利用率 U=TD/(TD+RTT+TA)
TA一般都遠小於TD,可以忽略。
當RTT遠大於TD時(如衛星鏈路),信道利用率會非常低。
若出現重傳,則對於傳送有用的數據信息來說,信道利用率還要降低。
為了克服停止-等待協議信道利用率很低的缺點,就產生了另外兩種協議,即后退N幀協議GBN和選擇重傳協議SR。
像停止-等待協議這樣通過確認和重傳機制實現的可靠傳輸協議,常稱為自動請求重傳協議ARQ(Automatic Repeat reQuest),意思是重傳的請求是自動進行的,不需要接收方顯式地請求發送方重傳某個發送的分組
回退N幀協議GBN
為什么用回退N幀協議:在相同的時間內,使用停止-等待協議的發送方只能發送一個數據分組,而采用流水線傳輸的發送方,可以發送多個數據分組,采用流水線傳輸可提高信道利用率。
回退N幀協議在流水線傳輸的基礎上,利用發送窗口來限制發送方可連續發送數據分組的個數。
- 若采用n比特給分組編號,即有序號0~2^n-1;
- 發送窗口的尺寸WT的取值:1<WT≤2^n-1;
- 接收窗口的尺寸WR=1.
舉例說明:
用3比特給分組編號,WT=5,WR=1。
無差錯情況流程:
- 發送方將序號落在發送窗口內的0~4號數據分組,依次連續發送出去;
- 數據分組經過互聯網傳輸正確到達接收方,也就是沒有亂序和誤碼,接收方按序接收它們,每接收一個,接收窗口就向前滑動一個位置,並給發送方發送針對所接收分組的確認分組,在通過互聯網的傳輸正確到達發送方;
- 發送方每接收一個、發送窗口就向前滑動一個位置,這樣就有新的序號落入發送窗口,發送方可以將收到確認的數據分組從緩存中刪除了,而接收方可以擇機將已接收的數據分組交付上層處理。
接收方不一定要對收到的數據分組逐個發送確認,而是可以在收到幾個數據分組后(由具體實現決定),對按序到達的最后一個數據分組發送確認。ACKn表示序號為n及以前的所有數據分組都已正確接收。
這種方法稱為 累計確認
其優點在於:
- 即使部分確認分組丟失,發送方也可能不必重傳
- 減小接收方的開銷
- 減小對網絡資源的占用
其缺點在於:
- 不能向發送方及時反映出接收方已經正確接收的數據分組信息
經過之前的無差錯傳輸,現在發送窗口起始位置在5號位置
有差錯情況流程:
- 在傳輸數據分組時,5號數據分組出現誤碼,接收方通過數據分組中的檢錯碼發現了錯誤;
- 於是丟棄該分組,而后續到達的剩下四個分組與接收窗口的序號不匹配;
- 接收方同樣也不能接收它們,將它們丟棄,並對之前按序接收的最后一個數據分組進行確認,發送ACK4,每丟棄一個數據分組,就發送一個ACK4;
- 當接收方收到重復的ACK4時,它就知道之前所發送的數據分組出現了差錯;
- 於是可以不等超時計時器超時就立刻開始重傳 (至於具體收到幾個重復確認就立刻重傳,根據具體實現決定)
- 如果收到這4個重復的確認並不會觸發發送立刻重傳,一段時間后,超時計時器超時,也會將發送窗口內以發送過的這些數據分組全部重傳
思考:
為什么WT不能超過2^n-1,如果超過會是什么情況?
- 還是按之前的例子來,假如發送窗口為8,即一次發送了07數據分組,接收方收到后要發送確認ACK7,但是由於某些原因ACK7丟失了,那么發送方待計時器超時后就會重傳07數據分組,而此時接收窗口以及來到了第二個0號,接收方依然會將其看作新的數據分組接收下來,這就導致了數據重復接收。
- 可見發送窗口超過2^n-1會導致接收方無法分辨新、舊數據分組。
小結:
- 回退N幀協議在流水線傳輸的基礎上利用發送窗口來限制發送方連續發送數據分組的數量,是一種連續ARQ協議;
- 在協議的工作過程中發送窗口和接收窗口不斷向前滑動,因此這類協議又稱為滑動窗口協議;
- 由於回退N幀協議的特性,當通信線路質量不好時,其信道利用率並不比停止-等待協議高
對於發送方:
- 發送方可在未收到接收方確認分組的情況下,將序號落在發送窗口內的多個數據分組全部發送出去;
- 發送方只有收到對已發送數據分組的確認時,發送窗口才能向前相應滑動;
- 發送方收到多個重復確認時,可在重傳計時器超時前盡早開始重傳,由具體實現決定;
- 發送方發送窗口內某個已發送的數據分組產生超時重發時,其后續在發送窗口內且已發送的數據分組也必須全部重傳,這就是回退N幀協議名稱的由來。
對於接收方:
- 接收方只接收序號落在接收窗口內且無誤碼的數據分組,並且將接收窗口向前滑動一個位置,與此同時給發送方發回相應的確認分組。
- 為了減少開銷,接收方不一定每收到一個按序到達且無誤碼的數據分組就給發送方發回一個確認分組。
- 接收方收到未按序到達的數據分組,除丟棄外,還要對最近按序接收的數據分組進行確認;
選擇重傳協議SR
回退N幀協議的接收窗口尺寸WR只能等於1,因此接收方只能按序接收正確到達的數據分組。
一個數據分組的誤碼就會導致其后續多個數據分組不能被接收方按序接收而丟棄(盡管它們無亂序和誤碼)。這必然會造成發送方對這些數據分組的超時重傳,顯然這是對通信資源的極大浪費。
為了進一步提高性能,可設法只重傳出現誤碼的數據分組。因此,接收窗口的尺寸WR不應再等於1 (而應大於1) ,以便接收方先收下失序到達但無誤碼並且序號落在接收窗口內的那些數據分組,等到所缺分組收齊后再一並送交上層。這就是選擇重傳協議。
注意:
選擇重傳協議為了使發送方僅重傳出現差錯的分組,接收方不能再采用累計確認,而需要對每個正確接收到的數據分組進行逐一確認!
小結:
若采用n比特給分組編號,即有序號0~2^n-1;
對於發送方:
- 發送窗口的尺寸WT的取值:1<WT≤2^n-1;
- 若WT=1,則與停止-等待協議相同
- 若WT>2^n-1,接收方無法分辨新、舊數據分組
- 發送方可在未收到接收方確認分組的情況下,將序號落在發送窗口內的多個數據分組全部發送出去;
- 發送方只有按序收到對已發送數據分組的確認時,發送窗口才能向前相應滑動;
- 若收到未按序到達的確認分組時,對其進行記錄,以防止其相應數據分組的超時重發,但發送窗口不能向前滑動。
對於接收方:
- 接收窗口的尺寸WR的取值:1<WR≤WT
- WR=1,則與停止-等待協議相同
- 若WR>WT,則沒有意義,接收窗口太大沒用
- 接收方可接收未按序到達但沒有誤碼並且序號落在接收窗口內的數據分組;
- 接收方只有在按序接收數據分組后,接收窗口才能向前相應滑動。
3.5 點對點協議PPP
- 點對點協議PPP(Point-to-Point Protocol)是目前使用最廣泛的點對點數據鏈路層協議。
- PPP協議是因特網工程任務組IEIF在1992年制定的。經過1993年和1994年的修訂,現在的PPP協議已成為因特網的正式標准[RFC1661,RFC1662]
- PPP是數據鏈路層使用的一種協議,它的特點是:簡單;只檢測差錯,而不是糾正差錯;不使用序號,也不進行流量控制;可同時支持多種網絡層協議。
- PPPoE 是為寬帶上網的主機使用的鏈路層協議
PPP協議為在點對點鏈路傳輸各種協議數據報提供了一個標准方法,主要由以下三部分構成:
- 一套網絡控制協議NCPs:其中的每一個協議支持不同的網絡層協議
- 封裝成幀:對各種協議數據報的封裝方法
- 鏈路控制協議LCP:用於建立、配置以及測試數據鏈路的連接
幀格式
- 標志(Flag) 字段:PPP幀的定界符,取值為0x7E
- 地址(Address) 字段:取值為0xFF,預留(目前沒有什么作用)
- 控制(Control) 字段:取值為0x03,預留(目前沒有什么作用)
- 協議(Protocol) 字段:指明幀的數據部分送交哪個協議處理
- 取值0x0021表示:幀的數據部分為IP數據報
- 取值0xC021表示:幀的數據部分為LCP分組
- 取值0x8021表示:幀的數據部分為NCP分組
- 幀檢驗序列(Frame Check Sequence)字段:CRC計算出的校驗位
透明傳輸
實現透明傳輸的方法
- 面向字節的異步鏈路:字節填充法(插入“轉義字符”)
發送方的處理:
- 出現的每一個7E (PPP幀的定界符)字節轉變成2字節序列(7D,5E)
- 出現的每一個7D (轉義字符)字節轉變成2字節序列(7D,5D)
- 出現的每一個ASCII碼控制字符(數值小於0x20的字符),則在該字符前面插入一個7D字節,同時將該字符的編碼加.上0x20。
接收方的處理:
-
進行反變換即可恢復出原來的幀的數據部分。
-
面向比特的同步鏈路:比特填充法(插入“比特0”)
發送方的處理:
- 對幀的數據部分進行掃描(一般由硬件實現)。只要發現5個連續的比特1,則立即填充1個比特0。
接收方的處理:
- 對幀的數據部分進行掃描(一般由硬件實現)。只要發現5個連續的比特1,就把其后的1個比特0刪除。
差錯控制
接收方每收到一個PPP幀,就進行CRC檢驗。若CRC檢驗正確,就收下這個幀;反之,就丟棄這個幀。
使用PPP的數據鏈路層向上不提供可靠傳輸服務。
3.6 媒體接入控制
媒體接入控制(介質訪問控制)使用一對多的廣播通信方式
Medium Access Control翻譯成媒體接入控制,有些翻譯成介質訪問控制
局域網的數據鏈路層
- 局域網最主要的特點是:
- 網絡為一個單位所擁有;
- 地理范圍和站點數目均有限。
- 局域網具有如下主要優點:
- 具有廣播功能,從一個站點可很方便地訪問全網。局域網上的主機可共享連接在局域網上的各種硬件和軟件資源。
- 便於系統的擴展和逐漸地演變,各設備的位置可靈活調整和改變。
- 提高了系統的可靠性、可用性和殘存性。
數據鏈路層的兩個子層
為了使數據鏈路層能更好地適應多種局域網標准,IEEE 802 委員會就將局域網的數據鏈路層拆成兩個子層:
- 邏輯鏈路控制 LLC (Logical Link Control)子層;
- 媒體接入控制 MAC (Medium Access Control)子層。
與接入到傳輸媒體有關的內容都放在 MAC子層,而 LLC 子層則與傳輸媒體無關。
不管采用何種協議的局域網,對 LLC 子層來說都是透明的。
共享信道要着重考慮的一個問題就是如何協調多個發送和接收站點對一個共享傳輸媒體的占用,即媒體接入控制MAC(Medium Access Control)。
隨着技術的發展,交換技術的成熟和成本的降低,具有更高性能的使用點對點鏈路和鏈路層交換機的交換式局域網在有線領域已完全取代了共享式局域網,但由於無線信道的廣播天性,無線局域網仍然使用的是共享媒體技術。
靜態划分信道
信道復用:
- 復用(Multiplexing) 是通信技術中的一個重要概念。復用就是通過一條物理線路同時傳輸多路用戶的信號。
- 當網絡中傳輸媒體的傳輸容量大於多條單一信道傳輸的總通信量時, 可利用復用技術在一條物理線路上建立多條通信信道來充分利用傳輸媒體的帶寬。
頻分復用FDM (Frequency Division Multiplexing)
- 將整個帶寬分為多份,用戶在分配到一定的頻帶后,在通信過程中自始至終都占用這個頻帶。
- 頻分復用的所有用戶同時占用不同的頻帶資源進行通信。
時分復用TDM (Time Division Multiplexing)
- 時分復用則是將時間划分為一段段等長的時分復用幀(TDM幀)。每一個時分復用的用戶在每一個 TDM 幀中占用固定序號的時隙。
- 每一個用戶所占用的時隙是周期性地出現(其周期就是TDM幀的長度)的。
- TDM 信號也稱為等時 (isochronous) 信號。
- 時分復用的所有用戶在不同的時間占用同樣的頻帶寬度。
波分復用 WDM(Wavelength Division Multiplexing)
- 波分復用就是光的頻分復用,使用一根光纖來同時傳輸多個光載波信號。
- 光信號傳輸一段距離后會衰減,所以要用 摻鉺光纖放大器 來放大光信號。
碼分復用 CDM (Code Division Multiplexing)
- 碼分復用CDM是另一種共享信道的方法。實際上,由於該技術主要用於多址接入,人們更常用的名詞是碼分多址CDMA(Code Division Multiple Access)。
- 同理,頻分復用FDM和時分復用TDM同樣可用於多址接入,相應的名詞是頻分多址FDMA(Frequency Division Multiple Access)和時分多址TDMA(Time Division Multiple Access)。
- 復用與多址的概念可簡單理解為:
- 復用是將單一媒體的頻帶資源划分成很多子信道,這些子信道之間相互獨立,互不干擾。從媒體的整體頻帶資源上看,每個子信道只占用該媒體頻帶資源的一部分。
- 多址(更確切地應該稱為多點接入)處理的是動態分配信道給用戶。這在用戶僅僅暫時性地占用信道的應用中是必須的,而所有的移動通信系統基本上都屬於這種情況。
- 相反,在信道永久性地分配給用戶的應用中,多址是不需要的(對於無線廣播或電視廣播站就是這樣)。
- 某種程度上,FDMA、TDMA、CDMA可以分別看成是FDM、TDM、CDM的應用。
- 與FDM和TDM不同,CDM的每一個用戶可以在同樣的時間使用同樣的頻帶進行通信。
- 由於各用戶使用經過特殊挑選的不同碼型,因此各用戶之間不會造成干擾。
CDM最初是用於軍事通信的,因為這種系統所發送的信號有很強的抗干擾能力,其頻譜類似於白噪聲,不易被敵人發現。 - 隨着技術的進步,CDMA設備的價格和體積都大幅度下降,因而現在已廣泛用於民用的移動通信中。
隨機接入(CSMA/CD協議)
以上所討論的是靜態划分信道,此外還有動態接入控制,其中包括 受控接入與隨機接入,受控接入在局域網中使用較少,在此不作討論。下面重點討論隨機接入。
總線局域網使用協議:CSMA/CD
工作原理
載波監聽 多址接入/碰撞檢測 CSMA/CD (Carrier Sense Multiple Access/Collision Detection)
-
多址接入MA:多個主機連接在一條總線上,競爭使用總線。
-
載波監聽CS:發送幀前線檢測總線,若總線空閑96比特時間,則立即發送;若總線忙,則持續檢測總線直到總線空閑96比特時間后再重新發送;
-
碰撞檢測CD:邊發送邊檢測碰撞,若檢測到碰撞,則立即停止發送(以免繼續浪費網絡資源),退避一段隨機時間后再重新發送。
以太網還采取一種叫做強化碰撞的措施。這就是當發送幀的站點一旦檢測到碰撞,除了立即停止發送幀外,還要再繼續發送32比特或48比特的人為干擾信號(Jamming Signal) ,以便有足夠多的碰撞信號使所有站點都能檢測出碰撞。
一旦沖突,立即停說,等待時機,重新再說。
爭用期
- 發送幀的主機最多經過以太網的端到端往返傳播時延2τ(即δ→0 )的時長,就可檢測到本次傳輸是否發生了碰撞。2τ稱為爭用期或碰撞窗口;
- 只有經過爭用期這段時間還沒有檢測到碰撞,才能肯定這次發送不會發生碰撞;
- 顯然,在以太網中發送幀的主機越多,端到端往返傳播時延越大,發生碰撞概率就越大。因此,共享式以太網不能連接太多的主機,使用的總線也不能太長。
- 10Mb/s以太網把爭用期2τ 定為512比特發送時間,即51.2μs, 因此其總線長度不能超過5120m,但考慮到其他一些因素,如信號衰減等,以太網規定總線長度不能超過2500m。
最小幀長
- 最小幀長=爭用期 * 數據發送速率
- 以太網規定最小幀長為64字節,即512比特(512比特時間即為爭用期);
- 即保證發送時間不小於往返傳輸延時
- 以太網的最小幀長確保了主機可在幀發送完成之前就檢測到該幀的發送過程中是否遭遇了碰撞;
- 如果在爭用期(共發送64字節)沒有檢測到碰撞,那么后續發送的數據就一定不會發生碰撞;
- 如果在爭用期內檢測到碰撞,就立即中止發送,這時已經發送出去的數據一定小於64字節,因此凡長度小於64字節的幀都是由於碰撞而異常中止的無效幀。
最大幀長
為了防止主機長時間占用總線,以太網的幀也不能太長;以太網V2的MAC幀最大長度為1518字節(1500字節數據載荷,18字節首尾字段);插入VLAN標記的802.1Q幀最大長度為1522字節(1500字節數據載荷,22字節首尾字段) ;
截斷二進制指數退避算法
- 若連續多次發生碰撞,就表明可能有較多的主機參與競爭信道。
但使用上述退避算法可使重傳需要推遲的平均時間隨重傳次數而增大(這也稱為動態退避),因而減小發生碰撞的概率,有利於整個系統的穩定。 - 當重傳達16次仍不能成功時,表明同時打算發送幀的主機太多,以至於連續發生碰撞,則丟棄該幀並向高層報告。
信道利用率
一個幀成功發送可能會經歷多次碰撞和退避,下面考慮極限信道利用率,也就是理想情況下的信道利用率:
- 幀本身的發送時間是T0,端到端的傳輸時間為t,則發送一幀占用總線的時間為T0+t
- 極限信道利用率Smax=T0/( T0+t )
- 因此要提高信道利用率,需要增大T0,也就是以太網幀長度應盡量長些;減小t,也就是以太網端到端的舉例因受限制。
協議特點
- 使用 CSMA/CD 協議的以太網不能進行全雙工通信而只能進行雙向交替通信(半雙工通信)
- 每個站在發送數據之后的一小段時間內,存在着遭遇碰撞的可能性。
- 這種發送的不確定性使整個以太網的平均通信量遠小於以太網的最高數據率。
CSMA/CD協議曾經用於各種總線結構以太網和雙絞線以太網的早期版本中。
現在的以太網基於交換機和全雙工連接,不會有碰撞,因此沒有必要使用CSMA/CD協議
隨機接入(CSMA/CA協議)
無線局域網使用的協議:CSMA/CA
載波監聽 多址接入/碰撞避免 CSMA/CA (Carrier Sense Multiple Access/Collision Avoidance)
- 802.11無線局域網在MAC層使用CSMA/CA協議,以盡量減小碰撞發送的概率。
- 802.11無線局域網使用CSMA/CA協議,在CSMA的基礎上增加了一個碰撞避免CA功能,而不再實現碰撞檢測功能。
- 不能使用CSMA/CD協議的原因是在無線局域網中無法實現碰撞檢測。在使用CSMA/CA協議的同時,還使用停止-等待協議來實現可靠傳輸。
- 在無線局域網中,不能使用碰撞檢測CD,原因如下:
- 由於無線信道的傳輸條件特殊,其信號強度的動態范圍非常大,無線網卡上接收到的信號強度往往會遠遠小於發送信號的強度(可能相差百萬倍)。如果要在無線網卡上實現碰撞檢測CD,對硬件的要求非常高。
- 即使能夠在硬件上實現無線局域網的碰撞檢測功能,但由於無線電波傳播的特殊性(存在隱蔽站問題),進行碰撞檢測的意義也不大。
- 在無線局域網中,不能使用碰撞檢測CD,原因如下:
- 802.11的MAC層標准定義了兩種不同的媒體接入控制方式:
- 分布式協調功能DCF(Distributed Coordination Function)。在DCF方式下,沒有中心控制站點,每個站點使用CSMA/CA協議通過爭用信道來獲取發送權,這是802.11定義的默認方式。
- 點協調功能PCF(Point Coordination Function)。PCF方式使用集中控制的接入算法(一般在接入點AP實現集中控制),是802.11定義的可選方式,在實際中較少使用。
幀間間隔IFS(InterFrame Space)
802.11標准規定,所有的站點必須在持續檢測到信道空閑一段指定時間后才能發送幀,這段時間稱為幀間間隔IFS。
幀間間隔的長短取決於該站點要發送的幀的類型:
- 高優先級幀需要等待的時間較短,因此可優先獲得發送權;
- 低優先級幀需要等待的時間較長。若某個站的低優先級幀還沒來得及發送,而其他站的高優先級幀已發送到信道上,則信道變為忙態,因而低優先級幀就只能再推遲發送了。這樣就減少了發生碰撞的機會。
- 常用的兩種幀間間隔如下:
- 短幀間間隔SIFS(28μs),是最短的幀間間隔,用來分隔開屬於一次對話的各幀。一個站點應當能夠在這段時間內從發送方式切換到接收方式。使用SIFS的幀類型有ACK幀、CTS幀、 由過長的MAC幀分片后的數據幀、以及所有回答AP探詢的幀和在PCF方式中接入點AP發送出的任何幀。
- DCF幀間間隔DIFS(128μs),它比短幀間間隔SIFS要長得多,在DCF方式中用來發送數據幀和管理幀。
工作原理
源站在檢測到信道空閑后還要再等待一段時間DIFS后,再決定發送數據。
- 這是因為考慮到可能有其他的站有高優先級的幀要發送。若有,就要讓高優先級幀先發送。
目的站正確接收數據幀后還要等待一段時間SIFS才能發送ACK幀。
- 這是因為SIFS是最短的幀間間隔,用來分隔開屬於一次對話的各幀,在這段時間內,一個站點應當能夠從發送方式切換到接收方式。
信道由忙轉為空閑且經過DIFS時間后,還要退避一段隨機時間才能使用信道
- 這是為了防止多個站點同時發送數據而產生碰撞
使用退避算法的時機:
- 在發送數據幀之前檢測到信道處於忙狀態時;
- 在每一次重傳一個數據幀時;
- 在每一次成功發送后要連續發送下一個幀時(這是為了避免一個站點長時間占用信道)。
擴展:退避算法
在執行退避算法時,站點為退避計時器設置一個隨機的退避時間:
- 當退避計時器的時間減小到零時,就開始發送數據;
- 當退避計時器的時間還未減小到零時而信道又轉變為忙狀態,這時就凍結退避計時器的數值,重新等待信道變為空閑,再經過時間DIFS后,繼續啟動退避計時器。
在進行第i次退避時,退避時間在時隙編號{0, 1, ... , 2^(2+i)-1}中隨機選擇一個, 然后乘以基本退避時間(也就是一個時隙的長度)就可以得到隨機的退避時間。這樣做是為了使不同站點選擇相同退避時間的概率減少。當時隙編號達到255時(對應於第6次退避)就不再增加了。
- 為了盡可能地避免各種可能的碰撞,CSMA/CA協議采用了一種不同於CSMA/CD協議的退避算法。當要發送幀的站點檢測到信道從忙態轉為空閑時,都要執行退避算法。
- 802.11標准規定,所有的站在完成發送后,必須再等待一段幀間間隔時間才能發送下一幀。幀間間隔的長短取決於該站要發送的幀的優先級。
- 在802.11無線局域網的MAC幀首部中有一個持續期字段,用來填入在本幀結束后還要占用信道多久時間,其他站點通過該字段可實現虛擬載波監聽。
- 802.11標准允許要發送數據的站點對信道進行預約,即在發送數據幀之前先發送請求發送RTS幀。在收到響應允許發送CTS幀后,就可發送數據幀。
3.7 MAC地址、IP地址以及ARP協議
數據鏈路層:
- MAC地址是以太網的MAC子層所使用的地址;
網際層:
- IP地址是TCP/IP體系結構網際層所使用的地址;
- ARP協議屬於TCP/IP體系結構的網際層,其作用是已知設備所分配到的IP地址,使用ARP協議可以通過該IP地址獲取到設備的MAC地址;
盡管IP地址和ARP協議屬於TCP/IP體系結構的網際層(而不屬於數據鏈路層),但是它們與MAC地址存在一定的關系,並且我們日常的網絡應用都離不開MAC地址、IP地址以及ARP協議。因此,我們將這三者放在一起討論。
MAC地址
- 當多個主機連接在同一個廣播信道上,要想實現兩個主機之間的通信,則每個主機都必須有一個唯一的標識, 即一個數據鏈路層地址;
- 在每個主機發送的幀中必須攜帶標識發送主機和接收主機的地址。由於這類地址是用於媒體接入控制MAC(Media Access Control),因此這類地址被稱為MAC地址;
- MAC地址一般被固化在網卡(網絡適配器)的電可擦可編程只讀存儲器EEPROM中,因此MAC地址也被稱為硬件地址;
- 一般情況下,用戶主機會包含兩個網絡適配器:有線局域網適配器(有線網卡)和無線局域網適配器(無線網卡)。每個網絡適配器都有一個全球唯一的MAC地址。而交換機和路由器往往擁有更多的網絡接口,所以會擁有更多的MAC地址。
- 綜上所述,嚴格來說,MAC地址是對網絡上各接口的唯一標識, 而不是對網絡上各設備的唯一標識。
IEEE 802局域網的MAC地址格式
對於使用EUI-48空間的應用程序,IEEE的目標壽命為100年(直到2080年),但是鼓勵采用EUI-64作為替代
注:在MAC地址發送順序中,字節發送順序為從第一字節到第六字節,而字節內的比特發送數據則是從b0到b7.
IP地址
- IP地址是因特網(Internet) 上的主機和路由器所使用的地址,用於標識兩部分信息:
- 網絡編號:標識因特網上數以百萬計的網絡
- 主機編號:標識同一網絡上不同主機(或路由器)
- 很顯然,之前介紹的MAC地址不具備區分不同網絡的功能。
- 如果只是一個單獨的網絡,不接入因特網,可以只使用MAC地址(這不是一般用戶的應用方式)。
- 如果主機所在的網絡要接入因特網,則IP地址和MAC地址都需要使用。
- 數據包轉發過程中IP地址與MAC地址的變化情況:
- 源IP地址和目的IP地址保持不變;
- 源MAC地址和目的MAC地址逐個鏈路(或逐個網絡)改變。
ARP協議
ARP協議:地址解析協議
- 源主機在自己的ARP高速緩存表中查找目的主機的IP地址所對應的MAC地址,若找到了,則可以封裝MAC幀進行發送;若找不到,則發送ARP請求(封裝在廣播MAC幀中) ;
- 目的主機收到ARP請求后,將源主機的IP地址與MAC地址記錄到自己的ARP高速緩存表中,然后給源主機發送ARP響應(封裝在單播MAC幀中)。ARP響應中包含有目的主機的IP地址和MAC地址;
- 源主機收到ARP響應后,將目的主機的IP地址與MAC地址記錄到自己的ARP高速緩存表中,然后就可以封裝之前想發送的MAC幀並發送給目的主機;
- ARP協議只能在一段鏈路或一個網絡上使用,而不能跨網絡使用;
- 除ARP請求和響應外,ARP還有其他類型的報文(例如用於檢查IP地址沖突的“無故ARP、免費ARP(Gratuitous ARP)”);
- ARP沒有安全驗證機制,存在ARP欺騙(攻擊)問題。
高速緩存表中的表項有動態和靜態兩種,動態的生命周期默認為兩分鍾,因此IP地址與MAC地址的對應關系記錄是會定期自動刪除的。
3.8 集線器與交換機
- 廣播域(broadcast domain):指這樣一部分網絡,其中任何一台設備發出的廣播通信都能被該部分網絡中的所有其他設備所接收。
- 碰撞域(collision domain):又稱為沖突域,是指網絡中一個站點發出的幀會與其他站點發出的幀產生碰撞或沖突的那部分網絡。
- 碰撞域越大,發生碰撞的概率越高。
集線器-在物理層擴展以太網
- 早期以太網的互連設備
- 工作在OSI體系結構的物理層
- 對接收到的信號進行放大、轉發
- 集線器是也可以看做多口中繼器,每個端口都可以成為一個中繼器,中繼器是對減弱的信號進行放大和發送的設備。
- 使用集線器作為互連設備的以太網仍然屬於共享總線式以太網。集線器互連起來的所有主機共享總線帶寬,屬於同一個碰撞域和廣播域。
- 擴大了廣播域,同時也擴大的沖突域
交換機-在數據鏈路層擴展以太網
- 擴展以太網更常用的方法是在數據鏈路層進行。
- 早期使用網橋,現在使用以太網交換機。
網橋
- 工作在數據鏈路層。
- 它根據 MAC 幀的目的地址對收到的幀進行轉發和過濾。
- 當網橋收到一個幀時,並不是向所有的接口轉發此幀,而是先檢查此幀的目的MAC 地址,然后再確定將該幀轉發到哪一個接口,或把它丟棄。
交換機
- 1990 年問世的交換式集線器 (switching hub) 可明顯地提高以太網的性能。
- 交換式集線器常稱為以太網交換機 (switch) 或第二層交換機 (L2 switch),強調這種交換機工作在數據鏈路層。
- 以太網交換機實質上就是一個多接口的網橋
- 交換機是目前以太網中使用最廣泛的互連設備
- 工作在OSI體系結構的數據鏈路層(也包括物理層)
- 根據MAC地址對幀進行轉發
- 使用交換機作為互連設備的以太網,稱為交換式以太網。交換機可以根據MAC地址過濾幀,即隔離碰撞域。
- 交換機的每個接口是一個獨立的碰撞域
- 交換機擴大了廣播域,但隔離了沖突域(VLAN除外)
分析區別:
多台主機同時給另一台主機發送單播幀
- 集線器以太網:會產生碰撞,遭遇碰撞的幀會傳播到總線上的各主機
- 交換機以太網:會將它們緩存起來,然后逐個轉發給目的主機,不會產生碰撞
工作在數據鏈路層的以太網交換機,其性能遠遠超過工作在物理層的集線器,而且價格並不貴,這就使得集線器逐漸被市場淘汰
3.9 以太網交換機自學習和轉發幀
- 以太網交換機工作在數據鏈路層(也包括物理層)
- 以太網交換機收到幀后,在幀交換表中查找幀的目的MAC地址所對應的接口號,然后通過該接口轉發幀。
- 以太網交換機是一種即插即用設備,剛上電啟動時其內部的幀交換表是空的。隨着網絡中各主機間的通信,以太網交換機通過自學習算法自動逐漸建立起幀交換表。
- 以太網交換機自學習和轉發幀的流程:
- 收到幀后進行登記。 登記的內容為幀的源MAC地址及進入交換機的接口號;
- 根據幀的目的MAC地址和交換機的幀交換表對幀進行轉發, 有以下三種情況:
- 明確轉發: 交換機知道應當從哪個(或哪些)接口轉發該幀(單播,多播,廣播)
- 盲目轉發:交換機不知道應當從哪個端口轉發幀,只能將其通過除進入交換機的接口外的其他所有接口轉發(也稱為泛洪)。
- 明確丟棄: 交換機知道不應該轉發該幀,將其丟棄。
- 幀交換表中的每條記錄都有自己的有效時間,到期刪除。原因如下:
- 交換機的接口改接了另一台主機;
- 主機更換了網卡。
3.10 生成樹協議STP
IEEE 802.1D 標准制定了一個生成樹協議 STP (Spanning Tree Protocol)
為提高以太網的可靠性,可添加冗余鏈路來提高以太網的可靠性。
但是,冗余鏈路也會帶來負面效應形成網絡環路,網絡環路會帶來以下問題:
-
廣播風暴
大量消耗網絡資源,使得網絡無法正常轉發其他數據幀;
-
主機收到重復的廣播幀
大量消耗主機資源
-
交換機的幀交換表震盪(漂移)
以太網交換機使用生成樹協議STP(Spanning Tree Protocol),可以在增加冗余鏈路來提高網絡可靠性的同時又避免網絡環路帶來的各種問題。
- 不論交換機之間采用怎樣的物理連接,交換機都能夠自動計算並構建一個邏輯沒有環路的網絡,其邏輯拓撲結構是無環路的樹狀結構;
- 最終生成的樹型邏輯拓撲要確保連通整個網絡;
- 當首次連接交換機或網絡物理拓撲發生變化時(有可能是人為改變或故障),交換機都將進行生成樹的重新計算。
為了分割廣播域,虛擬局域網VLAN技術應運而生,在此不展開。