計算機網路之資料鏈路層

Nick Blog發表於2020-12-16

1. 簡介

在本章中我們研究的是在同一個區域網中,分組怎樣從一臺主機傳送到另一臺主機,但並不經過路由器轉發。 從整個網際網路來看,區域網仍屬於資料鏈路層的範圍,並不將其放到網路層中討論,因為網路層討論的是分組怎麼從一個網路通過路由器轉發到另一個網路。

資料鏈路層使用的通道主要有以下兩種型別:

  • 點對點通道:一對一的點對點通訊方式。
  • 廣播通道:一對多的廣播通訊方式。

本章最重要的內容是:

  • 資料鏈路層的點對點通道和廣播通道的特點,以及這兩種通道所使用的協議(PPP協議以及CSMA/CD協議)的特點。
  • 資料鏈路層的三個基本問題:封裝成幀、透明傳輸和差錯檢測
  • 乙太網MAC層的硬體地址
  • 介面卡、轉發器、集線器、網橋、乙太網交換機的作用以及使用場合。

2. 使用點對點通道的資料鏈路層

2.1 基本術語

(1)鏈路 (link): 就是從一個結點到相鄰結點的一段物理線路(有線或無線),而中間沒有任何其他的交換結點。在進行資料通訊時,兩臺計算機之間的通訊路徑往往要經過許多段這樣的鏈路。可見鏈路只是一條路徑的組成部分。

(2)資料鏈路(data link): 當需要在一條線路上傳送資料時,除了必須有一條物理線路外,還必須有一些必要的通訊協議來控制這些資料的傳輸,若把實現這些協議的硬體和軟體加到鏈路上,就構成了資料鏈路。現在最常用的方法是使用網路介面卡(既有硬體,也包括軟體)來實現這些協議。

(3)資料通訊協議 曾叫做通訊規程(procedure),在資料鏈路層,規程和協議是同義語。

(4)幀: 點對點通道的資料鏈路層的協議資料單元。

2.2 基本問題

2.2.1 封裝成幀(framing)

封裝成幀就是在一段資料的前後分別新增首部和尾部,這樣就構成了一個幀。 幀就是資料鏈路層的資料傳送單元。一個幀的幀長等於幀的資料部分長度加上幀首部和幀尾部的長度。 首部和尾部的一個重要作用就是進行幀定界(即確定幀的界限)。此外,首部和尾部還包括許多必要的控制資訊。在傳送幀時,是從幀首部開始傳送的。各種資料鏈路層協議都對幀首部和幀尾部的格式有明確的規定。 為了提高幀的傳輸效率,應當使幀的資料部分長度儘可能地大於首部和尾部的長度。每一種鏈路層協議都規定了所能傳送的幀的資料部分長度上限—最大傳送單元MTU(Maximum Transfer Unit)

控制字元SOH(Start Of Header) 表示幀的首部開始控制字元EOT(End Of Transmission)表示幀的結束針對差錯資料(只有首部開始符SOH而沒有傳輸結束符EOT),直接丟棄,完整資料予以保留。

2.2.2 透明傳輸

​ 在資料鏈路層透明 傳送資料表示無論什麼樣的位元組合的資料,都能夠按照原樣沒有差錯地通過這個資料鏈路層。由於上面已經使用專門的控制字元(8位元)來標識SOH和EOT。所傳輸的資料中若是出現一樣的位元編碼就會出現幀定界的錯誤(誤將資料當作界定符)。只有當輸入資料無上述差錯傳輸成功時才可稱作透明傳輸。

​ 當資料部分是文字檔案時,自然不會出現上述差錯;但當資料部分是非ASCⅡ碼的文字檔案時(如二進位制程式碼的計算機程式或影像等), 如果資料中的某個位元組的二進位制程式碼恰好和SOH或EOT這種控制字元一樣,資料鏈路層就會錯誤地“找到幀的邊界”,把部分幀收下(誤認為是個完整的幀),而把剩下的那部分資料丟棄。

解決方案: 傳送端在資料中出現控制字元SOH或EOT的前面插入一個轉義字元ESC (其十六進位制編碼是1B,二進位制是00011011)。接收端把資料送往網路層之前刪除這個插入的轉義字元。稱為位元組填充(byte stuffing)或字元填充(character stuffing)。如果轉義字元也出現在資料當中,那麼解決方法仍然是在轉義字元的前面插入一個轉義字元。因此,當接收端收到連續的兩個轉義字元時,就刪除其中前面的一個。

2.2.3 差錯檢測

(1)位元差錯: 現實的通訊鏈路都不會是理想的,位元在傳輸過程中可能會產生差錯:1可能會變成0,而0也可能變成1。這就叫做位元差錯。位元差錯是傳輸差錯中的一種。

(2)產生原因: 在一段時間內,傳輸錯誤的位元佔所傳輸位元總數的比率稱為誤位元速率BER(Bit Error Rate)。誤位元速率與訊雜比有很大的關係。如果設法提高訊雜比,就可以使誤位元速率減小。實際的通訊鏈路並非是理想的,它不可能使誤位元速率下降到零。

