검사합(checksum)은 어떠한 길이의 메시지에도 적용시킬 수 있는 오류 검출 기법이다.
메시지는 먼저 m비트의 유닛으로 나누어진다. 생성기는 그 다음 검사합이라는 메시지와 함꼐 전송되는 또다른 m비트의 유닛을 생성한다.
만약 새로운 검사합이 모두 0이면, 메시지는 받아들여진다.
10.4.1 개념
만약 (7,11,12,0,6)을 전송한다고 해보자.
그러면 검사합을 이용한다면
(7,11,12,0,6,36)을 전송한다. (36은 원래 숫자들의 합.)
5개의 숫자를 합한것과 36이 같으면 오류가 없다고 생각하고 합은 버린다. 아니라면 오류가 있는것!
1의 보수의 덧셈
앞의 예에서는 한가지 단점이 있다. 검사합을 제외한 모든 데이터는 4비트워드(15)보다 작다.
해결책으로는 1의 보수 연산을 사용하는 것이다. 이 연산에서는 0과 2^m-1사이의의 부호 없는 수를 m비트만을 사용하여 나타낸다.
수가 m비트보다 많으면 왼편에 남는 비트들은 m개의 오른편 비트들에 더해진다.
십진수 36은 100100이므로 아래와 같이 오른쪽 4비트와 나머지 왼쪽 비트들을 더해서 4비트의 숫자로 변환한다.
-> 10 + 0100 = 0110 = 6이다.
이렇게되면 (7,11,12,0,6,6)을 전송하면 된다.
검사합
보수의 합인 검사합을 전송하면 수신자의 작업을 보다 쉽게 만들 수 있다. 1의 보수 연산에서 숫자의 보수는 모든 비트의 보수화 작업을 통해 구할 수 있다.
모든 1을 0으로, 모든 0을 1로 바꾼다. = 2^m-1에서 그 수를 빼는것과 같다.
1의 보수 연산
서로의 보수인 양수0과 음수 0은
양수 0 = 000이라면 음수0 = 111 이다.
(7,11,12,0,6,36)의 예를 본다면
36=인 100100을 1의 보수화하면 10 + 0100 해서 6이라는 값을 얻는다. 이것은 0110인데 , 그 결과값에 1의 보수화를 하면 1001로
검사합 9를 얻는다. 0110과 1001은 서로의 보수 관계이다. checksum은 결국 9이다.
최종 전송하는것. (7,11,12,0,6,9)
검사합을 전송받고, 메시지를 16비트 워드로 나눈다. 모든 워드를 1의 보수연산을 해서 더했을때 검사합이 0이면 메시지를 받고 아니면 거부한다. (전부다 더한 36을 10+0100해서 6만드는데, checksum인 9와 더해서 0이 나와야 맞는 검사합이라는 뜻!)
10.4.2 검사합에 대해 다른 접근법.
2개의 숫자들이 전송중에 뒤바뀌는 경우 검사합은 이 오류를 감지할 수 없다. 그것은 각각의 데이터를 동일하게 취급하기 때문이다.
(데이터 항목의 순서는 계산에서 중요하지 않다는 뜻) 그걸 해결하기 위한 방법
플레처 검사합
플레처(Fletcher)검사합은 위치에 따라 각각의 데이터아이템에 가중치를 두고 나누어진다.
플레처 검사합은 8비트와 16비트 두가지 알고리즘이 있따.
1. 8비트 플래처는 8비트 데이터아이템으로 계산하여 16비트 검사합을 생성한다.
2. 16비트 플레처는 16비트 데이터아이템으로 계산하여 32비트 검사합을 생성한다.
8비트 플래처는 데이터 옥텟(바이트)로 계산되고, 16비트 검사합을 생성한다. 계산은 256(2^8) 모듈러 연산으로 이루어진다.
256모듈러 연산 : 중간결과가 256으로 나누어지고, 나머지가 남는것.
해밍거리 이용
t개의 오류를 correction하기 위해서는 2t+1의 최소 해밍거리가 필요하다.
s개의 오류를 Detection하기 위해서는 t+1개의 최소 해밍거리가 필요하구요.
10.5.2 XOR이용.
ㅜ
'데이터통신' 카테고리의 다른 글
데이터통신 11.2 데이터링크층 프로토콜 (0) | 2021.06.04 |
---|---|
데이터통신 11.1 데이터 링크제어 (0) | 2021.06.04 |
데이터통신 10.2 블록 코딩 (0) | 2021.05.31 |
데이터통신 10.1 오류검출과 오류정정 (0) | 2021.05.31 |
데이터통신 9.2 링크계층 주소지정 (0) | 2021.05.31 |