Search
Duplicate

Parity Bit (패리티 비트)

간단소개
데이터 통신을 할 때 오류 감지 코드 중 하나인 Parity Bit에 대해 알아보자
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Network
Scrap
태그
network
수학
9 more properties
통신을 할 때 우리는 모든 데이터가 온전하게 전해지길 원합니다. 하지만 현실은 생각만큼 원하는대로 돌아가지 않기 마련입니다. 데이터가 전송하던 도중 내용 일부가 사라질 수도 있고, 엉뚱한 내용으로도 바뀔 수 있습니다. 이렇게 데이터가 온전하게 전송되지 않을 때, 다양한 방지책이나 해결책이 존재합니다. 이번에는 그 중에서 비교적 간단한 Parity Bit에 대해서 이야기 하고자 합니다.

Parity Bit

Parity Bit는 그대로 해석하자면 홀짝 비트로, 데이터 안에 1의 값을 가진 bit들이 홀 또는 짝이 되도록 하는 비트를 뜻합니다.
자세히 설명하자면, 데이터의 전체 bit들 중 1의 값을 가진 bit들을 더했을 때, 그 갯수가 홀수 혹은 짝수가 되도록 해주는 비트가 바로 Parity Bit입니다. 이진 코드를 전달하는 과정에서 코드를 온전하게 전달되었는지 확인할 수 있게 도와주는 오류 감지 코드 중 하나입니다.

Parity Bit 계산법

Parity Bit를 계산하는 법은 간단합니다
짝수 패리티: 0101010 -> 1 + 1 + 1 (mod 2) = 1 => parity bit = 1 => 01010101 홀수 패리티: 0101010 -> 1 + 1 + 1 (mod 2) = 1 => parity bit = 0 => 01010100
JavaScript
복사
먼저 Parity Bit까지 합하는 것까지 고려하여 짝수 패리티인지 홀수 패리티인지를 정합니다.
보낼 데이터의 bit들 중 1의 값을 가진 bit들을 전부 더해줍니다.
그다음 더한 값에서 나누기 2를 하여 나온 나머지를 확인 합니다.
나머지를 확인한 후 맨 위에서 정해둔 홀짝 중 원하는 쪽이 되도록 Parity Bit를 계산합니다.
보낼 데이터 맨 뒤에 해당 bit를 붙이면 됩니다.

에러 확인

짝수 패리티로 진행된다고 가정할 때, 올바른 데이터일 때 확인 과정은 다음과 같습니다.
클라이언트가 보낼 데이터: 0101010 Parity Bit 추가: 0101010 + 1 -> 1 + 1 + 1 + 1 (mod 2) = 0 클라이언트 -> 서버 전송 서버가 받는 데이터: 01010101 Parity 계산: 01010101 -> 1 + 1 + 1 + 1 (mod 2) = 0 서버 -> 클라이언트 올바른 수신 확인
C
복사
반면, 전송 중 데이터가 변경되었을 때 확인 과정은 다음과 같습니다.
클라이언트가 보낼 데이터: 0101010 Parity Bit 추가: 0101010 + 1 -> 1 + 1 + 1 + 1 (mod 2) = 0 클라이언트 -> 서버 전송 데이터 1개 변조 및 유실 서버가 받는 데이터: 01010111 Parity 계산: 01010111 -> 1 + 1 + 1 + 1 + 1 (mod 2) = 1 서버 -> 클라이언트 데이터 전송 오류
C
복사

Parity Bit의 장단점과 쓰임새

Parity Bit는 데이터의 크기와는 상관없이 짝수 혹은 홀수 패리티가 될 수 있게하는 bit 하나만 추가하면 되기에 추가적인 데이터가 가벼우며, 생성하는데 복잡한 알고리즘을 거칠 필요가 없기 때문에 부하가 적게 듭니다.
하지만 에러가 발생한 부분을 정확히 알 수 없고 수정 또한 불가능하기 때문에, 에러가 발생한 데이터에 대해서는 데이터 전체를 폐기하고 처음부터 다시 수신을 받아야만 합니다.
그리고 데이터 변경이나 유실이 짝수 단위로 일어나면 에러를 정확히 탐지 하지 못합니다.
클라이언트가 보낼 데이터: 0101010 Parity Bit 추가: 0101010 + 1 -> 1 + 1 + 1 + 1 (mod 2) = 0 클라이언트 -> 서버 전송 데이터 2개 변조 및 유실 서버가 받는 데이터: 11010111 Parity 계산: 11010111 -> 1 + 1 + 1 + 1 + 1 + 1 (mod 2) = 0 서버 -> 클라이언트 올바른 수신 확인
C
복사
때문에 단순한 작업을 반복하거나 복잡한 데이터를 가지지 않고 오류를 감지하는 것 만으로도 도움이 되는 환경에서 주로 쓰입니다. 모뎀간의 통신이나 PCI 버스, I/O 버스 등 하드웨어에서 주로 사용됩니다.

출처

parity bit
혹시 잘못된 부분이 있다면 댓글로 지적 부탁드립니다!