(3)解決方案: 為了保證資料傳輸的可靠性,在計算機網路傳輸資料時,必須採用各種差錯檢測措施。目前在資料鏈路層廣泛使用了迴圈冗餘檢驗CRC(Cyclic Redundancy Check) 的檢錯技術。

(4)迴圈冗餘檢驗原理: 在傳送端,將資料劃分為組,每組k個位元。CRC運算就是在k位位元資料的後面新增供差錯檢測用的n位冗餘碼,然後構成一個幀傳送出去,一共傳送(k+n)位。具體地,使用模2運算,將收到的k+n位資料(在其後新增n個0)除以事先商定的n+1位除數P,得到商R,n位餘數R,這個餘數R就作為冗餘碼拼接在資料M的後面傳送出去。冗餘碼常稱為幀檢驗序列FCS(Frame Check Sequence)。例如:M=101001(k=6),除數P=1101(n=3)。經模2除法運算後的結果是:商Q=110101,餘數R=001,具體計算過程如下:

img

​ 在接收端把接收到的資料以幀為單位進行CRC檢驗:把收到的每一個幀都除以同樣的除數P(模2運算),然後檢查得到的餘數R。如果在傳輸過程中無差錯,那麼經過CRC檢驗後得出的餘數R肯定是0。但如果出現誤碼,那麼餘數R仍等於零的概率是非常非常小的。總之,在接收端對收到的每一幀經過CRC檢驗後,有以下兩種情況:

  • 若得出的餘數R=0,則判定這個幀沒有差錯,就接受(accept);
  • 若餘數R≠0,則判定這個幀有差錯(但無法確定究竟是哪一位或哪幾位出現了差錯),就丟棄。

(5)傳輸差錯: 若僅僅使用迴圈冗餘檢驗CRC差錯檢測技術,則只能做到對幀的無差錯接受,到的幀並沒有出現位元差錯,但出現了幀丟失、幀重複或幀失序,以上三種情況都屬於傳輸差錯。“無位元差錯”與“無傳輸差錯”並不是同樣的概念。不要求在資料鏈路層提供可靠傳輸,即不要求在資料鏈路層解決幀丟失、幀重複或幀失序問題。

3. 點對點協議PPP

​ 點對點協議PPP(Point-to-Point protocol)則是目前使用得最廣泛的資料鏈路層協議。PPP協議就是使用者計算機和ISP進行通訊時所使用的資料鏈路層協議。

3.1 PPP協議設計要求

  • 簡單:CRC檢驗,正確就收下,反之就丟棄。
  • 封裝成幀:準確定位開始和結束。
  • 透明性:轉義字元保證透明傳輸。
  • 多種網路層協議:支援多種網路層協議(如IP和IPX)。
  • 多種鏈路型別:序列的(一次只傳送一個位元)或並行的(一次並行地傳送多個位元),同步的或非同步的,低速的或高速的,電的或光的,交換的(動態的)或非交換的(靜態的)點對點鏈路。
  • 差錯檢測
  • 檢測連線狀態:自動檢測出鏈路是否處於正常工作狀態。當出現故障的鏈路隔了一段時間後又重新恢復正常工作時,
    就特別需要有這種及時檢測功能。
  • 最大傳送單元:PPP協議必須對每一種型別的點對點鏈路設定最大傳送單元MTU的標準預設值,以促進各種實現之間的互操作性。
  • 網路層地址協商:如果僅僅在鏈路層建立了連線而不知道對方網路層地址,則還不能夠保證網路層可以傳送分組。
  • 資料壓縮協商:PPP協議必須提供一種方法來協商使用資料壓縮演算法。但並不要求將資料壓縮演算法進行標準化。

在TCP/P協議族中,可靠傳輸由運輸層的TCP協議負責,因此資料鏈路層的PPP協議不需要進行糾錯,不需要設定序號,也不需要進行流量控制。PPP協議不支援多點線路(即一個主機輪流和鏈路上的多個從主機進行通訊),而只支援點對點的鏈路通訊。此外,PPP協議只支援全雙工鏈路。

3.2 PPP協議的組成

  • 一個將IP資料包封裝到序列鏈路的方法。PPP既支援非同步鏈路(無奇偶檢驗的8位元資料),也支援面向位元的同步鏈路。IP資料包在PPP幀中就是其資訊部分。這個資訊部分的長度受最大傳送單元MTU的限制。
  • 一個用來建立、配置和測試資料鏈路連線的鏈路控制協議LCP(Link Control Protocol)
  • 一套網路控制協議NCP(Network Control Protocol),其中的每一個協議支援不同的網路層協議,如IP、OSI的網路層、 DECnet,以及AppleTalk等。

3.3 PPP協議的幀格式

(1)PPP幀的首部和尾部分別為四個欄位和兩個欄位。

