[네트워크] 오류 제어 방식 이란?(FEC, BEC, ARQ)

오류 제어 방식 이란?(FEC, BEC, ARQ)

오류 제어 방식에 대해 알아보자. 


통신에서 오류란?

송신한 데이터가 제대로 수신 측까지 가지 않았을 때 오류라고 한다.
오류의 원인에는 잡음(noise), 전송 기술, 채널 상태, 장비의 차이가 있다.


오류 제어 방식의 의미

데이터를 전송하는 과정에서 발생할 수 있는 오류를 감지하고 수정 또는 복구하는 방법.


오류 제어 방식의 종류

1. 오류 무시

2. 전진 오류 수정(FEC)
    - 해밍 부호 검사

3. 후진 오류 수정(BEC)
    - 패리티 검사
    - 블록 합 검사
    - 순환 중복 검사(CRC)

4. 검출 후 재전송(ARQ)
    - 정지 대기(stop and wait) 방식
    - go-back-N 방식
    - selective-request 방식

5. 반항 검사

- 링크 계층에서 가장 많이 사용하는 오류제어 방식은 검출 후 재전송(ARQ)다.
- 반항 검사는 잘 사용하지 않으므로 다루지 않는다.


1. 오류 무시


- 오류 무시 정의
오류 무시란 오류가 발생한 프레임을 수신 측에서 버리거나 상위 계층에게 떠넘겨서 상위 계층에서 알아서 처리하게 하는 것.

- 사용 예시
1. 100만큼 데이터를 보냈다고 했을 때, 20만큼 오류가 나더라도 상관 없을 때 사용.
2. 오류가 발생했던 데이터를 재전송 했을 때 시간이 지나 더 이상  수신 측에서 필요 없는 데이터일 때.
3. 음성 통신 같은 경우 내용 파악의 문제가 없으면 사용.


2. 전진 오류 수정(forward error correction)


- 전진 오류 수정(FEC) 정의
전진 오류 수정이란 일정 한 비트 수 이하로 오류가 발생하면 수신 측에서 스스로 정정할 수 있도록 하는 것. 일정 한 비트 수의 의미는 오류가 100비트 발생하면 수정하기 힘들지만 한 두 개 정도는 수정 할 수 있다는 뜻이다.
오류 무시를 해주기 위해서는 오류 정정 부호를 추가로 보내줘야 하며 패리티(parity)라고 부른다. 장점으로는 자동으로 수신 측에서 정정해서 편리하지만 패리티 정보까지 보내기 때문에 오버헤드가 발생해 전송 효율이 떨어짐. 
전송 효율은 다음과 아래와 같은 식으로 구할 수 있다. 
전송 효율 = 순수 데이터 / (순수 데이터 + 패리티 정보)

- 사용 예시
1. 수신 측에서 스스로 정정 할 수 있으므로 단반향 전송에 많이 사용 된다.(우주통신, 위성 통신, 심해 통신)
2. 디스크, 테이프를 사용하여 한번 읽은 데이터가 오류 발생 했을 때 되돌려서 다시 데이터를 읽으면 효율이 떨어지기 때문에 전진 오류 수정을 사용한다.


3. 후진 오류 수정(Backward Error correction)


- 후진 오류 수정(BEC) 정의
데이터 전송 과정에서 오류가 발생하면 송신 측에 재 전송을 요구하는 방식.
BEC 에는 3가지 방식이 있다.

- 패리티 검사
- 블록 합 검사
- 순환 중복 검사(CRC)

- 패리티 검사
간단한 오류 검사 검출 방법으로 패리티 비트를 프레임에 붙이는 방법.
패리티 검사에는 짝수 패리티 전송, 홀수 패리티 전송이 있다.
짝수 패리티는 한 워드에 전체 1의 개수가 짝수가 되도록 하고 홀수 패리티는 한 워드에 1의 개수가 홀수가 되도록 하는 거다.

1010100을 뒤에 패러티(0 or 1)를 붙여서 총 8비트를 전송한다고 치자.
1010100을 보내면 짝수 패러티가 되는 거고(1 이 총 4개)
10101000 을 보내면 홀수 패러티가 되는 거다.(1 이 총 3개)


- 블록 합 검사
패리티 검사는 8비트 하나만 전송을 했다면 블록 합 검사는 8비트 여러 개를 한번에 검사해서 가로 세로를 검사하는 기법이다.
예를 들어 아래처럼 4개의 데이터가 있다고 치자.
0000001
0000011
0000111
0001111

여기서 패러티 검사를 하면 아래와 같이 된다.
0000001 1
0000011 0
0000111 1   
0001111 0
1010101

이렇게 세로 가로를 검사해서 여러 개를 한번에 검사 할 수 있다. 하지만 이 방식은 여러 군데에서 오류가 발생하면 오류를 찾지 못하는 단점이 있다. 따라서 프레임 오류 검출을 할 때는 CRC 방식을 많이 사용한다.

- 순환 중복 검사(CRC)
데이터를 일정 크기로 나누고 각각 숫자로 취급하여 덧셈을 하는 방식인 check sum을 더 강화 시킨 기법이다.
CRC는 FCS(Frame check sequence)를 추가로 붙여서 전송한다.
FCS는 프레임을 하나의 숫자를 보고 이 숫자를 나눠서 나머지를 추가로 보내준다.


4. 자동 재 전송 요구 방식(automatic repeat request)


- 자동 재 전송 요구 방식(ARQ) 정의
오류가 발생한 프레임을 수신 측에서 감지(detect)하고 오류라면 재 전송을 자동으로 요구 한다. ARQ에는 3가지 방식이 있다.

- 정지 대기(stop and wait) 방식
- go-back-N 방식
- selective-request 방식

- 정지 대기(stop and wait) 방식
상대방에게 오류가 발생하지 않았다는 ACK이 오면 다음 프레임을 보내는 방식.
오류가 발생하지 않으면 ACK, 오류가 발생하면 NAK(Negative)

- go-back-N 방식
정지 대기(stop and wait)방식을 개선한 방식으로 연속적으로 프레임을 보낸다. 그럼 오류 발생을 어떻게 확인 할까? 예를 들어 10개의 프레임을 연속으로 보냈는데 3번째 까지 정상적으로 보내 졌고 4번째 프레임이 오류가 발생 했다고 치자. 수신 측에서는 4번째부터 다시 보내 달라는 REJ(N(r) = 4) 를 송신 측에 보내면 송신 측에서 4번째 프레임부터 10번째 프레임까지 다시 보낸다.

- selective-request 방식
go-back-N 방식을 개선한 방식으로 go-back-N 방식에서 4번째 오류 시 4번째부터 10번째 프레임까지 전부 다시 보낸 방면에 selective-request 방식은 오류 발생한 4번째 프레임만 만 재 전송 할 수 있다. 그런데 이 방식은 시간은 절약 되지만 4번째 프레임 때문에 1번째부터 10번째 프레임을 재 정렬 해야 하므로 번거로움이 있다. 또한 불확실성 때문에 go-back-N 방식을 많이 사용한다.

댓글

이 블로그의 인기 게시물

[Python] 파이썬 if문 사용법과 예제

[Virtual Box] 가상머신 에러 E_FAIL (0x80004005), (VERR_SUPLIB_PATH_NOT_CLEAN) 해결 방법