Broadcast Link : DLC + MAC(링크 다중 접근에 대한 제어)
Point to Point Link (PTP) : DLC (링크 다중 접근에 대한 제어가 필요 없으므로)
Fragmentation : 큰 데이터 블록을 작은 데이터 블록 즉, 프레임으로 분할하는 것.
프레임의 장점
전체 데이터를 한 번에 송신할 수 없는 환경이라면, 데이터를 나눠서 전송하면 된다.
오류 발생 시 전체 프레임을 재전송하는 것보다 일부 프레임을 재전송하는 것이 효율적이다.
Framing : 데이터 링크 계층에선 데이터그램을 여러 프레임으로 만드는 방법에 대해 정의한다. 이 과정에서 프레임은 여러 종류가 있으므로, 각 프레임을 구별할 수 있도록 하는 비트를 추가한다.
Flag : 프레임의 시작과 끝을 나타내는 필드
Header : 소스와 목적지 주소가 포함되는 필드
Trailer : 데이터 링크 계층에서 에러 체크를 위한 데이터.
Byte Stuffing and unstuffing : 프레임 내에서 각 필드가 서로 혼동되지 않도록 구분하는 바이트를 첨가하거나 추출하는 과정.
Byte Stuffing : 프레임 내의 특정 패턴의 바이트가 실제 데이터와 혼동되지 않도록 하기 위해 특수 바이트를 삽입하는 것.
Byte Unstuffing : 바이트 스터핑의 반대 과정으로, 스터핑된 프레임에서 이스케이프 바이트를 제거하며 원본 데이트를 복원하는 과정.
Buffer : 각 데이터 링크 계층이 프레임을 보관할 메모리 슬롯이다.
Flow Control (흐름 제어) : 수신자의 데이터 처리 속도를 넘어서는 데이터를 송신자가 보낸다면 문제가 발생할 수 있다. 따라서 송신자가 보내는 데이터의 양이나 속도를 조절하는 것을 흐름 제어라고 한다.
Producer : 소비자로부터 다음 프레임을 보내달라는 요청을 받았을 때, 데이터를 보낸다.
Consumer : 버퍼가 비워져 있어 데이터를 받을 수 있는 상태가 되면, 생산자에게 데이터를 보내라는 신호를 보낸다.
Flow Control의 방식에는 크게 4가지가 존재한다.
Simple Protocol
Stop and Wait Protocol
Go Back N Protocol
Selective Repeat Protocol
Simple Protocol : 데이터 링크 계층에서 사용되는 가장 기본적인 통신 프로토콜 중 하나이다. 이 프로토콜은 흐름 및 오류 제어 기능이 없다. 즉, 송신자가 네트워크 및 수신자의 상태를 고려하지 않고 데이터 프레임을 연속적으로 보내는 방식이다.
Sender : 데이터 프레임을 생성하는 즉시 수신자에게 전송한다.
Receiver : 전송받은 프레임을 즉시 처리할 수 있는 능력을 갖고 있다고 가정한다면, 수신하는 프레임으로 인한 과부하는 없다. 하지만 현실에선 불가능하다.
Stop and Wait Protocol : 송신자는 오류 검출을 위한 비트를 첨가하여 생성한 프레임을 전송하고, 수신자로부터 확인 응답(Acknowledgment, ACK)을 받을 때까지 대기한다. 즉, 흐름 제어와 오류 제어 기능을 탑재한다.
송신자 : 한번에 하나의 프레임만을 전송하고, 해당 프레임에 대한 수신자의 확인 응답(ACK)을 기다린다.
수신자 : 프레임을 받고 오류 검출 과정을 거친 뒤, 정상적으로 프레임을 받았다면 송신자에게 ACK 메시지를 보낸다.
프레임이 손상됐거나, ACK가 소실된 경우 등 정상적인 데이터 흐름이 아닐 때 송신자는 무한 대기(Deadlock)에 빠질 수 있다. 이를 해결하기 위해 Timer를 설정한다.
Timer : 송신자가 ACK를 받기 위해 일정 시간동안 대기하다 타임 아웃이 발생하면, 오류가 발생했다고 가정하고 마지막으로 보냈던 프레임을 재전송한다.
특징
1). 흐름 제어 및 오류 제어 : 흐름 제어 및 오류 제어 기능을 탑재해 신뢰성 있는 데이터 전송을 보장한다.
2). 일방 통신 : 송신자는 ACK 메시지를 기다리는 동안 추가적인 데이터를 전송할 수 없다. 즉, 링크 활용도가 매우 낮다.
Stop and Wait 예제 1
위 예제에서, 왕복 시간(RTT)동안 링크는 20,000비트()를 전송할 수 있지만, 실제로는 한번에 1,000비트만 전송할 수 있다.
위와 같은 네트워크 환경에서 해당 프로토콜의 처리량은 매 100ms마다 1패킷(1460byte), 즉 초당 10패킷이다. 즉, 네트워크가 제공하는 처리량은 10Mbps인데 반해 처리량은 116kbps에 불과하다.
Go-Back-N Protocol (GBN) : Stop and Wait 프로토콜의 전송 효율성을 향상시키기 위해 설계된 프로토콜. 송신자가 ACK 응답을 기다리는동안 여러 패킷을 전송할 수 있도록 하여, 링크 효율성을 높인다. 즉, 한번에 하나의 패킷만을 전송할 수 있는 Stop and Wait 프로토콜과 달리 GBN 프로토콜은 여러 패킷을 동시에 전송할 수 있기에 전송 효율성을 높일 수 있다.
Sliding Window : 송신자는 정해진 윈도우 크기 만큼의 패킷을 ACK 수신을 기다리지 않고 보낼 수 있다. 즉, 윈도우라는 것은 내가 ACK를 받지 못하더라도 보낼 수 있는 패킷의 양을 의미한다.
슬라이딩 윈도우를 좀 더 자세히 살펴보면, 파란색으로 칠해져있는 부분이 패킷을 보냈지만 ACK를 받지 못한 부분이다.
나머지 흰색 부분은 데이터 전송 준비가 완료된다면 바로 보낼 수 있는 패킷이다.
만약 ACK 2(2번 패킷을 받을 차례라는 메시지)가 도착한다면, 슬라이딩 윈도우는 오른쪽으로 이동하여 2번 패킷부터 n크기만큼의 패킷을 보낼 수 있다.
Flow Diagram
송신자 : 전송 준비가 완료된 패킷을 보낸다. ACK 메시지가 도착하지 않더라도 다음 패킷을 보낼 수 있다. 패킷을 보낼 때 타이머를 세팅하고, Base 패킷과 보낼 패킷 번호가 일치하면, 타이머가 종료된다.
수신자 : 패킷 수신 후, 순서가 맞는 패킷에 대해서만 ACK 응답을 보낸다. ACK 메시지는 다음에 받아야 할 패킷 번호가 담겨 있다.
재전송 : 패킷 손실, 오류 등의 이유로 ACK 메시지가 일정 시간 도착하지 않는다면, Timer에 의해 Time out이 발생한다. 이후 송신자는 ACK 메시지를 받지 못한 패킷부터 시작해 모든 패킷을 재전송한다.
특징
효율성 : 여러 패킷을 동시에 전송할 수 있고, ACK 응답을 기다리는 동안에도 패킷을 전송할 수 있기 때문에 Stop and Wait 프로토콜에 비해 링크 효율성이 크게 증가한다.
복잡성 : 패킷의 순서를 관리하고, 손실된 패킷을 재전송하는 과정이 Stop and Wait 프로토콜에 비해 복잡하다.
대역폭 낭비 : 오류 발생 시, 오류가 감지된 패킷부터 그 이후의 모든 패킷을 재전송해야 하므로 대역폭이 낭비될 수 있다.
예제
위 예제에서 볼 수 있듯이, 동일한 환경에서 GBN 프로토콜은 Stop and Wait 프로토콜에 비해 슬라이딩 윈도우 사이즈(15배) 만큼의 링크 활용도를 더 얻을 수 있다.
패킷 손실 시 Flow Diagram
패킷 0이 전송되고, ACK 1을 수신받음.
패킷 1의 전송이 손실되고, 패킷 2, 3은 정상적으로 전송 됨.
수신자는 패킷 2, 3을 받지만, 순서가 맞지 않아 폐기함.
수신측에선 계속해서 ACK 1을 보냄. (패킷 1을 받지 못했기 때문에)
송신자는 ACK 1을 계속해서 받지만, 이미 패킷 1을 보낸 상태이므로 ACK를 무시한다.
타임아웃이 발생하고 패킷 1, 2, 3을 재전송한다.
ACK 메시지를 받을 때마다 Timer를 재시작하며, 모든 ACK 메시지를 받은 뒤 Timer가 종료된다.
Timer : 정상적인 ACK 수신을 못하는 상태로 시간이 경과하면 타임 아웃이 발생한다.
Timer의 시간을 너무 크게 설정한 경우 : 오류를 감지하고 데이터 재전송까지의 시간이 너무 오래 걸림.
Timer를 시간을 너무 작게 설정한 경우 : ACK 수신을 기다리는 시간이 너무 짧아 데이터 재전송을 과하게 시도함.
Selective-Repeat Protocol : 이 프로토콜은 패킷 손실이 자주 발생하는 환경에서 GBN의 단점을 개선하였다. 이 프로토콜의 핵심은 유실되거나 손상된 패킷만을 재전송하는 것이다. 이로 인해 불필요한 패킷의 재전송을 줄여 전체적인 네트워크 성능을 개선할 수 있다.
Receiver에 SlideWindow와 크기가 같은 Window가 존재해, 순서가 맞지 않는 데이터 패킷도 버퍼에 저장한다.
오류 발생 시 특정 패킷만을 재전송 하기 위해 전송 패킷과 ACK 메시지에 Sequence Number, ACK Number를 실어서 보낸다.
Flow Diagram
송신자 : Timer에 정해진 시간만큼 전송을 시작한다. 특정 패킷에 대한 ACK 메시지가 소실되었다면, 타임아웃이 발생한 이후에 해당 패킷만 재전송한다.
수신자 : 받은 패킷의 순서를 추적할 수 있는 비트가 존재하기 때문에, 순서가 맞지 않는 패킷들도 버퍼에 저장한다. 정상적으로 받은 패킷에 대해서만 ACK 메시지를 보낸다.
특징
효율성 : GBN보다 패킷 손실에 대해 내성이 있으므로 네트워크를 효율적으로 사용할 수 있다. 즉, 패킷 손실이 자주 발생하는 환경일수록 성능 향상을 기대할 수 있다.
버퍼 관리 : 수신자는 순서가 맞지 않는 패킷들도 버퍼에 저장하고, 모든 패킷을 정상적으로 수신하면 순서대로 재조립한다.
구현 : GBN에 비해 구현 난이도가 높고, 패킷 관리가 복잡해진다.
HDLC는 DLC 안에 포함되는 하위 개념이자 좀 더 구체적인 프로토콜을 정의한다.
Transfer Mode : HDLC는 세 가지 주요 운영 모드를 지원한다.
Asynchronous Balanced Mode (ABM) : 양방향 통신을 지원하며, 각 장치는 독립적으로 데이터를 전송하고 수신한다. 주로 Point-to-Point 링크에서 사용함.
Asynchronous Response Mode (ARM) : Primary Station이 Secondary Station에게 데이터를 전송하고, Secondary Station은 Primary Station의 명령에 응답할 때만 데이터를 전송할 수 있다. 이는 NRM과 유사하지만, 더 비동기적이다.
Framing in HDLC : HDLC는 다양한 운영 모드를 지원하고 제어하기 위해 세 가지 유형의 프레임을 정의한다.
I-Frames (정보 프레임) : 데이터를 전송하는 데 사용한다. 정보 데이터를 포함하고, 순서 번호를 제공하여 데이터 패킷의 순서를 지정하며 오류 검사 기능을 제공한다.
S-Frames (감독 프레임) : 제어 기능을 수행하며, 정보 프레임의 전송을 관리하는 데 사용된다. 예를 들면, 수신측이 송신측에게 데이터를 더이상 보내지 말라고 요청하거나 특정 프레임의 재전송을 요청하는 식이다.
U-Frames (번호 없는 프레임) : 일반적으로 연결 설정, 연결 해제, 오류 관리와 같은 특별한 목적으로 사용하는 프레임이다.
Control Field Format : 각 프레임에 존재하는 컨트롤 필드는 프레임의 종류를 정의하는 필드이다. 2bit Data이다.
HDLC 예제
연결 설정 및 해제 : Node A는 U-프레임을 사용해 Node B에 연결을 요청(SABM)하고, Node B는 해당 요청에 대한 ACK(UA)를 보낸다. 이 과정을 거치면 두 노드 간 연결이 활성화 되며, 데이터 전송이 시작된다.
데이터 전송 : 해당 예시에서 구체적으로 설명되지 않지만, I-프레임을 사용해 데이터 전송이 이루어지며, 필요에 따라 S-프레임을 사용해 흐름 제어 및 오류 검사를 수행할 것이다.
연결 해제 : 데이터 전송이 끝나면, A는 연결 해제를 위해 U-프레임을 사용해 B에게 연결 해제를 요청(DISC)하고, B는 해당 요청에 대한 ACK(UA)를 보낸다. 이 과정을 거치면 두 노드 간 연결이 해제된다.
SABM 프레임은 연결을 시작하고자 할 때, DISC 프레임은 연결을 해제하고자 할 때 사용한다. 각 요청에 대한 UA 프레임은 ACK 응답을 나타낸다. 이 과정을 통해 각 노드는 현재 상태를 명확하게 인지하고 통신을 제어한다.
Piggybacking : 데이터 프레임과 함께 ACK 메시지를 전송하는 방식이다. 즉, 순서 번호와 ACK 번호를 함께 프레임에 담아 보낸다. 에러가 발생했을 때는 NAK 메시지를 전송하여 특정 프레임의 재전송을 요청한다.
송신자가 데이터 프레임을 전송할 때, 이전에 수신한 데이터에 대한 ACK 정보를 동일한 프레임에 포함시켜 전송한다. 이는 데이터와 수신 확인을 동시에 처리할 수 있도록 돕는다.
에러 처리 : 수신자가 에러가 발생했음을 인지한 경우, 해당 프레임에 대한 NAK(부정 수신 확인)을 송신자에게 전송한다. 혹은 수신자가 에러 발생 프레임의 순번을 건너뛰고 ACK를 전송하여 송신자가 이를 감지하고 해당 프레임을 재전송하도록 한다.
특징
Piggybacking은 양방향 통신에서 가장 효과적으로 작동한다.
효율성 증가 : 데이터와 수신 확인을 한번에 처리하기 때문에 링크의 효율성이 높다.
지연 감소 : 별도의 수신 확인 프레임을 기다릴 필요가 없어 통신 지연이 감소한다.
네트워크 부하 감소 : 수신 확인을 위한 추가적인 프레임 전송이 없기 때문에, 네트워크의 부하를 줄일 수 있다.
Point-to-Point Protocol (PPP) : Point-to-Point 네트워크 환경에서 데이터 통신을 관리하고 제어하기 위한 데이터 링크 계층의 프로토콜이다.
프레임
Address (1byte) : Point-to-Point 통신에서 상대방의 Address는 의미가 없기 때문에 항상 1로 채워져 있다.
Control (1byte) : 컨트롤 필드 또한 PPP에선 의미가 없는 필드이다. 따라서 상수로 값이 정해져 있다.
Protocol (2byte) : 해당 필드에 정의되어 있는 값을 통해 특정 프로토콜을 수행한다.
PPP의 세 가지 주요 프로토콜
Link Control Protocol (LCP, 링크 제어 프로토콜) : PPP 링크의 설정, 유지, 종료를 관리한다. LCP는 링크 설정 과정에서 매우 중요한 역할을 한다.
Authentication Protocol (AP, 인증 프로토콜) : 인증 프로토콜은 두 가지 종류가 있다.
Password Authentication Protocol (PAP) : 비밀번호 기반 인증 프로토콜로, 클라이언트가 사용자 이름과 비밀번호를 서버에 평문으로 전송한다. 이는 낮은 보안 수준을 보장한다.
Challenge Handshake Authentication Protocol (CHAP) : 챌린지-응답 메커니즘을 사용하여 보다 보안이 강화된 인증을 제공한다. 서버가 클라이언트에 챌린지를 보내고, 클라이언트는 그 챌린지에 대한 응답을 해시 값으로 반환한다.
Network Control Protocol (NCP, 네트워크 제어 프로토콜) : NCP는 다양한 네트워크 계층 프로토콜을 지원하기 위해 사용된다. 각각의 네트워크 계층 프로토콜에 대해 NCP는 링크 상의 설정을 결정하고, 필요한 설정 정보를 교환한다.
MultiPlexing : PPP는 Multiplexing 기술을 사용하여 다양한 프로토콜을 동일한 링크에서 동시에 처리할 수 있다. 즉, 하나의 링크를 사용하여 각 단계에서 여러가지 프로토콜을 사용하여 작업을 처리한다.
링크 설정 : LCP를 사용하여 링크를 설정하고 구성한다. 링크 품질 모니터링, 에러 검출 등이 이 과정에 포함된다.
인증 : PAP, CHAP를 사용하여 클라이언트와 서버 간의 인증을 수행한다.
네트워크 계층 설정 : NCP를 사용하여 네트워크 계층 프로토콜을 설정하고, 네트워크 계층 데이터를 전송할 준비를 한다.
데이터 전송 : 링크가 설정되고 인증이 완료되면, 네트워크 계층 데이터를 전송한다.
데이터 전송이 완료되면, LCP를 사용하여 링크를 종료한다.