img

  • 首部第一尾部第二:標誌欄位F(Flag),規定為0x7E(符號“0x”表示它後面的字元是用十六進位制表示的,十六進位制的7E的二進位制表示是01111110), 標誌欄位就是PPP幀的定界符。如果出現連續兩個標誌欄位,就表示這是一個空幀,應當丟棄。
  • 首部第二:控制欄位A規定為0xFF(即11111111)。
  • 首部第三:控制欄位C規定為0x03(即00000011),這兩個欄位實際上並沒有攜帶PPP幀的資訊。
  • 首部第四:PPP首部的第四個欄位是2位元組的協議欄位。當協議欄位為0x0021時,PPP幀的資訊欄位就是IP資料包。若為0xC021,則資訊欄位是PPP鏈路控制協議LCP的資料,而0x8021表示這是網路層的控制資料。
  • 尾部第一:CRC的幀檢驗序列FCS(冗餘碼)。
  • 資訊欄位:長度可變,不超過1500位元組。

(2)位元組填充:當資訊欄位中出現和標誌欄位一樣的位元(0x7E),並且使用非同步傳輸時,轉義符定義為0x7D,就必須採取措施使這種形式上和標誌欄位一樣的位元組合不出現在資訊欄位中,位元組填充方法如下:

  • 把資訊欄位中出現的每一個0x7E位元組轉變成為2位元組序列(0x7D,0x5E)。
  • 若資訊欄位中出現一個0x7D的位元組(轉義字元),則把0x7D轉變成為2位元組序列(0x7D,0x5D)。
  • 若資訊欄位中出現ASCII碼的控制字元(即數值小於0x20的字元),則在該字元前面要加入一個0x7D位元組,同時將該字元的編碼加以改變。例如,出現0x03就要把它轉變為2位元組序列(0x7D,0x23)。
  • 接收端在收到資料後再進行與傳送端位元組填充相反的變換,就可以正確地恢復出原來的資訊。

(3)零位元填充:PPP協議用在SONET/SDH鏈路時,使用同步傳輸,在這種情況下,PPP協議採用零位元填充方法來實現透明傳輸。零位元填充的具體做法是:在傳送端,先掃描整個資訊欄位(通常用硬體實現,但也可用軟體實現,只是會慢些)。只要發現有5個連續1,則立即填入一個0。因此經過這種零位元填充後的資料,就可以保證在資訊欄位中不會出現6個連續1。接收端在收到一個幀時,先找到標誌欄位F以確定一個幀的邊界,接著再用硬體對其中的位元流進行掃描。每當發現5個連續1時,就把這5個連續1後的一個0刪除,以還原成原來的資訊位元流,如下圖。

img

3.4 PPP協議的工作狀態

PPP鏈路初始化:

  • 當使用者撥號接入ISP後,就建立了一條從使用者個人電腦到ISP的物理連線;

  • 這時,使用者個人電腦向ISP傳送一系列的鏈路控制協議LCP分組(封裝成多個PPP幀),以便建立LCP連線;

  • 這些分組及其響應選擇了將要使用的一些PPP引數。

  • 接著還要進行網路層配置,網路控制協議NCP給新接入的使用者個人電腦分配一個臨時的IP地址。

  • 當使用者通訊完畢時,NCP釋放網路層連線,收回原來分配出去的IP地址

  • 接著,LCP釋放資料鏈路層連線。最後釋放的是物理層的連線。

img

以下從中間分支箭頭上的操作分步驟介紹具體初始化過程:

  • 起初:PPP鏈路的起始和終止狀態永遠是“鏈路靜止”(Link Dead)狀態,這時在使用者個人電腦和ISP的路由器之間並不存在物理層的連線。

  • 物理層連線建立:當使用者個人電腦通過調變解調器呼叫路由器時,路由器就能夠檢測到調變解調器發出的載波訊號。在雙方建立了物理層連線後PPP就進入“鏈路建立”(Link establish)狀態,其目的是建立鏈路層的LCP連線。

  • LCP配置協商:物理鏈路建立之後,開始進行LCP配置協商,即傳送LCP的配置請求幀(Configure-Request),這是一個PPP幀,其協議欄位置為LCP對應的程式碼,而資訊欄位包含鏈路上的最大幀長、所使用的鑑別協議,以及不使用PPP幀中的地址和控制欄位(因為這兩個欄位的值是固定的,沒有任何資訊量,可以在PPP幀的首部中省略這兩個位元組)。鏈路的另一端可以傳送以下幾種響應中的一種。若配置失敗,則轉到鏈路靜止狀態,否則進入“鑑別”( Authenticate)狀態

    • 配置確認幀(Configure-Ack):所有選項都接受。
    • 配置否認幀(Configure-Nak):所有選項都理解但不能接受。
    • 配置拒絕幀(Configure-Reject):選項有的無法識別或不能接受,需要協商。
  • 鑑別:鑑別( Authenticate)狀態只允許傳送LCP協議的分組、鑑別協議的分組以及監測鏈路質量的分組。若使用
    令鑑別協議PAP(Password Authentication Protocol)
    ,則需要發起通訊的一方傳送身份識別符號和口令。系統可允許使用者重試若干次。還可以使用更加複雜安全的口令握手鑑別協議CHAP(Challenge-Handshake Authentication Protocol)若鑑別身份失敗,則轉到“鏈路終止”(Link Terminate)狀態。若鑑別成功,則進入“網路層協議”(Network- Layer Protocol)狀態

  • NCP配置協商:在“網路層協議”狀態,PPP鏈路的兩端的網路控制協議NCP根據網路層的不同協議互相交換網路層特定的網路控制分組。PPP協議兩端的網路層可以執行不同的網路層協議,但仍然可使用同一個PPP協議進行通訊。如果在PPP鏈路上執行的是IP協議,則對PPP鏈路的每一端配置IP協議模組(如分配IP地址)時就要使用NCP中支援IP的協議——IP控制協議ICP(IP Control Protocol)。當網路層配置完畢後,鏈路就進入可進行資料通訊的“鏈路開啟”(Link Open)狀態

  • 互發分組。在鏈路開啟狀態下,鏈路的兩個PPP端點可以彼此向對方傳送分組。兩個PPP端點還可傳送回送請求LCP分組(Echo-Request)和回送回答LCP分組(Echo-Reply),以檢查鏈路的狀態。

  • 終止請求:資料傳輸結束後,可以由鏈路的一端發出終止請求LCP分組(Terminate-Request)請求終止鏈路連線,在收到對方發來的終止確認LCP分組(Terminate-Ack)後,轉到“鏈路終止”狀態。如果鏈路出現故障,也會從“鏈路開啟”狀態轉到“鏈路終止”狀態。當調變解調器的載波停止後,則回到“鏈路靜止”狀態。

