제 6 장 데이터링크 제어 방식 및 데이터 전송 오류제어

6.1 데이터링크 제어방식

이제까지 우리는 데이터 통신장치들간에 직접 연결된 물리적 전송로 상에서 데이터를 송수신하는 각종 기법을 다루었다. 그러나, 데이터 통신시스템에서 물리적 전송로, 각종 변환기법 및 회선 연결 등이 제공된다고 하더라도 실제로 데이터를 송수신하기 위해서는 통신의 의사에 따른 상대방의 확인, 전송조건 및 오류에 대한 처리 등 다양한 전송링크 상에서 발생하는 문제들을 제어할 수 있는 기능들을 구성된 물리적 연결 위에서 처리해야 한다. 이렇게 데이터 전송에 필요한 제어 및 절차를 "데이터 링크에 프로토콜(protocol)"이다. 본 장에서는 이 전송 제어 방식에서 대표적인 회선제어, 흐름제어 및 오류 제어 방식들을 알아본다.

* 이것은 물리적 구성요소들을 이용하여 전송링크 상에서 발생할 수 있는 제어 절차이다.

* 이 것은 데이터전송 제어방식이라고도 하며 통신 매체의 물리적 연결 위에서 각 통신 장치의 제어 기능층(데이터링크제어 도는 데이터 링크 프로토콜이라고도 한다)을 추가하여 가능하다.

* 데이터 통신을 위한 모든 물리적 요건들이 갖추어져 있을 때, 이러한 데이터링크 제어방식이 필요한 이유는 다음과 같다.

#프레임(frame)이라는 블록으로 전송된 데이터의 동기화문제가 발생하기 때문이다.

#데이터 통신을 위한 여러 가지 회선구성방식(4.4절)에 따라 요구사항들이 변 할 수 있기 때문이다.

#송수신기 사이의 처리 속도에 따른 데이터의 전송흐름문제 때문이다.(흐름제 어(flow control)라고 한다.)

#물리적 장치간에 송수신 오류가 발생될 수 있기 때문이다. (오류제어(error control)라고 한다,.)

#하나의 컴퓨터에 여러 단말장치가 연결된 경우 (즉, 멀티포인터 통신방식), 전송대상을 식별하기 위한 주소화(Addressing)문제가 필요하기 때문이다.

#일반적으로 하나의 동일한 전송통신로 상에서 처리되는 데이터와 제어신호에 대부분이 필요하기 때문이다.

#데이터 송수신의 개시, 유지 및 해제 등 장치들 간에 필요한 협력 및 조정을 위한 링크의 관리 문제가 필요하기 때문이다. (링크관리)

* 이러한 여러 가지 이유들은 전송제어방식의 필요를 자연스럽게 유도할 수 있도록 한다. 즉, 이것들은 자연스럽게 통신시스템의 전송제어 기능에서 수행해야 할 고려사항이며, 요구사항인 동시에 제어방식의 역할이라고도 할 수 있다.

* [그림 6.1]은 이러한 역할을 수행하는 전송제어 개념을 보여주고 있다.

* 데이터링크에 대한 전송제어방식은 제 Ⅱ부에서 설명할 컴퓨터 통신 구조의 대 표적인 표준 참조모델(Reference Model)인 ISO/OSI 기본 모델에서 데이터링크 계층(Data link layer)의 기능으로 적용된다.

* 여기에 적용되는 용어를 명확히 하기 위해서 보통 통신제어는 통신회선을 경유하여 DTE간 원활한 정보 교환을 위하여 데이터 통신시스템이 갖추어야 할 제어기능 및 방식의 총칭하며, 특히 전송제어는 이러한 통신제어 중 데이터를 원할하게 전송하기 위한 일련의 제어절차를 의미한다.

* 그러므로, 통신시스템을 위한 물리요소들을 효과적으로 구성하더라도 이러한 전송제어절차를 수행하는 데이터링크 프로토콜(protocol)은 다소 복잡하다.

6.1.1 회선제어

* 회선구성방식94.4절의 점대점, 또는 멀티포인트회선 구성방식)과(4,3절의 단방 향, 반이중 및 양방향 등의)통신방식에 따라 사용되는 전송링크에 대한 제어 규범(line discipline)이다.

