以太網幀,屬於二層數據,分爲2種:EthernetII幀和IEEE802.3幀。
其中EthernetII幀格式爲:
而IEEE802.3幀格式爲:
兩種幀的區別----->在於Type / Length字段數值的大小。
Type/Length >=1536(0x0600) ----->EthernetII
Type/Length <=1500(0x05DC) ----->IEEE802.3
最常見的基本都是EthernetII類型的幀,STP協議的幀格式屬於IEEE802.3。
下面抓取的幀爲ARP請求幀,屬於EthernetII型。由於data部分達不到最小的46字節,因此需要進行填充(這個動作是由網卡完成的),使data字段達到46字節。
wireshark(或其他抓包工具)進行抓包可以發現,原本最小數據幀的大小爲64字節,但抓到的只有60字節甚至更少。
原因:數據幀是由網卡的driver抓取到並傳送到TCP/IP協議棧,而很多網卡的driver都會把幀最後面的4個字節的FCS字段去掉,從而抓包軟件無法抓取到這個字段。
另外數據段部分如果太小(不足46字節),網卡會進行自動填充(全0)。在抓取的時候,存在一個優先級的問題,有時可能數據還沒有填充或者沒完全填充就被抓取了,導致整個數據幀的長度不足60(去掉那4字節的FCS字段)。
CRC循環冗餘校驗碼(Cyclic Redundancy Check),是數據通信領域中最常用的一種差錯校驗碼,其特徵是信息字段和校驗字段的長度可以任意選定。CRC是一種數據傳輸檢錯功能,對數據進行多項式計算,並將得到的結果附在幀的後面,接收設備也執行類似的算法,以保證數據傳輸的正確性和完整性。
原理:CRC檢驗原理實際上就是在一個p位二進制數據序列之後附加一個r位二進制檢驗碼(序列),從而構成一個總長爲n=p+r位的二進制序列;附加在數據序列之後的這個檢驗碼與數據序列的內容之間存在着某種特定的關係。如果因干擾等原因使數據序列中的某一位或某些位發生錯誤,這種特定關係就會被破壞。因此,通過檢查這一關係,就可以實現對數據正確性的檢驗。
FCS幀檢驗序列(Frame Check Sequence):爲了進行差錯檢驗而添加的冗餘碼。