4. 使用廣播通道的資料鏈路層

廣播通道可以進行一對多的通訊。區域網使用的就是廣播通道。

4.1 區域網的資料鏈路層

(1)區域網簡介:區域網最主要的特點是:網路為一個單位所擁有,且地理範圍和站點數目均有限。區域網可按網路拓撲進行分類:星形網,環形網和匯流排網。由於集線器(hub)的出現和雙絞線大量用於區域網中,星形乙太網以及多級星形結構的乙太網獲得了非常廣泛的應用。雙絞線已成為區域網中的主流傳輸媒體。當資料率很高時,往往需要使用光纖作為傳輸媒體。

img

(2)共享通道:在區域網要著重考慮的一個問題是共享通道,這在技術上有兩種方法:

  • 靜態劃分通道:如之前介紹過的分頻多工、分時多工、波長分波多工和碼分複用等。使用者只要分配到了通道就不會和其他使用者發生衝突。但這種劃分通道的方法代價較高,不適合於區域網使用。
  • 動態媒體接入控制:又稱為多點接入(multiple access),其特點是通道並非在使用者通訊時固定分配給使用者。這裡又分為以下兩類:
    • 隨機接入所有的使用者可隨機地傳送資訊。但如果恰巧有兩個或更多的使用者在同一時刻傳送資訊,那麼在共享媒體上就要產生碰撞,使得這些使用者的傳送都失敗。因此,必須有解決碰撞的網路協議。這也是本章介紹的重點。
    • 受控接入使用者不能隨機地傳送資訊而必須服從一定的控制。這類的典型代表有分散控制的令牌環區域網和集中控制的多點線路探詢(polling),或稱為輪詢。受控接入在區域網中使用得較少。

(3)MAC協議:為了使資料鏈路層能更好地適應多種區域網標準,IEEE802委員會就把區域網的資料鏈路層拆成兩個子層,即邏輯鏈路控制LLC(Logical Link Control)子層媒體接入控制MAC(Medium Access Control)子層而TCP/IP體系經常使用的區域網僅裝有MAC協議而沒有LLC協議。

(4)介面卡:計算機與外界區域網的連線是通過通訊介面卡(adapter,或稱網路卡) 進行的。在這種通訊介面卡上面裝有處理器和儲存器(包括RAM和ROM)。介面卡和區域網之間的通訊是通過電纜或雙絞線以序列傳輸方式進行的而介面卡和計算機之間的通訊則是通過計算機主機板上的LO匯流排以並行傳輸方式進行的。因此,介面卡的一個重要功能就是要進行資料序列傳輸和並行傳輸的轉換。由於網路上的資料率和計算機匯流排上的資料率並不相同,因此在介面卡中必須裝有對資料進行快取的儲存晶片。在主機板上插入介面卡時,還必須把管理該介面卡的裝置驅動程式安裝在計算機的作業系統中。介面卡還要能夠實現乙太網協議。介面卡在接收和傳送各種幀時,不使用計算機的CPU。這時計算機中的CPU可以處理其他任務。當介面卡收到有差錯的幀時,就把這個幀直接丟棄而不必通知計算機。當介面卡收到正確的幀時,它就使用中斷來通知該計算機,並交付協議棧中的網路層。當計算機要傳送IP資料包時,就由協議棧把IP資料包向下交給介面卡,組裝成幀後傳送到區域網。計算機的硬體地址就在介面卡的ROM中,而計算機的軟體地址—P地址在計算機的儲存器中。

img

4.2 CSMA/CD協議