* [그림6.2]는 회선 구성 방식을 보인 것이다.

(1)점대점 회선 제어

* 점대점 링크의 두 스테이션이 반이중 통신방식의 경우는 다음과 같은 회선 제어 방식이 필요하다 [그림6.3]

[그림6.3]에서는 스테이션 A에서 B로 데이터를 보내려고 할 때, 우선 A는 B의 수신가능 여부를 알기 위한 신호(Enq)를 전송하여 질의한다. B에서는 이에 대한 응답이 준비되었으면, ACK(양의 Acknowledgement)를 보내고, 준비가 되지 않았거나, 오류발생시, NAK(음의 Non-Acknowledgement)를 전송한다. A에서 ACK를 받을 때 "회선의 설정 (Establishment)"라고 한다. 회선이 설정되면 A는 데이터를 프레임(frame)의 형태로 전송하며, 이에 대한 응답으로 B는 ACK신호를 수신한 프레임의 번호와 함께 전송한다.("데이터 전송(Data Transfer")단계라고 한다. 마지막으로, A가 데이터를 모두 보내고 B로부터 ACK를 받은 후, A는 시스템을 초기 상태로 복귀하고 회선을 양도하기 위해서 EOT(End Of  Transfer)신호를 전송한다(이를 "회선의 해제(Termination)" 단계라고 한다.

* 전송제어의 회선 제어의 단계 다음과 같다.

#회선설정(Link Establishment)단계

#데이터 전송 (Data Transfer)단계

#회선양도(Termination) 단계

(2)멀티포인터 회전 제어

* 주스테이션(Master)과 부스테이션(Slave)간이 데이터 교환시 사용되는 회선 제 어 규범이다.

*여기서는 폴-세렉트

(Poll-select)방식을 이용한다.

[그림6.4]

#폴(Poll)은 주스테이션이 부스테이션에게 전송할 데이터가 있는지의 여부를 묻는 것이다.

#세렉트는 주스테이션이 부스테이션에게 보낼 데이터를 준비하고 난 후, 부스테이션에게 데이터를 전송할 것이라는 것을 알려 준다.

* 이 방식의 데이터 전송은

주스테이션에 의해서 폴과     세렉트 방식에 따라 주도 적으로 이루어지는 방식이다.

* [그림6.4]의 (d)는 주스테이션에서 데이터를 여러 번 전송해야 할 경우의 방식을 보여 주고 있다. 이를 "빠른 세렉트(Fast Select)"라고 한다.

* 빠른 세렉트(Fast Select)는 선택(세렉트)메시지와 전송데이터를 함께 전송하는 방식으로, 짧은 데이터 메시지를 빈번히 전송하고, 메시지 전송시간이 응답 시간보다 길지 않는 경우에 많이 사용된다.

6.1.2 흐름제어 (Flow Control)

* 이것은 수신장치의 용량 이상으로 데이터가 넘치지 않도록 송신장치를 제어하는 기술이다. 즉, 수신장치가 이전에 받은 데이터를 자신의 버퍼에서 처리하기 전에 송신장치로부터 다른 데이터가 전송되지 않도록 하는 제어방식이다.

* 흐름제어 기법에는 다음과 같은 종류가 있다

♠정지-대기(Stop and Wait)기법

♠윈도우 슬라이딩(Window Sliding)기법

(1)정지-대기 흐름제어기법

* 흐름 제어의 가장 간단한 방식으로, 송신장치에서 하나의 프레임을 한 번에 전송하는 방식이다.

* 이것은 송신장치의 프레임 전송 후 수신장치로부터 ACK신호를 받을 때까지 다음 프레임을 보낼 수 없는 방식이다.

* 이것은 보통 한 개의 연속적인 블럭 또는 프레임을 한 번에 사용된다.

* 그러나, 커다란 연속적인 프레임을 작은 구간으로 분리해서 전송해야 한다. 그 이유는 다음과 같다.

#전송이 길어지므로 오류 발생확률이 높다.

#멀티포인트 통신방식의 경우 회선 점유율이 길어지므로, 다른 부스테이션들의 지연이 발생할 수 있다.

#수신측의 버퍼에 대한 한계가 존재한다.

(2)슬라이딩 윈도우기법

* 한 번에 여러 개의 프레임을 보낼 수 있는 방식으로, 수신측에 n개의 프레임에 대한 버퍼를 할당하고, 송신측에서 수신측의 ACK를 기다리지 않고 n개의 프레임을 보낼 수 있도록 하는 방식이다.

* 이 방식에서는 송수신의 흐름을 위해서 각 프레임에 순서번호(Sequence Number)를 부여한다. 이것은 수신측에서 기대하는 다음 프레임의 순서번호를 포함하는 ACK를 송신측으로 보내 눔으로서 계속 받을 수 있는 프레임들의 번호를 알려준다 (Acknowledge).

* [그림6.5]는 슬라이딩 윈도우 기법의 예를 보인 것이다.

6.2 데이터 전송 오류 제어방식

* 이것은 여러 가지 원인(전원, 주파수혼란, 감쇠, 잠음등) 으로 인해 전송된 데이터의 발생할 수 있는      오류에 대한 해결을 위한 제어방식이다.

6.2.1 오류제어방식 종류

(1)후진 오류 수정방식(Backward error Correction)

* 오류 발생시 재전송이 요구하는 방식이다.

* 송신측에서 데이터 전송시 오류를 검출할 수 있는 정도의 부가정보를 함께 전 송하고 수신측에서 이를 이용하여 오류를 검출하여 오류의 발생여부를 알고 송신측에게 데이터의 재전송을 요구하는 방식이다.

* 이를 위해서 후진 오류 수정방식에서는 오류의 검출방식과 재전송 기법이 필요하다.

1)오류 검출 방식의 종류

