資料連結層

同位位元(parity bit)

假設你在一條雜訊很多的電話線上,向朋友念一串是/否的答案,並希望他能察覺自己是否聽錯了一個。有個簡單的招數:念完答案後,你再粗略地告訴他總共有幾個「是」——比方說,「是」的數目是偶數還是奇數。如果他算出來的奇偶性和你說的不一樣,他就知道自己至少聽錯了一個。同位位元正是這樣:在一塊資料後面多加一個位元,用來記錄這塊資料裡 1 的個數是偶數還是奇數。

具體來說,採用偶同位時,發送方數出資料裡 1 的個數,再設定同位位元,使得 1 的總數(資料加同位)為偶數。送 1011001,裡面有四個 1,同位位元設為 0(總數仍是偶數);送 1011000,裡面有三個 1,同位位元就設為 1,湊成四個。接收方重新數 1 的個數;若總數變成奇數,就表示某處有一個位元翻轉,這份資料被拒收。這是最便宜的錯誤偵測方案:一個位元、一次計數。

它誠實的極限相當嚴重。單一同位位元能偵測任何「奇數個」翻轉的位元,卻完全被「偶數個」翻轉騙過——翻兩個位元,同位不變,錯誤就溜了過去。它也無法指出「哪一個」位元錯了,所以什麼都修不了。這就是為什麼真正的連結會用更強的檢查,像是網際網路檢查碼或 CRC;同位位元主要存活在記憶體晶片裡,以及作為教學範例,有時排成二維格狀,可以定位、甚至修正單一位元的錯誤。

對 1010101(四個 1)採用偶同位:同位位元 = 0,因此送出 10101010。若雜訊翻轉了一個位元,接收方看到 10101011,這時數出五個 1——奇數——便拒收訊框。但若翻轉了「兩個」位元,個數仍是偶數,錯誤就偵測不到。

翻一個會被抓到;翻兩個就溜過去。這就是同位位元的硬性極限。

單一同位位元只能偵測奇數個錯誤,且無法修正任何錯誤。同時翻轉兩個位元對它而言是隱形的——這正是它成為最弱偵測器、且少有真實連結只靠它的原因。

又称
parity check同位檢查