본문 바로가기
네크워크 기초

오류 검출 및 정정(FEC: Forward Error Control)

by asd135 2023. 9. 20.
728x90

패리티 비트 검사(Parity Bit Check)

 

패리티 비트는 데이터에 추가되는 단일 비트로, 데이터의 1의 개수가 짝수인지 홀수인지에 따라 값이 결정. 


짝수 패리티: 전체 바이트(데이터 + 패리티 비트)에서 1의 개수가 짝수가 되도록 패리티 비트를 설정한다. 예를 들어,  데이터가 '1011001'이라면, 1의 개수가 4개(짝수). 따라서 여기에 추가되는 패리티 비트는 '0'이 된다.


홀수 패리티: 전체 바이트에서 1의 개수가 홀수가 되도록 패리티 비트를 설정한다. ('1011001')로 설명하면, 이 경우에는 추가되는 패리티 비트 값은 '1'.


데이터 수신 시, 수신자 측은 받은 데이터와 함께 전송된 패리티비트를 확인하여 오류 유무를 검사한다.

단점으로는 두 개 이상의 오류 발생 시 오류를 감지하지 못한다.

 


블록 합 검사(block check character, BCC)

 

 데이터 블록의 수평과 수직에 각각 패리티 비트를 추가하여 다수의 비트 오류를 검출

 

이 방식은 보내는 측에서 데이터 블록의 각 바이트를 더하고, 그 결과(볼록 합)를 데이터와 함께 보냄. 받는 측에서도 같은 방법으로 볼록 합을 계산하고, 보낸 볼록 합과 비교하여 일치하지 않으면 오류가 발생했다고 판단한다.

예를 들어, 'A', 'B', 'C' 세 글자로 이루어진 메시지를 전송한다고 가정했을 때. 각 글자에 해당하는 ASCII 코드값(65, 66, 67)을 모두 더한 값인 198을 함께 보낸다. 받는 쪽에서도 동일한 방식으로 볼록 합을 계산하고, 받은 볼록 합과 비교한다.

단점으로는 한 번에 여러 개의 오류가 발생했을 때 오류들을 모두 잡아내지 못할 수 있다.

 


해밍 코드(Hamming Code)

 

해밍 코드는 '패리티 비트'라는 특별한 비트를 추가하여 데이터에 오류가 있는지 확인을 한다. 하지만 패리티 비트가 단순히 추가되는 것이 아니라, 특정 위치에 배치됨.

이렇게 함으로 해밍 코드는 단순히 오류를 감지하는 것을 넘어, 어디에서 오류가 발생했는지도 알 수 있게 된다.

예를 들어, 4비트 데이터 '1101'을 전송한다고 했을 때. 해밍 코드를 사용하면 이 데이터에 패리티 비트가 추가되어 '0111001'로 변환된다. 만약 여기서 3번째 비트에 오류가 발생하여 '0111101'로 바뀌었다면, 패리티 비트를 확인함으로써 어디에서 오류가 발생했는지(3번째 위치) 알아낼 수 있다.

단점으로는 한 번에 많은 양의 오류를 처리하기 어렵다.

 


순환 중복(CRC: Cyclic Redundancy Check)

 

CRC에서는 데이터 블록을 특정 생성 다항식으로 나누는 과정이 필요한데, 이 나눗셈 과정은 XOR 연산을 사용하여 수행된다.

XOR 연산의 특성 상, 같은 값(0 또는 1)이 입력되면 결과가 0이 되고, 다른 값이 입력되면 결과가 1이 된다. 

전송하려는 데이터 뒤에 이 CRC 코드를 붙여서 함께 보낸다. 받는 쪽에서도 동일한 방식으로 CRC 코드를 계산하고, 받은 CRC 코드와 비교한다. 만약 두 값이 일치하지 않으면 오류가 발생했다고 판단한다.

예시로, 1011을 전송하는 경우 생성 다항식이 1101인 경우. 이 경우 1011을 1101로 나누면 나머지가 100이 된다. 원래의 데이터 뒤에 이 결과값을 붙여 '1011100'으로 변환하여 보내게 된다.

CRC 검사 방법은 간단한 오류부터 복잡한 오류까지 잘 감지할 수 있어 많은 프로토콜에서 활용된다.

 


출처: Tanenbaum A.S., Wetherall D.J., "Computer Networks", Fifth Edition Stallings W., "Data and Computer Communications", Tenth Edition, Forouzan B.A., "Data Communications and Networking", Fourth Edition

 

 

'네크워크 기초' 카테고리의 다른 글

FEC(Forward Error Correction), BEC(Backward Error Correction)  (0) 2023.09.22
ARQ(Automatic Repeat reQuest)  (0) 2023.09.21
통신 프로토콜의 구조  (0) 2023.09.19
OSI 7 계층 모델  (0) 2023.09.18
프로토콜의 기본 요소  (0) 2023.09.17