A guide to Data Link Layer Functions and Protocols in Data communication week 10
Understanding 데이터링크 계층과 주요기능, ARQ 프로코톨 & 데이터링크 프로토콜 데이터 커뮤니케이션 10주차

Goals:
데이터링크 계층의 주요기능인 흐름제어와 오류제어의목적과 기술적인 특징을 설명할 수 있다. (Explain the purposes and technical characteristics of the main functions of the data link layer, which include flow control and error control)
ARQ프로토콜의 종류와 특징을 이해 할 수 있다. (Understand the types and features of ARQ protocols)
Contents:


💡데이터링크 계층과 주요 기능
(The purposes and technical characteristics of the data link layer)
📍개요(Overview)
- OSI(Open Systems Interconnection) 모델에서 두 번째로 위치한 계층으로, 네트워크의 하위 계층 중 하나이다. 이 계층은 물리적인 링크를 통해 직접 연결된 두 장치 간의 통신을 관리하고, 데이터의 전송(Flow control)과 오류 수정(Error control)을 담당한다.
📍목적(Purposes)

위의 사진에서 보듯이 데이터링크 계층은 동일 링크에 연결된 다음 노드까지 전달하는 것에 집중한다. 홉-대-홉, 노드-대-노드 방식
번외로 전체 데이터 전달이 잘 이루어지도록 하는 것은 상위 개념인 네트워크 계층임

- Link : of type 1과 type2는 서로 독립적이다.
- 네트워크 상에서 노드 간의 효율적인 데이터 전송을 보장하는 것이다. 이 계층은 프레임이라는 패킷(데이터 덩어리)으로 데이터를 분할하고, 한 노드에서 다음 노드까지 전달하는 패킷 전송으로 노드 간의 신뢰성 있는 통신을 제공한다. 이 과정으로 노드 간에 안정적인 통신을 가능하게해 상위 계층에서 사용되는 데이터를 안정적으로 전송할 수 있도록 할 수 있다.

데이터링크 계층의 구성을 자세히 살펴보면 2개의 계층으로 나뉘어 있다.
Data link control sublayer (DLC), Media access control sublayer (MAC)
상황에 따라서(Data-link layer of a point-to-point link의 경우) DLC가 단독으로 위치하는 경우도 있다.
📍주요 기능 (Main functions)

📌 프레임의 생성 및 해석(Frame creation and interpretation = Framing )
- 데이터를 프레임이라는 작은 단위로 나누어 송수신하며, 이를 생성하고 해석하여 상위 계층으로 전달한다.
📌 물리주소 지정(Physical Addressing)
- 송신자와 수신자의 물리 주소를 프레임 헤더에 추가
📌 흐름 제어(Flow Control)
- 데이터의 송수신 속도를 조절하여 수신 측에서 데이터를 처리할 수 있는 속도를 유지하고 송신 측과의 데이터 전송 속도 불일치를 해결하는 메커니즘
📌 오류 감지 및 수정(Error Control = Detection and Correction)
- 전송된 데이터의 오류를 감지하고 필요한 경우 이를 수정하여 데이터의 무결성을 보장한다.
📌 접근 제어(Access Control)
- 여러 장치가 동시에 네트워크를 사용하는 것을 관리하여 충돌을 방지하고 효율적으로 리소스를 할당합니다.
📍주요 기능 설명 (Main functions explained)
📌 프레임 구성(Framing method)

