在資料鏈路層,我們對接受到的每一個幀都進行了回圈冗余檢測(CRC),CRC對整個幀的內容都檢測過了,而且失誤的概率很小,所以我們近似認為凡是經過CRC檢測的幀都是正確。同樣的,IP資料包就放置在幀內,也許被分割成了多個包放置在多個幀。那么既然CRC檢查幀無誤,也就說明IP資料包也沒有錯誤。那么當資料鏈路層的幀內的資料部分遞交給IP層,IP層直接將其重新轉發就行了,為什么要用首部和檢驗來檢查是呢?因為兩者解決的都是包內的位元位沒有錯誤的問題,既然CRC都做過了,為什么IP還要做,而且明顯首部和檢驗的檢查效果還沒有CRC好。(因為我認為資料的bit位會出現錯誤這種情況僅僅發生在信號在遠距離傳輸才會出現,就像CPU將資料從記憶體調到Cache時不會進行檢錯一樣,我認為在集成設備內部,資料傳輸是不會出錯誤的,所以資料鏈路層傳遞給IP層的資料絕對不會出錯,此時我認為IP的首部檢驗和完全是做了無用功,如果有錯,早就被CRC發現了,如果沒錯,也沒有解決實質性問題)
可靠傳輸需要解決:bit位出差錯,幀亂序到達,重復幀,丟失幀 這些問題
CRC可以認為已經解決了bit位出錯問題,那么IP協議,運輸層協議就應該集中注意力在解決幀亂序到達,重復幀,丟失幀這幾個問題。所以IP層完全沒必要去進行首部和檢驗。
還有一種說法:IP層并不考慮幀亂序到達,重復幀,丟失幀 這些問題,這些會使得網路中的路由器很復雜,成本提高。那么IP層干脆專心做路由選擇,把資料包內檢錯完全交給資料鏈路層這個手下來做。
簡言之:我認為CRC已經確保IP包首部不會出錯,那么在進行首部和檢測就沒有意義了。
真心希望各位高手指點一下。謝謝。
uj5u.com熱心網友回復:
資料鏈接層不一定只有以太網,而且這是歷史原因,要改也不行了
uj5u.com熱心網友回復:
CRC可以理解為有縮壓縮,雖然概率很小,但是有可能的:有多個位元組同時變了,計算出的CRC與正確的相同,這樣就檢測不出了uj5u.com熱心網友回復:
但是多個位元組同時改變導致最后的CRC結果還是正確的概率實在是太小了,一般我們好像是不去考慮的吧。如果幀正確,那么就算這個ip包被分割了,它的分部也也還是正確的,換句話說,整合起來也是正確的。IP只要保證包能正確轉發就行,其他的可靠性問題都不去管,所以為什么還要首部和檢測?
uj5u.com熱心網友回復:
Providing error control at the link layer is an optimization , never a requirement .TCP/IP只管網路層與運輸層,資料鏈接層有不同的實作
uj5u.com熱心網友回復:
This is because networking is an agreement between parties, that at different layers, we have different standards committees, and because there is politics and rivalry between those committees that prevents logical and beneficial outcomes.uj5u.com熱心網友回復:
我明白了,謝謝你的指點~轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/124030.html
標籤:網絡通信
上一篇:嵌入式linux系統4個lan口,如何識別成eth1,eth2,eht3,eht4的原理
下一篇:網路剪刀手無法啟動
