作者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)
1F:推 cmy1027:我才不会推呢 亨 11/27 22:26
2F:推 q22554647:推~ 11/27 23:14
3F:推 bztfir:秦睿丧 11/28 10:52
4F:推 a123zyx:看你方便吧 11/29 20:16
5F:推 chiang9804:推 都可以~感谢! 12/02 10:19