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

게임 렉 백서 › L8 소켓과 프로토콜

UDP 패킷의 IP 단편화 IP fragmentation of large UDP

원인 ID sk-fragment · 주 담당 게임개발팀·서버 개발

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

MTU(한 번에 보낼 수 있는 크기)를 넘는 UDP 패킷은 IP 계층에서 단편화되고, 프래그먼트 하나만 잃어도 전체가 버려집니다.

왜 사람 많은 곳의 스냅샷이 1,500바이트를 넘음 → 그러면 여러 프래그먼트로 나뉘어 전송, 하나라도 잃으면 전체 폐기 → 화면에서는 큰 패킷일수록 손실률이 몇 배. 붐비는 곳에서만 순간이동

증상
순간이동
요인
손실
누가 겪나
특정 장소·채널, 특정 지역·통신사
언제
사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발
게임개발팀 할 일
패킷을 1,200바이트 이하로 직접 나누기, 변경분만 보내기.
수치 감각
손실 2%인 회선에서 프래그먼트 4개로 나뉜 패킷은 약 8%가 사라집니다. 단편화된 패킷을 아예 버리는 방화벽·통신사도 있어, 그 사용자는 큰 패킷을 하나도 받지 못합니다.
그래프에서는
인원·부하를 따라 오름 · IP 단편화 수(IpFragCreates), 스냅샷 크기
확인할 곳
서버에서 nstat -az의 IpFragCreates(보내면서 만든 프래그먼트 수) 증가량을 보고, 받는 쪽은 IpReasmFails(재조립 실패 수)를 봄. 게임 서버 로그나 패킷 캡처로 UDP 패킷 크기 분포를 확인
이러면 맞음
사람이 몰리는 곳에서 IpFragCreates가 늘고 1,500바이트를 넘는 UDP 패킷이 있으며 그때 순간이동 제보가 늘어남
이러면 아님
IpFragCreates가 늘지 않으면 서버가 보내는 쪽에서는 단편화가 일어나지 않음
확인 수단
인프라 도구로 확인(게임 코드 불필요)

출처

  1. RFC 8085: UDP Usage Guidelines IETF
    프래그먼트 하나를 잃으면 재조립이 안 돼 패킷 전체를 잃음, UDP 앱은 IP 단편화를 피해야 함
  2. RFC 8900: IP Fragmentation Considered Fragile IETF
    방화벽·일부 네트워크가 IP 프래그먼트를 버리는 사례
  3. net/ipv4/proc.c (Linux v6.12) Linux kernel
    nstat이 보여 주는 카운터 이름: Ip 그룹의 FragCreates(만든 프래그먼트 수)·ReasmFails(재조립 실패 수)

함께 보면 좋은 원인

같은 층: L8 소켓과 프로토콜

같은 증상(순간이동)의 다른 층 원인

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