1 以太網相關背景
以太網這個術語通常是指由DEC,Intel和Xerox公司在1982年聯合公布的一個標准,它是當今TCP/IP采用的主要的局域網技術,它采用一種稱作CSMA/CD的媒體接入方法。幾年後,IEEE802委員會公布了一個稍有不同的標准集,其中802.3針對整個CSMA/CD網絡,802.4針對令牌總線網絡,802.5針對令牌環網絡;此三種幀的通用部分由802.2標准來定義,也就是我們熟悉的802網絡共有的邏輯鏈路控制(LLC)。由於目前CSMA/CD的媒體接入方式占主流,因此本文僅對以太網和IEEE 802.3的幀格式作詳細的分析。
在TCP/IP世界中,以太網IP數據報文的封裝在RFC 894中定義,IEEE802.3網絡的IP數據報文封裝在RFC 1042中定義。標准規定:
1)主機必須能發送和接收采用RFC 894(以太網)封裝格式的分組;
2)主機應該能接收RFC 1042(IEEE 802.3)封裝格式的分組;
3)主機可以發送采用RFC 1042(IEEE 802.3)封裝格式的分組。如果主機能同時發送兩種類型的分組數據,那麼發送的分組必須是可以設置的,而且默認條件下必須是RFC 894(以太網)。
最常使用的封裝格式是RFC 894定義的格式,俗稱Ethernet II或者Ethernet DIX。下面,我們就以Ethernet II稱呼RFC 894定義的以太幀,以IEEE802.3稱呼RFC 1042定義的以太幀。
2 幀格式
Ethernet II和IEEE802.3的幀格式分別如下。
Ethernet II幀格式:
----------------------------------------------------------------------------------------------
| 前序 | 目的地址 | 源地址 | 類型 | 數據 | FCS |
----------------------------------------------------------------------------------------------
| 8 byte | 6 byte | 6 byte | 2 byte | 46~1500 byte | 4 byte|
IEEE802.3一般幀格式
--------------------------------------------------------------------------------------------------------------
| 前序 | 幀起始定界符 | 目的地址 | 源地址 | 長度 | 數據 | FCS |
------------------------------------------------------------------------------------------------------------
| 7 byte | 1 byte | 2/6 byte | 2/6 byte | 2 byte | 46~1500 byte | 4 byte |
Ethernet II和IEEE802.3的幀格式比較類似,主要的不同點在於前者定義的2字節的類型,而後者定義的是2字節的長度;所幸的是,後者定義的有效長度值與前者定義的有效類型值無一相同,這樣就容易區分兩種幀格式了。
一、 前序字段
前序字段由8個(Ethernet II)或7個(IEEE802.3)字節的交替出現的1和0組成,設置該字段的目的是指示幀的開始並便於網絡中的所有接收器均能與到達幀同步,另外,該字段本身(在Ethernet II中)或與幀起始定界符一起(在IEEE802.3中)能保證各幀之間用於錯誤檢測和恢復操作的時間間隔不小於9.6毫秒。
二、 幀起始定界符字段
該字段僅在IEEE802.3標准中有效,它可以被看作前序字段的延續。實際上,該字段的組成方式繼續使用前序字段中的格式,這個一個字節的字段的前6個比特位置由交替出現的1和0構成。該字段的最後兩個比特位置是11,這兩位中斷了同步模式並提醒接收後面跟隨的是幀數據。
當控制器將接收幀送入其緩沖器時,前序字段和幀起始定界符字段均被去除。類似地當控制器發送幀時,它將這兩個字段(如果傳輸的是IEEE802.3幀)或一個前序字段(如果傳輸的是真正的以太網幀)作為前綴加入幀中。
三、 目的地址字段
目的地址字段確定幀的接收者。兩個字節的源地址和目的地址可用於IEEE802.3網絡,而6個字節的源地址和目的地址字段既可用於Ethernet II網絡又可用於IEEE802.3網絡。用戶可以選擇兩字節或六字節的目的地址字段,但對IEEE802.3設備來說,局域網中的所有工作站必須使用同樣的地址結構。目前,幾乎所有的802.3網絡使用6字節尋址,幀結構中包含兩字節字段選項主要是用於使用16比特地址字段的早期的局域網。
四、 源地址字段
源地址字段標識發送幀的工作站。和目前地址字段類似,源地址字段的長度可以是兩個或六個字節。只有IEEE802.3標准支持兩字節源地址並要求使用的目的地址。Ethernet II和IEEE802.3標准均支持六個字節的源地址字段。當使用六個字節的源地址字段時,前三個字節表示由IEEE分配給廠商的地址,將燒錄在每一塊網絡接口卡的ROM中。而制造商通常為其每一網絡接口卡分配後字節。
五、 類型字段
兩字節的類型字段僅用於Ethernet II幀。該字段用於標識數據字段中包含的高層協議,也就是說,該字段告訴接收設備如何解釋數據字段。在以太網中,多種協議可以在局域網中同時共存,例如:類型字段取值為十六進制0800的幀將被識別為IP協議幀,而類型字段取值為十六進制8137的幀將被識別為IPX和SPX傳輸協議幀。因此,在Ethernet II的類型字段中設置相應的十六進制值提供了在局域網中支持多協議傳輸的機制。
在IEEE802.3標准中類型字段被替換為長度字段,因而Ethernet II幀和IEEE802.3幀之間不能兼容。
六、 長度字段
用於IEEE802.3的兩字節長度字段定義了數據字段包含的字節數。不論是在Ethernet II還是IEEE 802.3標准中,從前序到FCS字段的幀長度最小必須是64字節。最小幀長度保證有足夠的傳輸時間用於以太網網絡接口卡精確地檢測沖突,這一最小時間是根據網絡的最大電纜長度和幀沿電纜長度傳播所要求的時間確定的。基於最小幀長為64字節和使用六字節地址字段的要求,意味著每個數據字段的最小長度為46字節。唯一的例外是吉比特以太網。在1000Mbit/s的工作速率下,原來的802.3標准不可能提供足夠的幀持續時間使電纜長度達到100米。這是因為在1000Mbit/s的數據率下,一個工作站在發現網段另一端出現的任何沖突之前已經處在幀傳輸過程中的可能性很高。為解決這一問題,設計了將以太網最小幀長擴展為512字節的負載擴展方法。
對除了吉比特以太網之外的所有以太網版本,如果傳輸數據少於46個字節,應將數據字段填充至46字節。不過,填充字符的個數不包括在長度字段值中。同時支持以太網和IEEE802.3幀格式的網絡接口卡通過這一字段的值區分這兩種幀。也就是說,因為數據字段的最大長度為1500字節,所以超過十六進制數05DC的值說明它不是長度字段(IEEE802.3).而是類型字段(Ethernet II)。
七、 數據字段
如前所述,數據字段的最小長度必須為46字節以保證幀長至少為64字節,這意味著傳輸一字節信息也必須使用46字節的數據字段:如果填入該該字段的信息少於46字節,該字段的其余部分也必須進行填充。數據字段的最大長度為1500字節。
八、 校驗序列字段
既可用於Ethernet II又可用於IEE802.3標准的幀校驗序列字段提供了一種錯誤檢測機制,每一個發送器均計算一個包括了地址字段、類型/長度字段和數據字段的循環冗余校驗(CRC)碼。發送器於是將計算出的CRC填入四字節的FCS字段。
雖然IEEE802.3標准必然要取代Ethernet II,但由於二者的相似以及Ethernet II作為IEEE802.3的基礎這一事實,我們將這兩者均看作以太網。
3 以太網幀結構的變種格式
以太網幀結構的變種,僅涉及到IEEE802.3幀。下圖描述了IEEE802.3幀數據部分的結構,這個結構就是IEEE802.2定義的LLC(邏輯鏈路控制),LLC用來識別信息包中所承載的協議。LLC報頭包含DSAP(destination service access point,目的服務訪問點)、SSAP(source service access point,源服務訪問點)和控制字段。
當DSAP和SSAP取特定值:0xff和0xaa時,會分別產生兩個變種:Netware-以太網幀和以太網-SNAP幀;其他的取值均為純802.3幀。
-----------------------------------------------------------------------------------------------
| 前序 | 幀起始定界符 | 目的地址 | 源地址 | 長度 | 數據 | FCS |
-----------------------------------------------------------------------------------------------