💡 핵심 인사이트
피기배킹(Piggybacking)은 데이터 통신(양방향 통신)에서 수신기가 송신기에게 응답(ACK) 신호만 달랑 덩그러니 보내면 네트워크 도로가 아까우니까, 마침 수신기도 저쪽으로 보낼 '자신의 진짜 데이터'가 있을 때 그 데이터 꼬리표에 ACK 신호를 슬쩍 '업어 태워서(돼지 등에 업히듯)' 같이 쏘아 보내는 꼼수 기술입니다.


Ⅰ. 단방향 통신의 낭비 (ACK 프레임의 비효율)

우리가 카카오톡을 할 때는 송신기와 수신기가 정해져 있지 않고, 양쪽이 서로 동시에 데이터를 주고받는 전이중(Full-Duplex) 방식입니다.

  • 기존의 낭비 방식:
    • A가 B에게 "안녕(데이터)"을 보냅니다.
    • B는 이 데이터를 잘 받았다는 표시로 **껍데기만 있고 내용물은 텅 빈 'ACK 전용 프레임'**을 A에게 굳이 하나 날려야 합니다.
    • 그리고 0.1초 뒤, B도 할 말이 있어서 "너 밥 먹었냐?(데이터)"를 담은 새로운 프레임을 A에게 또 쏩니다.
    • A에게 갈 데이터가 2개(ACK 1개, B의 데이터 1개)로 쪼개져서 두 번 전송되므로, 톨게이트(네트워크) 비용과 헤더(껍데기) 용량이 2배로 낭비됩니다.

Ⅱ. 피기배킹(Piggybacking)의 기발한 해결책

어차피 B도 A에게 할 말이 있다면, 굳이 빈 껍데기 ACK를 먼저 보낼 필요가 없습니다.

  1. A가 "안녕"을 쏘았습니다.
  2. B는 "안녕"을 잘 받고 마음속으로 ACK를 날려야지 생각하지만, 잠시(수 밀리초) 기다립니다(Delay).
  3. B의 컴퓨터(운영체제)가 "어? 나도 A한테 보낼 '밥 먹었냐' 데이터가 내려왔네?"라고 파악합니다.
  4. B는 자기가 보낼 "밥 먹었냐" 프레임의 헤더(머리 부분)에 빈칸을 파서, 아까 빚졌던 "A야, 나 아까 네 데이터 잘 받았어(ACK)"라는 도장을 슬쩍 같이 찍어서 한 방에 쏴버립니다.
  5. A는 한 개의 프레임을 받았는데, 그 안에 자기 데이터가 잘 갔다는 영수증(ACK)과 B가 보낸 새로운 메시지가 짬짜면처럼 동시에 들어있는 마법을 경험합니다.

Ⅲ. 피기배킹의 장단점과 타이머의 딜레마

  • 장점: 텅 빈 ACK 프레임이 차지하는 네트워크 대역폭(쓰레기 트래픽)을 획기적으로 줄여주어 회선 효율성을 극대화합니다.
  • 단점 (딜레마 발생):
    • B가 A에게 ACK를 업어 보내려고 꾹 참고 기다리는데, B의 위층(사용자)에서 보낼 데이터가 하루 종일 안 내려옵니다.
    • 너무 오래 참으면? A는 자기 데이터가 전송 실패한 줄 알고(Timeout) 아까 보낸 데이터를 또 쏘는 재앙(재전송 폭풍)이 터집니다.
    • 해결책: B는 무한정 기다리지 않습니다. "보낼 데이터가 없으면 딱 **50ms(타이머 제한)**까지만 기다려보고, 그래도 내 보낼 데이터가 안 내려오면 그냥 눈물을 머금고 빈 껍데기 ACK만 쏴주자!"라는 룰(Delayed ACK)을 사용하여 균형을 맞춥니다.

📢 섹션 요약 비유: 피기배킹은 **'택배 아저씨에게 반품 물건 들려 보내기'**입니다. 쇼핑몰에 반품할 물건이 있을 때, 내가 내 돈 내고 우체국에 가서 택배(단독 ACK)를 부치면 배송비가 낭비됩니다. 대신, 며칠 뒤 쇼핑몰에서 내게 새 물건을 배달하러 택배 아저씨가 온 순간, 아저씨의 빈 트럭(데이터 프레임)에 내 반품 물건(ACK)을 쓱 업어 태워 보내면(Piggybacking) 배송비를 완벽히 굳힐 수 있는 기적의 효율입니다.