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)
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
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
RFC 5382: NAT Behavioral Requirements for TCPIETF Rekomendasi bahwa idle timeout koneksi TCP di NAT minimal 2 jam 4 menit (dengan asumsi perangkat bisa menghapus sesi idle lebih awal)
Amazon EC2 security group connection trackingAWS 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
IP SysctlLinux kernel Default tcp_keepalive_time 2 jam
tcp(7) — Linux manual pageLinux man-pages TCP_KEEPIDLE (waktu idle sebelum keepalive dimulai), TCP_USER_TIMEOUT (lama menunggu data yang belum dikonfirmasi sebelum koneksi ditutup)
RFC 5482: TCP User Timeout OptionIETF TCP user timeout: berapa lama data yang dikirim boleh belum dikonfirmasi sebelum koneksi ditutup
ss(8) — Linux manual pageiproute2 lastsnd dan lastrcv di ss -i: waktu sejak terakhir mengirim dan menerima (ms)
SNMP counterLinux kernel TcpExtTCPAbortOnTimeout: jumlah koneksi yang dilepas tanpa RST karena timer TCP habis