【轉】以太網幀格式詳解


 

淺談以太網幀格式                                      

一、Ethernet幀格式的發展

1980 DEC,Intel,Xerox制訂了Ethernet I的標准 1982 DEC,Intel,Xerox又制訂了Ehternet II的標准 1982 IEEE開始研究Ethernet的國際標准802.3  1983 迫不及待的Novell基於IEEE的802.3的原始版開發了專用的Ethernet幀格式 1985 IEEE推出IEEE 802.3規范,后來為解決EthernetII與802.3幀格式的兼容問題, 推出折衷的Ethernet SNAP格式

(其中早期的Ethernet I已經完全被其他幀格式取代了 ,所以現在Ethernet只能見到后面幾種Ethernet的幀格式, 現在大部分的網絡設備都支持這幾種Ethernet的幀格式, 如:cisco的路由器再設定Ethernet接口時可以指定不同的以太網的幀格式:arpa,sap,snap,novell-ether)

二.各種不同的幀格式  下面介紹一下各個幀格式  1.Ethernet II 就是DIX以太網聯盟推出的。。。。 它由6個字節的目的MAC地址,6個字節的源MAC地址, 2個字節的類型域(用於標示封裝在這個Frame、里面 數據的類型)以上為Frame Header, 接下來是46--1500字節的數據,和4字節的幀校驗 2.Novell Ethernet 它的幀頭與Ethernet有所不同其中EthernetII幀頭中的類型域變成了長度域,  后面接着的兩個字節為0xFFFF,用於標示這個幀是Novell Ether類型的Frame, 由於前面的0xFFFF站掉了兩個字節所以數據域縮小為44-1498個字節,幀校驗不變。 3.IEEE 802.3/802.2  802.3的Frame Header和Ethernet II的幀頭有所不同,EthernetII類型域變成了長度域。  其中又引入802.2協議(LLC)在802.3幀頭后面添加了一個LLC首部, 由DSAP(Destination Service Access Point)1 byte,SSAP(Source SAP),一個控制域--1 byte! SAP用於標示幀的上層協議。

