作者raychin4563 (阿謙)
看板b99902HW
標題[課程][ CN ]checksum
時間Tue Nov 27 22:11:11 2012
checksum
-------------------------------------------------------------
checksum是在封包中,用來確認傳送過來的封包有沒有bit error的機制
其作法是將整個封包切成兩個byte一組,然後加總
如果算出來的值跟checksum一樣,那就可以說封包沒有bit error
(當然也有極低的機率checksum與bit error同時發生,且算出來還是相等
但是就~無法XD)
沒有checksum的設計
-------------------------------------------------------------
那如果我們不要使用checksum時,要怎麼辦呢?
利用另外一個byte來當作要不要使用的紀錄?
這樣太麻煩了
於是直接使用checksum自己來決定
定義checksum = 0000 0000 0000 0000時為不使用checksum
可是這樣一來整個packet加起來的值等於0的狀況要怎麼辦?
於是令checksum = 1111 1111 1111 1111時為packet加起來的值等於0的狀況
這種做法是使用1's complement的數字表示法
_ _
(-x = x,而不是-x = x+1 //要+1的是2's complement的數字表示法)
而這種表示法,在做加減時,溢位的1要加回去(wrap around)
EX:
1's complement 表示法 | 10進位表示法
1111 1111 1111 1111 | 0
+)0000 0000 0000 0001 | +) 1
--------------------- | ----
10000000000000000000 | 1
加回去: 0000000000000000001 |
為何最後還要再取1's complement?
-------------------------------------------------------------
在整個packet加總時不會加到checksum的值(因為還沒算出來啊~)
_
假設加總出來的值是x,那麼令checksum = x
則receiver在收到packet時,假設沒有bit error的情況下
把所有的2byte的組合加起來時算式為:
_
x + x = 1111 1111 1111 1111
故receiver只要把所有2byte的組合加起來,然後看是不是等於1111 1111 1111 1111
就可以知道packet有沒有發生bit error
P.S.順便問一下,因為老師叫我記錄上課問過的問題,然後寄給她
好像會做為考試的參考~
想問大家要每次上完課就PO,還是考試前一次PO?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.143
※ 編輯: raychin4563 來自: 140.112.30.143 (11/27 22:12)
※ 編輯: raychin4563 來自: 140.112.30.143 (11/27 22:13)
推 cmy1027:我才不會推呢 亨 11/27 22:26
推 q22554647:推~ 11/27 23:14
推 bztfir:秦睿喪 11/28 10:52
推 a123zyx:看你方便吧 11/29 20:16
推 chiang9804:推 都可以~感謝! 12/02 10:19