以太網數據鏈路層協議分析!

 

相信很多新人在學習協議的時候會遇到很多問題,有些地方可能會總是想不明白(因爲我自己也是新人^_^),所以,跟據我自己學習的經歷和我在學習中所遇到的問題,我總結了一下列出來。如果能對大家有所幫助,將是我莫大的榮耀!

 

關於局域網的起源和發展,這裏就不多說,因爲很多書上和網上都有詳細的說明,我們將直接進入對局域網協議的學習中。

 

局域網的幾種協議,主要包括以太網第二版、IEEE802系列、令牌環網和SNAP等(之所以加個“等”字,是因爲我只知道這幾種,如果還有其他的,歡迎朋友們給我補充)。而最爲常見的,也就是以太網第二版和IEEE802系列,我們也主要去了解這兩種(IEEE802包括好多種,我們也不一一介紹,只對其中常見做研究)。

 

一,以太網(V2
以太網第二版是早期的版本,是由DECIntelXerox聯合首創,簡稱DIX。幀格式如下圖:

 

 

前導信息:採用10的交替模式,在每個數據包起始處提供5MHZ的時鐘信號,以充許接收設備鎖定進入的位流。

目標地址:數據傳輸的目標MAC地址。

址:數據傳輸的源MAC地址。

以太網類型:標識了幀中所含信息的上層協議。

數據加填充位:這一幀所帶有的數據信息。(以太網幀的大小是可變的。每個幀包括一個1 4字節的報頭和一個4字節的幀校驗序列域。這兩個域增加了1 8字節的幀長度。幀的數據部分可以包括從4 6字節到1 5 0 0字節長的信息(如果傳輸小於4 6字節的數據,則網絡將對數據部分填充填充位直到長度爲4 6字節)。因此,以太網幀的最小長度爲1 8 + 4 6,或6 4個字節,最大長度爲1 8 + 1 5 0 0,或1 5 1 8個字節。)

F C S    幀校驗序列( F C SFrame Check Sequence)域確保接收到的數據與發送時的數據一樣。當源節點發送數據時,它執行一種稱爲循環冗餘校驗( C R CCyclical Redundancy Check)的算法。C R C利用幀中前面所有域的值生成一個惟一的4字節長的數,即F C S。當目標節點接收數據幀時,它通過C R C破解F C S並確定幀的域與它們原有的形式一致。如果這種比較失敗,則接收節點認爲幀已經在發送過程中被破壞並要求源節點重發該數據。

二,IEEE802系列。

         IEEE802系列包含比較多的內容,但比較常見的是802.2 802.3 。下面我們就比這兩種幀。

1, IEEE802.3

       爲什麼我要先把802.3列出來?因爲我個人覺得802.3應該是在8022之前出來,只它存在問題,所以纔出現了8022以解決它的問題,大家是不是覺得有點糊,沒關係,請繼續看下去。下面是這個幀的幀格式:

         大家有沒有發現在這個幀格式跟以太網第二版本的格式非常像?沒錯,它們這間改動的比較少,因爲8023是在以太網V2的基礎上開發的,爲了適應100M的網絡,所以才把8位的前導步信息分成了7字節,並加入了一個SFD的域(爲什麼說這樣分開一下可以支持100M?我目前還沒搞懂。^8^那位高手有這方面的資料貢獻一下啊)。那前導和SFD到底起什麼作用?我的理解是,前導與SOFD相當於跑步競賽開始時的那句預備!跑!,前導就是預備!SFD就是跑!,所以前導讓接收設備進入狀態,SOFD讓接收設備開始接收。而這裏所謂比特流硬件時鐘同步,是指讓設備按當前比特流信號頻率同步,以得到精確的接收數據的位置,避免接收出錯,與PC裏所謂時鐘概念是一樣的。

再有就是類型字段變成了長度字段,這是因爲當初這個協議是由novell開發的,所以它默認就是在就是局域網就是novell網,服務器是netware服務器,跑的是IPX的協議,因此去掉了類型換成了長度。後來IEEE再據此制定8023的協議,結果問題也就出來了。如果我上層用的是IP協議呢?那怎麼辦?別急,有問題就會有方法,IEEE8022也就由此出現了。

 

2, IEEE8022

 

請看幀格式:



可以看到,種幀的最大區別就在於多了一個LLC的域,即邏輯鏈路控制L L CLogical Link Control。該信息用來區別一個網絡中的多個客戶機。如果L L C和數據信息的總長度不足4 6字節,數據域還將包括填充位。長度域並不關心填充位,它僅僅報告邏輯鏈接控制層信息( L L C)加上數據信息的長度。邏輯鏈接控制層( L L C)信息由三個域組成:目標服務訪問點( D S A PD e s t i n a t i o n Service Access Point),源服務訪問點( S S A PSource Service Access Point)和一個控制域。每個域都是1個字節長,L L C域總長度爲3字節。一個服務訪問點( S A PService Access Point)標識了使用L L C協議的一個節點或內部進程,網絡中源節點和目標節點之間的每個進程都有一個惟一S A P。控制域標識了必須被建立L L C連接的類型:無應答方式(無連接)和完全應答方式(面向連接)。

 

     我們在工作中最常見的也就是這三種幀了,下面加入一張網上找到的圖片,以加深大家的理解,並做一個小小的總結:

 

   三、用sniffer捕幀。

Ok,局域網的基本協議已經講完,現在該動動手了。

下面是我用sniffer捕的幾個幀。

ARP幀:

 

DNS的包:

 

HTTP的包:

 

  

           通過上面所捕獲的幀,相信大家對網絡的分層應該會有一個比較深的理解。我所展開的是數據鏈路層的包頭。

 

      對照上面的幀格式,我們可以看到,有目的地址,有源地址,有類型,從IP開始就屬於

信息字段了。姨,不對呀,怎麼沒有前導和SFD?當然,這是用來同步的,對協議分析沒有意

義,包括FCS,所以去掉了(*8*不是我想的,sniffer捕完後就去掉了的別打我)。

 

      可是,不對啊?沒錯,眼尖的朋友發現了,哈,都是以太網第二版的幀,看上面字段

Ethertype=0800(ip)”.這是怎麼回事?不是說現在都是8023的,至少也是8022的嘛?怎麼

還用以太網V2?那麼打包成何種幀是由哪個決定的?

 

     其實這個問題我當時也糊了,而且很多人也都不是特別的清楚,後來跟我們老師溝通後這麼認爲:打包成何種幀一般是由操作系統決定的,在微軟的OS裏邊,其默認都會打包成以太網第二版的(可以改),這並不是說網絡環境變成10M了,因爲現在這個以太網第二版應該也是支持100M的,而在netware 環境裏面,通常都默認是80228023,具體2還是3,就要看netware版本了,一般來講,運行低於Netware 3.12版本的網絡的缺省幀類型是8023

 

 

   Ok.咱就說到這了,當然不敢說完全正確,只希望能讓大家共同交流,所以歡迎大家能夠指出我所不對的地方,共同進步。

 

用過NetXray之類的抓包軟件的人,可能經常會被一些  不同的Frame Header搞糊塗,爲何用的FrameHeader
 
是這樣的,而另外的又不一樣。這是因爲在Ethernet  中存在幾種不同的幀格式,下面我就簡單介紹一下幾種
 
不同的幀格式及他們的差異。

 一.Ethernet幀格式的發展

 1980 DEC,Intel,Xerox制訂了Ethernet I的標準
 1982 DEC,Intel,Xerox
又制訂了Ehternet II的標準
 1982 IEEE
開始研究Ethernet的國際標準802.3
 1983
迫不及待的Novell基於IEEE802.3的原始版開發了專用的Ethernet幀格式
 1985 IEEE
推出IEEE 802.3規範
     
後來爲解決EthernetII802.3幀格式的兼容問題推出折衷的Ethernet SNAP格式

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

 .各種不同的幀格式
 
下面介紹一下各個幀格式  

  •  Ethernet II
      
    就是DIX以太網聯盟推出的,它由6個字節的目的MAC地址,6個字節的源MAC地址,2個字節的類型域(用於標示封裝在這個Frame、裏面數據的類型)以上爲Frame Header,接下來是46--1500 字節的數據,和4字節的幀校驗)

  • Novell Ethernet
      
    它的幀頭與Ethernet有所不同其中EthernetII幀頭中的類型域變成了長度域,後面接着的兩個字節爲0xFFFF
      
    用於標示這個幀是Novell Ether類型的Frame 由於前面的0xFFFF站掉了兩個字節所以數據域縮小爲44-1498個字節,幀校驗不變。

  • IEEE 802.3/802.2
       802.3Frame HeaderEthernet II的幀頭有所不同EthernetII類型域變成了長度域。其中又引入802.2協議(LLC)802.3幀頭後面添加了一個LLC首部,DSAP(Destination Service Access Point)
       1 byte,SSAP(Source SAP),
    一個控制域--1 byte!
       SAP
    用於標示幀的上層協議

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章