#패리티 검사 (Parity Check)

#블록합 검사 (Block Sum check)

#순환잉여검사(CRC : Cycle Redundancy Check)

2) 오류 검출 후 재전송 방식(ARQ : Automatic Repeat Request)

#정기-대기(Stop and Wait) ARQ방식

#연속 ARQ 방식

(2)전진 오류수정(Forward error Correction)방식

* 오류발생시 재전송이 불필요한 방식이다.

* 송신측에서 데이터 송신 전송할 문자 또는 프레임에 부가정보를 함께 전송하고, 수신측에서 오류발생시 이 부가정보를 이용하여 오류의 검출 및 정확한 정 보로의 유출이 가능한 방식이다.

6.2.2 오류 검출 방식

(1)패리티 검사(Parity Check)방식

* 가장 간단한 오류검출 방식으로, 송신측에서 전송될 프레임에 오류검출을 위한 특수한 비트(패리티 비트)를 추가하여 전송하고, 수신측에서 수신된 문자의 비트와 이 패리티 비트를 합하여 1의 총계를 계산하는 방식이다.

* 1의 총계가 짝수인지를 검토하는 방식을 "짝수 패리티 검사"라고 하며, 홀수인 지를 검토하는 방식을 "홀수 패리티 검사"라고 한다. [그림6.6]

* 이 방식은 전송 정보비트수가 적고, 오류 발생률이 낮은 경우에 주로 사용되며, 비동기전송에 적합하다.

* 단점

#[그림6.7]의 b)에서 처럼, 전송된

오류비트수가 2개인 경우에는 검출이 불가능하다.

#전송 오류가 발견되더라도 정확한 위치를 알기 어렵다.

* 그러므로, 이러한 단점을 해결하기 위한 방식으로, 블록합검사(Block sum check)방식과 순환잉여 검사(CRC : Cyclic Redundancy Check)등이 있다.

(2)블럭합 검사(Block Sum check)

* 패리티 검사의 단점을 보완하는 방식으로, 각 문자 당 패리티 체크 비트(수평 패리티 체크)와 전송 프레임의 모든 문자들에 대한 패리티 문자 (블럭합 체크문 자, 또는 수직 패리티 체크)를 함께 전송하는 방식이다.

* 즉, 각 문자당 패리티 비트를 할당하고, 프레임의 전체 문자에 대해서 문자크기 만한 잉여 패리티    비트를 모두 검사하는 기법이다.

