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

Buku Putih Lag Game › L8 Socket dan protokol

Nilai default keepalive 2 jam TCP keepalive defaults

ID penyebab sk-keepalive · Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Pengembangan klien (Tim Pengembang Game), Infrastruktur server (Tim Infrastruktur)

Buka kartu interaktif dengan gambar dan simulasi →

Jika pihak lawan menghilang tanpa sinyal penutupan, TCP baru mendeteksinya lama kemudian. keepalive (fitur TCP untuk memeriksa apakah koneksi idle masih hidup) nonaktif secara default, dan walaupun diaktifkan, pemeriksaan baru dimulai setelah koneksi idle selama 2 jam.

Mengapa Klien menghilang tanpa sinyal penutupan karena perangkat mati atau koneksi putus → Akibatnya Server menganggap koneksi masih hidup (keepalive default 7.200 detik; jika ada data yang sedang dikirim, sekitar 15 menit sampai retransmisi menyerah) → Di layar Karakter hantu tertinggal, dan saat login ulang muncul error “Sudah terhubung”

Gejala
Tidak bisa masuk / loading tanpa henti, Tidak terlihat / objek hantu
Faktor
Packet loss
Siapa yang mengalami
Hanya saya
Kapan
Setelah lama diam, Tepat setelah login atau maintenance
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Pengembangan klien (Tim Pengembang Game), Infrastruktur server (Tim Infrastruktur)
Tugas Tim Pengembang Game
Server: balas heartbeat dan putuskan koneksi lebih dulu jika tidak ada heartbeat dalam waktu tertentu (sesuaikan TCP_KEEPIDLE dan TCP_USER_TIMEOUT), saat pemain reconnect ganti sesi lama lewat token sesi agar sesi berlanjut. Klien: kirim heartbeat di level game dengan interval beberapa hingga puluhan detik (maksimal setengah dari idle timeout terpendek), reconnect otomatis jika terputus.
Tugas Tim Infrastruktur
Turunkan nilai default kernel (tcp_keepalive_time dan lainnya) untuk socket yang tidak mengaturnya sendiri di kode (hanya berlaku untuk socket yang mengaktifkan SO_KEEPALIVE).
Kisaran angka
Default Linux: pemeriksaan dimulai setelah koneksi idle 7.200 detik, probe dikirim 9 kali dengan interval 75 detik, dan jika sampai akhir tidak ada respons, koneksi diputus. Totalnya sekitar 2 jam 11 menit. Windows juga secara default baru memulai pemeriksaan setelah koneksi idle 2 jam.
Di grafik
Hanya sebagian yang tinggi · Waktu berlalu sejak data terakhir diterima per koneksi
Yang diperiksa
Periksa lastrcv (ms sejak data terakhir diterima) dan timer keepalive (timer:(keepalive,…)) per koneksi dengan ss -tnoi, lalu cocokkan dengan catatan penolakan “Sudah terhubung” di server game
Cocok jika
Masih ada koneksi ESTABLISHED dengan lastrcv beberapa menit hingga beberapa jam, dan reconnect akun tersebut ditolak dengan “Sudah terhubung”
Tidak cocok jika
Tidak ada koneksi yang lama diam tetapi “Sudah terhubung” tetap muncul: masalahnya di kode pembersihan sesi server game
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. tcp(7) — Linux manual page Linux man-pages
    Setelah idle 7.200 detik, probe dikirim 9 kali dengan interval 75 detik (tambahan sekitar 11 menit); hanya berlaku untuk socket yang mengaktifkan SO_KEEPALIVE; TCP_KEEPIDLE dan TCP_USER_TIMEOUT
  2. RFC 9293: Transmission Control Protocol (TCP) IETF
    keepalive harus nonaktif secara default, dan interval idle default minimal 2 jam
  3. SO_KEEPALIVE socket option Microsoft
    Timeout default TCP keepalive di Windows 2 jam
  4. ss(8) — Linux manual page iproute2
    lastrcv pada -i (ms sejak data terakhir diterima), timer:(keepalive,…) pada -o

Lihat juga

Lapisan yang sama: L8 Socket dan protokol

Penyebab di lapisan lain dengan gejala yang sama (Tidak bisa masuk / loading tanpa henti)

Lihat kartu interaktif dengan gambar dan simulasi