在乙太網中,CRC幀校驗可以省略嗎?

比如一個數據包從網卡發送至路由器,網卡由於故障或其他原因,未在數據幀尾部加上CRC校驗碼,那路由器收到這個幀後會如何來處理?


網卡最先接收 7 Byte Preamble + 1 Byte SD,即認為這8 byte之後的數據為乙太網幀,直到一個幀結束。

Ethernet 2 幀格式

眾所周知,網卡第一步會校驗CRC是否正確,由於Ethernet 2 的幀頭沒有提供Payload的長度,所以網卡默認幀尾的4Byte 為FCS,這4個Byte其實是Payload數據,自然會校驗錯誤,丟棄。

802.3 幀格式

幀頭有長度欄位,可以確定Payload的長度,但是除了Payload,卻發現CRC為空,丟棄。

數據在傳輸過程中最容易出現CRC錯誤就是數據鏈路層,CRC校驗不能省略。

有些交換機採用的快速交換(cut-forward),即只要接收一個幀的前64byte(滿足最小幀長),就交換到出口,並沒有進行CRC校驗,直到到達網關才被完整接收,CRC錯誤才會被發現並丟棄。

對於線路質量不好的環境,應該採用 store-and-forward 模式,即交換機接收完整的幀,校驗完畢再轉發出去,可以儘早發現CRC錯誤!


看你的轉發模式,如果是cut-through轉發的話,那麼不檢測CRC,直接檢測數據包的下一跳MAC地址,然後轉發即可,這個在高速網路中比較試用。但是有兩個前提,1)傳輸鏈路質量較好,一般光纖鏈路的物理層質量都是比較好的,一些乙太網線也是較好的信道環境,所以會存在cut-through的設計,而無線網路環境較差,所以工程協議中都是基於CRC和ACK反饋的機制來做。只有最新的一些研究才考慮到cut-through轉發。2)鏈路較短,如果中間節點較多的話,如果都是cut-through的話,那麼有可能在第二,三跳就發生的錯誤,會在最終節點才被上層發現,導致中間鏈路一直都在傳錯誤的數據包,從而大量的鏈路帶寬浪費就會出現。所以根據是用場景的話,如果用cut-through來排除二層的CRC的話,那麼也是需要利用上層的CRC補充的,若鏈路太長,這個補充的時間間隔太久,那麼就會造成信號質量下降了。


推薦閱讀:

通信工程專業有哪些就業方向?有哪些比較好的未來發展方向?
學通信工程的女生有什麼前途?可以朝什麼方向發展?
teamviewer 工作原理是什麼?
ISIT 2017 有哪些值得關注的亮點?
為什麼我的移動手機號碼幾乎收不到大多數網站跟App的簡訊驗證碼?

TAG:通信 | 計算機網路 | 乙太網Ethernet | 數據鏈路層 |