

HDLC는 데이터 링크 계층에서 가장 기본적으로 사용되는 프로토콜이다.
HDLC가 나오기 전에는 SDLC가 있었고 SDLC에서 HDLC로 발전된 것이다.
이후 CCITT에서 HDLC를 수정해 다시 LAP로 발전시켰고 이후 LAPB로 향상됨.
HDLC 프로토콜은 1 : 1 혹은 1 : N 으로 연결된 환경에서 데이터의 송수신 기능을 제공함
예전에는 데이터 통신을 위해 연결된 호스트들은 주국, 종국으로 구분되어 명령만 하고 응답만 하는 호스트가 따로 있었지만
현재 이들의 기능을 모두 지닌 혼합국으로 정의함.
주국에서 전송되는 메시지를 명령,
종국의 회신을 응답이라고 정의함.

HDLC 프로토콜의 구조는 위와 같고
위 구조에서 앞, 뒤에 존재하는 01111110 플래그는 프레임의 시작과 끝을 정의함.
다음으로 HDLC의 각 필드의 의미를 확인해보자.

필드는
이렇게 존재하며
먼저 Address를 확인해보자.
Address는 1 : N 환경에서 연결된 특정 호스트를 구분하여 지칭하는 목적으로 사용되며
주국에서 정보 프레임을 전송할 때는 수신 호스트인 종국의 주소를 표기하는 데 사용하고
종국에서 전송할 때는 송신 호스트인 자신의 주소를 기록함.
1 : 1 환경에서는 명령과 응답을 구분하는 용도로 사용된다.
다음으로 Control은 프레임의 종류를 구분하는 데 사용된다.
프레임의 유형에 따라서 정보 프레임, 감독(응답) 프레임, 비번호 프레임 이렇게 나누고
각각의 프레임은
정보 프레임은 우리가 보내는 데이터,
감독 프레임은 응답을 보내는 프레임,
비번호 프레임은 연결 설정할 때 사용하는 프레임.
이렇게 구분된다.
그래서 Control 프레임은 8비트에서 정보, 감독, 비번호 프레임을 표현한다.
Data는 가변 크기의 전송 데이터가 포함되는데, 상위 계층인 네트워크 계층에서 보내진 패킷이 캡슐화 된 것이다.
간단히 위의 계층인 네트워크 계층에서 내려온 데이터가 들어간 필드이다.
Checksum은 CRC-CCITT를 생성 다항식으로 하는 오류 검출 코드로 사용된다.

위에서 말했듯이
Control 필드에서 값에 따라 3가지 종류로 프레임이 구분된다.
이렇게 구분되는데
정보 프레임의 경우 맨 앞의 비트가 0이고
감독 프레임과 비번호 프레임의 경우 맨 앞 비트가 1이다.
감독 프레임과 비번호 프레임의 경우 다음 비트가 0인지 1인지에 따라 나뉘며
감독은 10으로 시작하고
비번호는 11로 시작한다.

정보 프레임의 경우
Seq, P/F, Next로 구성되어 있는데
Seq는 정보 프레임의 송신용 순서 번호로 사용되며 이때 Seq가 3비트이기에 0 ~ 7의 순서 번호 8개를 순환하여 사용한다.
(순서 번호의 값이 들어가는데 전달되는 데이터의 순서 번호가 들어감)
Next는 피기배킹을 이용한 응답 기능으로 사용된다. 따라서 Next에는 다음에 수신을 기대하는 프레임 번호가 적힌다.
(마찬가지로 순서 번호가 들어가지만 다음 수신을 기대하는 프레임의 순서 번호임)
중간에 있는 PF의 경우 주국과 종국에 따라서 사용하는 쓰임이 달라지게 된다.

PF는 값이 1로 지정되었을 경우에 한하여 poll 혹은 final을 의미한다.
일반적으로 주국의 명령 프레임에서 사용될 때는 Poll, 종국의 응답 프레임에서 사용될 경우에는 Final로 사용된다.
이는 하나의 주국 컴퓨터가 다수의 종국 컴퓨터를 제어하기 위한 용도이며
주국에서 종국에 데이터 전송을 허가할 때 사용된다.
종국의 경우 주국의 허가 없이는 데이터 전송이 불가능하다.
주국에서 데이터를 보내려는 종국이 있는지 확인할 때는 poll의 의미로 1 값을 지정하고
종국에서 주국으로 데이터를 전공할 때는 final의 의미로 사용된다.

감독 프레임의 경우 정보 프레임에 대해서 응답 기능을 수행하는 프레임이다.
이는 긍정과 부정 응답 프레임으로 구분되고
이 프레임의 세부 종류는 감독 프레임의 type 필드의 값에 따라서 총 4가지로 구분된다.

