相信很多新人在學習協議的時候會遇到很多問題,有些地方可能會總是想不明白(因爲我自己也是新人^_^),所以,跟據我自己學習的經歷和我在學習中所遇到的問題,我總結了一下列出來。如果能對大家有所幫助,將是我莫大的榮耀!
關於局域網的起源和發展,這裏就不多說,因爲很多書上和網上都有詳細的說明,我們將直接進入對局域網協議的學習中。
局域網的幾種協議,主要包括以太網第二版、IEEE802系列、令牌環網和SNAP等(之所以加個“等”字,是因爲我只知道這幾種,如果還有其他的,歡迎朋友們給我補充)。而最爲常見的,也就是以太網第二版和IEEE802系列,我們也主要去了解這兩種(IEEE802包括好多種,我們也不一一介紹,只對其中常見做研究)。
一,以太網(V2)
以太網第二版是早期的版本,是由DEC、Intel和Xerox聯合首創,簡稱DIX。幀格式如下圖:
前導信息:採用1和0的交替模式,在每個數據包起始處提供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 S,Frame Check Sequence)域確保接收到的數據與發送時的數據一樣。當源節點發送數據時,它執行一種稱爲循環冗餘校驗( C R C,Cyclical 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應該是在802。2之前出來,只它存在問題,所以纔出現了802。2以解決它的問題,大家是不是覺得有點糊,沒關係,請繼續看下去。下面是這個幀的幀格式:
大家有沒有發現在這個幀格式跟以太網第二版本的格式非常像?沒錯,它們這間改動的比較少,因爲802。3是在以太網V2的基礎上開發的,爲了適應100M 的網絡,所以才把8位的前導步信息分成了7字節,並加入了一個SFD的域(爲什麼說這樣分開一下可以支持100M ?我目前還沒搞懂。^8^那位高手有這方面的資料貢獻一下啊)。那前導和SFD到底起什麼作用?我的理解是,前導與SOFD相當於跑步競賽開始時的那句“預備!跑!”,前導就是“預備!”,SFD就是“跑!”,所以前導讓接收設備進入狀態,SOFD讓接收設備開始接收。而這裏所謂比特流硬件時鐘同步,是指讓設備按當前比特流信號頻率同步,以得到精確的接收數據的位置,避免接收出錯,與PC裏所謂時鐘概念是一樣的。
再有就是類型字段變成了長度字段,這是因爲當初這個協議是由novell開發的,所以它默認就是在就是局域網就是novell網,服務器是netware服務器,跑的是IPX的協議,因此去掉了類型換成了長度。後來IEEE再據此制定802。3的協議,結果問題也就出來了。如果我上層用的是IP協議呢?那怎麼辦?別急,有問題就會有方法,IEEE802。2也就由此出現了。
2, IEEE802。2
請看幀格式:
可以看到,種幀的最大區別就在於多了一個LLC的域,即邏輯鏈路控制( L L C,Logical Link Control)。該信息用來區別一個網絡中的多個客戶機。如果L L C和數據信息的總長度不足4 6字節,數據域還將包括填充位。長度域並不關心填充位,它僅僅報告邏輯鏈接控制層信息( L L C)加上數據信息的長度。邏輯鏈接控制層( L L C)信息由三個域組成:目標服務訪問點( D S A P,D e s t i n a t i o n Service Access Point),源服務訪問點( S S A P,Source Service Access Point)和一個控制域。每個域都是1個字節長,L L C域總長度爲3字節。一個服務訪問點( S A P,Service 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)”.這是怎麼回事?不是說現在都是802。3的,至少也是802。2的嘛?怎麼
還用以太網V2?那麼打包成何種幀是由哪個決定的?
其實這個問題我當時也糊了,而且很多人也都不是特別的清楚,後來跟我們老師溝通後這麼認爲:打包成何種幀一般是由操作系統決定的,在微軟的OS裏邊,其默認都會打包成以太網第二版的(可以改),這並不是說網絡環境變成10M 了,因爲現在這個以太網第二版應該也是支持100M 的,而在netware 環境裏面,通常都默認是802。2或802。3,具體2還是3,就要看netware版本了,一般來講,運行低於Netware 3.12版本的網絡的缺省幀類型是802。3。
Ok.咱就說到這了,當然不敢說完全正確,只希望能讓大家共同交流,所以歡迎大家能夠指出我所不對的地方,共同進步。
用過NetXray之類的抓包軟件的人,可能經常會被一些 不同的Frame Header搞糊塗,爲何用的Frame的Header
是這樣的,而另外的又不一樣。這是因爲在Ethernet 中存在幾種不同的幀格式,下面我就簡單介紹一下幾種
不同的幀格式及他們的差異。
是這樣的,而另外的又不一樣。這是因爲在Ethernet 中存在幾種不同的幀格式,下面我就簡單介紹一下幾種
不同的幀格式及他們的差異。
一.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格式
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)
二.各種不同的幀格式
下面介紹一下各個幀格式
下面介紹一下各個幀格式
- 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.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用於標示幀的上層協議 - 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格式的幀