回答
校驗和可能在various places中執行。 最近以太網卡從網絡堆棧卸載校驗和。我不得不禁用硬件校驗和以使網絡取證更容易。這應該是顯而易見的,因爲沒有這個功能,硬件總是會悄然丟棄數據包。
通常,在硬件MAC(媒體訪問控制器)中處理以太網級FCS(幀校驗序列)。 請注意,我們在此討論CRC,而不僅僅是校驗和(以太網幀級別沒有「校驗和」)。
如果檢測到FCS不匹配,它將很可能在HW MAC級別被丟棄:統計計數器將被更新。
換句話說,用一個不可用的幀「困擾」軟件棧是沒有用的。
正如其他海報所述,FCS通常由NIC 本身或驅動程序進行檢查。但是,在您讀取原始 以太網幀的情況下,我認爲這完全取決於驅動程序。對於 實例,在可以設置爲「monitor」或「promiscous」 模式的WiFi NIC中,您通常不希望它們丟棄具有錯誤FCS的幀,因爲 可能表示您正在查找的錯誤。
一個數據點:英特爾4965AGN Linux驅動程序將所有捕獲的數據包中的所有 FCS字段設置爲0在監視器模式下。如果運行Wireshark,則可以通過 查看它是否計算了預期的FCS,並抱怨0字段 無效。這意味着它丟棄MAC中具有不良FCS 的幀,或者如果這些幀也通過了,遺憾的是不清楚。
所以,如果原來的問題是:「我一定要檢查自己FCS捕捉原始數據包時 」在4965AGN情況下,答案是 「你不能」,可以是「是」,如果你得到的來自 網卡的真實FCS。
大多數網絡硬件將允許您在硬件中設置一個選項來「存儲錯誤的數據包」。這允許您查看以太網CRC失敗的數據包。如果將錯誤的以太網幀傳遞到堆棧,由於上層的校驗和錯誤,它很可能會被拒絕。堆棧不檢查以太網CRC;這留給NIC,並且軟件中的CRC計算是耗時的。
請記住堆疊式網絡協議通常會計算堆棧中各個點的校驗和。 TCP通常會計算網絡層的CRC,IP層的IP頭校驗和以及TCP層的TCP校驗和。應用程序也可能驗證數據的完整性。
- 1. 檢查堆棧
- 2. 線程堆和堆棧
- 3. 堆棧Numpy陣列無附加檢查
- 4. 運行校驗和檢查 - OSX
- 5. 堆棧和堆查看器
- 6. 如何在Linux中檢查以太網?
- 7. 檢查C++中Lua堆棧項的值
- 8. 在C#中檢查堆完整性和堆棧大小
- 9. ReactJS無效的校驗和
- 10. 堆棧層面太深(SystemStackError)
- 11. rspec堆棧級別太深
- 12. 堆棧級別太深ActionMailer
- 13. SystemStackError - 堆棧級別太深
- 14. 軌道:堆棧層太深
- 15. Parslet:SystemStackError:堆棧級別太深
- 16. rake_test_loader.rb - 堆棧級別太深
- 17. 在C中檢查堆棧大小#
- 18. JVM - 堆棧和堆棧
- 19. 如何檢查線程堆棧的當前狀態
- 20. 檢查通過以太網C連接#
- 21. 沙盒和無堆棧python?
- 22. 檢查堆棧上的局部變量
- 23. jquery的歷史,檢查歷史堆棧
- 24. 線程堆棧和進程堆棧有什麼區別
- 25. 如何查看網站的Javascript堆棧?
- 26. 耙子中止!堆棧級別太深
- 27. 堆棧和堆以及平等測試
- 28. 校驗和VBScript中
- 29. 如何在C#.Net中查看堆棧和堆棧中的對象
- 30. Android網絡堆棧
校驗和是**不是** CRC:問題是特定於以太網(而不是**客戶端協議)。 – jldupont 2009-12-08 18:22:04
我鏈接到的文章沒有區分兩者。 – 2009-12-08 18:25:32
@Hassan Syed:那麼這篇文章並沒有涵蓋這裏的問題。 – jldupont 2009-12-08 19:55:20