(1)匯流排型一對一通訊:最早的乙太網是匯流排型的,當一臺計算機傳送資料時,匯流排上的所有計算機都能檢測到這個資料,屬於廣播通訊。為了在匯流排上實現一對一的通訊,可以使每一臺計算機的介面卡擁有一個與其他介面卡都不同的地址。在傳送資料幀時,在幀的首部寫明接收站的地址,僅當資料幀中的目的地址與介面卡ROM中存放的硬體地址一致時,該介面卡才能接收這個資料幀。介面卡對不是傳送給自己的資料幀就丟棄。

(2)乙太網通訊措施

  • 第一,採用較為靈活的無連線的工作方式:不必先建立連線就可以直接傳送資料介面卡對傳送的資料幀不進行編號,也不要求對方發回確認。因此,乙太網提供的服務是盡最大努力的交付,即不可靠的交付。當目的站收到有差錯的資料幀時,就把幀丟棄。對有差錯幀是否需要重傳則由高層(TCP協議,若TCP發現丟失了資料,就把這些資料重新傳遞給乙太網進行重傳,但乙太網並不知道這是重傳幀)來決定。在同一時間只能允許一臺計算機傳送資料,否則各計算機之間就會互相干擾,使得所傳送資料被破壞。乙太網採用最簡單的隨機接入,並使用CSMA/CD(載波監聽多點接入/碰撞檢測,Carrier Sense Multiple Access with Collision Detection)協議以減少衝突發生的概率
  • 第二,乙太網傳送的資料都使用曼徹斯特(Manchester)編碼,每一個碼元的正中間出現一次電壓的轉換,而接收端就利用這種電壓的轉換很方便地把位同步訊號提取出來。曼徹斯特編碼的缺點是它所佔的頻頻寬度比原始的基帶訊號增加了一倍(因為每秒傳送的碼元數加倍了)。

(3)CSMA/CD載波監聽多點接入/碰撞檢測協議

  • 多點接入”就是說明這是匯流排型網路,許多計算機以多點接入的方式連線在一根匯流排上。協議的實質是“載波監聽”和“碰撞檢測”。
  • 載波監聽”就是用電子技術檢測匯流排上有沒有其他計算機也在傳送,就是檢測通道,不管在傳送前,還是在傳送中,每個主機都必須不停地檢測通道。在傳送前檢測通道,是為了獲得傳送權。在傳送中檢測通道,是為了及時發現有沒有其他站的傳送和本站傳送的碰撞。這就稱為碰撞檢測。
  • 碰撞檢測”也就是“邊傳送邊監聽”,即介面卡邊傳送資料邊檢測通道上的訊號電壓的變化情況,以便判斷自己在傳送資料時其他站是否也在傳送資料。當幾個站同時在匯流排上傳送資料時,匯流排上的訊號電壓變化幅度將會增大(互相疊加)。當介面卡檢測到的訊號電壓變化幅度超過一定的門限值時,就認為匯流排上至少有兩個站同時在傳送資料,表明產生了碰撞。一旦發現匯流排上出現了碰撞,其介面卡就要立即停止傳送,然後等待一段隨機時間後再次傳送。

(4)碰撞起因

  • 既然每一個站在傳送資料之前已經監聽到通道為“空閒”,那麼為什麼還會出現資料在匯流排上的碰撞呢?
  • 這是因為電磁波在匯流排上總是以有限的速率傳播的,若是在這個傳播時延內有多臺主機檢測到空閒,併傳送資料,則發生衝突。

(5)碰撞分析

  • 把匯流排上的單程端到端傳播時延記為τ,最遲經過2τ的時間傳送端能檢測到碰撞,即匯流排的端到端往返傳播時延。
  • 顯然,在使用 CSMA/CD協議時,一個主機不可能同時進行傳送和接收(但必須邊傳送邊監聽通道)。因此使用 CSMA/CD協議的乙太網不可能進行全雙工通訊而只能進行雙向交替通訊(半雙工通訊)
  • 每一個站在自己傳送資料之後的一小段時間內,存在著遭遇碰撞的可能性。這一小段時間是不確定的,它取決於另一個傳送資料的站到本站的距離。乙太網的這一特點稱為傳送的不確定性。如果希望在乙太網上發生碰撞的機會很小,必須使整個乙太網的平均通訊量遠小於乙太網的最高資料率。
  • 乙太網的端到端往返時間2τ稱為爭用期(contention period),又稱為碰撞視窗(collision window)。這是因為一個站在傳送完資料後,經過爭用期這段時間還沒有檢測到碰撞,才能肯定這次傳送不會發生碰撞。

(6)碰撞解決方案