* 방식[그림6.8]

#(송신측에서) 프레임의 끝에 블록합문자를 추가하여 전송한다.

#(수신측에서) 수신된 프레임의 문자들에 대해서 블록합을 계산하여 이것과 송신측에서 전송한 블럭합 문자를 비교하여 오류를 검토한다.

#이때, 두 값이 같으면, 오류가 없는 것이다.

#같지 않으면, 1비트 오류는 위치까지 알 수 있다. 2비트 오류이면 위치는 알 수 없으나, 오류여부는 판단 가능하다.

* 단점

#연속된 두 개의 문자에서 같은 위치의 두 개의 비트들이 오류인 경우는 검출 이 불가능하다.

(3)순환잉여검사(CRC : Cycle Redundancy Check)

* 오류가 한꺼번에 많이 발생하는 비트들(burst error)에 대한 블록합 검사의 단 점을 해결할 수 있도록 하는 방식이다. 즉, 집단 오류를 해결하기 위한 오류제 어 방식이다.

* 이것은 다항식 코드를 사용한 오류 검출방법이다.

* 이외에도 모듈로 2산술, 쉬프트레지스터, 및 배타적 OR 게이트를 이용하는 방법도 있다.

* 이 방식에서는 프레임의 실제 내용에 의해서 계산되는 FCS(FRAME Check Sequence 또는 BCC(Block Check Character)라고도 한다.)를 전송 프레임의 끝 에 추가하여 전송한다.(표 참조)

FCS 생성과정 :

(1) [표6.1]을 고려하여 생성다항

식(generator polynomial) G(X)     선택한다. #이것은 이미 존재    하는 표준화된 생성 다항식을    이용한다.

#예를 들어, CCITT의 패킷교       환망에서 사용하는 생성 다       항식은 다음과 같다.

G(X)=X16+X12+X5+1             (CRC-CCITT) )

#전형적인 생성다항식들

G(X)=X12+X11+X3+1             (CRC-12)

G(X)=X16+X15+X5+1             (CRC-16)

G(X)=X16+X12+X5+1             (CRC-CCITT)

G(X)=X32+X26+X23+X22+X16+      X12+X11+X10+X8+X7+X5+X4+

X3+X2+X+1(CRC-32)

#프레임 M(x)의 차수 : m

#생성 다항식 G(X)의 차수 :      0 < g < m (일반적으로         m-1)을 선택

(2)프레임 M(x)에 xg을 곱한다.(즉, M(x) * xg)

(3) Y(x) = M(x) * xg = Q(x) + R(x)

#여기서 Q(x)는 몫이고, R(x)       은 나머지, +는 모듈러 2 가산으로 배타적 OR 연산과 같다.

#이때, R(x)가 FCS이다.

(4) Q(x)는 무시하고, R(x)를 Y(x)의 결과에 + 가산하여 전송 메시지 T(x)를 생성한다.

#즉, Y(x)=M(x) * xg 이며, 여기에 R(x)를 배타적 OR하면 다음과 같다.

#송신측의 프레임 T(x)=Y(x)+R(x)

#(3)식에서 Y(x)를 유도하면,

수신측 T(x)=G(x) * Q(x)+R(x)+R(x)

#이때, 수신측 T(x)에서 끝의 R(x)+R(x)의 결과에 따라 오류 유무가 계산된다.

#즉, 두 나머지의 배타적 OR결과 (R(x)+R(x))가 0이며, 오류가 없는 것이며, 1이면 오류이다.

* [그림 6.9]는 (NOET)에서 설명한 순환잉여검사 방식의 FCS 생성 및 오류 검출과 정의 예를 보여 주

고 있다.

[표6.1]G(x)에 의한 오류 검출 확률

오류형태	G(x)의 조건	오류 검출확률
단일 비트 오류	G(x)가 1개 이상의 항으로 이루어짐	100%
2개 비트 오류	G(x) 3개 이상의 항으로 이루어짐
기수 개의 비트 오류	G(x)가 (x+1)의 인수를 포함함
집단오류	집단 오류의 길이 < g+1	100%
	집단 오류의 길이 = g+1	1-(1/2)g-1
	집단 오류의 길이 > g+1	1-(1/2)g

