2016-04-14 149 views
1

當一個數據包從源發送到目的地時,它必須通過多個路由器,每個路由器將數據包的TTL值減1。因此,在每個路由器上重新計算頭校驗和,因爲一個頭域的TTL肯定會改變。那麼目的地如何通過計算校驗和來驗證錯誤的存在,儘管它的校驗和已經改變了,而不是校驗和的校驗和?IPV4頭校驗和驗證

回答

0

如果路由器丟棄數據報,則每個路由器計算並驗證路由前的校驗和。

+0

這意味着首先路由器驗證校驗和,然後僅更改TTL值並重新計算校驗和值。 –

+0

@Shubhamverma,是的。更重要的是,如果校驗和不正確,它就會丟棄它。如果它是正確的,則路由器對其進行處理:檢查路由表並學習下一跳,它減少TTL,重新計算校驗和,然後將其發送到下一跳。一般來說,出於性能原因,校驗和計算被卸載到NIC。 – rodolk

1

當數據包離開源時,它有一些初始的TTL和(希望)有效的校驗和。

當數據包到達路由器時,路由器只檢查IPv4報頭校驗和。如果不正確,則丟棄數據包。如果它是正確的,它(1)遞減TTL; (2)檢查TTL高於零(否則數據包被丟棄),(3)計算並填充新的IP頭校驗和。有趣的是,新的校驗和可以直接從舊的校驗和和舊的和新的TTL值中計算出來,並且有一些聰明的算術:https://tools.ietf.org/html/rfc1624,所以再次讀取整個IPv4頭是沒有必要的。

請注意,IPv6具有跳數限制(與TTL類似),但不包含頭校驗和。

+0

tnx爲正確的順序,對路由器的操作!還有一個問題,如果沒關係。如果ttl = 0並且16位標頭中存在校驗和問題,這是否意味着ICMP將向源發送TTL錯誤?由於路由器中的操作順序? –

+1

首先執行校驗和驗證。確切的算法在https://www.rfc-editor.org/rfc/rfc1812.txt第5.2.1.1節中描述。根據http://www.ietf.org/download/rfc-index.txt,它仍然適用(「狀態:最佳當前實踐」),但它有點老(1995年)。 – o9000