♾️ Computer Science/네트워크

[Network] 전송 오류 제어 (Error Control)

nerowiki 2024. 4. 25. 07:12
728x90

💡 오류 제어란

전송된 데이터의 오류를 검출 및 정정하는 방법입니다.

 

💡  오류 제어 방식 종류

  단순 방식

오류 검출, 정정 기능이 없습니다. 동일 프레임 반복 전송으로 보완합니다.
소실 및 왜곡에도 큰 문제가 아닐 경우 무시합니다.

 

1️⃣ 루프 / 에코 방식

Loop / Echo

 

  순방향 오류 수정

FEC ; Forward Error Correction
수신 측에서 발생한 오류를 검출하여 검출된 오류를 재전송 요구 없이 스스로 수정하는 방식입니다.
오류 검출 및 정정을 위해 잉여비트를 추가합니다. 
데이터 오류 검출 시 데이터를 복원합니다. (많은 에러 발생 시 불가능)

 

1️⃣ Hamming 코드 방식 

수신 측에서 오류가 발생한 비트를 찾아 재전송을 요구하지 않고 직접 수정합니다.
1 비트의 오류 수정도 가능합니다. 
검출 가능 에러 = Hamming distance - 1
정정 가능 에러 = (Hamming distance - 1) / 2

 

2️⃣ 상승 코드 방식

여러 개의 비트 오류가 있어도 한계 값, 순차적 디코딩을 이용해 모두 수정 가능합니다.
Hamming 코드처럼 검출과 정정이 가능합니다.

 

  역방향 오류 수정

BEC ; Backword Error Correction
전송된 데이터에 오류가 발생할 경우, 송신 측에 재전송을 요청해 오류를 수정하는 방식입니다.

 

1️⃣ Parity Check

전송비트에 1비트의 패리티 비트(검사 비트)를 추가하여 에러 발생 유무를 판별합니다.
홀수 패리티 검사를 한다면 1의 수가 홀수여야 합니다.
짝수 수직 패리티 검사를 블록 합 검사 Block Sum Check라고 합니다.

 

2️⃣ 순환 잉여 검사 (CRC ; Cyclic Redundancy Check)

다항식을 통해 산출된 값을 토대로 오류를 검사하는 방식입니다.
다항식 코드를 사용하여 에러 발생 유무를 판별합니다.
집단 오류 검출이 가능하고 검출률이 높아 HDLC 프레임의 FCS에 사용합니다.

 

3️⃣ 블록 합 검사 (Block Sum Check)

블록의 맨 마지막에 수평 방향으로 패리티 비트를 부여하여 에러 발생 유무만 판별합니다.
수평 패리티 체크, 세로 중복 검사 LRC, Longitudinal ㄲedundancy Check라고도 합니다.

 

💡  ARQ

Automatic Repeat reQuest
수신 측에서 수신한 정보에 오류가 있을 경우, 송신 측에 재전송을 요청해 오류를 제어하는 방식

 

✅  정지-대기 ARQ

Stop-and-Wait ARQ
수신 측 응답이 올 때까지 대기, Time-out 시 프레임을 재전송합니다.
구현이 간단하지만, 프레임 전송할 때마다 응답을 기다려 전송 효율이 낮습니다.
ex. IBM의 BASIC(BSC)

 

  연속적 ARQ

Continuous ARQ
정지 대기 ARQ 가 갖는 오버헤드를 줄이기 위해 연속적으로 데이터 블록을 보냅니다.

 

1️⃣ Go-Back ARQ

수신 측에서 부정 응답(NAK)을 보내면 오류가 발생한 블록 이후 모든 블록을 재전송합니다.
전송 오류가 발생하지 않으면 쉬지 않고 송신이 가능합니다.
ex) HDLC, SDLC

 

2️⃣ Selective-Repeat ARQ (SR ARQ)

수신측에서 부정 응답(NAK)을 보내면 송신측에서 오류가 난 부분의 프레임만 재전송합니다.
수신측에서 오류가 난 프레임을 재전송 받을 때까지, 이후 프레임을 버퍼에 담아 재조립하는 과정이 필요합니다. 
ex) HDLC

 

✅  적응적 ARQ

Adaptive ARQ
데이터 블록의 길이를 채널의 상태에 따라 동적으로 변경하는 방식입니다.
수신측은 오류 발생률을 판단해 송신측에 통보합니다.
송신측은 오류 발생률에 따라 프레임 길이를 동적으로 조절합니다.
효율이 가장 좋으나 제어회로 복잡성과 고비용으로 거의 사용되지 않습니다.