고정 크기 프레임 방식(fixed-size frame method)
항상 약속된 크기로 데이터를 잘라서, 프레임을 구성하는 방식이다. 예 ATM(53byte)
크기가 작기 때문에 고속화가 가능하다.
가변 크기 프레임 방식(Variable-size frame method)
필요에 따라서 프레임의 크기를 변화시키는 방식이다. (크기가 아주 커질수도 있음)
프레임의 시작과 끝 지점을 알 수 있도록 해야 한다(크기가 들쭉날쭉하기 때문, 이는 추가적인 고려사항이 될 수 있다.)
문자 중심(Byte 중심) 프로토콜과비트 중심 프로토콜로 구분된다. 예 HDLC, PPP
문자 중심(Byte 중심) 프로토콜목적: ASCII문자와 같은 바이트 단위의 문자를 전달하려고 도입된 프로토콜이지만 근래에는 오디오/비디오 등의 각종 데이터도 전송한다.
Data from upper layer: 문자열에서 사용하지 않는 임의의 문자를 플래그나 제어용 문자로 사용한다.
Sent frame: 시작부분과 마지막 부분에 특정한 플래그(Flag) 문자를 추가한다.
Received frame: 사용자 데이터 내부에 플래그나 특수 문자가 있는 경우에 이를 플래그나 특수 문자로 오인하지 않도록 탈출문자(ESC)를 추가하는 방식으로 데이터를 변환한다.
Data to upper layer: 수신 측에서는 이스케이프 문자를 제거하여 원래의 데이터 형식을 복원한다.
위에 언급된 방법을 통해 데이터 전송 중에 일어날 수 있는 오류를 줄인다.
송신단- 바이트 채우기 (byte stuffing) & 수신단 - 바이트 빼기 (byte unstuffing)로 이 절차를 반복한다.

비트 중심 프로토콜
목적: 문자 중심 프로토콜과 동일하다.
Data from upper layer: 프레임의 데이터 부분을 전부 비트열로 인식한다. 프레임 경계를 인식하기 위해서 특정한 플래그(01111110)를 추가한다.
Sent frame: 사용자 데이터 내에 플래그와 동일한 값이 있는 경우, 이를 플래그로 오인하지 않도록 여분의 비트를 추가한다. '0' 다음에 연속으로 '1'이 5개가 있으면 여분의 '0'을 추가하는 것이다.
Received frame: 수신 측에서는 추가된 여분의 '0' 문자를 제거하여 원래의 데이터 형식을 복원한다.
Data to upper layer: 복원된 데이터가 수신된다.
위에 언급된 방법을 통해 데이터 전송 중에 일어날 수 있는 오류를 줄인다.
송신단- 바이트 채우기 (byte stuffing) & 수신단 - 바이트 빼기 (byte unstuffing)로 이 절차를 반복한다.
📌 흐름 제어 (Flow control)

Level4인 Transfer level(전송계층)에서 각별하게 취급된다. 데이터링크 계층의 독점기능은 아니다.
흐름 제어는 데이터 전송의 속도를 관리하고 수신 측에서의 데이터의 처리 속도가 송신 측에서의 전송 속도를 초과하지 않도록 조절하는 메커니즘이다.
만약 수신기에서 처리할 수 있는 데이터 양보다 많은 데이터가 유입되면 수신기의 버퍼용량을 초과하여 데이터 손실이 발생할 수 있다.
이러한 데이터 손실은 재전송을 유발하고 네트워크의 자원을 낭비하게 되는 셈이다.
주로 수신자가 송신자에게 데이터를 받을 수 있는지 여부를 알려주는 방식으로 이루어지는데 이러한 흐름제어를 통해 네트워크 트래픽 폭주를 예방하거나 해소할 수 있다.
흐름제어는 3가지의 방식으로 이루어진다. Xon/Xoff & RTS/CTS, Sliding window
1) 전송허가(Xon)와 전송금지(Xoff)
컴퓨터와 주변기기간에 속도차이로 인한 데이터 손실을 방지하는 방식이다.
적절하게 전송허가(Xon)와 전송금지(Xoff) 메시지를 전송하여 제어한다.

2) RTS (Request To Send) / CTS (Clear To Send)
RTS라인으로 송신측이 수신측에서 전송할 데이터가 있음을 알린다.
수신측에서 데이터 수신할 상태가 되면 CTS라인으로 송신측에게 알린다.
수신측이 데이터 수신이 불가능한 상태가 되면 CTS라인의 신호를 꺼버리고 송신측이 이를 감지하여 데이터 전송을 금지하며 양을 조절한다.

