No img


흐름 제어 및 오류 제어

Posted by bonggang | 2020. 10. 5. 11:25

흐름 제어(Flow Control)


송신측과 수신측 간에 데이터 처리 속도의 차이로 인해 발생하는 문제를 해결하기 위한 방법이다.

X-ON/OFF

송신측은 임의 크기의 데이터 송신을 시작하고 수신측에서는 그 데이터를 받아 처리를 하다가 자신이 가지고 있는 버퍼에 어느 정도 데이터가 차면 송신측으로 X-OFF 신호를 전송한다. 송신측은 수신측의 X-OFF 신호를 받으면 즉시 송신을 중지하고 대기한다.

수신측에서는 어느 정도 버퍼의 데이터를 처리하여 저장공간이 생기면 다시 송신측에 X-ON 신호를 송신하고 X-ON 신호를 받은 송신측은 나머지 송신을 재개하는 방법으로 보통 모뎀과 같은 비동기 방식의 통신에 사용된다.

Sliding Window

송신측에서는 송신할 때 전송하는 데이터를 윈도우라는 개념을 사용한다. 수신측에서는 수신한 데이터에 대해 ACK 라는 데이터를 송신측으로 전송한다. 슬라이딩 윈도우를 사용하기 위해서는 순서번호(Sequence Number)와 윈도우 크기(Window Size)를 사용한다.

송신측은 데이터를 송신할 때 자신의 윈도우 크기만큼 데이터를 전송하게 되고 수신측에서는 처리한 데이터에 한해서만 ACK를 송신한다.

송신측에서 자신이 전송한 데이터에 모든 ACK가 수신되면 윈도우 크기를 1개 증가시키고 수신측은 수신된 데이터 처리가 완료되면 ACK를 송신 측으로 보내고 윈도우 크기를 1개 증가시킨다.

윈도우 크기는 최초의 통신에서 크기가 정해지며 송신측은 데이터를 한 번 전송할 때마다 윈도우 크기를 한 개씩 감소시키고 ACK를 수신할 때마다 윈도우 크기를 한 개씩 증가시킨다.

 

오류 제어


​+) 오류 발생 원인

- 감쇠(Attenuation): 거리에 따라 점차 약해지는 현상

- 지연 왜곡(Delya Distortion): 주로 하드와이어 전송 매체에서 발생, 주파수에 따라 속도가 달라짐으로써 유발되는 신호 손상

- 백색 잡음(White Noise): 열 잡음, 전송 매체 내부의 온도에 따라 발생하는 잡음

- 상호변조 잡음(Itermodulation Noise): 서로 다른 주파수들이 전송 매체를 공유할 때 서로의 합과 차에 의해서 발생하는 잡음

- 누화 잡음(Crosstalk Noise): 상호 인접한 전송 매체의 전자기적 상호 유도 작용에 의해 발생하는 잡음

- 충격성 잡음(Impulse Noise): 외부의 전자기적 충격이나 선로의 접점 불량, 기계적 진동 등에 의해서 순간적으로 발생되는 잡음

 

 

오류 제어 방식에는 오류 수정과 오류 탐지가 있다.

오류 수정 방법


오류 수정 방식에는 전진 오류 수정(FEC, Forward Error Correction)후진 오류 수정(BEC, Backward Error Correction)이 있다.

전진 오류 수정은 송신측에서 정보 비트에 오류 수정을 위한 제어 비트를 추가하여 전송 후 수신측에서 이 비트를 사용하여 오류를 검출하고 수정하는 방식이다. 재전송 요구가 없으므로 역채널이 필요 없고 연속적인 데이터 전송이 가능하다. 오류 검출과 수정을 위해 해밍 코드와 상승 코드를 사용한다.

후진 오류 수정은 데이터 전송 과정에서 오류가 발생하면 재전송을 요구하는 방식이며 이를 위한 역채널이 필요하다.

전진 오류 수정(FEC)

 

해밍코드(Hamming Code)

송신측에서 데이터의 해밍비트를 계산하여 이 값을 데이터에 추가하여 전송하고 수신측에서는 이 데이터를 해밍코드 방법으로 계산하여 오류 발생 여부를 판단한다. 만약 에러가 발생했다면 그 오류가 발생된 비트를 반대되는 비트로 변환하여 오류를 정정한다.

해밍 코드 계산 방법은 아래 블로그를 참고!

https://blog.naver.com/gurtjd789/110176987217

 

네트워크 기초 7일차 - 패리티 비트, CRC, 해밍코드

(2) 에러 검출 방법 ① 패리티 비트 체크(Parity Bit Check) └ 전송되는 데이터의 한쪽 블록 끝에 패리...

blog.naver.com

 

 

후진 오류 수정(BEC)

 

ARQ(Automatic Repeat reQuest)

