網路基礎 : 乙太網資料封裝

sparkdev發表於2016-10-22

乙太網的資料鏈路層

在資料鏈路層,乙太網負責乙太網編址,這通常稱為硬體編址或 MAC 編址。乙太網還負責把來自網路層的分組封裝成幀。

乙太網編址

乙太網編址使用固化在每個乙太網網路卡(NIC)中的 MAC (Media Access Control,介質訪問控制)地址。MAC (硬體)地址長 48 位,採用十六進位制格式。

OUI(Organizationally Unique Identifier,組織唯一識別符號)是由 IEEE 分配給組織(廠商)的,它包含 24 位,而組織給其生產的每個網路卡都分配一個唯一的全域性管理地址,該地址長 24 位。檢視上圖您會發現最高位是 I/G(Individual/Group) 位:如果它的值為 0,我們就可以認為相應的地址為某臺裝置的 MAC 地址,很可能出現在MAC 報頭的源地址部分;如果它的值為 1,我們就可以認為相應的地址要麼是乙太網中的廣播地址或組播地址,要麼是令牌環和 FDDI 中的廣播地址或功能地址。
接下來是 G/L 位(全域性/本地位,也稱為 U/L 位,其中 U 表示 universal):如果這一位為 0,則表示相應的地址為全域性地址,由 IEEE 分配;如果為 1,則表示相應的地址為本地管理地址。在乙太網地址中,右邊 24 位為本地管理(製造商分配)的編碼,特定製造商在生產第一個網路卡時,通常將這部分設定為 24 個 0,然後遞增,直到 24 個1。

乙太網幀

資料鏈路層負責將位元合併成位元組,再將位元組封裝成幀(frame)。在資料鏈路層我們使用幀封裝來自網路層的分組,以便透過特定型別的介質進行傳輸。
乙太網工作站的職責是,使用 MAC 幀格式彼此傳遞資料幀。它利用 CRC(Cyclic Redundancy Check,迴圈冗餘校驗)提供錯誤檢測功能,記住,僅僅是檢測,不是糾錯。
下圖說明了 802.3 幀和乙太網幀的格式:

注意:使用一種幀封裝另一種幀稱為隧道技術。

下面詳細介紹各個欄位。
前導碼
交替的 0 和 1,在每個分組的開頭提供 5MHz 的時鐘訊號,讓接收裝置能夠跟蹤到來的位元流。
幀起始位置分隔符(SFD)/同步
前導碼為 7Byte,而 SFD(同步)為 1Byte。SFD 的值為 10101011,其中最後兩個1讓接收方能夠識別中間的 0 和 1 交替模式,進而同步並檢查到資料開頭。
目標地址 (DA)
包含一個 48 位的值,且 LSB(Least Significant Bit,最低有效位)優先。接收方根據 DA 判斷到來的分組是否是傳送給特定節點的。目標地址可以是單播地址、廣播地址或組播 MAC 地址。廣播地址全為 1(十六進位制格式下全為F),廣播傳送給所有裝置,而組播只傳送給網路中一組類似的節點。
源地址(SA)
SA 是一個 48 位的 MAC 地址,用於標識傳輸裝置,也使用 LSB 優先格式。在 SA 欄位中,不能包含廣播地址或組播地址。
長度或型別
802.3 幀使用長度欄位,而 Ethernet_II 幀使用型別欄位標識網路層協議。802.3 不能標識上層協議,只能用於專用 LAN,如 IPX。
資料
這是網路層傳遞給資料鏈路層的幀,其長度為 46-1500 Bytes。
幀校驗序列(FCS)
FCS 欄位位於,用於儲存 CRC(Cyclic Redundancy Check,迴圈冗餘校驗)結果的幀的幀尾。CRC 是一種數學演算法,建立每個幀時都將執行它。作為接收方的主機收到幀並執行 CRC 時,其結果必須相同,否則接收方將認為發生了錯誤,進而將幀丟棄。

資料封裝

主機透過網路將資料傳輸給另一臺裝置時,資料將經歷封裝:OSI 模型的每一層都使用協議資訊將資料包裝起來。每層都只與其在接收裝置上的對等層通訊。
為了通訊和交換資訊,每層都使用 PDU(Protocaol Data Unit,協議資料單元)。PDU 包含在每一層給資料新增的控制資訊。這些控制資訊通常被新增在資料欄位前面的報頭中,但也可能被新增在報尾中。
OSI 模型每一層都對資料進行封裝來形成 PDU,PDU 的名稱隨報頭提供的資訊而異。這些 PDU 資訊僅在接收裝置的對等層被讀取,然後剝離,然後資料被交給下一層。
下圖顯示了各層的 PDU 及每層新增的控制資訊:

