💡 핵심 인사이트
피기배킹(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를 먼저 보낼 필요가 없습니다.
- A가 "안녕"을 쏘았습니다.
- B는 "안녕"을 잘 받고 마음속으로 ACK를 날려야지 생각하지만, 잠시(수 밀리초) 기다립니다(Delay).
- B의 컴퓨터(운영체제)가 "어? 나도 A한테 보낼 '밥 먹었냐' 데이터가 내려왔네?"라고 파악합니다.
- B는 자기가 보낼 "밥 먹었냐" 프레임의 헤더(머리 부분)에 빈칸을 파서, 아까 빚졌던 "A야, 나 아까 네 데이터 잘 받았어(ACK)"라는 도장을 슬쩍 같이 찍어서 한 방에 쏴버립니다.
- A는 한 개의 프레임을 받았는데, 그 안에 자기 데이터가 잘 갔다는 영수증(ACK)과 B가 보낸 새로운 메시지가 짬짜면처럼 동시에 들어있는 마법을 경험합니다.
Ⅲ. 피기배킹의 장단점과 타이머의 딜레마
- 장점: 텅 빈 ACK 프레임이 차지하는 네트워크 대역폭(쓰레기 트래픽)을 획기적으로 줄여주어 회선 효율성을 극대화합니다.
- 단점 (딜레마 발생):
- B가 A에게 ACK를 업어 보내려고 꾹 참고 기다리는데, B의 위층(사용자)에서 보낼 데이터가 하루 종일 안 내려옵니다.
- 너무 오래 참으면? A는 자기 데이터가 전송 실패한 줄 알고(Timeout) 아까 보낸 데이터를 또 쏘는 재앙(재전송 폭풍)이 터집니다.
- 해결책: B는 무한정 기다리지 않습니다. "보낼 데이터가 없으면 딱 **50ms(타이머 제한)**까지만 기다려보고, 그래도 내 보낼 데이터가 안 내려오면 그냥 눈물을 머금고 빈 껍데기 ACK만 쏴주자!"라는 룰(Delayed ACK)을 사용하여 균형을 맞춥니다.
📢 섹션 요약 비유: 피기배킹은 **'택배 아저씨에게 반품 물건 들려 보내기'**입니다. 쇼핑몰에 반품할 물건이 있을 때, 내가 내 돈 내고 우체국에 가서 택배(단독 ACK)를 부치면 배송비가 낭비됩니다. 대신, 며칠 뒤 쇼핑몰에서 내게 새 물건을 배달하러 택배 아저씨가 온 순간, 아저씨의 빈 트럭(데이터 프레임)에 내 반품 물건(ACK)을 쓱 업어 태워 보내면(Piggybacking) 배송비를 완벽히 굳힐 수 있는 기적의 효율입니다.