한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

게임 렉 백서 › TCP 재전송의 근본 원인

ACK가 늦거나 사라짐 (업로드 포화) ACK path congestion on asymmetric links

원인 ID rt-ack-path · 주 담당 외부·외부 · 함께 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

데이터는 잘 도착했는데 “받았다”는 ACK가 꽉 찬 업로드 대기열에서 늦어지거나 사라지면, 보내는 쪽이 손실로 판단해 재전송합니다.

왜 집에서 영상 업로드·클라우드 백업으로 업로드가 꽉 참 → 그러면 ACK가 공유기 대기열에서 수백 ms 늦어지거나 넘쳐서 버려짐 → 화면에서는 서버가 보내는 게임 패킷은 대체로 제때 옴. 같은 업로드 대기열에 쌓인 내 입력이 늦어 입력 지연·고무줄, 가끔 불필요한 재전송

증상
입력 지연, 고무줄
요인
지연, 손실
누가 겪나
같은 집
언제
가끔 무작위로, 저녁 피크 시간
담당
주 담당 외부·외부 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
핑이 급등하면 화면에 네트워크 상태 표시, “업로드 중인 프로그램 확인” 안내 띄우기.
외부 할 일
유저에게 공유기 SQM으로 업로드 대기열 짧게, 작은 패킷(ACK) 우선 처리, 업로드 속도 제한(영상 업로드·클라우드 백업) 안내.
수치 감각
ACK는 뒤의 ACK가 앞의 것을 대신 확인해 주므로 몇 개 사라지는 것은 대개 괜찮습니다. 렉을 만드는 것은 대기열에서 늦어지는 ACK입니다.
그래프에서는
일부만 높음 · 연결별 RTT(핑)
확인할 곳
유저 PC에서 업로드(영상 업로드·클라우드 백업)를 켠 상태와 끈 상태로 게임 서버 ping을 비교함. 서버에서는 ss -ti로 그 유저 연결의 rtt를 봄
이러면 맞음
업로드 중에만 ping이 수백 ms로 오르고 입력 지연·고무줄이 생기며 업로드를 멈추면 곧 돌아옴. 서버에서 보면 그때 그 연결의 rtt도 함께 오름
이러면 아님
업로드와 상관없이 손실과 지연이 생기면 “무선 구간 손실”이나 경로 쪽 원인. 서버에서 유저로 가는 방향만 늦고 업로드와 상관없으면 “병목 대기열 넘침”
확인 수단
유저 쪽 환경에서 확인

출처

  1. RFC 3449: TCP Performance Implications of Network Path Asymmetry IETF
    업로드가 좁은 비대칭 회선에서 ACK가 늦거나 사라지면 TCP 성능이 떨어짐, ACK는 누적 확인이라 일부가 사라져도 뒤 ACK가 대신함, ACK 우선 스케줄링 같은 대책
  2. Smart Queue Management Bufferbloat.net
    공유기에서 대기열 관리와 셰이핑으로 대기열을 짧게 유지
  3. tc-cake(8) — Linux manual page iproute2
    CAKE는 흐름을 나눠 드문드문 보내는 흐름(sparse flow)의 지연을 최소화
  4. ss(8) — Linux manual page iproute2
    ss -i의 rtt(평균 왕복 시간)와 rttvar(편차)

함께 보면 좋은 원인

같은 층: TCP 재전송의 근본 원인

같은 증상(입력 지연)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기