3) 슬라이딩 윈도우 (Sliding window)
송신측이 전송할 수 있는 데이터 양을 조정하여 제어하는 방식이다.
TCP 프로토콜에서 슬라이딩
윈도우는 특히 중요한 역할을 한다.윈도우(window)의 역할TCP는 데이터를 전송할 때 수신 측에서 확인한 ACK(응답)을 기반으로 데이터를 조절한다. 송신 측은 일정 크기의 윈도우(window)를 가지고 있으며, 이 윈도우는 전송된 데이터 중 확인이 필요한 부분을 가리킨다. 윈도우의 크기는 네트워크 혼잡 방지를 위해 동적(dynamic)으로 조절된다.송신 측이 데이터를 전송하면서 윈도우를 슬라이딩시킨다. 이때, 송신 측은 윈도우의 크기를 조절하여 너무 많은 데이터가 네트워크에 채워지지 않도록 한다. 수신 측은 받은 데이터를 확인하고 ACK를 송신 측으로 보낸다. 이 ACK를 받은 송신 측은 윈도우를 다시 슬라이딩시켜서 새로운 데이터를 전송한다.

📌 오류 제어 (Error control)
수신기에서 수신된 데이터에 발생한 오류나 분실을 검출하고 이를 정정하는 방법이다.
송신기에서 프레임을 구성할 때 어떤 부분에서 오류나 분실이 발생된건지를 알려면 '순서번호(sequence number)'를 헤더에 추가한다.
프로그램에 오류 발생을 감지할 수 있는 필드 (parity, checksum, CRC)를 추가하는데 이를 비교하며 데이터의 판단을 도와준다.
수신기에서 프레임의 분실이나 오류를 탐지한 경우에 오류탐지필드로부터 자동 수정하거나(FEC라고함, 기술적용 구현이 까다로울 수 있음) 송신기에게 특정 프레임의 재전송을 반복적으로 요구할 수 있다(ARQ, Automatic Repeat reQuest)
프로토콜별 오류 탐지 방법
하위 계층은 대부분 하드웨어로 구현되어서, 다소 복잡하지만 오류 탐지 능력이 뛰어난 CRC방식을 선호한다.
네트워크/전송계층은 대체로 소프트웨어로 구현되어 오류 탐지 능력은 다소 떨어져도 구현이 단순한 Checksum방식을 주로 활용하고 있다.

위에 언급된 오류 정정방법 디테일 (FEC, ARQ)
전진 오류 수정 (FEC, Forward Error Correction)
송신측에서 데이터를 전송할 때에 오류를 탐지하고 오류를 수정할 수 있는 필드를 추가하여 전송 수신측에서 자동으로 오류를 수정하는 기술
고난이도의 수학적인 기술 구현, 추가적인 데이터가 필요하다.
자동 요구 반복 (ARQ, Automatic Repeat reQuest)
- 오류 발생시에 수신측에 송신측에게 특정 데이터( 특정 순서번호를 지정)의 재전송을 요구하는 방식

💡ARQ 프로코톨의 예 (Example of ARQ protocol)
📌단순 프로토콜(TFTP, Trivial File Transfer Protocol)

흐름제어와 오류제어가 없는 가장 단순한 프로토콜 설계이다. (No ARQ)
송신기에서 수신기까지 단방향으로 정보가 흘러간다. ( 반대방향으로 불가)
수신자의 데이터링크계층은 프레임에서 헤더/트레일러를 제거하고 자신의 상위 계층인 네트워크계층으로 데이터를 전달한다.
📌정지/대기 프로토콜(Stop-And-Wait Protocol)


ARQ(자동 반복 요청) 프로토콜의 한 종류이다.
단순 프로토콜에서 간단한 오류 제어 장치를 추가한 프로토콜이다. 송신기는 프레임마다 순서번호를 추가한다. (정지-대기 프로토콜에서는 워낙에 단순하기 때문에 1비트로도 동작에 문제가 없다)
수신기(Receiving node)가 기다리고 있는 프레임을 오류없이 수신하면 ACK응답을 송신기(Sending node)로 보낸다. 하지만 수신기에서 수신한 프레임에 오류가 있다고 판단한 경우엔 조용히 폐기처분한다.
- 프로토콜에 따라서 NAK(Negative ACK)를 전송하기도 하지만 대부분 단순한 구현을 위해 조용히 폐기처분한다.
송신기는 가장 최근에 전송한 프레임의 사본을 저장하여 재전송에 대비한다.
송신기는 내부에서 타이머를 구동하여 대기한다. 일정 시간동안 ACK응답이 없는 경우에 해당 프레임에 오류가 발생했음으로 판단하고 재전송하게 된다. 위에 예제처럼 중복되어 데이터가 올라갈 경우 순서번호가 없기 때문에 매끄럽지 않은 전송이 된다. 나중에 정지/대기 프로토콜을 구현해야 될때가 오면 헤더부분에 순서번호를 추가하는 것이 좋다.


