計算機網路 - 差錯檢測與糾正



在資料傳輸過程中,噪聲、串擾等多種原因都可能導致資料損壞。上層協議基於網路架構的某種通用檢視工作,並不瞭解實際的硬體資料處理過程。因此,上層協議期望系統之間的資料傳輸無誤。如果接收到的資料有誤,大多數應用程式將無法按預期工作。語音和影片等應用程式可能不會受到太大影響,即使存在一些錯誤,它們仍然可以正常執行。

資料鏈路層使用一些差錯控制機制來確保幀(資料位元流)以一定的精度傳輸。但是,要了解如何控制錯誤,必須瞭解可能發生哪些型別的錯誤。

錯誤型別

可能有三種類型的錯誤

  • 單位元錯誤

    Single bit error

    在一個幀中,只有一個位元(無論在何處)被損壞。

  • 多位元錯誤

    Multiple bits error

    接收到的幀中有多個位元處於損壞狀態。

  • 突發錯誤

    Burst error

    幀包含多個連續損壞的位元。

錯誤控制機制可能涉及兩種方法

  • 錯誤檢測

  • 錯誤糾正

錯誤檢測

接收到的幀中的錯誤透過奇偶校驗和迴圈冗餘校驗 (CRC) 來檢測。在這兩種情況下,都會與實際資料一起傳送一些額外的位元,以確認接收端接收到的位元與傳送時相同。如果接收端的反向檢查失敗,則認為位元已損壞。

奇偶校驗

傳送一個額外的位元與原始位元一起傳送,使1的個數在偶校驗的情況下為偶數,在奇校驗的情況下為奇數。

傳送方在建立幀時會計算其中1的個數。例如,如果使用偶校驗並且1的個數為偶數,則新增值為0的一個位元。這樣,1的個數保持為偶數。如果1的個數為奇數,則新增值為1的一個位元以使其為偶數。

Even Parity

接收方只需計算幀中1的個數。如果1的個數為偶數且使用偶校驗,則認為幀未損壞並被接受。如果1的個數為奇數且使用奇校驗,則幀仍未損壞。

如果傳輸過程中單個位元翻轉,接收方可以透過計算1的個數來檢測它。但是,當多個比特出錯時,接收方很難檢測到錯誤。

迴圈冗餘校驗 (CRC)

CRC 是一種不同的方法來檢測接收到的幀是否包含有效資料。此技術涉及對要傳送的資料位元進行二進位制除法。除數使用多項式生成。傳送方對要傳送的位元進行除法運算並計算餘數。在傳送實際位元之前,傳送方會在實際位元的末尾新增餘數。實際資料位元加上餘數稱為碼字。傳送方將資料位元作為碼字傳輸。

CRC

在另一端,接收方使用相同的 CRC 除數對碼字執行除法運算。如果餘數包含全零,則接受資料位元;否則,則認為傳輸過程中發生了一些資料損壞。

錯誤糾正

在數字世界中,錯誤糾正可以透過兩種方式完成

  • 後向糾錯 接收方檢測到接收到的資料中存在錯誤時,它會請求傳送方重新傳輸資料單元。

  • 前向糾錯 接收方檢測到接收到的資料中存在一些錯誤時,它會執行糾錯碼,這有助於它自動恢復並糾正某些型別的錯誤。

第一種,後向糾錯,很簡單,只有在重新傳輸成本不高的情況下才能有效使用。例如,光纖。但在無線傳輸的情況下,重新傳輸的成本可能過高。在這種情況下,使用前向糾錯。

為了糾正資料幀中的錯誤,接收方必須準確知道幀中哪個位元已損壞。為了定位錯誤的位元,冗餘位元用作奇偶校驗位元進行錯誤檢測。例如,我們採用 ASCII 字(7 位資料),那麼我們需要 8 種資訊:前七位告訴我們哪個比特出錯,還有一位告訴我們沒有錯誤。

對於 m 個數據位元,使用 r 個冗餘位元。r 個位元可以提供 2r 種資訊組合。在 m+r 位元碼字中,r 個位元本身也可能被損壞。因此,使用的 r 位元數必須告知 m+r 位元位置以及無錯誤資訊,即 m+r+1。

Required bits
廣告