A. 數據傳輸過程中可能會出錯,怎樣可以檢測出數據中那一位在傳輸中出了差錯
簡單檢驗
奇偶校驗(Parity Check)
bcc異或校驗法(Block check character)
crc循環冗餘校驗(Cyclic Rendancy Check)
md5校驗
奇偶校驗法:
數據傳輸以byte為單位,另加一個bit作為奇偶校驗位,共9個bits.用奇偶校驗位來發現在傳送過程中是否丟失了一位。
奇偶校驗法有偶校驗和奇校驗。即每一數據要包含偶數個或奇數個"開狀態"位。
假定某台計算機採用偶數(奇偶)校驗法,如果要將一個EBCDIC的字母A(它具有奇數個"開"位: 11000001)寫到磁帶上,那麼在傳送之前為了維持偶校驗,則需要增加一位奇偶位(即:111000001:偶數個"開"位),在將字元寫到磁帶之前,硬體自動計算"開"位的個數。如果計算機結果是奇數,則說明已經出現了奇偶校驗錯誤,發出警告。
絕大多數情況下,奇偶校驗法是有效的。但在數據傳輸崩潰情況下,也就是一個byte里會有兩個或以上以上bits同時出錯時,奇偶校驗法也無能為力,(它會頻繁報告錯碼,但也會漏報同時有2,,4,6,8個bits同時出錯的碼)。
byte -- 比特,1 byte = 8 bits
B. 漢明碼的校驗方法
如果一條信息中包含更多用於糾錯的位,且通過妥善安排這些糾錯位使得不同的出錯位產生不同的錯誤結果,那麼我們就可以找出出錯位了。在一個7位的信息中,單個位出錯有7種可能,因此3個錯誤控制位就足以確定是否出錯及哪一位出錯了。
漢明碼SECDED(single error correction, double error detection)版本另外加入一檢測比特,可以偵測兩個或以下同時發生的比特錯誤,並能夠更正單一比特的錯誤。因此,當發送端與接收端的比特樣式的漢明距離(Hamming distance)小於或等於1時(僅有1 bit發生錯誤),可實現可靠的通信。相對的,簡單的奇偶檢驗碼除了不能糾正錯誤之外,也只能偵測出奇數個的錯誤。
下列通用演算法可以為任意位數字產生一個可以糾錯一位的漢明碼:
1.從1開始給數字的數據位(從左向右)標上序號, 1,2,3,4,5...
2.將這些數據位的位置序號轉換為二進制,1, 10, 11, 100, 101,等。
3.數據位的位置序號中所有為二的冪次方的位(編號1,2,4,8,等,即數據位位置序號的二進製表示中只有一個1)是校驗位
4.所有其它位置的數據位(數據位位置序號的二進製表示中至少2個是1)是數據位
5.每一位的數據包含在特定的兩個或兩個以上的校驗位中,這些校驗位取決於這些數據位的位置數值的二進製表示
(1) 校驗位1覆蓋了所有數據位位置序號的二進製表示倒數第一位是1的數據:1(校驗位自身,這里都是二進制,下同),11,101,111,1001,等
(2) 校驗位2覆蓋了所有數據位位置序號的二進製表示倒數第二位是1的數據:10(校驗位自身),11,110,111,1010,1011,等
(3) 校驗位4覆蓋了所有數據位位置序號的二進製表示倒數第三位是1的數據:100(校驗位自身),101,110,111,1100,1101,1110,1111,等
(4) 校驗位8覆蓋了所有數據位位置序號的二進製表示倒數第四位是1的數據:1000(校驗位自身),1001,1010,1011,1100,1101,1110,1111,等
(5) 簡而言之,所有校驗位覆蓋了數據位置和該校驗位位置的二進制與的值不為0的數。
採用奇校驗還是偶校驗都是可行的。偶校驗從數學的角度看更簡單一些,但在實踐中並沒有區別。校驗位一般的規律可以如下表示:
觀察上表可發現一個比較直觀的規律:第i個檢驗位是第2i-1位,從該位開始,檢驗2i-1位,跳過2i-1位……依次類推。例如上表中第3個檢驗位p4從第23-1=4位開始,檢驗4、5、6、7共4位,然後跳過8、9、10、11共4位,再檢驗12、13、14、15共4位……