4.Ethernet SNAP  SNAP Frame與802.3/802.2 Frame的最大區別是增加了一個5 Bytes的SNAP ID 其中前面3個byte通常與源mac地址 的前三個bytes相同為廠商代碼!  有時也可設為0,后2 bytes與Ethernet II的類型域相同。。。

 三.如何區分不同的幀格式    Ethernet中存在這四種Frame那些網絡設備又是如何識別的呢? 如何區分EthernetII與其他三種格式的Frame 如果幀頭跟隨source mac地址的2 bytes的值大於1500,則此Frame為EthernetII格式的     接着比較緊接着的兩bytes如果為0xFFFF則為Novell Ether類型的Frame, 如果為0xAAAA則為Ethernet SNAP格式的Frame ,如果都不是則為Ethernet 802.3/802.2格式的幀

 幾種以太網幀格式     相當長的一段時間里我都沒搞明白一個很基礎的問題---以太網的封裝格式;最近查了查相關文檔,總結如下;   首先說明一下,Ethernet和802.3並不是一回事,雖然我們經常混用這兩個術語;   歷史上以太網幀格式有五種:   1.Ethernet V1:這是最原始的一種格式,是由Xerox PARC提出的3Mbps CSMA/CD以太網標准的封裝格式,  后來在1980年由DEC,Intel和Xerox標准化形成Ethernet V1標准;   2.Ethernet V2(ARPA):這是最常見的一種以太網幀格式,也是今天以太網的事實標准,  由DEC,Intel和Xerox在1982年公布其標准,主要更改了Ethernet V1的電氣特性和物理接口,  在幀格式上並無變化;Ethernet V2出現后迅速取代Ethernet V1成為以太網事實標准; Ethernet V2幀頭結構為6bytes的源地址+6bytes的目標地址+2Bytes的協議類型字段+數據。  常見協議類型如下: 0800       IP  0806       ARP  8137       Novell IPX  809b       Apple Talk 如果協議類型字段取值為0000-05dc(十進制的0-1500),則該幀就不是Ethernet V2(ARPA)類型了,而是下面講到的三種802.3幀類型之一; Ethernet可以支持TCP/IP,Novell IPX/SPX,Apple Talk Phase I等協議;RFC 894定義了IP報文在Ethernet V2上的封裝格式;   3.RAW 802.3:這是1983年Novell發布其划時代的Netware/86網絡套件時采用的私有以太網幀格式,  該格式以當時尚未正式發布的802.3標准為基礎;  但是當兩年以后IEEE正式發布802.3標准時情況發生了變化—IEEE在802.3幀頭中又加入了802.2 LLC(Logical Link Control)頭,  這使得Novell的RAW 802.3格式跟正式的IEEE 802.3標准互不兼容;可以看到在Novell的RAW 802.3幀結構中並沒有標志協議類型的字段,  而只有Length字段(2bytes,取值為0000-05dc,即十進制的0-1500),因為RAW 802.3幀只支持IPX/SPX一種協議;   4.802.3/802.2 LLC:這是IEEE 正式的802.3標准,它由Ethernet V2發展而來。  它將Ethernet V2幀頭的協議類型字段替換為幀長度字段(取值為0000-05dc;十進制的1500);  並加入802.2 LLC頭用以標志上層協議,LLC頭中包含DSAP,SSAP以及Crontrol字段;  常見SAP值: 0         Null LSAP        [IEEE]  4        SNA Path Control         [IEEE]  6        DOD IP        [79,JBP]  AA         SNAP        [IEEE]  FE        Global DSAP        [IEEE]  SAP值用以標志上層應用,但是每個SAP字段只有8bits長,  而且其中僅保留了6比特用於標識上層協議,因此所能標識的協議數有限(不超過32種);  並且IEEE拒絕為某些重要的協議比如ARP協議定義SAP值(奇怪的是同時他們卻定義了IP的SAP值);  因此802.3/802.2 LLC的使用有很大局限性;   5.802.3/802.2 SNAP:這是IEEE為保證在802.2 LLC上支持更多的上層協議同時更好的支持IP協議而發布的標准,  與802.3/802.2 LLC一樣802.3/802.2 SNAP也帶有LLC頭,但是擴展了LLC屬性,  新添加了一個2Bytes的協議類型域(同時將SAP的值置為AA),  從而使其可以標識更多的上層協議類型;  另外添加了一個3Bytes的OUI字段用於代表不同的組織,RFC 1042定義了IP報文在802.2網絡中的封裝方法和ARP協議在802.2 SANP中的實現;   今天的實際環境中大多數TCP/IP設備都使用Ethernet V2格式的幀。  這是因為第一種大規模使用的TCP/IP系統(4.2/3 BSD UNIX)的出現時間介於RFC 894和RFC 1042之間,  它為了避免不能和別的主機互操作的風險而采用了RFC 894的實現;  也由於大家都抱着這種想法,所以802.3標准並沒有如預期那樣得到普及;   CISCO設備的Ethernet Interface默認封裝格式是ARPA(Ethernet V2)

不同廠商對這幾種幀格式通常有不同的叫法,比如: Frame Type         Novel        Cisco  Ethernet Version 2        Ethernet_II        arpa  802.3 Raw        Ethernet_802.3        novell_ether  IEEE 802.3/802.2        Ethernet_802.2        sap  IEEE 802.3/802.2 SNAP        ETHERNET_SNAP        snap **************************************************************************************************************************************

 

 

一、 以太網數據幀的格式分析

大家都知道我們目前的局域網大多數是以太網,但以太網有多種標准,其數據幀有多種格式,恐怕有許多人不是太清楚,本文的目的就是通過幀格式和Sniffer捕捉的數據包解碼來區別它們。