乙太網使用截斷二進位制指數退避(truncated binary exponential backoff)演算法來確定碰撞後重傳的時機。這種演算法讓發生碰撞的站在停止傳送資料後,推遲(這叫做退避)一個隨機的時間再次傳送。因為如果幾個發生碰撞的站都在監聽通道,那麼都會同時發現通道變成了空閒。如果大家都同時再重新傳送,那麼肯定又會發生碰撞。為了使各站進行重傳時再次發生衝突的概率減小,具體的退避演算法如下:

  • 協議規定了基本退避時間為爭用期2τ,爭用期時間具體是51.2us。對於10 Mbit/s乙太網,在爭用期內可傳送512bit,即64位元組。也可以說爭用期是512位元時間。
  • 從離散的整數集合 [ 0 , 1 , … , ( 2 k − 1 ) ] [0,1,…,(2^k-1)] [0,1,,(2k1)]中隨機取出一個數,記為r。重傳應推後的時間就是r倍的爭用期。引數 k = M i n [ 重 傳 次 數 , 10 ] k=Min[重傳次數,10] k=Min[10],當重傳次數不超過10時,引數k等於重傳次數;但當重傳次數超過10時,k就不再增大而一直等於10。
  • 當重傳達16次仍不能成功時(這表明同時打算髮送資料的站太多,以致連續發生突),則丟棄該幀,並向高層報告。

(7)指數退避演算法分析

  • 介面卡每傳送一個新的幀,就要執行一次 CSMA/CD演算法。介面卡對過去發生過的碰撞並無記憶功能。因此,當好幾個介面卡正在執行指數退避演算法時,很可能有某一個介面卡傳送的新幀能夠碰巧立即成功地插入到通道中,得到了傳送權,而已經推遲好幾次傳送的站,有可能很不巧,還要繼續執行退避演算法,繼續等待。
  • 若傳送資料小於爭用期512bit,傳送端邊傳送邊偵聽,如果發生衝突並用了51.2us衝突回傳回來時,早就發完了,那傳送站認為這個碰撞不是自己的幀,因而不會重傳這個幀。為了避免發生這種情況,乙太網規定了一個最短幀長64位元組,即512bit。如果要傳送的資料非常少,那麼必須加入一些填充位元組,使幀長不小於64位元組。對於10Mbit/s乙太網,傳送512bit的時間需要51.2us,也就是上面提到的爭用期。
  • 由此可見,乙太網在傳送資料時,如果在爭用期(共傳送了64位元組)沒有發生碰撞那麼後續傳送的資料就一定不會發生衝突。換句話說,如果發生碰撞,就一定是在傳送的前64位元組之內。由於一檢測到衝突就立即中止傳送,這時已經傳送出去的資料一定小於64位元組,因此凡長度小於64位元組的幀都是由於衝突而異常中止的無效幀。只要收到了這種無效幀,就應當立即將其丟棄。

(8)強化碰撞

​ 當傳送資料的站一旦發現發生了碰撞時,除了立即停止傳送資料外,還要再繼續傳送32位元或48位元的人為干擾訊號 (jamming signal),以便讓所有使用者都知道現在已經發生了碰撞。

​ 乙太網還規定了幀間最小間隔為96μs,相當於96位元時間。這樣做是為了使剛剛收到資料幀的站的接收快取來得及清理,做好接收下一幀的準備。

4.3 集線器與星型拓撲

集線器的一些特點如下:

  • 從表面上看,使用集線器的區域網在物理上是一個星形網,但使用集線器的乙太網在邏輯上仍是一個匯流排網,各主機共享邏輯上的匯流排,各主機中的介面卡執行CSMA/CD協議),,在同一時刻至多隻允許一個主機傳送資料。
  • 集線器工作在物理層,它的每個介面僅僅簡單地轉發位元——收到1就轉發1,收到0就轉發0,不進行碰撞檢測。若兩個介面同時有訊號輸入(即發生碰撞),那麼所有的介面都將收不到正確的幀。
  • 集線器採用了專門的晶片,進行自適應串音回波抵消。這樣就可使介面轉發出去的較強訊號不致對該介面接收到的較弱訊號產生干擾(這種干擾即近端串音)。每個位元在轉發之前還要進行再生整形並重新定時。
  • 集線器一般都有少量的容錯能力和網路管理功能。例如,假定在乙太網中有一個介面卡出了故障,不停地傳送乙太網幀。這時,集線器可以檢測到這個問題,在內部斷開與出故障的介面卡的連線,使整個乙太網仍然能夠正常工作。

4.4 乙太網的通道利用率

​ 假定一個10 Mbit/s乙太網同時有10個站在工作,那麼每一個站所能傳送資料的平均速率似乎應當是總資料率的1/10(即1Mbit/s)。但由於碰撞的存在,通道資源會造成浪費。因此,乙太網總的通道利用率並不能達到100%。

