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

Buku Putih Lag Game › Akar penyebab retransmisi TCP

Mapping NAT atau load balancer kedaluwarsa di tengah koneksi NAT / load balancer mapping expired mid-connection

ID penyebab rt-mapping · Penanggung jawab utama Pengembangan klien (Tim Pengembang Game) · Turut terlibat Pengembangan server (Tim Pengembang Game), Infrastruktur jaringan (Tim Infrastruktur), Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

Jika perangkat di tengah rute menghapus mapping koneksi idle (entri yang mencatat ke mana koneksi itu diteruskan), paket berikutnya tidak bisa diteruskan. Retransmisi terus berulang sampai pemain disconnect, atau perangkat membalas dengan penolakan koneksi (RST) sehingga pemain langsung disconnect.

Mengapa Koneksi yang tidak dilewati paket selama beberapa waktu (AFK, di lobi) → Akibatnya NAT di router, CGNAT ISP, firewall, load balancer, atau security group cloud menghapus mapping yang idle → Di layar Begitu pemain bergerak lagi, retransmisi berlanjut hingga disconnect, atau langsung disconnect

Gejala
Disconnect, Freeze
Faktor
Packet loss
Siapa yang mengalami
Hanya saya, Wilayah/ISP tertentu
Kapan
Setelah lama diam
Penanggung jawab
Penanggung jawab utama Pengembangan klien (Tim Pengembang Game) · Turut terlibat Pengembangan server (Tim Pengembang Game), Infrastruktur jaringan (Tim Infrastruktur), Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Klien: kirim heartbeat dengan interval maksimal setengah dari idle timeout terpendek (mapping di router pemain dan CGNAT ISP hanya diperbarui dengan pasti oleh paket keluar, dan timeout-nya tidak bisa kami ubah, jadi klien yang mengirim), reconnect otomatis jika terputus. Server: balas heartbeat dan putuskan koneksi lebih dulu jika tidak ada heartbeat dalam waktu tertentu (perpendek interval keepalive TCP dengan opsi socket seperti TCP_KEEPIDLE, deteksi cepat dengan TCP_USER_TIMEOUT), lanjutkan sesi dengan token sesi.
Tugas Tim Infrastruktur
Jaringan: kumpulkan idle timeout firewall dan load balancer di sepanjang rute lalu bagikan ke Tim Pengembang Game, perpanjang idle timeout di firewall dan load balancer kami jika perlu. Server/OS: periksa waktu connection tracking di security group cloud lalu bagikan ke Tim Pengembang Game.
Kisaran angka
Lama mapping TCP dipertahankan berbeda-beda tiap perangkat, dari beberapa menit hingga beberapa jam. Jika security group cloud diatur untuk melacak koneksi, tipe instance AWS Nitro v6 secara default menghapus entri pelacakannya setelah 350 detik (tipe lain setelah 5 hari, lihat entri “Connection tracking di security group cloud kedaluwarsa”). Nilai default keepalive TCP di Linux adalah “periksa setelah idle 2 jam”, lebih lambat daripada kebanyakan perangkat.
Di grafik
Koneksi putus serentak · Jumlah disconnect, waktu idle sebelum terputus
Yang diperiksa
Periksa beberapa menit terakhir koneksi yang terputus lewat packet capture di sisi server; untuk koneksi yang masih hidup, periksa waktu idle dari lastsnd dan lastrcv di ss -ti (ms sejak terakhir mengirim dan menerima). Periksa juga TcpExtTCPAbortOnTimeout di nstat (jumlah koneksi yang dilepas karena timer habis)
Cocok jika
Setiap koneksi yang terputus sebelumnya idle melewati nilai yang mirip (idle timeout perangkat di rute, misalnya 350 detik untuk security group instance AWS Nitro v6), dan sejak paket pertama setelah idle hanya ada retransmisi tanpa ACK sampai koneksi menyerah, atau RST langsung datang
Tidak cocok jika
Terputus juga di tengah permainan tanpa terkait waktu idle: penyebab lain (“Perubahan rute dan jalur ECMP bermasalah”, “Paket dibuang oleh firewall atau connection tracking”). Koneksi yang bertukar heartbeat dengan interval maksimal setengah dari idle timeout terpendek: coret penyebab ini
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. RFC 5382: NAT Behavioral Requirements for TCP IETF
    Rekomendasi bahwa idle timeout koneksi TCP di NAT minimal 2 jam 4 menit (dengan asumsi perangkat bisa menghapus sesi idle lebih awal)
  2. RFC 4787: Network Address Translation (NAT) Behavioral Requirements for Unicast UDP IETF
    Mapping NAT harus diperbarui oleh paket keluar (REQ-6), sedangkan pembaruan oleh paket masuk bersifat opsional (untuk UDP)
  3. Amazon EC2 security group connection tracking AWS
    Nilai default timeout pelacakan TCP idle adalah 350 detik untuk tipe instance Nitro v6 dan 432.000 detik (5 hari) untuk tipe lain; disarankan keepalive dengan interval kurang dari 5 menit
  4. IP Sysctl Linux kernel
    Default tcp_keepalive_time 2 jam
  5. tcp(7) — Linux manual page Linux man-pages
    TCP_KEEPIDLE (waktu idle sebelum keepalive dimulai), TCP_USER_TIMEOUT (lama menunggu data yang belum dikonfirmasi sebelum koneksi ditutup)
  6. RFC 5482: TCP User Timeout Option IETF
    TCP user timeout: berapa lama data yang dikirim boleh belum dikonfirmasi sebelum koneksi ditutup
  7. ss(8) — Linux manual page iproute2
    lastsnd dan lastrcv di ss -i: waktu sejak terakhir mengirim dan menerima (ms)
  8. SNMP counter Linux kernel
    TcpExtTCPAbortOnTimeout: jumlah koneksi yang dilepas tanpa RST karena timer TCP habis

Lihat juga

Lapisan yang sama: Akar penyebab retransmisi TCP

Penyebab di lapisan lain dengan gejala yang sama (Disconnect)

Lihat kartu interaktif dengan gambar dan simulasi