瞭解資料鍊結層

發佈日期: 2007 年 4 月 10 日

作者: 賴榮樞
http://www.goodman-lai.idv.tw

DARPA 模型和 OSI 七層的分層結構概念類似,只是每一層分工的內容不同;OSI 分的比較細。DARPA 模型的最底層是網路介面層(Network Interface layer),這一層相當於 OSI 的資料鍊結層(Data Link layer)和實體層(Physical layer);雖然有些討論 TCP/IP 的書籍或文章,會將實體層獨立出網路介面層(因此網路介面層便等同於資料鍊結層),不過這並不影響實質的討論和理解,因為其實都包含了相同的內容。本文將先簡述 OSI 的實體層,然後再詳細說明資料鍊結層,最後再簡述 Windows 對資料鍊結層的支援作為結語。

本頁內容

實體層
資料鍊結層
Windows 對資料鍊結層的支援

OSI 或 DARPA 模型的實體層的功能相同,運作方式非常類似,兩者都與網路的實體特性有關。實體特性通常包括連接裝置的纜線和類型,例如纜線的有效距離、材質;不同材質的纜線,需要在通訊裝置之間建立各異的實體連結。實體層會處理來自上一層(例如資料鍊結層)的資料,將資料以電子、光學或電磁等二進位信號傳送出去,或者將二進位信號轉換成類比信號,再透過傳輸媒介將信號傳送到接收端。實體層只負責傳送資料,而不解析資料,解析資料是 OSI 或 DARPA 模型上層的工作。

實體層

實體層的重點通常包括轉換資料的發信方法、傳送資料的電路、傳送資料的媒介。轉換資料的發信方法以及傳送資料的電路,通常是因應傳送的電路和媒介,而必須將二進位信號轉換成類比信號。傳送資料的媒介構成了傳輸資料的實體路徑,例如雙絞線、同軸電纜、光纖等有線媒介藉由傳導的方式在不同類型的纜線傳輸資料,而諸如地面微波、衛星微波、無線電、紅外線等無線媒介也可以藉由好幾種不同的方式,以輻射的方式傳輸資料。傳導或輻射各有優劣,適用於不同需求的網路環境。選擇媒介則必須考量媒介的若干特性,包括安全性、成本、頻寬、距離、容錯能力。

資料鍊結層

前述的實體層並不在意所傳送的訊息有何意義,只在意訊息的資料位元能不能從發送端送達接收端。對資料鍊結層來說,傳送訊息的同時,就會一同傳送訊息所代表的意義和結構。資料鍊結層會編整訊息的資料位元,以便將訊息送往網路層。此外,資料鍊結層也會控制訊框如何從網路裝置的這一端移動到另一端。

位於實體層和網路層之間的資料鍊結層,不止會將資料往下送到實體層,也必須將來自實體層的資料編整成網路層能夠接受的格式,再往上送到網路層。資料鍊結層的主要功能之一,是將來自實體層的二進位位元資料編整成訊框(frame),而資料從發送端到接收端的通訊路徑當中,若干過程是以訊框的形式呈現。在訊框的傳送過程當中,資料鍊結層還會進行流量控制,確保發送端不會同時送出過多的資料給接收端。此外,資料鍊結層也會執行錯誤控制,目的是讓接收裝置能夠辨識並修正傳輸過程當中可能發生的錯誤。

Dd125473.41wintcpip_a(zh-tw,TechNet.10).jpg

資料鍊結層在 OSI 七層模型的關係圖

IEEE 在 1985 年發展了 802 專案,這是一份同時實作 OSI 和 DARPA 模型的資料鍊結層規格。IEEE 的 802 專案將資料鍊結層分成邏輯鍊結控制(Logical Link Control,LLC)和媒介存取控制(Media Access Control,MAC)兩層,LLC 的專案代號是 802.2,而 MAC 則包含各種媒介存取控制的類型,包括常用的乙太網路(802.3)、無線區域網路(802.11),因此可以根據不同的需求而採用不同類型的媒介存取控制方式。或者反過來說,您會發現不論使用乙太網路或 WiFi 無線網路,並不需要換掉整個網路架構,這就是分層架構的優點。

專案代號

專案名稱

802.1

上層的區域網路協定(還有其他子項)

802.2

LLC(Logical Link Control)

802.3

乙太網路

802.4

token bus

802.5

token ring

802.6

都會網路

802.7

Broadband LAN using Coaxial Cable

802.8

Fiber Optics TAG

802.9

Integrated Services LAN

802.10

Standard for Interoperable LAN Security