以太網這個術語一般是指數字設備公司(DigitalEquipment)、英特爾公司(Intel)和施樂公司(Xerox)在1982年聯合公布的一個標准(實際上它是第二版本,第一版本早在1972年就在施樂公司帕洛阿爾托研究中心PARC里產生了)。它是目前TCP/IP網絡采用的主要的局域網技術。它采用一種稱作CSMA/CD的媒體接入方法,其意思是帶沖突檢測的載波偵聽多路接入(Carrier Sense, Multiple Access with CollisionDetection)。它的速率為10 Mb/s,地址為48 bit。

1985年,IEEE(電子電氣工程師協會)802委員會公布了一個稍有不同的標准集,其中802.3針對整個CSMA/CD網絡,802.4針對令牌總線網絡,802.5針對令牌環網絡。這三者的共同特性由802.2標准來定義,那就是802網絡共有的邏輯鏈路控制(LLC)。不幸的是,802.2和802.3定義了一個與以太網不同的幀格式,加上1983年Novell為其Netware開發的私有幀,這些給以太網造成了一定的混亂,也給我們學習以太網帶來了一定的影響。

1、通用基礎

數據鏈路層頭(Header)是數據鏈路層的控制信息的長度不是固定的,根據以太網數據幀的格式的不同而不同,那么判斷IEEE802.3、IEEE802.3 SNAP、Ethernet Version2、Netware 802.3“Raw”這些數據幀的最主要依據也源於Header的變化。

從Sniffer捕捉數據包中也可以看出,Sniffer捕捉數據包的時候是掐頭去尾的,不要前面的前導碼,也丟棄后面的CRC校驗(注意它只是不在Decode里顯示該區域,但並不代表它不去做數據包CRC校驗),這就是很多人困惑為什么Sniffer捕捉到的數據包長度跟實際長度不相符的原因。那么,Sniffer是如何來判斷這些不同類型的以太網格式呢?

Sniffer可以判斷出不同的以太網格式,這里需要注意的是,Sniffer在數據包解碼時有自己的格式,所以有Offset之說,offset ØE是指在SnifferHex解碼窗口中從左向右第15位的數值。大家如果有點發懵的話,沒有關系,看完后面的格式分析后再來分析前面提到的,相信一定能夠明白?

下面我們通過一些具體的數據包來說明各種以太網格式的具體區別。

2、Ethernet Version2

以太網版本2是先於IEEE標准的以太網版本。

從數據包中可以看出,EthernetV2通過在DLC頭中2個字節的類型(Type)字段來辨別接收處理。類型字段是用來指定上層協議的(如0800指示IP、0806指示ARP等),它的值一定是大於05FF的,它提供無連接服務的,本身不控制數據(DATA)的長度,它要求網絡層來確保數據字段的最小包長度(46字節)。

Sniffer捕獲的Ethernet V2幀的解碼,可以看到在DLC層,源DLC地址后緊跟着就是以太網類型(Etehertype)值0800,代表上層封裝的是IP報文,0800大於05FF,因而我們可以斷定它是Ethernet V2的幀。

 

3、IEEE802.3

IEEE802.3把DLC層分隔成明顯的兩個子層:MAC層和LLC層,其中MAC層主要是指示硬件目的地址和源地址。LLC層用來提供一些服務:

– 通過SAP地址來辨別接收和發送方法

– 兼容無連接和面向連接服務

– 提供子網訪問協議(Sub-network Access Protocol,SNAP),類型字段即由它的首部給出。

MAC層要保證最小幀長度不小於64字節,如果數據不滿足64字節長度就必須進行填充。

是Sniffer捕獲的IEEE802.3幀的解碼,可以看到在DLC層源地址后緊跟着就是802.3的長度(Length)字段0026,它小於05FF,可以肯定它不是Ethernet V2的幀,而接下來的Offset0E處的值“4242”(代表DSAP和SSAP),既不是Novell 802.3 “Raw”的特征值“FFFF”,也不是IEEE 802.3SNAP的特征值“AAAA”,因此它肯定是一個IEEE802.3的幀。

 

4、IEEE802.3 SNAP