type 필드는 2비트로 총 0~3까지 표현이 가능하다.
따라서
type 0 = 00 = RR = Receive Ready
type 1 = 01 = REJ = Reject
type 2 = 10 = RNR = Receive Not Ready
type 3 = 11 = SREJ = Selective Reject
이렇게 구분된다.
먼저
type 0 = 00 = RR = Receive Ready은
RR로 정의된 긍정 응답 프레임으로 => 다음에 수신을 기대하는 프레임 번호를 Next 필드에 표시한다.
type 1 = 01 = REJ = Reject은
REJ로 정의된 부정 응답 프레임으로 => Next 필드에는 재전송되어야 하는 프레임의 번호를 표시한다.
따라서 송신 호스트는 Next 필드의 번호로 시작하는 프레임을 재전송한다.
type 2 = 10 = RNR = Receive Not Ready은
RNR로 정의된 응답 프레임으로 흐름 제어 기능까지 제공하며 => Next 필드에 표시한 순서 번호를 갖는 정보 프레임의 바로 앞 번호까지 제대로 수신되었다는 긍정 응답 기능을 한다.
즉 수신 호스트가 버퍼에 데이터를 다 채워서 받을 준비가 되지 않았다는 것을 송신에게 알려준다.
송신 호스트에 송신을 중지하도록 요구하기 위해서 RNR이 사용된다.
이후 수신이 받을 준비가 다시 되면은 송신 호스트에 다시 프레임 전송을 요구해야 하는데 이때는 RR, REJ 혹은 기타의 제어 프레임을 전송하면 된다.
type 3 = 11 = SREJ = Selective Reject은
SREJ로 정의된 프레임으로 => 선택적 재전송 방식에서 부정 응답 기능을 지원한다.
Next 필드의 순서 번호를 갖는 특정 프레임에 대한 재전송 요구 기능을 갖는다.

비번호 프레임의 경우
이전 프레임과 비교했을 때 Seq도 Next도 없는 것을 볼 수 있다.
즉 비번호 프레임은 순서 번호가 없는 프레임을 정의하며 연결을 제어하거나 비연결 데이터 전송을 위해 사용하는 프레임이다.
비번호 프레임은 주로 연결을 제어할 때 사용하는 프레임이고 연결 제어에는 크게 3가지가 존재한다.
우리가 데이터를 통신할 때, 데이터를 주고 받을 때 어떤 방식으로 데이터를 주고 받을 지 협의한다고 했는데 이를 연결 설정하는 과정이라고 한다.
이를 어떤 방식으로 할지가 크게 3가지가 존재하는데
이렇게 3가지가 존재한다.

먼저 정규 응답에 대해서 보자.
정규 응답은 하나는 주국으로 다른 하나는 종국으로 동작하는 것이며
SNRM을 이용해서 연결 설정을 요구하고 종국에서 데이터를 전송하려면 반드시 주국의 허락이 필요하다.
비동기 균형의 경우
2개의 호스트가 동일한 능력을 갖는 혼합국으로 동작하고
양쪽에서 명령과 응답을 모두 전송할 수 있다.
따라서 둘 중 임의의 호스트에서 SABM을 이용한 연결 설정 요구를 수행할 수 있다.
비동기 응답의 경우
불균형 모드나 종국이 주국의 허락 없이도 데이터를 전송할 수 있는 권한을 갖는다.
즉 주국의 허가가 없어도 종국에서 먼저 SARM 응답을 보낼 수 있다.

DISC = 연결 설정 해제를 요구
RSET = 비정상적인 프로토콜의 동작에 따른 리셋 기능을 수행
FRMR = 비정상적인 프레임의 수신을 거부
UA = 비번호 프레임에 대한 응답 기능을 수행
위 프레임에 대한 설명은 아래와 같다.
우리가 사용 중인 연결을 해제하려면 DISC 프레임을 이용하고
비번호 프레임에 대한 긍정 응답으로 UA 프레임을 사용한다.
FRMR의 경우 프레임 오류는 없지만 연결 상태의 논리적인 의미가 상실된 경우에 사용한다.
이는 비정상적인 프레임의 수신을 거부하는 프레임으로
프레임은 정상적이지만
A가 B에게 2번 데이터를 잘 받았고 3번을 보내달라고 보냈지만 B는 아직 A에게 2번 데이터를 보내지 않은 경우 B가 A에게 FRMR 프레임을 날리게 되는 것이다.
RSET는 종국에 하드웨어 제어 기능을 리셋하도록 통보하는 데 사용된다.
즉 우리가 지금까지 협의해서 연결 설정한거 다시 처음으로 되돌리자! 라는 명령이다.

이제는 LAP 프로토콜에 대해서 볼 것이다.
LAP는 비동기 응답 모드인 ARM으로 동작하는 프로토콜이다.
ARM = 종국이 주국의 허락 없이도 데이터를 전송할 수 있는 권한을 가짐.
이는 위 예시와 같이
주국에서 보낸 SARM 명령에 대해 종국이 UA 응답을 전송하여 완료된다.
LAP는 비동기 응답 모드로 동작하기 때문에
종국에서 주국으로 SARM 응답을 전송하여 연결 설정을 요구하는 것이 가능하다.

다음은 LAPB 프로토콜이다.
LAPB 프로토콜은 양쪽 호스트가 혼합국으로 동작하기 때문에
누구나 먼저 명령을 전송할 수 있고
위 그림은 비동기 균형 모드로 연결을 설정하기 위해 오른쪽 호스트가 왼쪽 호스트에 SABM 명령을 전송한 경우이다.
이때 왼쪽 호스트는 UA 응답을 전송함으로써 계층 2의 연결 설정이 완료된다.
비동기 균형 모드 = 양쪽에서 명령과 응답을 모두 전송할 수 있어, 둘 중 임의의 호스트에서 SABM을 이용한 연결 설정 요구를 수행할 수 있다.

연결 해제를 위해서는 임의의 호스트에서 DISC 명령을 전송하고
이를 수신쪽에서 UA 응답을 진행해 연결이 해제 되도록 한다.