802.11

Wireless LAN(WiFi)

802.12

Demand Priority

802.13

未用

802.14

Cable-TV Based Broadband Communication Network

802.15

Wireless Personal Area Network

…(目前到 802.22)

 

IEEE 802 專案列表

LLC 訊框傳遞服務

也稱為 802.2 的 LLC 提供了 3 種類型的訊框傳遞服務,分別是 Type 1、Type 2 和 Type 3;而傳遞服務(delivery service)則是將訊框從 A 點送到 B 點的方法。Type 1 是不會提供回應的「非連接導向傳輸」;所謂的回應(acknowledgment),是指接收端針對通訊而對發送端有所回覆,如果不「回應」,無論訊框送到與否,接收端都不會告知發送端。而所謂的非連接導向傳輸(connectionless),代表著兩件事:第一,發送端和接收端之間並沒有預先建立或固定的路徑;第二,因為沒有回應,因此發送端就沒有直接或立即的方法能得知訊框是否送達目的地。有兩個特徵意味著 Type 1 是 LLC 最快速但較不穩定的傳遞服務:Type 1 服務就像沒有註明回郵地址的明信片,而你也不知道明信片的寄送路徑,雖然你希望明信片能寄達,但並不保證能寄達;再者,你也無法確定明信片已經寄到目的地了,除非你聯絡收信者,但這又失去寄送明信片的目的(如果能以其他方式聯絡,又何必寄明信片)。但即使如此,Type 1 還是最普遍傳遞服務,因為較上層的協定通常會有自己的傳遞方式和錯誤偵測能力。

相對於 Type 1,Type 2 是以提供回應的連接導向傳輸方式在傳遞資料。對連接導向傳輸(connection-oriented)而言,發送端和接收端之間必須在開始通訊之前就建立傳遞路徑,而且不論是否收到訊框,接收端最後都會回應發送端。雖然在發送端和接收端之間的路徑不需要固定,而且往往也不會固定,但雙方會為了通訊而維持此路徑。對連接導向傳輸來說,流量控制雖然很重要,但重要的並不是發生在實體層的流量控制,而是兩種最常見的資料鍊結層流量控制,它們是由 LLC 所控管的停止並等待(stop-and-wait)和滑動窗(sliding window)。

連接導向傳輸類似掛號信,除了保證送達,也會要求收信者簽收郵件,因此可以確定收信者已經收到信件。寄送掛號信比寄送明信片昂貴,同樣的情況也適用於 Type 2 和 Type 1 傳遞服務。

Type 3 傳遞服務是提供回應功能的非連接導向傳輸,因此同時具備 Type 1 和 Type 2 的某些優點。儘管如此,Type 3 卻是最少使用的傳遞服務。

為了要完成應盡的工作,LLC 使用一種稱為協定資料單元(protocol data unit,PDU)的資料單元。PDU 最多可以包含 4 個元素:

  • 目的服務存取點 (destination service access point,DSAP):這是 8 位元的欄位,用來識別使用 LLC 服務的上層協定。DSAP 的第一個位元用來表示訊框是個別的主機還是一群主機(主機是 TCP/IP 網路內任何可以通訊、連結的裝置)。

  • 來源服務存取點 (source service access point,SSAP):這也是 8 位元欄位,用來識別 LLC 服務的本機使用者,而 SSAP 的第一個位元則是用來識別通訊所用的 PDU 是命令還是回覆類型的訊框。

  • 控制欄位:這是長度為 1 或 2 位元組的控制欄位,用來識別 PDU 的類型,並且是以下其中一種:information(I)、supervisory(S)、unnumbered(U)。只有Type 2連接導向傳輸使用I和S訊框,而 3 種 LLC 傳遞服務都使用 U 訊框。I 訊框用在連接導向傳輸,S訊框用在監控管理 I 訊框,U 訊框用在非連接導向傳輸,以及結束使用 Type 2 服務的邏輯連結。

  • 資料或資訊欄位:這是長度不固定的資料欄位,包含來自網路層協定的資料。這個資料欄位的長度是由所用的媒介存取方法所定。上述的 3 種 PDU 訊框當中,S 訊框沒有資料欄位。

流量控制

對 Type 2 連接導向傳輸傳遞服務而言,發送端和接收端在開始傳送資料之前,必須先協議建立通訊連線,協議之一就是發送端將不會傳送太多的資料而使得接收端來不及處理。但是速度較快又不具流量控制功能的發送端,可能會讓速度較慢的接收端來不及處理資料,因此在接收端通常會有容量有限的暫時記憶體,稱為緩衝區,可以先接收送進來的資料。如果速度較慢的接收端收到來自速度較快的發送端的過多資料,接收端就會出現傳輸負載過重的結果,資料可能就因此而遺失。

