본문 바로가기
CS/정보통신망

오류제어, 오류 검출 방식, 패리티 검사, 체크섬, CRC 방식, 귀환오류제어, 결정귀환 ARQ, 전진오류 정정

by Renechoi 2024. 5. 16.

1. 오류와 오류제어

 

데이터 전송에서 오류율은 전송된 비트 수와 비교한 오류 비트 수의 비율로 정의된다. 이는 보낸 데이터와 받은 데이터의 형태가 같아야 함을 의미하며, 만약 차이가 있다면 오류가 있다고 할 수 있다. 전자기 신호는 잡음으로 인해 간섭을 받을 수 있으며, 이는 신호의 형태나 타이밍을 바꿀 수 있다. 단일 비트 오류 또는 연속된 여러 비트 오류가 발생할 수 있으며, 실제 통신 매체에서는 잡음의 영향으로 메시지에 여러 비트가 추가되거나 반대로 몇 개의 비트가 없어질 수도 있다.

전송된 데이터가 목적지에 도달하지 않거나 시스템의 고장으로 인해 도달하지 못할 경우도 오류로 간주된다. 따라서 오류 제어 기법을 설계할 때는 이러한 점들을 고려해야 한다. 오류 제어 방식에는 전진 오류정정(forward error correction)과 후진 오류정정(backward error correction)이 있다. 전진 오류정정 방식은 송신 측이 전송할 프레임에 부가적인 정보를 첨가하여 오류를 검출 및 수정하는 방식이며, 후진 오류정정 방식은 수신 측이 오류를 검출하고 재전송을 요구하는 방식이다.

 

 

 

2. 오류 검출 방식

패리티 검사

패리티 검사는 전송문자마다 하나의 패리티 비트를 부가하여 오류를 검출하는 방식이다. 이 방식은 비동기식 전송에 적합하다. 패리티 검사는 '1'의 개수가 홀수 또는 짝수가 되도록 패리티 비트를 추가하는 방식으로, 수신 측에서 '1'의 개수를 세어 홀수 또는 짝수를 확인하여 오류를 검출한다. 패리티 검사는 단순 패리티 검사와 2차원 패리티 검사로 나눌 수 있다.

 

📌 2차원 패리티 검사 예시 

 

 

 


검사합


검사합(checksum)은 패리티 검사보다 더 정확한 오류검출을 제공하는 방법이다. 송신 측에서 검사합을 생성하고, 수신 측에서 검사합을 처리하는 과정이 필요하다. 이는 대다수의 컴퓨터 네트워크에서 사용되고 있으며, 데이터의 정확성을 보장한다. 

 

검사합 생성기는 전송할 데이터를 n비트 단위로 나눈 후 각각의 세그먼트를 더한 값을 검사합으로 만든다. 수신 측에서는 송신된 세그먼트를 모두 더한 후 송신된 검사합과 비교하여 오류를 검출한다.

 

📌 예: 'Networks' 전송시 

 

 


순환잉여검사

순환잉여검사(Cyclic Redundancy Check: CRC)는 블록 단위로 메시지를 전달하며 순환 코드를 사용한 검사 방식이다.

 

전송할 데이터가 다항식으로 표현되어 이를 생성 다항식으로 나누는 방식으로 이루어진다. CRC는 전송 비트의 다항식 표현을 이용하여 생성 다항식 G(X)로 나누고, 나머지 값이 0이 아니면 오류가 있는 것으로 판단한다. 이는 송신 측에서 생성한 CRC 코드와 수신 측에서 계산한 CRC 코드가 일치하는지 확인하여 오류를 검출하는 방식이다.

 

전송 비트를 다항식으로 표현하면, 예를 들어 \( M(X) = 00010111 \)은 다음과 같이 나타낼 수 있다.

\[ M(X) = X^4 + X^2 + X + 1 \]

생성 다항식 \( G(X) \)를 이용한 부호화는 다음과 같이 이루어진다. 예를 들어, 생성 다항식 \( G(X) \)가 \( X + 1 \)일 경우