​ 下圖的例子是乙太網的通道被佔用的情況。一個站在傳送幀時出現了碰撞。經過若干個爭用期後,傳送成功了。假定傳送幀需要的時間是 T 0 T_0 T0。它等於幀長(bit除以傳送速率(10 Mbit/s)。成功傳送一個幀需要佔用通道的時間是 T 0 + τ T_0+τ T0+τ,也就是傳送時延+傳播時延。

img

要提高乙太網的通道利用率,就必須減小 τ τ τ T 0 T_0 T0之比。在乙太網中定義了引數 a = τ T 0 a=\frac{τ}{T_0} a=T0τ,當a→0時,只要一發生碰撞,就立即可以檢測出來,並立即停止傳送,因而通道資源被浪費的時間非常非常少。乙太網的引數a的值應當儘可能小些,這就要求分子數值要小些,而分母的數值要大些。

​ 現在考慮一種理想化的情況,假定乙太網上的各站傳送資料都不會產生碰撞,即匯流排一旦空閒就有某一個站立即傳送資料,於是我們可計算出極限通道利用率 S m a x = T 0 T 0 + τ = 1 1 + a S_{max}=\frac{T_0}{T_0+τ}=\frac{1}{1+a} Smax=T0+τT0=1+a1,指出了只有當引數 a a a遠小於1才能得到儘可能高的極限通道利用率。

4.5 乙太網的MAC層

(1)在區域網中,硬體地址又稱為實體地址或MAC地址(因為這種地址用在MAC幀中),是指區域網上的每臺計算機中固化在介面卡的ROM中的48位(6位元組)的地址。IEEE的註冊管理機構RA(Registration Authority) 負責分配地址欄位的6個位元組中的前三個位元組(即高位24位)給生產區域網介面卡的廠家,稱為組織唯一識別符號OUI(Organizationally Unique Identifier)。地址欄位中的後三個位元組(即低位24位)則由廠家自行指派稱為擴充套件識別符號(extended identifier),只要保證生產出的介面卡沒有重複地址即可。一個公司可能有幾個OUI,也可能有幾個小公司合起來購買一個OUI。

(2)MAC幀格式

​ 常用的乙太網MAC幀格式有兩種標準,一種是 DIX Ethernet V2標準(即乙太網V2標準),準),另一種是IEEE的802.3標準。這裡只介紹使用得最多的乙太網V2的MAC幀格式。乙太網V2的MAC幀由五個欄位組成:目的地址(6位元組)源地址(6位元組)型別欄位(2位元組,標誌上一層使用的是什麼協議,0x0800表示上層使用的是IP資料包,0x8137表示該幀是由 Novell IPX發過來的),資料欄位(46到1500位元組,46位元組=最小長度64位元組-18位元組的收尾),幀檢驗序列FCS(4位元組,使用CRC檢驗)。

img

(3)資料長度判斷

​ 以上MAC幀格式並沒有幀長度(或資料長度)欄位,接收方依據曼徹斯特編碼的特性(每個碼元中間有一次電壓轉換)確定資料欄位的長度。但是當資料欄位的長度小於46位元組時,MAC子層就會在資料欄位的後面加入填充欄位,但MAC幀的首部並沒有指出資料欄位的長度是多少,上層協議如何知道填充欄位的長度呢?
​ 當上層使用IP協議時,其首部就有一個“總長度”欄位。因此,“總長度”加上填充欄位的長度,應當等於MAC幀資料欄位的長度。例如,當IP資料包的總長度為42位元組時,填充欄位共有4位元組。當MAC幀把46位元組的資料上交給IP層後,IP層就把其中最後4位元組的填充欄位丟棄。

(4)位同步

​ 為了接收端迅速實現位同步,從MAC子層向下傳到物理層時還要在幀的前面插入8位元組(由硬體生成),它由兩個欄位構成。第一個欄位是7個位元組的前同步碼,它的作用是使接收端的介面卡在接收MAC幀時能夠迅速調整其時脈頻率,使它和傳送端的時鐘同步。第二個欄位是幀開始定界符,定義為10101011,它的前六位的作用和前同步碼一樣,最後的兩個連續的1就是告訴接收端介面卡:“MAC幀的資訊馬上就要來了,請介面卡注意接收”。

(5)無效的MAC幀

  • 幀的長度不是整數個位元組;
  • 用收到的幀檢驗序列FCS查出有差錯
  • 收到的幀的MAC客戶資料欄位的長度不在46~1500位元組之間。

5. 擴充套件的乙太網

5.1 在物理層擴充套件乙太網

​ 乙太網上的主機之間的距離不能太遠,否則主機傳送的訊號經過銅線的傳輸就會衰減到使CSMA/CD協議無法正常工作。現在,擴充套件主機和集線器之間的距離的一種簡單方法就是使用光纖和一對光纖調變解調器。光纖調變解調器的作用就是進行電訊號和光訊號的轉換。如果使用多個集線器,就可以連線成覆蓋更大範圍的多級星形結構的乙太網。

img

優點:跨獨立乙太網通訊,擴大了乙太網覆蓋的地理範圍。

缺點:三個獨立乙太網的通過集線器互連起來後就把三個碰撞域變成一個碰撞域,且這時的最大吞吐量仍然是單個乙太網的吞吐量。如果不同的獨立乙太網使用不同的乙太網技術(如資料率不同),那麼就不可能用集線器將們互連起來。如上圖中,一個系使用10Mbit/s的介面卡,而另外兩個系使用100Mbit/s的介面卡,那麼用集線器連線起來後,大家都只能工作在10 Mbit/s的速率。

5.2 資料鏈路層擴充套件乙太網

