當一個數據包從源發送到目的地時,它必須通過多個路由器,每個路由器將數據包的TTL值減1。因此,在每個路由器上重新計算頭校驗和,因爲一個頭域的TTL肯定會改變。那麼目的地如何通過計算校驗和來驗證錯誤的存在,儘管它的校驗和已經改變了,而不是校驗和的校驗和?IPV4頭校驗和驗證
回答
如果路由器丟棄數據報,則每個路由器計算並驗證路由前的校驗和。
當數據包離開源時,它有一些初始的TTL和(希望)有效的校驗和。
當數據包到達路由器時,路由器只檢查IPv4報頭校驗和。如果不正確,則丟棄數據包。如果它是正確的,它(1)遞減TTL; (2)檢查TTL高於零(否則數據包被丟棄),(3)計算並填充新的IP頭校驗和。有趣的是,新的校驗和可以直接從舊的校驗和和舊的和新的TTL值中計算出來,並且有一些聰明的算術:https://tools.ietf.org/html/rfc1624,所以再次讀取整個IPv4頭是沒有必要的。
請注意,IPv6具有跳數限制(與TTL類似),但不包含頭校驗和。
tnx爲正確的順序,對路由器的操作!還有一個問題,如果沒關係。如果ttl = 0並且16位標頭中存在校驗和問題,這是否意味着ICMP將向源發送TTL錯誤?由於路由器中的操作順序? –
首先執行校驗和驗證。確切的算法在https://www.rfc-editor.org/rfc/rfc1812.txt第5.2.1.1節中描述。根據http://www.ietf.org/download/rfc-index.txt,它仍然適用(「狀態:最佳當前實踐」),但它有點老(1995年)。 – o9000
- 1. 驗證IP標頭和TCP標頭的校驗和
- 2. 的IPv6驗證和IPv4驗證在JavaScript
- 3. IPv4校驗和與wireshark相矛盾
- 4. Ipv4驗證Jquery
- 5. TCP報頭和校驗和
- 6. IP標頭校驗和:0x0000
- 7. PdfSharp.SharpZipLib.SharpZipBaseException - 頭校驗和非法
- 8. ICMP頭和IP頭校驗和計算
- 9. Xades-BES驗證爲校驗和
- 10. 使用binascii.crc32()驗證校驗和()
- 11. 驗證IPv4,IPv6和主機名稱
- 12. Jquery校驗和
- 13. 計算ICMPv6頭的16位校驗和
- 14. 在ICMP頭校驗和計算中?
- 15. maven:「校驗和校驗失敗,沒有可用的校驗和」,爲什麼?
- 16. JavaScript卡PAN校驗碼Luhn驗證
- 17. 在c中驗證模塊化總和校驗和#
- 18. 校驗和VBScript中
- 19. MD5/SHA1校驗和
- 20. 校驗和計算
- 21. 增量校驗和
- 22. OpenSSL SHA1校驗和
- 23. 校驗和解釋?
- 24. 驗證Inno Setup腳本中文件的校驗和?
- 25. Intranet與Internet應用程序中的校驗和驗證
- 26. 如何創建carrierwave上傳的校驗和來驗證下載?
- 27. 使用Xcode 5提交時校驗和驗證失敗
- 28. 使用校驗和驗證接收到的文件
- 29. 兩個大文件的python校驗和驗證
- 30. openssl中的rsa加密校驗和驗證?
這意味着首先路由器驗證校驗和,然後僅更改TTL值並重新計算校驗和值。 –
@Shubhamverma,是的。更重要的是,如果校驗和不正確,它就會丟棄它。如果它是正確的,則路由器對其進行處理:檢查路由表並學習下一跳,它減少TTL,重新計算校驗和,然後將其發送到下一跳。一般來說,出於性能原因,校驗和計算被卸載到NIC。 – rodolk