회선의 가용도 = 효율


📌GBN 프로토콜(Go-Back-N Protocol)
데이터링크 계층에서 사용되는 오류 제어 방법 중 하나로 ARQ(자동 반복 요청) 프로토콜의 한 종류이다.
데이터 전송 중 손상된 프레임이나 오류가 발생한 프레임을 확인하고, 이에 따라 다시 전송하는 방식을 사용한다.
송신측은 수신측으로부터 수신확인을 받을 때까지 전송한 프레임들에 대한 모든 복사본을 보유하여 추후 재전송에 대비하게 된다.
송신측은 프레임 전송에 실패했다고 판단되었을 경우에(타이머 종료) 저장하고 있는 모든 복사본을 재전송한다.
수신단의 동작을 단순하게 하기 위하여 모든 복사본을 재전송하는 방식이다.
성공적으로 전송된 프레임까지 모두 재전송하기 때문에 네트워크 자원을 불필요하게 낭비하는 단점이 있다.

GBN 프로토콜에서 효율적인 데이터 전송을 관리하는 법
순서 번호 (Sequence Number): GBN 프로토콜에서는 각 프레임에 순서번호가 할당된다. 순서 번호는 프레임의 순서를 나타내며, 송신자는 이를 통해 수신자로부터 수신 확인(ACK)을 받을 수 있다. 헤더에 m비트를 사용하여 순서번호를 부여한다.

슬라이딩 윈도우 (Sliding Window) 송신자와 수신자 간에 데이터 전송을 동적으로 제어하는 메커니즘이다. 송신자는 슬라이딩 윈도우 내에 있는 프레임만을 전송할 수 있는데 송수신이 완료되면 슬라이딩 윈도우가 앞으로 이동하여 새로운 프레임을 전송할 수 있게 된다.
송신자가 일정 시간 이내에 수신 확인을 받지 못하면 슬라이딩 윈도우 내의 모든 프레임을 재전송하는 방식이다.
만약 수신자가 패킷 2를 기다리고 있는데 송신자가 패킷 1을 보낸다면 수신자는 수신확인을 하지 않고 폐기하게 된다.
여기서 슬라이딩 윈도우는 동적으로 조정될 수 있으며 크기는 동시에 전송할 수 있는 프레임의 최대 개수를 나타낸다.




📌선택적 반복 프로토콜(Selective Repeat Protocol)
GBN 프로토콜에서 수신단의 동작을 단순하게 하기 위하여 모든 복사본을 재전송하는 방식의 단점을 보완한 프로토콜이다.
정지-대기(Stop-and-Wait)와 Go-Back-N과 같은 다른 ARQ(자동 반복 요청) 프로토콜과 대조적으로 잡음이 많고 재전송이 빈번한 환경에서 다수의 프레임이 불필요하게 재전송되는 상황을 제거하여 손상된 프레임만 선택적으로 재전송한다. 당연히 구현시에 복잡도가 더 높아진다.

- 위의 식을 사용시 순서번호 m이 3이라고 하면 GBN 방식에선 (2^m)-1로 적용해서 슬라이드 윈도우의 최대크기가 7로 나오고 SRP방법으론 4가 나온다. 송신상과 수신창이 동일하다.
- 포괄적 수신확인보다는 선택적 수신확인 방식을 사용함(혹은 적극적으로 NAK를 사용하기도 함) 즉 못받은 파일을 콕 찍어서 알려준다는 뜻이다.




💡데이터링크 프로토콜의 예 ( Example of Data Link porotocol)
📍 HDLC(고속 데이터 링크 제어)개요(Overview)
- 데이터 링크 계층에서 사용되는 프로토콜 중 하나인데 점-대-점(point to point)과 다중점 링크 상(Multipoint)에서 반이중통신과 전이중통신을 모두 지원하도록 설계된 비트 중심 프로토콜이다. 데이터 링크의 제어와 에러 감지 및 수정 기능을 수행하여 데이터를 안전하게 전송하도록 한다.
📍HDLC methods
HDLC는 데이터를 안전하게 전송하기 위해 2가지의 전송 모드를 지원한다.

