> For the complete documentation index, see [llms.txt](https://riverallzero.gitbook.io/summary/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://riverallzero.gitbook.io/summary/data-communication/data-link-control-protocols.md).

# Data Link Control Protocols

### Flow Control

* 수신측 속도에 맞춰 frame을 보내는 것
* flow control이 없는 경우 수신자의 버퍼가 가득차거나 오버플로우가 발생해 데이터 소실 가능

#### 1. Stop and Wait

* 송신자가 frame을 보내면 수신자가 잘 받았다고 ACK를 보내기 전까지 다음 frame을 보내지 않고 기다림
* 수신측에서는 ACK를 보내지 않음으로써 flow를 멈출 수 있음

#### 2. Sliding Window

* 데이터를 동시에 보낼 수 있는 사이즈를 윈도우라고 정의하고, 수신측에서 받은 데이터는 옆으로 슬라이딩하여 윈도우를 줄임
* 송신측과 수신측의 윈도우는 동기화
* full-duplex linke 사용시 데이터와 ACK를 동시에 전송 가능(piggyback)

### Error Control

#### 1. Stop and Wait ARQ

* 송신측에서 frame을 보내고 ACK(0, 1)를 기다림
* 일정 시간까지 ACK가 도착하지 않으면 time out 하고 재전송
* 오류가 일어나기 직전 부분은 무시

#### 2. Go Back N ARQ

* 가장 흔히 사용되며 sliding window 기반 동작
* 수신측은 RR(Recieve Ready), REJ(Reject)로 받고 싶은 frame, 거절된 frame을 송신측에 보냄
* REJ된 frame은 수신측에서 재전송해 잘 받을때까지 그 전에 받은 데이터는 무시

#### 3. Selective Reject ARQ

* reject된 frame만 재전송하고(재전송 최소화) 오류난 frame이 잘 받아지기 전까지 받은 데이터는 버퍼에 저장
* 수신측의 버퍼가 커야함

### HDLC(High Level Data Link Control)

#### Data Transfer Mode

* NRM(Normal Response Mode): 불균형적 링크 구성, primary station이 세션을 열고 secondary는 응담안함
* ABM(Asynchronous Balanced Mode): 균형적 링크 구성, primary와 secondary station이 서로 대등하게 명령과 응답하며 동작
* ARM(Asynchronous Response Mode): 불균형적 링크 구성, primary의 허락 없이 secondary는 응답 가능(원래는 primary의 통제하에 있음)

#### Frame format

* flag: 프레임 시작과 끝을 나타내는 패턴, 프레임 동기화를 위해 사용
  * bit stuffing: 데이터와 flag를 구분하기 위해 1이 연속으로 5번 나오면 무조건 그 다음 0 삽입
* address field: frame 발신지나 목적지인 secondary station의 주소를 포함, 7bit가 주소이고 나머지 1bit는 주소의 끝을 알림(1), 11111111이면 모든 수신측에 보내는 것
* control field: 프레임의 종류를 나타내고 P/F로 표시, P가 1이면 Poll이며 secondary station이 있는지 확인하는 용도, F가 1이면 Final이며 secondary에서 primary station으로 데이터를 전송할때 사용
* FCS(Frame Check Sequence): HDLC 프레임이 상대국으로 잘 전송되었는지 확인하기 위한 에러 검출용 16bit 코
* I-frames(Information): 사용자 정보, 제어 정보 포함(사용자 데이터 전송, 수신 확인을 위해 사용)
* S-frames(Supervisory): 제어 정보만 포함(수신확인, 전송 요청의 제어를 위해 사용)
* U-frames(Unnumbered): 링크 관리 정보를 포함(링크 제어용으로 사용)

#### HDLC 3단계

1. 초기화: 상대방에게 초기화가 요청되었음을 알리고, NRM, ABM, ARM 중 어느 모드를 사용할건지 요청
2. 데이터 전송: error control을 이용해 데이터를 전송
3. 연결해제: 송신측이 수신측에게 연결해제하자고 DISC를 보내고, 수신측에서는 알겠다고 UA를 보내면 연결이 해제되며 통신이 끊김
