個人理解如下:
首先,資料鏈路層的校驗應該是必須的。
其次,考慮只有資料鏈路層的情況。如果只有資料鏈路層的校驗,我們接收到的資料可以理解為近似無差錯的傳輸,但還是可能存在差錯。後面兩種校驗可能進一步減小這種差錯的可能。
接下來看看其他兩層校驗的情況。
先確認前提,一是資料鏈路層存在校驗,二是已知透過資料鏈路層的校驗,(沒透過的話,直接丟包,後面兩層有無校驗都不影響),三是出現那種極小可能出現的情況,也就是透過資料鏈路層校驗,但是包存在問題。
如果只有IP層校驗,無法校驗段的正確,拋棄。
如果只有運輸層校驗,無法校驗IP首部的全部資訊。
另外,在接收端解封裝包的時候,都可能出錯,在IP層與運輸層增加校驗可以防止這種出錯。(當然,這種情況也是很少見)。
最後,如果3層校驗都有,接收到的資料包就一定是正確的?個人覺得:不是(未考證)。
PS:
-----------------
另外說說哲學:
首先每層加入校驗和,不得不說還有分層、對稱、透明的思想。
說說IPv6:
IPv6的報文頭,已經看不見校驗和。是不是20-80法則在校驗和上面的應用呢?
IPv6包的校驗是透過上下的校驗實現的。資料鏈路層對幀的校驗以及TCP/UDP對偽首部的校驗,不是說IPv6包沒有校驗機制!
參考資料:
個人理解如下:
首先,資料鏈路層的校驗應該是必須的。
其次,考慮只有資料鏈路層的情況。如果只有資料鏈路層的校驗,我們接收到的資料可以理解為近似無差錯的傳輸,但還是可能存在差錯。後面兩種校驗可能進一步減小這種差錯的可能。
接下來看看其他兩層校驗的情況。
先確認前提,一是資料鏈路層存在校驗,二是已知透過資料鏈路層的校驗,(沒透過的話,直接丟包,後面兩層有無校驗都不影響),三是出現那種極小可能出現的情況,也就是透過資料鏈路層校驗,但是包存在問題。
如果只有IP層校驗,無法校驗段的正確,拋棄。
如果只有運輸層校驗,無法校驗IP首部的全部資訊。
另外,在接收端解封裝包的時候,都可能出錯,在IP層與運輸層增加校驗可以防止這種出錯。(當然,這種情況也是很少見)。
最後,如果3層校驗都有,接收到的資料包就一定是正確的?個人覺得:不是(未考證)。
PS:
-----------------
另外說說哲學:
首先每層加入校驗和,不得不說還有分層、對稱、透明的思想。
說說IPv6:
IPv6的報文頭,已經看不見校驗和。是不是20-80法則在校驗和上面的應用呢?
IPv6包的校驗是透過上下的校驗實現的。資料鏈路層對幀的校驗以及TCP/UDP對偽首部的校驗,不是說IPv6包沒有校驗機制!
參考資料:
why there is separate checksum in TCP and IP headers?