6.2.3 검출후 재전송 방식(ARQ: Automatic Repeat Request)

* 수신측에서 6.2.2절의 오류 검출방식으로 오류를 검출한 후 송신측에서 오류 발 생 사실을 알리고 송신측으로 오류가 발생한 프레임을 재전송하도록 하는 방식이다.

* 이를 위한 방법에는 다음과 같은 종류가 있다.

#정지- 대기(Stop and Wait) ARQ방식

#연속(Continuous)ARQ 방식

°Go-back-N방식

°Selective-Repeat ARQ 방식

#적응성(Adaptive)ARQ 방식

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

* 송신측에서 한 번에 한 개의 프레임을 송신하고 수신측에서는 수신된 이 프레임의 오류 유무를 판단하여 송신측에 ACK 또는 NAK로 응답하는 방식이다. 이때 송신측은 이 ACK 또는 NAK를 받기 전에는 다음 프레임을 송신할 수 없다.

* 수신측의 응답을 받은 송신측에서   ACK를 받으면, 다음 프레임을 전송하고, NAK를 받으면 해당 프레임을 재전송한다.

* 장점

#구현 방법이 간단하다.

#송신측내의 최대 프레임 크기의 버퍼를 하나만 가지고도 구현이 가능하다.

* 단점

#송신측이 ACK(또는 NAK)를 수신할 때까지 다음 프레임을 전송할 수 없으므로 전송 효율이 떨어        진다.

(2)연속 ARQ 방식

* 정지-대기 ARQ와는 달리, 전송 효율을 증대시키기 위해서 ACK에 관계없이 계속 프레임을 전송하는 방식이다.

* 종류

#Go-back-N방식

#Selective-Repeat ARQ방식

1) Go-back-N방식

* 송신측은 송신 또는 수신 가능한 프레임의 개수 감시표시자("윈도우"라고도 함)크기 만큼의 프레임들에 "순서번호"를 부여하여 전송한다,[그림6.11]

* 수신측에서는 수신된 프레임의 오류 검출후,"NAK+오류 프레임의 순서번호"를 송신측에 송신한다.

* 송신측에서 NAK를 수신하면, "해당 순서번호의 프레임부터 그 이후에 보낸 프레임들을 다시 전송"한다.

* 보통, Go-back-N 방식이 많이 사용된다.

2)Selective-Repeat ARQ방식

* 오류검출 이후의 프레임들을 모두 보내는 Go-back-N방식과는 달리, NAK에 해당되는 프레임만 재전송하는 방식이다.[그림6.12]

* 단점

#전송효율은 좋으나, 송신측에서는 수신측의 수신상태에 따라 전송해야 하므로, "송신순서를 벗어난 전송이 많이 발생"할 수 있다. 그러므로 구현방법이 복잡하다.

(3)적응성(Adaptive)ARQ 방식

* 전송효율을 최대로 하기 위해서 프레임의 길이를 동적으로 변경할 수 있는 방식이다.

* 수신측은 통신회선의 오류발생율을 검사하여 송신측에 알려주고, 송신측은 이를 이용하여 " 가장 적절한 프레임의 길이"를 결정하여 송신하는 방식이다.

* 이때 프레임의 길이는 통신회선의 품질이 좋지 않아서 오류발생율이 높을 때는 프레임의 길이를 짧게 하고, 오류발생율이 낮을 경우에는 길게 조절한다.

* 전송효율은 높으나, 각 장치의 제어회로가 매우 복잡해진다.

6.2.4 전진 오류 수정 방식(Forward error Correction)

* 데이터 송수신시 데이터비트에 여분의 잉여 비트들을 추가하여 오류의 유무를 검출(detection)하고 이를 재전송 없이 수신측 자체적으로 수정(correction)하는 방식이다.

* 오류율이 낮은 경우에 효과적이다.

* 단점

#잉여 비트를 추가하므로 전송효율이 다소 떨어진다.

* 종류

#단일 오류 수정을 위한 Parity 검사코드

#Convolution코드