송신측에서 자신이 전송한 데이터에 대해서는 꼭 ACK 신호를 받아야 전송된 데이터가 에러가 발생하지 않았다고 간주하는 방법이다.

Stop and Wait ARQ

송신측에서 전송한 데이터에 대해 ACK 신호를 받아야만 다음 데이터를 전송할 수 있는 방법이다. 전송되는 데이터에 손실이 발생할 수 있으며 수신하는 ACK 신호에도 손실이 발생할 수 있다. NAK(부정 응답)을 받으면 해당 블록을 재전송한다. 수신측에서 에러 점검 후 제어 신호(ACK,NAK)를 보내기 때문에 데이터 전송의 효율성이 떨어진다.

Continuous ARQ ( Go-Back-N ARQ, Selective-Repeat ARQ)

- Go-Back-N ARQ

Stop and Wait ARQ 방식이 효율성이 떨어진다는 단점을 보완하기 위해 흐름제어 방법 중 슬라이딩 윈도우 방법을 적용시킨 방법이다. 송신측은 데이터를 전송할 때 각 데이터마다 순서번호를 삽입한 후 데이터를 연속적으로 전송한다. 수신측에서는 데이터를 수신한 후 오류 발생 유무를 확인하여 오류가 없으면 RR(ACK) 신호를 송신측으로 보내게 되고 만약 오류가 발견되면 REJ(NAK) 신호를 송신측으로 보내 재전송을 요청하게 된다.

송신측에서는 REJ 신호가 들어오면 오류가 발생한 데이터부터 그 이후 데이터들을 모두 다시 전송한다. Go-Back-N ARQ는 전송 효율성은 있지만 회선에 대한 효율성이 떨어진다.

- Selective Repeat ARQ

에러가 발생한 데이터만 재전송하는 방식으로 전송에 가장 효율적이다. 수신측에서는 데이터를 처리하기 전에 재조합을 해야하므로 복잡한 논리회로와 큰 용량의 버퍼가 필요하다.

- Adaptive ARQ

채널 효율을 최대로 하기 위해 데이터 블록의 길이를 채널의 상태에 따라 동적으로 변경한다.

오류 검출 방법


패리티 비트 체크(Parity Bit Check)

전송되는 데이터의 한쪽 블록 끝에 패리티 비트를 추가함으로써 오류를 검출하는 방법이다. 1의 비트 개수에 따라 짝수 패리티(Even Parity)와 홀수 패리티(Odd Parity)로 나눠진다.

짝수 패리티는 전송되는 7비트에 한 개의 패리티 비트를 붙여 전체 비트에서 1의 개수가 짝수 개가 되도록 만든 후 전송한다. 수신측에서는 수신된 데이터를 검사해 패리티 비트가 홀수면 오류가 발생했음을 알 수 있다. 홀수 패리티는 홀수 개의 1의 비트를 만들어 전송하고 수신측 비트가 짝수면 오류가 발생했음을 알 수 있다.

그러나 패리티 비트는 오류 발생 여부만 알 수 있고 수정은 불가능하다. 또한 발생하는 오류가 홀수 개면 오류 검출이 용이하지만 짝수 개의 오류가 발생하면 검출이 어렵다. 전송되는 비트마다 1비트가 추가됨으로써 전송의 효율이 떨어지는 단점도 존재한다.

순환 중복 검사(CRC:Cyclic Redundancy Check)

버스트 오류(데이터 전송 시 한 무리의 데이터에 집단적으로 오류가 발생한 것)를 검출하기 좋은 오류 검출 방법이다. 송수신측에서 동일한 다항식을 사용하여 오류를 검사하는 방법이다.

먼저 송신측에서는 전송하려는 데이터를 특정 다항식을 사용해 계산(그림 참고)하여 그 값을 FCS(Frame Check Sequence)에 삽입하여 수신측으로 전송한다. 수신측에서는 수신된 전체 데이터를 동일한 다항식으로 계산하여 나머지 값이 0이면 오류가 없는 것으로 나머지가 발생할 경우 오류가 발생한 것으로 판단한다.

 

 

 

참고 자료


https://hotni.tistory.com/42?category=707641
https://blog.naver.com/gurtjd789/110176929182
https://blog.naver.com/sjw7324/221508756278

'CS > Web & Network' 카테고리의 다른 글

REST API  (0) 2020.10.06
http vs https  (0) 2020.10.05
TCP vs UDP  (0) 2020.10.05
OSI 7계층 모델  (0) 2020.10.05
[Node.js]Node.JS Study - 모듈  (0) 2020.06.25
[통신] http 통신 vs socket 통신  (0) 2020.06.16
[Tistory] 스킨 만들기 - 2. skin.html  (0) 2020.06.03
[Tistory] 스킨 만들기 - 1.기본구조  (0) 2020.06.02