DLC란 데이터 링크 제어 (DLC, Data Link Control) 를 뜻한다.
데이터링크층에서 크게 2가지의 하위층으로 나눠진다고 했었다.(DLC, MAC) 그 중 상위 계층인 DLC는 링크가 전용 또는 브로드캐스트거나 상관없이 인접한 두 노드 사이의 통신을 위한 절차이다.
프레임 길이
프레임은 고정 길이가 될 수도 있고 가변 길이가 될 수도 있다. 보통 가변 길이를 많이 선택한다.
가변길이는 주로 LAN에서 쓰이고 문자 중심과 비트 중심이 있다.
문자 중심 프레임 짜기
그리고 이 방식은 프레임을 구분할 수 있는 Flag를 앞과 뒤에 넣는다.
Header에는 시작지 주소를 나타내는 6비트 도착지 주소 6비트 그리고 데이터의 성질을 나타내는 2비트 해서 총 14비트다.
그리고 끝에 Trailer는 CRC-32를 쓰는 방식으로 오류 검출에 쓰인다. 그래서 4비트이다.
또한 프레임을 구분짓기 위한 Flag가 만약 페이로드에 포함될 시 거기서 끊긴 상태로 하나의 프레임이 만들어 질 수 있다. 그것을 방지하기 위해 ESC라고 하는 특수 문자를 넣어서 그것이 플레그가 아님을 나타낸다. 그리고 받은 후에는 모든 ESC를 제거해서 다시 원본 메세지를 복구한다.
비트 중심 프레임 짜기
비트 중심에서는 플래그가 01111110 이라고 하는 8 비트의 신호로 나타난다.
마찬가지로 01111110이 페이로드에 포함될 시 프레임이 잘못될 수 있기 때문에 페이로드에 비트가 들어갈 시 0 뒤에 연속한 1이 5개 나올 시 0을 추가로 넣어서 채워준다. 그리고 복구할 때는 마찬가지로 연속한 5개의 1 뒤에 있는 0을 제거하면서 메세지를 복구한다.
오류 제어
물리층에서 온 데이터를 완전히 신뢰할 수 없기 때문에 네트워크층으로 손상된 패킷을 전달하는 것을 방지하기 위해 데이터 링크층에서는 오류 제어를 구현해야 한다. 여기서 말하는 오류 제어란 오류 검출 후 재전송 하는 것을 말한다. 원리는 단순하게 오류가 발견되면 -> 재전송
이렇게 이뤄진다. 이런 방식을 ARQ (Automatic Repeat Request) 라고 한다. 그리고 여기서 확인 응답을 뜻하는 ACK 와 부정 확인 응답을 뜻하는 NAK 이 등장한다.
흐름 제어와 오류 제어의 조합
데이터 링크층 프로토콜
데이터층의 프로토콜은 크게 2가지로 나눠고 또 거기서 세부적으로 나눠진다. 잡음이 없는 채널에서는 오류제어를 하지 않고 잡음이 있는 채널에서는 오류 제어를 한다. 그렇기 때문에 잡음이 있는 채널에서는 ARQ가 일어난다고 보면 된다. 즉, Stop-and-Wait ARQ, Go-Back-N ARQ, Selective Repeat ARQ 라고부른다.
가장 단순한 방법은 말 그대로 아무런 조치를 하지 않고 계속 프레임을 보내는 방식이다. 별도의 흐름 제어도 없이 계속 프레임을 보낸다.
Stop-and-Wait 방식은 확인응답 프레임인 ACK를 이용한 간단한 구조로, 하나의 프레임을 보내면 잘 받았다는 ACK를 돌려보내준다. 그렇게 ACK를 받고 난 후에 다시 프레임을 보내는 방식을 뜻한다.
프레임이 수신기에 도착하면 더 받을 수 있는지, 없는지를 판단하고 충분하면 더 이상 ACK를 보내지 않는다.
잡음이 없는 채널
앞서 설명한 Stop and Wait 방식은 어디까지나 잡음이 없는 안전한 채널에서 통용되는 것이고 중요한 것은 잡음이 있는 상태의 채널에서 올바른 오류제어와 흐름제어를 할 수 있는지다. 잡음이 없는 채널에서 쓰는 기법은 크게 3가지가 있다.
Stop-And-Wait ARQ
핵심아이디어는 오류 제어를 할 때 전송된 프레임의 사본을 보관하고 있다가 타이머가 만료되면(Time Out) 다시 사본을 보내는 것이다.
그리고 다시 보내기 위한 ACK를 받을 때 다시 보내야 하는 프레임이 어떤 프레임인지 구분하기 위해 순서 번호(Sequence number)가 필요하다. Stop-And ARQ에서 확인 응답을 위한 ACK에 담기는 Sequence number는 받기를 원하는 프레임의 번호를 모듈러-2 연산으로 만들어 보낸다.
즉 제어권은 수신측에 있고 오류인지 아닌지 판단해서 ACK를 보내는 것은 송신측이다.
장점은 간단,명확,높은 신뢰성이고
단점은 송신자의 부하가 월등하게 많다는 것, 제어권이 수신측에 있기 때문에 하나 보내고 계속 스트림을 열어놓고 대기해야 한다.
Go-Back-N ARQ
이건 윈도우 슬라이딩 알고리즘을 사용하는 것으로 기존의 Stop-And-Wait에서 전송효율을 높이기 위해서 확인응답을 기다리는 동안 여러개의 연속된 프레임을 보내는 기법이다. 순서 번호는 m개의 프레임에 대해 모듈러 $2^m$ 으로 표현하며 0~m-1 개의 번호가 붙는다는 뜻이다. 앞서 설명한 Stop-And-Wait이 모듈러 2 연산인 이유는 한 비트에 대해 하나씩 검사하기 때문에 0~1 2가지면 충분하기 때문이다.
$2^m- 1$의 길이를 가지는 가상의 배열을 만들고 이 고정된 길이를 통해 한칸씩 이동하면서 송신 창을 갱신하는 것을 슬라이딩 윈도우 기법이라고 한다. 창 크기가 가변적으로 변하는 방식이 되면 투 포인터 알고리즘이 되는 것이다.
보면 송신측은 $2^m-1$ 길이의 윈도우가 존재하고 수신측은 1개의 길이를 가지는 윈도우가 존재한다.
$2^m-1$ 이하여야 하는 이유는 $2^m$이 될 시 전체가 윈도우가 되므로 혼선이 발생할 수 있기 때문이다.
Selective Repeat ARQ
그런데 Go-Back-N ARQ 방식은 수신차 쪽의 과정이 몹시 단순한 것을 볼 수 있다. 수신자는 오직 하나의 변수만 관리하며 순서가 뒤바꿔어 도착한 프레임을 저장하는 버퍼는 필요 없다. 그래서 전체 N개의 프레임을 재전송 하는 대신 오직 손상된 프레임만 다시 전송하는 방법이 Selective Repeat ARQ 방식이다. 즉 잡음이 많은 채널에서 가장 유리한 방식이다. 여기서 부정 응답 확인인 NAK 이 쓰인다.
Go-Back-N ARQ와 비슷하지만 수신측 버퍼가 총 $2^m-1 $의 길이를 가지는 윈도우다.
Selective Repeat ARQ의 송신 창과 수신 창의 크기는 최대 $2^m-1$ 이다.
이게 어떻게 가능한 걸까?
바로 오류가 나서 받지 못한 프레임 번호를 NAK에 담아서 보내기 때문이다. ACK 에서는 현재 프레임을 잘 받았으므로 다음 프레임을 요청한다.
프레임 0번이 도착하고 수신측은 똑같은 크기의 창으로 프레임을 짠다. 그 다음 필요한 1번 프레임을 받기 위해 ACK에 1을 담는다.
그리고 프레임 1번이 손실이 나 도착하지 않는다. 하지만 상관없이 계속 프레임 2를 보낸다. 그러면 수신측은 수신 창을 관리하고 있기 때문에 1번이 없다는 것을 알고 있다. 0,2 순서로 도착했기 때문에 1을 받기 위해 NAK 에 1을 담아 다시 보낸다. 송신측은 NAK 1 을 받으면 다시 프레임 1번을 전송한다. 그러는 와중에도 계속 시간이 될 때 마다 프레임을 순차적으로 보낸다.
피기배깅(PiggyBacking)
앞서 말한 3가지의 기법은 모두 단방향에서 일어난 예시였다. 실제 통신은 모두 양방향으로 일어나기 때문에 양방향 프로토콜의 효율을 높이기 위해 피기배깅이라는 것을 한다. ACK나 NAK에 그저 하나의 정보만 받기엔 너무 비효율적이라는 것이다.
HDLC (High-level Data Link Control)
HDLC란 피기배킹 처럼 단방향이 아닌 점-대-점과 다중점 링크에서 통신을 위한 비트 중심 프로토콜이다.
주국은 명령을 전송하는 입장이고 종국은 응답을 전송하는 입장이다. 이러한 주국과 종국간의 통신을 효율적으로 하기 위해 HDLC가 생겨났다고 보면 된다.
HDLC는 Information frames, Supervisory frames, Unnumbered frames 라는 세 가지 유형의 프레임을 정의한다.
I-프레임의 경우 플래그 앞 뒤로 각 1 바이트 씩 2바이트, 주소 1바이트, 제어 1바이트 또는 2바이트 FCS는 Frame Check Sequence의 약자로 CRC-32를 쓰는 경우 4바이트이다.
I-프레임에서 제어 필드
제어 필드의 첫 번째 비트가 0이면 I-프레임이다. 10 이면 S 프레임, 11 이면 U 프레임이다.
P/F 로 구분하는 것은 poll 인지 final 인지 구분하는 것인데, poll의 경우 주국->종국으로 데이터가 가는 것을 의미하고 final은 종국->주국으로 데이터가 가는 것을 의미한다.
점-대-점 프로토콜 (PPP, Point-to-Point Protocol)
점대점 프로토콜은 바이트 중심이고 HDLC는 비트 중심이다. 그래서 PPP는 다중점 연결이 불가능하지만 HDLC는 가능하다.
즉 흐름 제어를 지원하지 않는다.
링크 제어 프로토콜(LCP, Link Control Protocol)
PPP는 비록 데이터 링크층의 프로토콜이지만 링크를 설정하고 관련 당사자를 인증하며 네트워크층 데이터를 전달하는 등의 일련의 다른 프로토콜에도 관여하는데, 대표적으로 LCP, PAP, NCP 를 지원한다. LCP의 역할은 크게 3가지로
1. 링크의 설정
2. 유지
3. 구성과 해제
이다.
인증(PAP, Password Authentication Protocol)
네트워크 제어 프로토콜(NCP, Internet Protocol Control Protocol)
약어 정리
ARQ : Automatic Repeat request
HDLC : High-level Data Link Control
PPP : Point-to-Point Protocol
PAP : Password Authentication Protocol
NCP : Internet Protocol Control Protocol
'network' 카테고리의 다른 글
[데이터 통신] Chapter 08 교환 연습 문제 & 정답 (0) | 2023.06.13 |
---|---|
[데이터 통신] Chapter 12 매체 접근 제어 (MAC) (1) | 2023.06.12 |
[데이터 통신] Chapter 10 오류 검출과 오류 정정 (0) | 2023.06.11 |
[데이터 통신] Chapter 09 데이터 링크층 개요 (0) | 2023.06.11 |
[데이터 통신] Chapter 08 교환 - 다양한 교환망 (0) | 2023.06.11 |