💡 핵심 인사이트
프레이밍을 할 때 길이(숫자)를 적어 보내는 방식이 에러에 취약하자, 개발자들은 프레임의 앞과 뒤에 '특수한 제어 문자(플래그)'를 달아서 시작과 끝을 명확히 알리는 문자 기반 프레이밍 방식을 고안해 냈습니다.
본문 데이터 안에 이 특수 문자와 우연히 똑같은 글자가 들어있을 때 발생하는 혼란을 막기 위해 DLE(Data Link Escape) 문자를 끼워 넣는(Stuffing) 것이 핵심입니다.


Ⅰ. 특수 문자를 이용한 프레이밍 (STX, ETX)

초기 컴퓨터 통신(PPP, BISYNC 등)에서는 텍스트(아스키코드) 기반의 통신이 주를 이루었습니다.

  • STX (Start of Text): "지금부터 진짜 데이터가 시작된다!"를 알리는 특수 문자입니다.
  • ETX (End of Text): "여기까지가 데이터의 끝이야!"를 알리는 꼬리표입니다.

즉, 송신기는 데이터 앞뒤에 [STX][ETX]를 붙여서 보냅니다. [STX] 안 녕 하 세 요 [ETX] 수신기는 쏟아지는 글자들을 보다가 [STX]가 나오면 녹음기 버튼을 켜서 데이터를 담고, [ETX]가 나오는 순간 녹음을 딱 멈추고 프레임을 완성합니다.


Ⅱ. 치명적 딜레마 (본문 안에 ETX가 있다면?)

이 방식은 텍스트(글자)만 보낼 때는 완벽했습니다. 하지만 시대가 발전하여 텍스트가 아닌 '사진, 동영상, 실행 파일(.exe)' 같은 이진(Binary) 데이터를 전송하게 되었습니다.

문제 발생: 이진 데이터 안에는 우연히 [ETX]와 똑같은 비트 패턴을 가진 조각이 들어있을 확률이 매우 높습니다.

  • 원본 데이터: [STX] 가 나 다 라 [우연히 만들어진 ETX] 마 바 사 [ETX]
  • 수신기의 오작동: 수신기는 데이터를 읽다가 중간에 등장한 가짜 [ETX]를 보고 "아, 프레임이 여기서 끝났구나!"라고 착각하여 뒤에 남은 '마 바 사'를 통째로 잘라 버립니다. (데이터 손실 및 동기화 붕괴).

Ⅲ. 해결책: 바이트 스터핑 (Byte Stuffing / 문자 삽입)

이 투명한 혼란을 막기 위해 **DLE (Data Link Escape)**라는 또 다른 특수 문자를 무기로 사용합니다. 키보드의 'Esc' 키와 같은 원리입니다.

  1. 프레임의 진짜 시작과 끝에는 반드시 **DLE STX**와 **DLE ETX**를 한 세트로 붙입니다.
  2. 송신기의 꼼수 (Stuffing):
    • 송신기가 데이터를 보낼 때, 만약 본문 데이터 안에 우연히 DLE와 똑같은 패턴의 글자가 발견되면, 그 가짜 DLE 바로 앞에 진짜 DLE 문자를 하나 더 강제로 끼워 넣습니다(삽입/Stuffing).
  3. 수신기의 해석 (Destuffing):
    • 수신기는 데이터를 읽다가 DLE 글자가 나오면 바짝 긴장합니다.
    • 만약 DLE 뒤에 또 DLE가 연달아 나오면? "아하, 송신기가 속임수(Stuffing)를 쓴 거구나! 이건 진짜 제어 문자가 아니라 그냥 본문 데이터일 뿐이야"라고 깨닫고, 앞에 붙은 가짜 DLE를 하나 떼어내어(Destuffing) 버리고 본문으로 저장합니다.
    • 만약 DLE 뒤에 ETX가 나오면? "이게 진짜 끝이구나!" 하고 프레임을 닫습니다.

📢 섹션 요약 비유: 문자 삽입 방식은 문장에 **'큰따옴표(" ")'**를 치는 것과 같습니다. 문장 중간에 실수로 따옴표가 들어가면 컴퓨터가 헷갈리므로(에러), 중간에 있는 따옴표 앞에는 역슬래시(\")를 강제로 끼워 넣어(Stuffing), "이건 진짜 따옴표가 아니라 그냥 글자야"라고 무사히 통과시켜 주는 원리입니다.