Search
⚠️

Ch.15 Error Control Techniques

course
last review
mastery
none
progress
not started
date
2023/10/25
4 more properties
Previous chapter
앞 챕터에서는 에러가 없는 경우에 대해서만 살펴봤다.
하지만 에러가 발생한다면 어떨까?

Error Control Techniques

오류의 형태는 두 가지로 나타난다.
로스트 프레임
프레임이 아예 오지 않은 상태. 잡음 버스트는 프레임을 손상시키고 수신기는 프레임의 송신 사실을 인지하지 못한다.
오염된 프레임
프레임이 도착했으나 몇 비트가 에러가 난 상태. 수신기는 프레임이 수신되었음을 인지하지만 프레임의 몇몇 비트가 오류가 난 상태이다.
Transmission Error를 다루는 기본적인 방법은 ‘그냥 다시보내기’다. 아래 방법은 그 방법 중 하나이다.

Automatic Repeat Request || (ARQ)

리시버가 신뢰할수 없는 데이터를 신뢰할만한 데이터로 바꾸기 위해 센더에게 자동적으로 재전송을 요청하는 방법을 ARQ라고 한다.
오류 제어에 사용되는 기술은 4가지로 정리할 수 있다.
오류 검출
오류가 일어난 프레임을 확인하고 폐기한다.
긍정적 확인 응답
목적지에 오류 없이 성공적으로 수신한 프레임은 긍정적인 확인 응답을 송신측에 전송한다.
시간 만료 재전송
설정된 시간을 넘겨서까지 응답이 없을 경우 재전송한다.
부정적 응답에 의한 재전송
오류가 검출된 프레임에 대해 재전송한다.
이 4가지 방법을 다 합쳐서 ARQ라고 부른다.
ARQ는 에러 컨트롤을 하는 총체적인 방법으로써 신뢰할 수 없는 데이터를 신뢰할만한 데이터로 바꾼다는 것에 의의가 있다.

STOP-AND-WAIT ARQ

센더는 리시버에게 하나의 프레임만 전송한다.
하나의 프레임을 전송한 후 센더는 ACK를 기다린다.
리시버로부터 ACK가 올때까지 다른 데이터는 전송되지 않는다.
ACK는 ACK0과 ACK1로 나뉘어져 있으며, 수신측은 각 ACK를 교차로 보내어 순서를 확인하게 한다.
보내는 프레임에 에러가 난 상황
만약 프레임이 로스트되었을 경우, 수신 측에서는 프레임을 계속 기다린다.
만약 프레임이 오염되었을 경우, 수신 측에서 해당 프레임을 DISCARD한다. 마찬가지로 ACK는 보내지 않는다.
센더는 타임아웃이라는 타이머 변수가 있다.
ACK가 일정시간 이상 오지 않을 경우, 타임아웃이라고 판단한 후 재전송한다.
즉, 송신 측에서 에러가 나면 ACK를 어쨌든 보내지 않게 해 타임아웃을 유도한다.
ACK에 에러가 난 상황.
프레임이 로스트 되거나 Corrupted된 경우
센더 측은 타임아웃이라고 간주하고 동일한 사본을 또 보내게 된다.
이때 수신측은 PDU를 체크하여 이전 데이터와 동일한지 확인한 후, 동일한 경우에는 해당 복사본을 버린 후에 다시 동일한 ACK를 보낸다.

Problems : ACK가 오염되지 않는다는 보장이 있는가?

ACK 메시지도 오염될 수 있다!
만약 센더(Transmitter)가 이 오염된 ACK를 받을 경우, 메시지를 인지하지 못하고 재전송할 것이다.
리시버는 그러면 두개의 동일한 프레임 사본을 받게 된다.
이를 해결하기 위해 ACK를 ACK0, ACK1로 2분할해 ACK를 교차로 전송한다.
또한, 리시버에서는 동일한 프레임 사본을 받게 될 경우, PDU를 해석하는 단계에서 이전 PDU 헤더와 값을 비교하고, 동일한 사본일 경우 B를 DISCARD 한다!!!!!
센더가 프레임을 전송할때는 두가지 타임으로 나뉘게 된다.
데이터를 Flush하는 Transmission Time (데이터 발사)
상대방한데 물리적으로 전송완료될때까지의 Propagation Time (데이터 이동)

Pros and Cons

장점
간 단 하 다!
단점
비효율적이다! 프레임이 한번에 하나밖에 전송하지 못하므로 공백만큼 비효율적이게 된다.

GO-BACK-N ARQ

N번째 체크포인트로 롤백하라
가장 흔하게 쓰이는 에러 컨트롤 방식, 슬라이딩 윈도우를 응용한 방식이다.
모든 프레임이 ACK에 의해 통제되는 것이 아니라 복수의 프레임이 하나의 ACK에 의해 통제되므로, 해당 프레임을 역산출하기 위해 Window Size를 이용할 것이다.
에러가 없는 경우
평소처럼 ACK을 한다.
에러가 발생했다!!!! 쵸-비상!!!
리시버는 에러가 발생한 프레임과 그 이후 프레임을 모두 Discard한다.
센더는 해당 포지션으로 다시 이동해서 그 프레임을 포함한 나머지 프레임을 모두 다시 보내야한다.

Handling Damaged Frame

Lost Frame

Frame[i]~Frame[i+k] (i : 해당 포지션, k : 사이즈)이 Transmit된다.
Frame[i]가 Lost되면, 리시버는 Frame[i+1]~[i+k]까지를 받는다. 리시버에서는 순서를 체크하여 어떤 프레임이 빠졌는지를 확인한다.
리시버는 Frame[i]를 Reject한 것으로 ACK를 보낸다.
혹은 센더가 타임아웃 판정을 받았을 때, 센더에게 새로운 ACK를 보낸다! P bit set을 보내 리시버가 ACK i를 응답하도록 하는 방법이 있다.
→새로운 ACK 타입을 추가하는 것이 Simplicity Principle에 잘 부합하는가?
센더는 Frame[i]~Frame[i+k] (i : 해당 포지션, k : 사이즈)를 다시 Transmit한다.

미해결사건부

selective-reject (a.k.a. Selective Retransmission)

rejected된 Frame만 재전송된다.
subsequent Frame들은 리시버에게 승인되고 버퍼에 저장된다.
모든 Frame이 다 모일 경우에 Buffer에서 Flush당할 수 있다.
재전송의 스케일을 줄일 수 있다는 장점이 있다.
receiver는 버퍼의 스케일을 크게 잡아야 한다.
또한 Transmitter에서 복잡한 로직을 구현해야하므로 잘 쓰이지는 않는다.
따라서 재전송의 오버헤드가 굉장히 큰 위성통신같은 상황에서는 SRARQ가 요긴하다.
Next chapter