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

Buku Putih Lag Game › L8 Socket dan protokol

Data terakhir hilang akibat penutupan paksa dengan RST SO_LINGER, abrupt RST

ID penyebab sk-linger · Penanggung jawab utama Pengembangan server (Tim Pengembang Game)

Buka kartu interaktif dengan gambar dan simulasi →

Jika server memutus koneksi secara mendadak, pesan pemberitahuan atau sinyal penyimpanan selesai yang dikirim terakhir ikut hilang.

Mengapa Server menutup koneksi dengan penutupan paksa (RST). Terjadi jika SO_LINGER diatur ke 0 detik, atau socket ditutup sebelum semua data yang diterima dibaca → Akibatnya Alasan kick dan data terakhir yang masih dalam pengiriman dibuang → Di layar Muncul pesan “Koneksi terputus karena error yang tidak diketahui” tanpa alasan yang jelas

Gejala
Disconnect
Faktor
Packet loss
Siapa yang mengalami
Hanya saya
Kapan
Sesekali secara acak
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game)
Tugas Tim Pengembang Game
Setelah mengirim alasan, tutup arah kirim lebih dulu (shutdown), baca semua data yang diterima sampai pihak lawan menutup koneksi, baru tutup socket, hindari SO_LINGER 0 detik.
Di grafik
Melonjak acak sesekali · Jumlah koneksi yang berakhir dengan RST
Yang diperiksa
Periksa kenaikan TcpExtTCPAbortOnData (ditutup dengan RST saat masih ada data yang akan dikirim, SO_LINGER 0 detik) dan TcpExtTCPAbortOnClose (ditutup saat masih ada data yang belum dibaca) di nstat -az, lalu periksa di packet capture sisi server saat koneksi putus apakah server mengirim RST tanpa FIN
Cocok jika
Pada waktu laporan “Koneksi terputus karena error yang tidak diketahui”, server mengirim RST, dan AbortOnData serta AbortOnClose naik
Tidak cocok jika
Server menutup koneksi secara normal dengan FIN tetapi alasannya tidak terlihat: masalahnya di penanganan penutupan koneksi di klien
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. closesocket function (winsock.h) Microsoft
    Jika SO_LINGER diaktifkan dengan waktu 0, penutupan menjadi paksa: koneksi langsung direset dan data yang belum terkirim hilang
  2. RFC 9293: Transmission Control Protocol (TCP) IETF
    Jika socket ditutup saat masih ada data diterima yang belum dibaca, RST dikirim untuk memberi tahu bahwa data hilang
  3. Graceful Shutdown, Linger Options, and Socket Closure Microsoft
    Urutannya: tutup arah kirim lebih dulu dengan shutdown, lalu tutup socket setelah menerima notifikasi penutupan dari pihak lawan
  4. SNMP counter Linux kernel
    TcpExtTCPAbortOnData: ditutup dengan RST saat masih ada data yang akan dikirim, misalnya karena SO_LINGER 0 detik; TcpExtTCPAbortOnClose: RST dikirim karena socket ditutup saat masih ada data yang belum dibaca

Lihat juga

Lapisan yang sama: L8 Socket dan protokol

Penyebab di lapisan lain dengan gejala yang sama (Disconnect)

Lihat kartu interaktif dengan gambar dan simulasi