2. Nagle/TCP_NODELAY, 흐름제어 vs 혼잡제어, 패킷 경계 문제

난이도 중 해설 보기 →
문제

문제 2 — Nagle/TCP_NODELAY, 흐름제어 vs 혼잡제어, 패킷 경계 문제

상황

TCP 기반 게임서버를 운영 중인데, 클라이언트들이 "캐릭터 조작이 미세하게 끊긴다", "가끔 패킷이 이상하게 합쳐지거나 잘려서 파싱이 깨진다"는 제보를 한다. 면접관이 원인 분석과 설계를 묻는다.

질문

  1. Nagle 알고리즘이 무엇인지 설명하라. 왜 만들어졌고, 게임서버에서는 왜 문제가 되는가? TCP_NODELAY는 무엇을 하는가? 끄면 어떤 트레이드오프가 있는가?

  2. (꼬리질문) Nagle + Delayed ACK가 함께 켜져 있을 때 발생할 수 있는 최악의 상황을 설명하라.

  3. **흐름 제어(flow control)**와 **혼잡 제어(congestion control)**의 차이는 무엇인가? 각각 "누구를 보호하기 위한" 것인가? 흐름 제어는 어떤 메커니즘(필드)으로 동작하는가?

  4. TCP는 "바이트 스트림"이라 패킷 경계가 없다. 다음 코드의 잠재적 버그를 지적하고, 올바른 메시지 프레이밍 방법을 설명하라.

    char buf[4096];
    int n = recv(sock, buf, sizeof(buf), 0);
    Packet* p = (Packet*)buf;   // 받은 걸 그대로 패킷으로 캐스팅
    Handle(p);
    
  5. (응용) 길이 프리픽스(length-prefix) 방식으로 메시지 경계를 복원하는 수신 루프를 설계상 어떻게 구성하겠는가? 어떤 엣지 케이스를 처리해야 하는가?

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.