為了確保發送端不會讓接收端負載過重,因此有必要採行流量控制。除非接收端確實收到資料並回應發送端,否則由 LLC 負責管理的流量控制,會限制發送端所送出的資料量。如果接收端的緩衝區已滿,接收端會警示發送端,發送端就會暫停傳送,直到接收端能夠繼續接收資料,發送端才會繼續傳送資料。資料鍊結層有兩種常見的流量控制方法:停止並等待(stop-and-wait)和滑動窗(sliding window)。

停止並等待的接收端需要為每一個收到的訊框傳送回應給發送端,而只有在訊框有所回應,發送端才會傳送下一個訊框。如下圖,假設訊息是由 1000 個訊框所組成,而且傳送過程都沒有發生問題,那麼接收端會回應 1000 次,也就是說發送端要收到 1000 次回應,才能送完 1000 個訊框。其中的細節是,發送端送出第一個訊框就會停止並等待接收端收到第一個訊框所發出的回應,接著發送端才會送出第二個訊框,並且再一次的停止、等待接收端收到第二個訊框的回應,然後發送端才會送出第三個訊框,也會再停止並等待回應;直到送完所有的訊框。

Dd125473.41wintcpip_b(zh-tw,TechNet.10).jpg

停止並等待的流量控制過程

停止並等待最大的優點,是非常直覺、簡單。不論是少量或大量訊框所組成的訊息,停止並等待都能在短距離的傳送過程處理的很有效率。然而,當傳送距離變長,回應在長距離的網路之間來來回回,就得花費相當的時間,因此會使得效率下降。再者,數量更多和更少的訊框,使用停止並等待作為流量控制的方式,也會沒有效率。因此除非能符合特定的情況,停止並等待都不是優先選擇的流量控制方法,滑動窗才是較為普遍的流量控制方法。

滑動窗的原理是希望讓接收端的回應不止能針對單一訊框,也就是說,如果能讓數個訊框共用一個回應,就能更有效的利用通訊線路。這樣的方法當然會比停止並等待複雜,但是滑動窗也的確更有效率。

接收端裝置有暫存訊框的記憶體緩衝區,發送端也有暫存即將送出訊框的記憶體緩衝區,發送端和接收端裝置的記憶體緩衝區都有滑動窗的效果。這裡所謂的「窗」,是指用來保持訊框資料的記憶體緩衝區儲存區域。而不論是發送端或接收端裝置的窗,都可以依照通訊的需求來「滑動」,讓窗變寬或變窄。來回於發送端和接收端之間的回應會控制通訊,並使得窗的寬度有所調整(就像推動窗戶來開窗或關窗)。在發送端的滑動窗緩衝區(sliding windows buffer)得以變大之前,發送端必須收到接收端送來的回應;反之,在接收端的滑動窗緩衝區變大之前,接收端必須送出回應。下圖說明了滑動窗的概念。

Dd125473.41wintcpip_c(zh-tw,TechNet.10).jpg

滑動窗使用流水號的機制來控制傳送和接收的訊框數量,也會控制兩端的滑動窗緩衝區大小,而這個機制是根據來回於發送端和接收端之間的回應情況而定,兩端也必須使用相同的流水號機制,並且與對方保持同步。流水號欄位(sequencing number field)必須有特定的位元長度,而且發送端和接收端的欄位長度必須相同,這個位元長度是用來定義與網路有關的欄位,以及兩端的緩衝區大小。

線路規程(line discipline)是另一種資料鍊結層的線路控制方式,其概念是裝置的「給予」和「收回」通訊權,也就是控制哪一個裝置、在何時可以通訊。線路規程結合了兩種類型的網路環境,第一種是以點對點的方式連接裝置兩端,搭配半雙工或全雙工的線路。不論半雙工或全雙工,在通訊之前,兩端必須先建立連線;如果使用半雙工,通訊的兩端則必須輪流使用線路。在這種情況的線路規程,會以詢問/回應(enquiry/acknowledgment,ENQ/ACK)來實作兩端通訊的規則。