1. \( M(X) \)를 \( X^m \)으로 곱하여 \( M'(X) \)를 생성:
\[ M'(X) = M(X) \cdot X^m = X^4 + X^2 + X + 1 \]

2. \( M'(X) \)를 \( G(X) \)로 나누어 나머지 \( R(X) \)를 구함:
\[ R(X) = M'(X) \mod G(X) \]

3. \( M'(X) \)와 \( R(X) \)를 합하여 부호화된 메시지 \( F(X) \)를 얻음:
\[ F(X) = M'(X) + R(X) \]

오류 검출은 수신 측에서 \( F(X) \)를 \( G(X) \)로 나누어 나머지가 0인지 확인하는 방식으로 이루어진다. 예를 들어, 전송 도중에 3개의 오류가 발생하여 \( X^7 + X^5 + X^2 + X + 1 \)이 된 코드 \( 10100111 \)을 받았다고 가정하면, 이를 \( G(X) \)로 나누어 다음과 같이 오류를 검출할 수 있다.

\[ \frac{X^6 + X^5 + X}{X + 1} = X^6 + X^5 + X^4 + X + 1 \]

이 과정에서 나머지가 0이 아니므로 오류가 있음을 판단한다.

 

 

 

 

 

 

3. 귀환 오류제어 

 

귀환 오류제어는 송신자와 수신자 간에 전방향 채널과 역방향 채널을 이용하여 오류를 제어하는 방식이다. 오류를 검출하고 이를 수정하기 위해 송신자와 수신자 간의 피드백 메커니즘을 활용한다. 귀환 오류제어는 오류의 결정 위치에 따라 결정귀환, 정보귀환, 복합귀환으로 나뉜다.

 



 

 

 


결정귀환

결정귀환 방식은 수신자에서 오류 여부를 결정하여 오류가 있을 경우 송신자에게 재전송을 요청하는 방식이다. 이 방식을 ARQ(Automatic Repeat reQuest)라고 하며, 주로 다음과 같은 세 가지 방법이 있다.

 

1. 정지-대기 ARQ (Stop-and-Wait ARQ)

송신자는 하나의 프레임을 전송한 후, 수신자로부터 ACK(수신 확인) 또는 REJ(수신 실패) 응답을 기다린다. 수신자가 프레임을 정확하게 수신하면 ACK를 송신자에게 보내고, 송신자는 다음 프레임을 전송한다. 오류가 발생하면 REJ를 보내어 송신자가 해당 프레임을 재전송하도록 한다.

 

구현이 단순하고 비용이 저렴하다. 전송 효율이 떨어진다. 

 


2. 연속적 ARQ (Continuous ARQ)

송신자는 여러 프레임을 연속적으로 전송하며, 수신자는 각 프레임에 대해 ACK 또는 REJ를 보낸다. 이 방식에는 두 가지 유형이 있다.

 

- Go-Back-N ARQ: 송신자는 N개의 프레임을 연속적으로 전송할 수 있으며, 오류가 발생하면 해당 프레임 이후의 모든 프레임을 재전송한다.

 

슬라이딩 윈도우를 사용한다. 

 

 

- Selective Repeat ARQ: 송신자는 오류가 발생한 특정 프레임만 재전송한다. 수신자는 오류 없는 프레임을 버퍼에 저장하여 효율적으로 처리한다.

 

 

 


3. 적응적 ARQ (Adaptive ARQ)

송신자는 네트워크 상태에 따라 프레임 크기와 전송 속도를 조정하여 전송 효율을 최적화한다. 오류율이 낮으면 긴 프레임을 전송하고, 오류율이 높으면 짧은 프레임을 전송한다.

 

 

 


정보귀환

 

정보귀환 방식은 수신자가 수신한 데이터 블록을 검토하고, 송신자에게 오류 정보를 피드백하는 방식이다. 전송된 블록이 재전송되어야 하는지 또는 다음 블록이 전송되어야 하는지에 대한 판단을 송신지국이 한다. 따라서 송신지국은 이를 판별하는 결정 기준을 갖고 있어야 한다. 일반적으로 두 가지 방법이 있는데, 첫째는 수신직으로부터 역방향 채널을 통해 수신된 블록을 송신측 버퍼에 있는 블록과 비교하는 방법이다. 둘째는 양쪽 지국이 서로 약속된 오류검출 코드를 갖고 있어서 이에 해당하는 BCC가 역방향 채널을 통해 전송되면 송신지국이 이 BCC와 비교하는 방법이다. 

 

 

수신자는 오류 여부를 판단하고, 오류가 있을 경우 해당 블록에 대한 재전송을 요청한다. 대표적인 정보귀환 방법으로는 에코 검사(Echo Check)와 루프 검사(Loop Check)가 있다.

 

1. 에코 검사

송신자가 데이터를 전송한 후, 수신자는 이를 수신하고 송신자에게 다시 전송한다. 송신자는 원본 데이터와 에코 데이터를 비교하여 오류를 검출한다.

2. 루프 검사

송신자는 데이터를 전송한 후, 수신자는 데이터를 검토하고 송신자에게 결과를 전송한다. 송신자는 수신자로부터 받은 결과를 바탕으로 오류를 검출하고 수정한다.

 

 


복합귀환

 

복합귀환 방식은 결정귀환과 정보귀환을 혼합한 방식이다. 이 방식은 두 가지 방법을 결합하여 더 높은 신뢰성을 제공한다. 예를 들어, 전방향 채널을 통해 데이터를 전송하고, 역방향 채널을 통해 오류 정보를 피드백 받는 방식이다. 이 방식은 다음과 같이 동작한다:

1. 결정귀환과 정보귀환 혼합

수신자는 데이터 블록을 수신하고, 오류가 발생하면 송신자에게 재전송을 요청한다. 동시에 수신자는 송신자에게 오류 정보를 제공하여 송신자가 필요한 조치를 취할 수 있도록 한다.

 

2. 복합 ARQ

송신자는 연속적으로 데이터를 전송하고, 수신자는 각 프레임에 대한 ACK 또는 REJ를 전송한다. 송신자는 수신자의 피드백을 바탕으로 재전송할 프레임을 결정한다.

결정귀환과 정보귀환의 조합으로 복합귀환 방식은 높은 오류 검출 및 수정 능력을 제공하며, 다양한 네트워크 환경에서 효과적으로 사용될 수 있다.

 

 

 

 

4. 전진 오류정정 

 

전진 오류정정(Forward Error Correction, FEC)은 수신 측에서 오류를 검출하고 수정할 수 있도록 하는 방식이다. 이 방식은 연속적인 데이터 흐름이 필요하고 역방향 채널을 제공하기 어려운 상황에서 많이 사용된다.

전진 오류정정은 데이터 프레임에 오류 정정 코드를 추가하여 전송하는 방식이다. 대표적인 오류 정정 코드로는 해밍(Hamming) 코드, 리드-뮬러(Reed-Muller) 코드, 리드-솔로몬(Reed-Solomon) 코드 등이 있다. 이 방식의 주요 특징은 다음과 같다.

 

1. 오류 검출 및 정정

수신 측은 송신된 데이터에 포함된 오류 정정 코드를 이용하여 데이터를 검토하고, 오류가 있으면 이를 수정할 수 있다.

2. 연속적인 데이터 흐름 제공

 전진 오류정정은 연속적인 데이터 흐름을 유지하는 데 적합하며, 역방향 채널을 사용하지 않아도 된다. 이는 특히 실시간 데이터 전송에 유리하다.

3. 오류 정정 코드 전송

데이터 프레임에 오류 정정 코드를 추가하여 전송함으로써, 수신 측에서 오류를 검출하고 수정할 수 있다. 해밍 코드, 리드-뮬러 코드, 리드-솔로몬 코드 등이 이러한 오류 정정 코드에 해당한다.

4. 효율성

전진 오류정정은 추가적인 오류 정정 코드를 전송하기 때문에 데이터의 전송 효율이 떨어질 수 있다. 그러나 역방향 채널이 필요 없다는 장점이 있다.

 

 

 


 

참고자료: 정보통신망 | 손진곤 (지은이) 한국방송통신대학교출판문화원 

 

반응형