幀究竟是由誰來產生的?網絡
網卡能夠產生,交換機也能夠產生。交換機產生的話是由於交換機之間須要一些協議來維護特定的功能,如STP,VTP而最重要的功能仍是轉發網卡(也就是主機)所產生的幀。以太網(IEEE 802.3)幀格式: 一、前導碼:7字節0x55,一串一、0間隔,用於信號同步 二、幀起始定界符:1字節0xD5(10101011),表示一幀開始 三、DA(目的MAC):6字節 四、SA(源MAC):6字節 五、類型/長度:2字節,0~1500保留爲長度域值,1536~65535保留爲類型域值(0x0600~0xFFFF) 六、數據:46~1500字節 七、幀校驗序列(FCS):4字節,使用CRC計算從目的MAC到數據域這部份內容而獲得的校驗和。 據RFC894的說明,以太網封裝IP數據包的最大長度是1500字節,也就是說以太網最大幀長應該是以太網首部加上1500,再加上7字節的前導同步碼和1字節的幀開始定界符,具體就是:7字節前導同步嗎+1字節幀開始定界符+6字節的目的MAC+6字節的源MAC+2字節的幀類型+1500+4字節的FCS。 按照上述,最大幀應該是1526字節,可是實際上咱們抓包獲得的最大幀是1514字節,爲何不是1526字節呢?緣由是當數據幀到達網卡時,在物理層上網卡要先去掉前導同步碼和幀開始定界符,而後對幀進行CRC檢驗,若是幀校驗和錯,就丟棄此幀。若是校驗和正確,就判斷幀的目的硬件地址是否符合本身的接收條件(目的地址是本身的物理硬件地址、廣播地址、可接收的多播硬件地址等),若是符合,就將幀交「設備驅動程序」作進一步處理。這時咱們的抓包軟件才能抓到數據,所以,抓包軟件抓到的是去掉前導同步碼、幀開始分界符、FCS以外的數據,其最大值是6+6+2+1500=1514。 以太網規定,以太網幀數據域部分最小爲46字節,也就是以太網幀最小是6+6+2+46+4=64。除去4個字節的FCS,所以,抓包時就是60字節。當數據字段的長度小於46字節時,MAC子層就會在數據字段的後面填充以知足數據幀長不小於64字節。因爲填充數據是由MAC子層負責,也就是設備驅動程序。