用Sniffer軟件來了解局域網(圖)
局域網的幾種協議,主要包括以太網第二版、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捕幀
局域網的基本協議已經講完,現在該動動手了。
下面是我用sniffer捕的幾個幀。
ARP幀:
DNS的包:
HTTP的包:
通過上面所捕獲的幀,相信大家對網絡的分層應該會有一個比較深的理解。我所展開的是數據鏈路層的包頭。
對照上面的幀格式,我們可以看到,有目的地址,有源地址,有類型,從IP開始就屬于信息字段了。姨,不對呀,怎么沒有前導和SFD?當然,這是用來同步的,對協議分析沒有意義,包括FCS,所以去掉了。
可是,不對啊?沒錯,眼尖的朋友發現了,哈,都是以太網第二版的幀,看上面字段“Ethertype=0800(ip)”.這是怎么回事?不是說現在都是802。3的,至少也是802。2的嘛?怎么還用以太網V2?那么打包成何種幀是由哪個決定的?
其實這個問題我當時也糊了,而且很多人也都不是特別的清楚,后來跟我們老師溝通后這么認為:打包成何種幀一般是由操作系統決定的,在微軟的OS里邊,其默認都會打包成以太網第二版的(可以改),這并不是說網絡環境變成10M了,因為現在這個以太網第二版應該也是支持100M的,而在netware 環境里面,通常都默認是802。2或802。3,具體2還是3,就要看netware版本了,一般來講,運行低于Netware 3.12版本的網絡的缺省幀類型是802。3。
咱就說到這了,當然不敢說完全正確,只希望能讓大家共同交流,所以歡迎大家能夠指出我所不對的地方,共同進步。