(1)擴充套件乙太網更常用的方法是在資料鏈路層進行。最初使用的是網橋(bridge)。網橋對收到的幀根據其MAC幀的目的地址進行轉發和過濾。當網橋收到一個幀時,並不是向所有的介面轉發此幀,而是根據此幀的目的MAC地址,查詢網橋中的地址表,然後確定將該幀轉發到哪一個介面,或者是把它丟棄(即過濾)。**交換式集線器(switching hub,或稱為乙太網交換機(switch)或第二層交換機(L2 switch))**的出現很快就淘汰了網橋。乙太網交換機的特點:

  • 太網交換機實質上就是一個多介面的網橋**,通常都有十幾個或更多的介面,乙太網交換機的每個介面都直接與一個單臺主機或另一個乙太網交換機相連,並且一般都工作在全雙工方式
  • 乙太網交換機還具有並行性,即能同時連通多對介面,使多對主機能同時通訊(而網橋只能一次分析和轉發一個幀)。相互通訊的主機都是獨佔傳輸媒體,無碰撞地傳輸資料
  • 乙太網交換機的介面還有儲存器,能在輸出埠繁忙時把到來的幀進行快取
  • 乙太網交換機是一種即插即用裝置,其內部的幀交換表(又稱為地址表)是通過自學習演算法自動地逐漸建立起來的。
  • 對於傳統的10 Mbit/s的共享式乙太網,若共有10個使用者,則每個使用者佔有的平均頻寬只有1Mbis。若使用乙太網交換機來連線這些主機,雖然在每個介面到主機的頻寬還是10Mbit/s,但由於一個使用者在通訊時是獨佔而不是和其他網路使用者共享傳輸媒體的頻寬,因此對於擁有10個介面的交換機的總容量則為100 Mbit/s。這正是交換機的最大優點。
  • 乙太網交換機一般都具有多種速率的介面,例如,可以具有10 Mbit/s、100Mbit/s和1Gbit/s的介面的各種組合,這就大大方便了各種不同情況的使用者。
    雖然許多乙太網交換機對收到的幀採用儲存轉發方式進行轉發,但也有一些交換機採
    用直通 ( cut-through)的交換方式。直通交換不必把整個資料幀先快取後再進行處理,而是在
    接收資料幀的同時就立即按資料幀的目的MAC地址決定該幀的轉發介面,因而提高了幀的
    轉發速度。如果在這種交換機的內部採用基於硬體的交叉矩陣,交換時延就非常小。直通交

(2)乙太網交換機的自學習功能

  • 當交換機不知道哪個介面對應哪個MAC主機時,就採用廣播的方式,然後將過濾後的MAC地址和介面號對應填入交換表;
  • 當交換表已知某個幀的目的MAC地址對應介面時,不必要廣播,直接轉發。
  • 考慮到有時可能要在交換機的介面更換主機,這就需要更改交換表中的專案。為此,在交換表中每個專案都設有一定的有效時間。過期的專案就自動被刪除。

(3)從匯流排乙太網到星形乙太網

匯流排乙太網使用 CSMA/CD協議,以半雙工方式工作。但乙太網交換機不使用共享匯流排,沒有碰撞問題,因此不使用 CSMA/CD協議,而是以全雙工方式工作。既然連乙太網的重要協議CSMA/CD都不使用了,為什麼還叫做乙太網呢?原因就是它的幀結構未改變,仍然採用乙太網的幀結構。

5.3 虛擬區域網

(1)概念:虛擬區域網VLAN(Virtual LAN)是由一些區域網網段構成的與物理位置無關的邏輯組每一個VLAN的幀都有一個明確的識別符號,指明傳送這個幀的計算機屬於哪一個VLAN。虛擬區域網其實只是區域網給使用者提供的一種服務,而並不是一種新型區域網。

img

(2)例項

LAN1:(A1,A2,B1,C1),LAN2:(A3,B2,C2),LAN3:(A4,B3,C3)這10個使用者劃分為三個物理工作組,同時被劃分為三個邏輯虛擬區域網VLANVLAN1:(Al, A2, A3, A4), VLAN2: (Bl, B2, B3): VLAN3: (Cl, C2, C3)

(3)工作原理

​ 虛擬區域網協議允許在乙太網的幀格式中插入一個4位元組的識別符號,稱為VLAN標記(tag),用來指明傳送該幀的計算機屬於哪一個虛擬區域網。插入VLAN標記得出的幀稱為802.1Q幀

img

​ VLAN標記欄位的長度是4位元組,插入在乙太網MAC幀的源地址欄位和型別欄位之間。VLAN標記的前兩個位元組總是設定為0x8100(圖中顯示的是二進位制),稱為IEEE802.1Q標記型別。在後面的兩個位元組中,前3位是使用者優先順序欄位,接著的一位是規範格式指示符CFI(Canonical FormatIndicator),最後的12位是該虛擬區域網VLAN識別符號 VID (VLAN ID),它唯一地標誌了這個乙太網幀屬於哪一個VLAN。由於用於VLAN的乙太網幀的首部增加了4個位元組,因此乙太網的最大幀長從原來的1518位元組(1500位元組的資料加上18位元組的首部)變為1522位元組。

相關文章