*패리티 비트
정의: 정보 전달 과정에서 오류가 생겼는지 검사하기 위해 추가하는 비트
사용법: 전송하고자 하는 데이터의 각 문자에 1 비트를 더해 전송한다.
예를들어서 "김민수" 라는 데이터가 있으면
김에 +1 = 8+1 = 9비트
지에 +1 = 8+1 = 9비트
연에 +1 = 8+1 = 9비트
이런식으로 각 문자에 1비트를 더해서 전송한다.
종류: 짝수패리티, 홀수패리티
종류는 전송 시스템이나 프로토콜 설계하거나 설정할 때 미리 결정됨
송, 수신측에서 같은 규칙을 따를 수 있도록 사전에 합의 해야함
짝수패리티가 짝수개수를 다루기 쉬워서 일반적으로 더 많이 사용됨
종류는 전체 비트에서 1이 짝수개인지 홀수개인지에 따라 종류가 나뉜다는 의미이다.
전체 비트에서 1의 개수가 (짝수, 홀수)에 맞도록 비트를 정하는 것
[짝수 패리티]
짝수 패리티 일 때 7비트 데이터가 1010001 (7자)라면?
1이 총 3개이므로, 1을 짝수로 맞춰주기 위해 1을 더해야 함
만약 1의 개수가 짝수개라면? 0을 맨뒤에 추가한다.
=> 11010001 (맨 앞이 패리티비트) (8자)
[홀수 패리티]
만약 데이터가 1010110이고, 1의 개수가 짝수라면, 홀수 패리티에서는 1의 개수가 홀수가 되도록 패리티 비트를 정해야함.
따라서 1을 추가해야함 1은 맨뒤에 추가함
만약 1의 개수가 이미 홀수라면, 패리티 비트로 0을 추가해 홀수를 유지한다.
=> 10101101
지금 사이트에 있는 방식은 맨 앞에 추가하는 방식인데,
패리티 비트를 맨 앞에 추가하는 것은 흔하지 않은 방식이고, 대부분 시스템이서는 패리티 비트를 맨 뒤에 추가함. 이것이 표준임.
이런 방식으로 검사하는 패리티 비트는 데이터를 수신 하는 쪽, 송신하는 쪽 모두에서 이뤄짐.
만약 규칙이 맞지 않을 경우, 수신된 데이터에 오류가 발생한 것이라고 간주하고 처리함.
오류가 발견되면 데이터 재전송을 요청하거나 오류를 알림.
앞에서 본 것처럼 패리티 비트는 단순한 오류 검출 매커니즘이라, 하드웨어나 소프트웨어에서 간단하게 구현할 수 있음
이 검사 과정은 보통 데이터 링크 계층이나 전송 계층에서 이뤄지고, 네트워크 카드나 모뎀, 통신 프로토콜 등에서 처리함
그러나,
패리티 비트는 1비트 오류만 검출할 수 있고, 2비트 이상의 오류는 검출하지 못하는 한계가 있다.
예를들면,
원래 데이터가 1010001 이고, 짝수 페리티를 사용하는 경우 전송데이터는 10100011이 되는데,
만약에 2비트 오류가 11100010 이런식으로 발생한 경우, 수신측에서 오류가 없다고 판단할 수 있음.
또한 오류의 위치도 파악할 수 없음
그래서 보다 복잡한 오류 검출 및 수정이 필요한 경우 CRC(Cyclic Redundancy Check), 해밍 코드 등의 다른 오류 검출 방식이 사용됨.
*해밍코드
정의:데이터 전송 시 1비트의 에러를 정정할 수 있는 자기 오류정정 코드를 말한다.
페리티비트를 보고, 1비트에 대한 오류를 정정할 곳을 찾아 수정할 수 있다.
(패리티 비트는 오류를 검출하기만 할 뿐 수정하지는 않기 때문에 해밍 코드를 활용함)
사용법: 2의 n승 번째 자리인 1, 2, 4번째 비트가 패리티 비트라는 것 부터 시작함.
이 숫자로부터 시작하는 세개의 패리티 비트가 짝수인지, 홀수인지 기준으로 판별함.
1, 2, 4 번째의 각 패리티 비트들은 데이터 내의 특정 비트 집합을 검사하는데,
이때 비트 집합은 다음과 같다.
1=> 1, 3, 5, 7 번째 비트 확인
2=> 2, 3, 6, 7번째 비트 확인
4=> 4, 5, 6, 7번째 비트 확인
비트를 확인할 때 앞에서 부터 읽는다.
0011011
-> 이 방향 (1번째 비트 부터 시작)
짝수 패리티의 해밍코드가 0011011일때 오류가 수정된 코드는?
1. 1, 3, 5, 7 번째 비트 확인: 0101로 짝수이므로 '0'
2. 2, 3, 6, 7번째 비트 확인: 0111로 홀수이므로 '1'
3. 4, 5, 6, 7번째 비트 확인: 1011로 홀수이므로 '1'
역순으로 패리티 비트 110을 도출할 수 있음
10진법으로 바꾸면, 6으로, 6번째 비트를 수정하면 됨
0011001