發送端(A)以傳送詢問訊框給接收端(B)開啟兩端的通訊,接著 A 會等待 B 的回覆,而如果B已經準備好可以通訊,會將回應訊框傳給 A,此時,兩端便會建立連線,並且可以開始通訊;當通訊要結束,A 會送出 EOT(end of transmission,傳送結束)訊框,以便終止連線。如果 B 尚未準備好通訊,則會傳送 NAK(negative acknowledgment,否定回應)訊框給 A,A 就會在稍後再試一次。如果 B 因為斷線等原因而沒有傳送回應訊框給 A,在特定的時間之後,A 會再送另一個詢問訊框給B。在經過 3 次失敗的詢問之後,A會假設B完全無法通訊,並且完全結束通訊。

第二種線路規程的網路環境類型,是多個連線、網路裝置,這種網路環境會透過中央控制的通訊裝置控制通訊,最常見到的例子就是連接到大型主機的終端機。終端機沒有直接與其他終端機連線,而必須藉由大型主機轉送。大型主機或中央控制的通訊裝置會控制各個線路,並且以稱為 polling 的方式,決定誰在何時可以通訊。

對 polling 來說,控制裝置是所有通訊的重要發起人,即使控制裝置本身並沒有資料要傳送亦同,這聽起來或許有點古怪,但實際的情況則是其他所有的裝置會等待中央控制裝置詢問有沒有資料要傳送。控制裝置通常稱為「主要裝置」(primary device),而其他的裝置稱為「次要裝置」(secondary device)。次要裝置會等著主要裝置來聯絡,如果次要裝置有通訊的需求,就可藉此讓主要裝置知道,而主要裝置就會完成通訊。

錯誤控制

除了要負責流量控制,資料鍊結層也要負責各種類型的錯誤控制。通訊過程難免會發生錯誤,因此錯誤控制非常重要。資料鍊結層的錯誤控制有兩個元素:偵測與修正。

對資料通訊而言,錯誤偵測與修正需要在通訊的訊息裡額外加上相關資訊,這些額外的資訊雖然會增加通訊的負擔,但為了確保資料的正確,卻是有其必要的。常見的錯誤偵測技巧包括同位檢查(parity checking)、縱向冗位檢查(longitudinal redundancy checking)、總和檢查(checksum checking)、循環式重複檢查法(cyclical redundancy checking)。

一旦偵測到傳送的資料有錯誤,當然就要修正錯誤,而最常見的修正技術,也是最不複雜的技術,就是重傳(retransmission)。如果以重傳來修正錯誤,會使用一項稱為回應重複要求(acknowledgment repeat request,ARQ)的技巧。ARQ 會擇一使用以下的方式:停止並等待 ARQ,或者是連續的 ARQ。就這兩種方式來說,停止並等待比較簡單,但效率不如連續的 ARQ。

另一種錯誤修正的方法,是接收端在收完資料之後,以錯誤修正碼(error-correcting codes,ECC)來修正錯誤,這種方法有時也稱為前置錯誤修正(forward error correction,FEC),需要傳送額外的資料以達到修正錯誤的目的。ECC 的優點是不需重傳錯誤的資料,因為接收端可以根據錯誤修正的資料而決定傳送的資料是否有誤;缺點就是必須傳送額外的資料,才能達到修正錯誤的目的。

要額外傳送的資料量,是根據所採用的技術而有所不同。最常見的技術,是修正一個位元組裡的 1、2 或 3 個位元,若以此法,每個長度為 7 位元的字元,可能需要額外的 3 到 4 個位元來修正錯誤,因此每個字元的長度會變成 10 到 11 個位元。如果要修正更多位元的錯誤,所要額外傳送的資料量已經大到沒有效率。

媒介存取控制

先前討論過「線路規程」,它可以決定在通訊的過程當中,裝置如何得到傳輸資料的存取權。在 LAN 當中,各個裝置是以多點的架構共用一組線路,而資料鍊結層的另一部份,媒介存取控制(MAC),將用來決定這些裝置如何共用這一組線路。MAC 技術分成兩類:「先搶先贏」(contention)、「存取控制」(controlled-access)。乙太網路 802.3 就是最常見的「先搶先贏」的例子,而 token ring 和 FDDI(Fiber Distributed Data Interface,光纖分散式數據介面)則是「存取控制」的常見例子。MAC 與網路架構息息相關,意思是不同如乙太網路、token ring 或 FDDI 等網路架構,其 MAC 訊框結構亦不相同。

乙太網路 802.3