該圖說明了如何對上層使用者資料進行轉換,以便透過網路傳輸。然後,資料被交給傳輸層,而傳輸層透過傳送同步分組來建立到接收裝置的虛電路。接下來,資料流被分割成小塊,傳輸層報頭被建立並放在資料欄位前面的報頭中,此時的資料塊稱為資料段(一種PDU)。我們可以對每個資料段進行排序,以便在接收端按傳送順序重組資料流。
接下來,每個資料段都交給網路層進行編址,並在網際網路絡中路由。為讓每個資料段前往正確的網路,這裡使用邏輯地址(如IP地址)。對於來自傳輸層的資料段,網路層協議給它新增一個控制報頭,這樣就生成了分組或資料包。在接收主機上,傳輸層和網路層協同工作以重建資料流,但它們不負責將 PDU 放到本地網段上--這是將資訊傳輸給路由器或主機的唯一途徑。
資料鏈路層負責接收來自網路層的分組,並將其放到網路介質(電纜或無線)上。資料鏈路層將每個分組封裝成幀,其中幀頭包含源主機的硬體地址。如果目標裝置在遠端網路中,則幀將被髮送給路由器,以便在網際網路絡中路由。到達目標網路後,新的正被用來將分組傳輸到目標主機。
要將幀放到網路上,首先必須將其轉換為數字訊號。幀是有 1 和 0 組成的邏輯編組,網路層負責將這些 0 和 1 編碼成數字訊號,供本地網路中的裝置讀取。接收裝置將同步數字訊號,並從中提取 1 和 0 (解碼)。接下來,裝置將重組幀,執行 CRC,並將結果與幀中 FCS 欄位的值進行比較。如果它們相同,裝置從幀中提取分組,並將其他部分丟棄,這個過程稱為拆封。分組被交給網路層,而網路層將檢查分組地址。如果地址匹配,資料段被從分組中提取出來,而其他部分將被丟棄。資料段將在傳輸層處理,而後者負責重建資料流,然後向傳送方確認,指出接收方收到了所有資訊。然後傳輸層將資料流交給上層應用程式。
在傳送端,資料封裝的過程大致如下:
    1. 使用者資訊被轉換為資料,以便透過網路進行傳輸。
    2. 資料被轉換為資料段,傳送主機和接收主機之間建立一條可靠的連線。
    3. 資料段被轉換為分組或資料包,連線地址被新增在報頭中,以便能夠在網際網路絡中路由分組。
    4. 分組或資料包被轉換為幀,以便在本地網路中測試。硬體(乙太網)地址被用於唯一標識本地網段中的主機。
    5. 幀被轉換為位元,並使用資料編碼方法和時鐘同步方案。
下圖解釋了資料封裝的過程:

傳輸層使用埠號標識虛電路和上層程式,如下圖所示:

使用面向連線的協議(即TCP)時,傳輸層將資料流轉換為資料段,並建立一條虛電路以建立可靠的會話。接下來,它對每個資料段進行編號,並使用確認和流量控制。如果你使用的是 TCP,虛電路將由源埠號和目標埠號已經源 IP 地址和目標 IP 地址(稱為套接字)標識。主機只能使用不小於 1024 的埠號。目標埠號標識了上層程式(應用程式),在接收主機可靠地重建資料流後,資料流將被交給程式(應用程式)。
下面讓我們回到資料封裝的過程。
給資料塊新增傳輸層報頭資訊後,便形成了資料段;隨後,資料段和目標 IP 地址一起唄交給網路層。(目標IP地址是隨資料流一起由上層交給傳輸層的,它是由上層使用名稱解析方法(可能是DNS)發現的。)
網路層在每個資料段的前面新增報頭和邏輯地址(IP地址)。給資料段新增報頭後,形成的 PDU 為分組。分組包含一個協議欄位,該欄位指出了資料段來自何方(UDP或TCP),這樣當分組到達接收主機後,傳輸層便能夠將資料段交給正確的協議。
網路層負責獲悉目標硬體地址(這種地址指出了分組應傳送到本地網路的什麼地方),為此,它使用 ARP(Address Resolution Protocol,地址解析協議)。網路層檢視目標 IP 地址,並將其與主機的 IP 地址和子網掩碼進行比較。如果比較表明分組是前往本地主機的,則 ARP 請求被用於請求該主機的硬體地址;如果分組是前往遠端主機的,IP 將獲悉預設閘道器(路由器)的 IP 地址。
接下來,網路層將分組向下傳遞給資料鏈路層,一同傳遞的還有本地主機或預設閘道器的硬體地址。資料鏈路層在分組前面新增一個報頭,這樣資料塊將變成真(之所以稱其為幀,是因為同時給分組新增了報頭和報尾,使其類似於書檔)。幀包含一個乙太網型別(Ether-Type)欄位,它指出了分組來自哪種網路層協議。現在,將對幀執行CRC 校驗,並將結果放在幀尾的 FCS 欄位中。
至此,可以用每次 1 位元的方式將幀向下傳遞給網路層了,而網路層將使用位元定時規則(bit timing rule)將資料編碼成數字訊號。網段中的每臺裝置都將同步時鐘,從數字訊號中提取 1 和 0,並重建幀。重建幀後,裝置執行 CRC,以確保幀是正確的。如果一切順利,主機將檢查目標 MAC 地址和目標 IP 地址,以檢查這個幀是不是傳送給它的。

相關文章