2009-12-08 50 views

回答

1

校驗和可能在various places中執行。 最近以太網卡從網絡堆棧卸載校驗和。我不得不禁用硬件校驗和以使網絡取證更容易。這應該是顯而易見的,因爲沒有這個功能,硬件總是會悄然丟棄數據包。

+0

校驗和是**不是** CRC:問題是特定於以太網(而不是**客戶端協議)。 – jldupont 2009-12-08 18:22:04

+0

我鏈接到的文章沒有區分兩者。 – 2009-12-08 18:25:32

+0

@Hassan Syed:那麼這篇文章並沒有涵蓋這裏的問題。 – jldupont 2009-12-08 19:55:20

1

通常,在硬件MAC(媒體訪問控制器)中處理以太網級FCS(幀校驗序列)。 請注意,我們在此討論CRC,而不僅僅是校驗和(以太網幀級別沒有「校驗和」)。

如果檢測到FCS不匹配,它將很可能在HW MAC級別被丟棄:統計計數器將被更新。

換句話說,用一個不可用的幀「困擾」軟件棧是沒有用的。

0

正如其他海報所述,FCS通常由NIC 本身或驅動程序進行檢查。但是,在您讀取原始 以太網幀的情況下,我認爲這完全取決於驅動程序。對於 實例,在可以設置爲「monitor」或「promiscous」 模式的WiFi NIC中,您通常不希望它們丟棄具有錯誤FCS的幀,因爲 可能表示您正在查找的錯誤。

一個數據點:英特爾4965AGN Linux驅動程序將所有捕獲的數據包中的所有 FCS字段設置爲0在監視器模式下。如果運行Wireshark,則可以通過 查看它是否計算了預期的FCS,並抱怨0字段 無效。這意味着它丟棄MAC中具有不良FCS 的幀,或者如果這些幀也通過了,遺憾的是不清楚。

所以,如果原來的問題是:「我一定要檢查自己FCS捕捉原始數據包時 」在4965AGN情況下,答案是 「你不能」,可以是「是」,如果你得到的來自 網卡的真實FCS。

0

大多數網絡硬件將允許您在硬件中設置一個選項來「存儲錯誤的數據包」。這允許您查看以太網CRC失敗的數據包。如果將錯誤的以太網幀傳遞到堆棧,由於上層的校驗和錯誤,它很可能會被拒絕。堆棧不檢查以太網CRC;這留給NIC,並且軟件中的CRC計算是耗時的。

請記住堆疊式網絡協議通常會計算堆棧中各個點的校驗和。 TCP通常會計算網絡層的CRC,IP層的IP頭校驗和以及TCP層的TCP校驗和。應用程序也可能驗證數據的完整性。