SNAP (Sub-Network AccessProtocol)子網訪問協議,是邏輯鏈路控制(Logical LinkControl)的一個子集,它允許協議不用通過服務訪問點(SAP)即可實現IEEE兼容的MAC層功能,因此它在DSAP和SSAP域里的值是固定的(AAAA)。也正源於此,它需要額外提供5個字節的頭來指定接收方法,3個字節標識廠商代碼,2個字節標識上層協議。

其MAC層保證數據幀長度不小於64字節,不足的話需要進行數據填充。

是Sniffer捕獲的IEEE802.3SNAP幀的解碼,可以看到在DLC層源地址后緊跟着就是802.3的長度(Length)字段0175,它小於05FF,可以肯定它不是Ethernet V2的幀,而接下來的Offset 0E處的值“AAAA”(代表DSAP和SSAP),這是IEEE 802.3SNAP的特征值“AAAA”,因此可以斷定它是一個IEEE802.3 SNAP的幀。

 

5、Novell Netware 802.3 “Raw”

雖然它的產生先於IEEE802.3規范,但已成為IEEE802.3規范的一部分。它僅使用DLC層的下半部,而不使用LLC。

802.3 “Raw”幀通過在DLC頭中2個字節的長度(Length)字段來標記數據幀長度,而在長度字段后緊跟着就是兩個字節的十六進制值FFFF,它是用來標識IPX協議頭的開始。為了確保最小數據幀長度為64字節,MAC層會進行填充數據區域來確保最小長度。

在所有工作站都使用同一種數據幀類型情況下不會有什么問題,但如果是在混合以太網幀類型環境中,Novell的這種以太網幀會造成負面影響:當Novell發出廣播幀時,其FF字段正好是IEEE802.3幀中的服務訪問點(SAP)域,它的“FF”值代表着廣播SAP,因此所有的工作站(不管是不是Netware工作站)都會拷貝,這會造成不必要的廣播影響。

Sniffer捕獲的Netware 802.3“RAW”幀的解碼,可以看到在DLC層源地址后緊跟着就是802.3的長度(Length)字段0120,它小於05FF,可以肯定它不是Ethernet V2的幀,而接下來的Offset 0E處的值“FFFF”(代表IPX協議的開始),這是Netware 802.3“Raw”的特征值“FFFF”,因此可以斷定它是一個Novell 802.3 “Raw”的幀。

 

二、 Ethernet V2幀與IEEE 802.3幀的比較

因為這兩種幀是我們在現在的局域網里最常見的兩種幀,因此,我們對它們進行一些比較。

Ethernet V2可以裝載的最大數據長度是1500字節,而IEEE802.3可以裝載的最大數據是1492字節(SNAP)或是1497字節; Ethernet V2不提供MAC層的數據填充功能,而IEEE802.3不僅提供該功能,還具備服務訪問點(SAP)和SNAP層,能夠提供更有效的數據鏈路層控制和更好的傳輸保證。那么我們可以得出這樣的結論:Ethernet V2比IEEE802.3更適合於傳輸大量的數據,但EthernetV2缺乏數據鏈路層的控制,不利於傳輸需要嚴格傳輸控制的數據,這也正是IEEE802.3的優勢所在,越需要嚴格傳輸控制的應用,越需要用IEEE802.3或SNAP來封裝,但IEEE802.3也不可避免的帶來數據裝載量的損失,因此該格式的封裝往往用在較少數據量承載但又需要嚴格控制傳輸的應用中。

在實際應用中,我們會發現,大多數應用的以太網數據包是EthernetV2的幀(如HTTP、FTP、SMTP、POP3等應用),而交換機之間的BPDU(橋協議數據單元)數據包則是IEEE802.3的幀,VLANTrunk協議如802.1Q和Cisco的CDP(思科發現協議)等則是采用IEEE802.3SNAP的幀。大家有興趣的話,可以利用Sniffer等協議分析工具去捕捉數據包,然后解碼查看是不是這樣的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM