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

Buku Putih Lag Game › L8 Socket dan protokol

RTO TCP dan exponential backoff RTO and exponential backoff

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

Buka kartu interaktif dengan gambar dan simulasi →

Setiap kali retransmisi gagal lagi, waktu tunggu berlipat dua, sehingga koneksi yang putus sebentar berujung pada jeda yang lama.

Mengapa Koneksi putus sebentar sehingga retransmisi pun gagal berturut-turut → Akibatnya Waktu tunggu sampai percobaan berikutnya berlipat dua: 0,3 → 0,6 → 1,2 → 2,4 detik (untuk ping 100 ms) → Di layar Koneksi hanya putus 1 detik, tetapi game freeze lebih dari 2 detik. Jika putusnya lebih lama, akhirnya disconnect

Gejala
Freeze, Disconnect
Faktor
Packet loss, Stall
Siapa yang mengalami
Hanya saya
Kapan
Sesekali secara acak, Saat bergerak atau pindah area
Penanggung jawab
Penanggung jawab utama Pengembangan server (Tim Pengembang Game) · Turut terlibat Pengembangan klien (Tim Pengembang Game)
Tugas Tim Pengembang Game
Server: balas heartbeat dan putuskan koneksi lebih dulu jika tidak ada heartbeat dalam waktu tertentu (percepat titik menyerah dengan TCP_USER_TIMEOUT), lanjutkan sesi dengan token sesi, gunakan reliable UDP. Klien: kirim heartbeat dengan interval pendek, dan jika respons berhenti, segera reconnect tanpa menunggu retransmisi TCP.
Kisaran angka
RTO (waktu tunggu retransmisi) di Linux minimal “ping + 200 ms”, dan saat koneksi dibuat, RTO dimulai dari 1 detik. Dengan pengaturan default (tcp_retries2=15), walaupun retransmisi terus gagal, koneksi baru dilepas setelah sekitar 15 menit.
Di grafik
Kosong lalu datang sekaligus · RTO dan backoff per koneksi, jumlah RTO habis
Yang diperiksa
Periksa rto (waktu tunggu retransmisi dalam ms) dan backoff (jumlah RTO habis berturut-turut) pada koneksi yang berhenti dengan ss -ti; untuk seluruh server, periksa kenaikan TcpExtTCPTimeouts (jumlah timer retransmisi habis) di nstat -az
Cocok jika
backoff pada koneksi yang berhenti bernilai 1 atau lebih, rto membesar hingga satuan detik, dan TCPTimeouts naik pada saat itu
Tidak cocok jika
Retransmisi selesai lewat fast retransmit dan tidak ada RTO yang habis: berhentinya singkat, dan dalam kasus itu lebih mungkin “HOL blocking pada TCP”
Sarana pemeriksaan
Tools infrastruktur (tanpa perlu kode game)

Sumber

  1. RFC 6298: Computing TCP's Retransmission Timer IETF
    RTO awal 1 detik, RTO digandakan setiap kali timer habis (exponential backoff)
  2. net/ipv4/tcp_input.c (Linux v6.12) Linux kernel
    RTO di Linux = smoothed RTT + variasi RTT, dan batas bawah variasinya adalah tcp_rto_min (200 ms), sehingga RTO minimal RTT+200 ms
  3. IP Sysctl Linux kernel
    tcp_rto_min_us default 200 ms, RTO pertama untuk permintaan koneksi 1 detik, dengan tcp_retries2=15 waktu sampai menyerah minimal 924,6 detik (sekitar 15 menit)
  4. ss(8) — Linux manual page iproute2
    rto (timer retransmisi, ms) dan backoff (jumlah exponential backoff) pada -i
  5. net/ipv4/proc.c (Linux v6.12) Linux kernel
    Nama counter yang ditampilkan nstat: TCPTimeouts di grup TcpExt
  6. net/ipv4/tcp_timer.c (Linux v6.12) Linux kernel
    Setiap kali timer retransmisi habis, TCPTimeouts naik, backoff bertambah satu, dan RTO digandakan (sampai nilai maksimum)

Lihat juga

Lapisan yang sama: L8 Socket dan protokol

Penyebab di lapisan lain dengan gejala yang sama (Freeze)

Lihat kartu interaktif dengan gambar dan simulasi