乙太網路使用先搶先贏的 MAC 技術,所使用的技術稱為 CSMA/CD(Carrier Sense Multiple Access with Collision Detection,載波感測多重存取碰撞偵測)。之所以稱為先搶先贏,是因為這種類型的技術是讓網路上的裝置爭奪線路的使用權,誰先搶到,誰就能夠使用線路來傳送資料。其運作的基本原則是,網站上的裝置會以偵測線路電壓的方式,來判斷線路的使用狀態,如果沒有使用,就偵測不到電壓,此時裝置就能以線路傳送資料。但網路上有好幾個裝置,有可能發生數個裝置都發現線路是空的而同時送出資料的情況,此時就會產生資料訊號相互「碰撞」,而導致線路出現「塞爆」(jamming)訊號,這會讓線路出現高電壓的現象,結果就是誰的資料都傳不出去。

因為一次只能有一個裝置能夠傳送資料,如果發生碰撞,要傳資料的裝置都會等待一段隨機的間隔時間,然後再偵測網路的使用狀態。因為等待的是隨機的間隔時間,因此可能其中某個裝置等的時間較短而取得線路的使用權,其他裝置發現線路正被使用,就只能稍後再試。

如果網路上的裝置較多或者流量較大,就可能經常發生碰撞,這就會造成裝置都無法傳送資料而降低網路的效能(我們將在第 4 章說明減緩碰撞發生的技術);此外,也有可能因為時間分配不均,而使得某些裝置就是無法或很難取得線路的使用權。這些都是「先搶先贏」這種方式的缺點,但這是因為「先搶先贏」的設計理念就不是以平均分配為出發點。然而,對裝置數量不多,或流量不大的網路,CSMA/CD 是非常有效率的方式,因為網路上的每個裝置往往都能在需要傳送資料的時候,直接取得線路的使用權。

IEEE 802.3 MAC 訊框包含了 7 個欄位:前言(preamble)、訊框開始(SFD)、目的位址(DA)、來源位址(SA)、長度/PDU 類型、802.2 訊框(logical link control)、CRC 值。以下列出了。請注意這裡的來源和目的位址,是資料鍊結層的實體位址,也就是每一張網路卡內含的 MAC 位址。

SFD 或 preamble:訊框開始(starting frame delimiter)

DA:訊框被送達的目的位址(destination address)

SA:訊框發送端的位址(source address)

長度:使用者資料的位元組數量

使用者資料:欲傳送的原始資料

FCS:用在傳送時檢查錯誤的數值(frame check sequence)

標準 802.3 訊框結構

網路卡(Network Interface Card,NIC)通常是插在電腦主機板的擴充卡,也可以是其他規格的介面卡,或直接內建於筆記型電腦等行動裝置裡。每一張網路卡都有一個獨一無二、有別於其他網路卡的實體位址。如果傳送過程最終的接收端,是在另一個網路,訊框中的 DA 將會是連接兩個網路的路由器位址,訊框中的 SA 則可以是發送端的實體位址,也可以是最後一個轉送訊框的路由器位址。

資料鍊結層的位址只是整個通訊系統當中的一環,整個資料通訊的過程當中,有許多類型、用途不同的位址,這些位址都很重要。無論是哪一種位址,基本上都是作為識別之用,通常都是用來標示網路裝置。

Windows 對資料鍊結層的支援

NDIS(Network Device Interface Specification)除了是編寫 Windows 網路裝置驅動程式的介面規格,其功能也相當於 OSI 資料鍊結層的 LLC,而網路裝置驅動程式則相當於資料鍊結層的 MAC。NDIS 一開始是由微軟和 3Com 共同開發,現在大多用在 Windows 環境。隨著網路應用以及 Windows 功能的持續發展,NDIS 也日益改版、新增功能,目前最新的版本是內建於 Windows Vista 的 NDIS 6.0,Windows XP 和 Windows Server 2003 內建的是 NDIS 5.1。

此外,Windows XP 及 Windows Server 2003 TCP/IP 協定組內建的媒介類型的支援也相當豐富,包括:

  • 乙太網路(802.3)

  • FDDI

  • Token Ring(IEEE 802.5)

  • 無線區域網路(802.11)

  • Attached Resource Computing Network(ARCnet,70 年代所發展的區域網路)

  • 廣域專線,包括數據電話數位服務(Dataphone Digital Service,DDS),以及 Fractional T1、T1、T3、E1、E3 等 T-carrier 專線。

  • 撥接或固定的電路交換廣域網路服務,例如 ISDN、xDSL。

  • 封包交換廣域網路服務,例如 X.25、Frame Relay、ATM。

參考資料

  • 企業資料通訊(培生出版、賴榮樞譯)

  • Microsoft Windows Server 2003 TCP/IP Implementation Details(Microsoft Corporation)

延伸閱讀

顯示: