1. 程式人生 > >乙太網幀與ieee 802.3幀

乙太網幀與ieee 802.3幀

http://zhidao.baidu.com/question/93567501.html

http://blog.csdn.net/wzw200/archive/2009/07/23/4373056.aspx

淺談乙太網幀格式                                      

一、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捕捉的資料包解碼來區別它們。

乙太網這個術語一般是指數字裝置公司(Digital Equipment)、英特爾公司(Intel)和施樂公司(Xerox)在1982年聯合公佈的一個標準(實際上它是第二版本,第一版本早在1972年 就在施樂公司帕洛阿爾託研究中心PARC裡產生了)。它是目前TCP/IP網路採用的主要的區域網技術。它採用一種稱作CSMA/CD的媒體接入方法,其 意思是帶衝突檢測的載波偵聽多路接入(Carrier Sense, Multiple Access with Collision Detection)。它的速率為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是指在Sniffer Hex解碼視窗中從左向右第15位的數值。大家如果有點發懵的話,沒有關係,看完後面的格式分析後再來分析前面提到的,相信一定能夠明白?

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

2、Ethernet Version2

乙太網版本2是先於IEEE標準的乙太網版本。

從資料包中可以看出,Ethernet V2通過在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的幀,而接下來的Offset 0E處的值“4242”(代表DSAP和SSAP),既不是Novell 802.3 “Raw”的特徵值“FFFF”,也不是IEEE 802.3 SNAP的特徵值“AAAA”,因此它肯定是一個IEEE802.3的幀。

4、IEEE802.3 SNAP

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

其MAC層保證資料幀長度不小於64位元組,不足的話需要進行資料填充。

是Sniffer捕獲的IEEE802.3 SNAP幀的解碼,可以看到在DLC層源地址後緊跟著就是802.3的長度(Length)欄位0175,它小於05FF,可以肯定它不是 Ethernet V2的幀,而接下來的Offset 0E處的值“AAAA”(代表DSAP和SSAP),這是IEEE 802.3 SNAP的特徵值“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位元組,而IEEE 802.3可以裝載的最大資料是1492位元組(SNAP)或是1497位元組; Ethernet V2不提供MAC層的資料填充功能,而IEEE 802.3不僅提供該功能,還具備服務訪問點(SAP)和SNAP層,能夠提供更有效的資料鏈路層控制和更好的傳輸保證。那麼我們可以得出這樣的結 論:Ethernet V2比IEEE802.3更適合於傳輸大量的資料,但Ethernet V2缺乏資料鏈路層的控制,不利於傳輸需要嚴格傳輸控制的資料,這也正是IEEE802.3的優勢所在,越需要嚴格傳輸控制的應用,越需要用 IEEE802.3或SNAP來封裝,但IEEE802.3也不可避免的帶來資料裝載量的損失,因此該格式的封裝往往用在較少資料量承載但又需要嚴格控制 傳輸的應用中。

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