💡 핵심 인사이트
HDLC는 헤더의 **'제어부(Control Field)'**에 박힌 비트 코드 1~2개로 이 박스의 정체성을 3가지로 순식간에 바꿔버립니다.
사용자의 찐 데이터를 나르는 I-프레임, 데이터 없이 에러(ACK/NAK)만 챙기는 S-프레임, 선을 꼽고 끊는 통제 역할을 하는 U-프레임입니다.
Ⅰ. I-Frame (Information, 정보 프레임) - "택배 트럭"
사용자의 진짜 데이터(사진, 웹페이지 패킷 등)를 가득 싣고 달리는 메인 화물 트럭입니다.
- 제어부 첫 비트: 무조건 **
0**으로 시작합니다. 수신기는 첫 비트가 0이면 "오, 진짜 데이터구나!" 하고 정보부(Information Field)를 깝니다. - 핵심 무기 (피기배킹): 이 트럭은 짐만 나르는 게 아닙니다. 제어부 안에 슬라이딩 윈도우를 위한 **
내 전송 순서 번호 N(S)**와, **내가 다음번에 너한테 받아야 할 번호 N(R)**을 같이 적어서 보냅니다. 즉, 내 데이터를 보내면서 상대방이 아까 보낸 데이터의 수신 확인(ACK)을 업어 태우는(Piggybacking) 기적의 가성비 프레임입니다.
Ⅱ. S-Frame (Supervisory, 감독 프레임) - "교통 경찰"
사용자의 데이터(Information)는 단 1바이트도 싣고 있지 않은, 순수한 통신 통제용 깡통 프레임입니다.
- 제어부 첫 비트: 무조건 **
10**으로 시작합니다. - 역할: 내가 보낼 데이터(I-프레임)가 없을 때, 상대방에게 ACK(잘 받았어)나 NAK(에러 났어)만 따로 던져주고 싶거나, 흐름 제어를 할 때 씁니다.
[ S-프레임의 4가지 종류 (시험 단골) ]
- RR (Receive Ready):
ACK입니다. "지금까지 잘 받았고, 다음 N번 내놔! 내 버퍼도 널널해!" - RNR (Receive Not Ready):
흐름 제어용 ACK입니다. "지금까지 받은 건 정답이야(ACK). 근데 내 메모리 버퍼 터질 것 같으니까 제발 다음 거 당분간 쏘지 마(Not Ready)! 기다려!" (속도 조절 스위치). - REJ (Reject):
NAK (Go-Back-N 용)입니다. "방금 N번 프레임 깨졌어! N번부터 싹 다 다시 보내!" - SREJ (Selective Reject):
NAK (Selective Repeat 용)입니다. "딴 건 됐고, 딱 N번 프레임 하나만 다시 보내봐."
Ⅲ. U-Frame (Unnumbered, 비번호 프레임) - "회선 관리자"
통신을 시작하기 전에 "선 좀 꼽자", "이제 끊자" 등 연결 셋업을 담당하는 관리자입니다. 순서 번호(Sequence Number)가 전혀 안 적혀 있어서 Unnumbered(비번호)라고 부릅니다.
- 제어부 첫 비트: 무조건 **
11**로 시작합니다. - 역할: 에러 검출 이런 게 아니라, 링크를 처음 열 때(SABM: 비동기 균형 모드로 연결하자!), 에러 나서 링크를 리셋할 때, 접속을 끊고 집에 갈 때(DISC: Disconnect) 던지는 최상위 시스템 제어 명령어들입니다.
📢 섹션 요약 비유: HDLC 통신망은 도로망입니다. **I-프레임(0)**은 과자를 싣고 배달 가는 듬직한 **'택배 트럭'**입니다. **S-프레임(10)**은 짐칸은 텅 비어있고 스피커만 달린 **'경찰차'**로, 도로 위에서 "잘 오고 있다(RR)", "잠깐 차 세워라(RNR)", "3번 트럭 뒤로 빽해라!(REJ)"라고 호루라기를 부는 교통정리 요원입니다. **U-프레임(11)**은 아예 도로의 차단기를 올리거나 내리는 **'톨게이트 관리 요원'**입니다.