Data Link Control
Data Link Control은 직접 연결된 두 스테이션 사이에서 프레임을 안정적으로 주고받는 OSI 2계층의 제어다. 이 페이지는 흐름 제어와 오류 제어(ARQ)를 중심으로 그 요구사항을 다룬다. IP Internetworking은 Data Link가 다루는 frame 위에서 IP가 datagram을 어떻게 다루는지를 설명한다.
Data Link Control이 처리해야 하는 요구사항
두 스테이션 사이 효과적인 데이터 통신을 위해 Data Link Control이 처리하는 요구사항이다.[1]
- Frame synchronization — 프레임 단위 동기
- Flow control — 수신자 과부하 회피
- Error control — 손실/손상 프레임 처리
- Addressing — 송수신 주소 식별
- Control and data — 제어 정보와 데이터 구분
- Link management — 링크 설정/유지/종료
흐름 제어 (Flow Control)
송신 엔티티가 수신 엔티티를 데이터로 과부하시키지 않도록 하는 기술이다. 수신자는 보통 최대 길이의 데이터 버퍼를 할당하고, 수신 후 상위 레벨로 전달하기 전 일정 처리를 수행한다. 흐름 제어가 없으면 수신자 버퍼가 채워져 오버플로우가 발생할 수 있다.[2]
| 방식 | 설명 |
|---|---|
| Stop-and-Wait | 가장 단순한 형태. 큰 데이터 블록을 작은 프레임으로 나눠 전송하고, 각 프레임 전송 후 ACK를 기다린다. 공유 매체를 한 스테이션이 오래 점유하지 않게 한다. 전송 시간이 길어질수록 오류 가능성이 커진다.[3] |
| Sliding Window | 여러 번호가 매겨진 프레임을 동시에 전송할 수 있다. 수신자는 W 길이 버퍼를 가지고, 송신자는 ACK 없이 최대 W 프레임을 보낼 수 있다. ACK는 다음에 예상되는 프레임 번호를 포함한다. 시퀀스 번호는 필드 크기(k)에 의해 제한되어 2^k modulo로 번호가 매겨지고, 최대 윈도우 크기는 2^k − 1이다. 풀 듀플렉스에서는 ACK를 피기백(piggyback)할 수 있다.[4] |
오류 제어 (Error Control)
- 오류 검출 (Error detection)
- 긍정적 확인 (Positive acknowledgment)
- 타임아웃 후 재전송 (Retransmission after timeout)
- 부정적 확인 및 재전송 (Negative acknowledgment and retransmission)
손실된 프레임(도착 안 함)과 손상된 프레임(도착했으나 일부 비트 오류)을 구분해 처리한다.[5]
ARQ (Automatic Repeat Request)
ARQ는 신뢰할 수 없는 데이터 링크를 신뢰할 수 있는 것으로 바꾸는 오류 제어 메커니즘의 총칭이다.[6]
| ARQ 버전 | 설명 |
|---|---|
| Stop-and-Wait ARQ | 한 프레임 보내고 ACK를 기다리며, 수신자의 응답이 도착할 때까지 다른 데이터를 보낼 수 없다.[6:1] |
| Go-back-N ARQ | 슬라이딩 윈도우 기반. 손실/오류 프레임 발생 시 그 이후 모든 프레임을 재전송한다(N만큼 되돌아감).[6:2] |
| Selective-reject ARQ | 슬라이딩 윈도우 기반. 손상된 프레임만 선택적으로 재전송한다. 재전송을 최소화하지만 수신자는 충분히 큰 버퍼가 필요하고 송신자 논리가 더 복잡하다.[6:3] |
sequenceDiagram
participant S as Source
participant D as Destination
S->>D: Frame 1
S->>D: Frame 2
Note over S,D: 정상 전송: 순서대로 수신
S-xD: Frame 3 (loss)
S--xD: Frame 4 (error)
S->>D: Frame 5- 오류 제어는 frame loss와 garbled frame을 검출하고, ARQ 같은 재전송 규칙으로 복구한다.
- 흐름 제어는 오류 여부와 별개로 sender가 receiver buffer를 넘치게 하지 않게 한다.
신뢰성과 단순성의 트레이드오프
- Stop-and-Wait — 구현이 단순하지만 지연이 크다.
- Sliding Window — 동시 전송으로 효율이 오르지만 시퀀스 관리 비용이 든다.
- Go-back-N — 재전송 정책이 단순하지만 불필요한 재전송이 늘어난다.
- Selective-reject — 필요한 것만 재전송하지만 수신 버퍼·로직이 복잡해진다.
신뢰성 vs 단순성 트레이드오프는 네트워크의 기본 질문이며, 같은 트레이드오프가 상위 계층(TCP 재전송 정책)에서도 반복된다고 볼 수 있다. 흐름 제어와 오류 제어를 개념적으로는 분리해 다루지만, 실제로는 ACK 시퀀스 번호 하나로 통합 구현되는 경우가 많다.[7]
흔히 놓치는 지점
- Stop-and-Wait를 긴 propagation delay 링크에 쓰면 링크 활용도가 1보다 훨씬 낮아진다.
- Sliding Window에서 시퀀스 번호 필드 k와 window 크기 W를 2^k로 잡으면 ACK 모호성(ambiguity)이 생길 수 있다.
- Go-back-N을 오류율 높은 링크에 쓰면 N이 클 때 재전송 비용이 폭증한다.
- Selective-reject를 수신 버퍼가 부족한 상태에서 쓰면 out-of-order 프레임을 보관할 공간이 없다.
- ACK에 piggyback을 하지 않고 별도 ACK 프레임을 계속 보내면 대역폭이 낭비된다.
- 흐름 제어와 오류 제어를 혼동해 한쪽만 구현하는 경우가 있다.
관련
- IP Internetworking and Transport Foundations — Data Link가 프레임을, IP가 데이터그램을 다룬다. 같은 신뢰성 트레이드오프가 전송 계층(TCP)에서도 반복된다.
출처
테스트 질문
- Stop-and-Wait와 Sliding Window 흐름 제어의 효율 차이는 무엇인가?
- Sliding Window 최대 윈도우 크기가 2^k − 1인 이유는 무엇인가?
- Go-back-N과 Selective-reject ARQ의 트레이드오프는 무엇인가?
- ARQ가 "신뢰할 수 없는 데이터 링크를 신뢰할 수 있는 것으로 바꾼다"는 것은 구체적으로 무엇을 의미하는가?
- ACK piggyback이 풀 듀플렉스 링크에서 유리한 이유는 무엇인가?
Data Link.md — "효과적인 데이터 통신을 위해 두 개의 직접 연결된 송수신 스테이션 사이에 필요한 요구 사항 및 목표": 프레임 동기화, 흐름 제어, 오류 제어, 주소 지정, 제어 및 데이터, 링크 관리 ↩︎
Data Link.md — "송신 엔티티가 수신 엔티티를 데이터로 과부하시키지 않도록 하는 기술", "흐름 제어가 없으면, 수신자의 버퍼가 채워져서 오버플로우될 수 있습니다" ↩︎
Data Link.md — "가장 단순한 형태의 흐름 제어", "전송 시간이 길어질수록 오류가 발생할 가능성이 높아져 전체 프레임을 재전송해야 할 수 있습니다" ↩︎
Data Link.md — "송신자는 ACK 없이 최대 W 프레임을 보낼 수 있다", "시퀀스 번호는 필드 크기(k)에 의해 제한", "최대 윈도우 크기는 최대 2^k - 1이 된다", "풀 듀플렉스 링크가 있는 경우, ACK를 피기백할 수 있다" ↩︎
Data Link.md — 오류 제어 기술 목록과 "손실된 프레임: 프레임이 도착하지 않음", "손상된 프레임: 프레임이 도착했으나 일부 비트에 오류가 있음" ↩︎
Data Link.md — "ARQ의 효과는 신뢰할 수 없는 데이터 링크를 신뢰할 수 있는 것으로 바꿉니다", Stop-and-Wait/Go-back-N/Selective-reject ARQ 각 절. "수신자의 응답이 도착할 때까지 다른 데이터를 보낼 수 없습니다." (L65), "재전송을 최소화합니다.", "수신자는 충분히 큰 버퍼를 유지해야 합니다.", "송신자의 논리가 더 복잡합니다." (L89-91) ↩︎ ↩︎ ↩︎ ↩︎
출처 매핑 미확인 — "같은 트레이드오프가 TCP 재전송 정책에서도 반복된다"와 "흐름 제어·오류 제어가 실제로는 하나로 통합 구현되는 경우가 많다"는 종합은 source에 없는 Wiki 차원의 해석이다. ↩︎