📌 ABM(Asynchronous Balanced Mode) 점-대-점(Point-to-point)통신에서만 가능하며 각 장치들이동등한 수준의 장치로서 각각 송수신이 가능함
📌 NRM(Normal Response Mode) 점-대-점(Multipoint)과 다중점 링크 상에서 모두 사용가능하며 하나의 주국(primary node)의 주도로 통신이 진행된다.
비트 중심 프로토콜 중 하나이다.
📍HDLC 프레임(High-Level Data Link Control Frame)

HDLCC(High-Level Data Link Control)는 데이터 링크의 제어와 에러 감지 및 수정 기능을 안정적으로 수행하기 위해 '프레임'을 사용한다.
- 📌 정보 프레임 (Information frame): 사용자 데이터를 전달하는 데 사용된다. 이 프레임은 3비트 또는 7비트 순서번호를 가집진다. I-frame이라고도 한다.
📌감시 프레임 (Supervisory frame): 장치를 제어하기 위해 사용된다. 주로 오류 제어와 흐름 제어를 위해 사용된다. S-frame이라고도 한다.
📌무번호 프레임 (Unnumbered frame): 시스템이나 링크의 관리를 위해 사용된다. 주로 연결 설정, 해제 및 기타 관리 기능을 수행하는 데 사용된다. U-frame이라고도 한다.
📍PPP프로토콜 개요(Overview of Point-To-Point Protocol, PPP protocol)

HDLC의 변형된 프로토콜이다. HDLC의 복잡한 구조를 단순화한 주로 특수 네트워크(예: 전화 네트워크)에 연결된 사용자 장비와 해당 네트워크 상의 특정 서버 간의 연결에 사용된다.
점-대-점 통신에서 가장 널리 사용되는 것은 바이트 중심 프로토콜인 PPP프로토콜이다.
전화 네트워크, 케이블 TV 네트워크, 직렬 케이블, xDSL, SONET/SDH와 같은 다양한 네트워크에서 PPP가 사용된다.
특정한 두 장치를 직접 연결하는 바이트 중심 프로토콜으로, 일반적으로 점-대-점 환경에 사용된다. 여러 종류의 물리적 매체나 프로토콜 위에서 동작할 수 있으며, 주로 IP 데이터그램을 전달하기 위해 사용된다.
📍PPP 프레임(PPP protocol frame)

‘01111110’값의 1바이트 플래그를 사용하며 ‘01111101’을 탈출문자로 바이트 채우기(byte-stuffing) 수행
점-대-점 프로토콜로서 주소 값은 항상 일정하기 떄문에 별 의미가 없다.
CRC를 통한 오류제어는 수행(위의 그림에서 FCS부) 하지만, 흐름제어는 수행하지 않는다.
📍Multiplexing in PPP protocol (PPP프로토콜의 다중화)
PPP(점-대-점 프로토콜)에서의 다중화는 다양한 프로토콜 필드를 통해 PPP는 효율적으로 관리하고 네트워크 연결을 설정하며, 보안과 인증 등의 기능을 수행할 수 있다. 주요한 다중화 기능은 다음과 같다.
📌 프로토콜 필드를 통한 상위 프로토콜 결합(Combining Upper-Layer Protocols via Protocol Field)
- PPP 프레임에는 프로토콜 필드가 있어 여러 종류의 상위 프로토콜을 결합할 수 있다. 이를 통해 하나의 PPP 링크를 통해 다양한 네트워크 계층 프로토콜을 전송할 수 있게 된다.
📌 LCP, Link Control Protocol (링크 제어 프로토콜): PPP 링크의 설정, 유지, 해제, 및 파라미터 협상을 담당한다. 이를 통해 PPP 링크의 연결을 설정하고 필요한 매개변수를 협상할 수 있.
📌 NCP, Network Control Protocol (네트워크 제어 프로토콜): 네트워크 계층 프로토콜의 구성을 담당한다. 주로 IP 주소 값의 설정과 관련된 작업을 수행한.
📌 AP, Authentication Protocol (인증 프로토콜): 인증 프로토콜은 사용자나 단말의 인증을 담당한다. 주로 PAP (비밀번호 인증 프로토콜)와 CHAP (도전-응답 인증 프로토콜)이 사용된다.






