http://c.biancheng.net/view/6391.html
以太網鏈路傳輸的數據包稱做以太幀,或者以太網數據幀。在以太網中,網絡訪問層的軟件必須把數據轉換成能夠通過網絡適配器硬件進行傳輸的格式。
以太幀的工作機制
當以太網軟件從網絡層接收到數據報之后,需要完成如下操作:
1) 根據需要把網際層的數據分解為較小的塊,以符合以太網幀數據段的要求。
以太網幀的整體大小必須在 64~1518 字節之間(不包含前導碼)。有些系統支持更大的幀,最大可以支持 9000 字節。有些系統支持更大的幀,最大可以支持 9000 字節。
2) 把數據塊打包成幀。每一幀都包含數據及其他信息,這些信息是以太網網絡適配器處理幀所需要的。
3) 把數據幀傳遞給對應於 OSI 模型物理層的底層組件,后者把幀轉換為比特流,並且通過傳輸介質發送出去。
4) 以太網上的其他網絡適配器接收到這個幀,檢查其中的目的地址。如果目的地址與網絡適配器的地址相匹配,適配器軟件就會處理接收到的幀,把數據傳遞給協議棧中較高的層。
以太幀的結構
以太幀起始部分由前同步碼和幀開始定界符組成,后面緊跟着一個以太網報頭,以 MAC 地址說明目的地址和源地址。以太幀的中部是該幀負載的包含其他協議報頭的數據包,如 IP 協議。
以太幀由一個 32 位冗余校驗碼結尾,用於檢驗數據傳輸是否出現損壞。以太幀結構如圖所示。

上圖中每個字段的含義如下表所示:
字段 | 含義 |
---|---|
前同步碼 | 用來使接收端的適配器在接收 MAC 幀時能夠迅速調整時鍾頻率,使它和發送端的頻率相同。前同步碼為 7 個字節,1 和 0 交替。 |
幀開始定界符 | 幀的起始符,為 1 個字節。前 6 位 1 和 0 交替,最后的兩個連續的 1 表示告訴接收端適配器:“幀信息要來了,准備接收”。 |
目的地址 | 接收幀的網絡適配器的物理地址(MAC 地址),為 6 個字節(48 比特)。作用是當網卡接收到一個數據幀時,首先會檢查該幀的目的地址,是否與當前適配器的物理地址相同,如果相同,就會進一步處理;如果不同,則直接丟棄。 |
源地址 | 發送幀的網絡適配器的物理地址(MAC 地址),為 6 個字節(48 比特)。 |
類型 | 上層協議的類型。由於上層協議眾多,所以在處理數據的時候必須設置該字段,標識數據交付哪個協議處理。例如,字段為 0x0800 時,表示將數據交付給 IP 協議。 |
數據 | 也稱為效載荷,表示交付給上層的數據。以太網幀數據長度最小為 46 字節,最大為 1500 字節。如果不足 46 字節時,會填充到最小長度。最大值也叫最大傳輸單元(MTU)。 在 Linux 中,使用 ifconfig 命令可以查看該值,通常為 1500。 |
幀檢驗序列 FCS | 檢測該幀是否出現差錯,占 4 個字節(32 比特)。發送方計算幀的循環冗余碼校驗(CRC)值,把這個值寫到幀里。接收方計算機重新計算 CRC,與 FCS 字段的值進行比較。如果兩個值不相同,則表示傳輸過程中發生了數據丟失或改變。這時,就需要重新傳輸這一幀。 |
構建以太幀
通過上面的學習了解了以太幀的結構。用戶可以根據需要設置以太幀的字段值,從而構建以太幀。netwox 工具中編號為 32 的模塊提供了以太幀構建功能。
【示例】構建以太網數據幀。
1) 查看以太網數據幀,執行命令如下:
root@daxueba:~# netwox 32
輸出信息如下:
Ethernet________________________________________________________.
| 00:0C:29:CA:E4:66->00:08:09:0A:0B:0C type:0x0000 |
|____________________________________________________________ |
上述輸出信息中的 00:0C:29:CA:E4:66 為源 MAC 地址,是當前主機的 MAC 地址;00:08:09:0A:0B:0C 為目標 MAC 地址,0x0000 為以太網類型。
2) 構建以太幀,設置源 MAC 地址為 00:0c:29:c4:8a:de,目標 MAC 地址為 01:02:03:04:05:06,執行命令如下:
root@daxueba:~# netwox 32 -a 00:0c:29:c4:8a:de -b 01:02:03:04:05:06
輸出信息如下:
Ethernet________________________________________________________.
| 00:0C:29:C4:8A:DE->01:02:03:04:05:06 type:0x0000 |
|_____________________________________________________________ |
3) 為了驗證構建的以太幀,通過 Wireshark 工具進行抓包。在鏈路層中可以看到偽造的源 MAC 地址和目標 MAC 地址,信息如下:
Ethernet II, Src: Vmware_c4:8a:de (00:0c:29:c4:8a:de), Dst: Woonsang_04:05:06(01:02:03:04:05:06)
4) 為了不被其他主機發現,在構造數據包時,可以指定假的源MAC地址。但是,每構造一次只能發送一個數據包。如果需要發送多個數據包,就需要構造多次。
為了方便,可以使用 macchanger 工具臨時修改 MAC 地址,這樣就不需要每次構造假的源 MAC 地址了。例如,將當前主機的 MAC 地址修改為 00:0c:29:aa:e0:28,執行命令如下:
Current MAC: 00:0c:29:ca:e4:66 (VMware, Inc.)
Permanent MAC: 00:0c:29:ca:e4:66 (VMware, Inc.)
New MAC: 00:0c:29:aa:e0:28 (VMware, Inc.)
以上輸出信息表示當前主機原來的 MAC 地址為 00:0c:29:ca:e4:66,修改后的 MAC 地址為 00:0c:29:aa:e0:28。
5) 再次使用 netwox 工具進行發包,默認使用修改后的 MAC 地址作為源 MAC 地址,如下:
root@daxueba:~# netwox 32
輸出信息如下:
Ethernet_________________________________________________
| 00:0C:29:AA:E0:28->00:08:09:0A:0B:0C type:0x0000 |
|_______________________________________________________ |
以太幀洪水攻擊
交換機為了方便數據傳輸,通常會存儲每個端口所對應的 MAC 地址,形成一張表。當交換機收到計算機發來的以太幀時,就會查看幀中的源 MAC 地址,並查找存儲的表:
- 如果表中存在該 MAC 地址,就直接轉發數據;
- 如果沒有,則將該 MAC 地址存入該表中。
當其他計算機向這個 MAC 地址發送數據時,可以快速決定向哪個端口發送數據。由於該表不可能是無窮大的,所以當達到一定數量時,將不會儲存其他新的 MAC 地址。再有新的主機發來數據幀時,部分交換機將不再查找對應的端口,而是以廣播的形式轉發給所有的端口。這樣,就使其他主機可以接收到該數據幀了。
netwox 工具提供編號為 75 的模塊,用來實現以太幀洪水攻擊功能。它可以偽造大量的以太網數據包,填滿交換機的存儲表,使交換機失去正確的轉發功能。
實施以太幀洪水攻擊,執行命令如下:
root@daxueba:~# netwox 75
執行命令后沒有任何輸出信息,但是會發送大量的以太網數據包。
使用 Wireshark 工具進行抓包,如圖所示。圖中捕獲的數據包為以太幀洪水攻擊產生的數據包。
