EN Versiyonu
Atlas Atlas Network Engineer • • 1.092 kelime • 6 dk okuma

Oyun Sunucuları Zamanda Nasıl Yolculuk Yapar? Netcode Sırrı

Çevrim içi oyunlar gecikmeye rağmen nasıl pürüzsüz hissettirir? İstemci tahmini, sunucu uzlaştırması ve rollback netcode mimarisinin perde arkası.

#netcode #gaming #latency #networking
Oyun Sunucuları Zamanda Nasıl Yolculuk Yapar? Netcode Sırrı

Kısa Özet (TL;DR — Doğrudan Yanıt): Çevrim içi oyunlarda verinin oyuncu ile sunucu arasında gidip gelmesi fiziksel zaman alır. Oyun motorları bu ağ gecikmesini gizlemek için geleceği tahmin eder ve gerektiğinde simülasyonu geriye sarar. Ekranda gördüğünüz pürüzsüz hareketler, sunucunun geçmiş ile şimdiki zamanı uzlaştırma yeteneğinin sonucudur.

Mektupla Düello: Fizik Kuralları ve Ağ Gecikmesi

İki kovboyun mektupla düello yaptığını hayal edin. Kovboy A tetiği çeker, bir mektup yazar ve postaya verir. Mektup iki gün sonra Kovboy B'ye ulaşır. Kovboy B mektubu okuduğunda çoktan kendi silahını ateşlemiştir. İki mermi de hedefine ulaşır. Kimin önce vurduğuna kim karar verecek?

İnternet de aynı fizik kuralına bağlıdır. Veri kablolarda ışık hızına yakın hareket eder ancak hız sonludur. İstanbul ile Frankfurt arasındaki bir veri paketinin gidiş-dönüş süresi ortalama 40 milisaniyedir. Sunucu iki farklı oyuncunun verisini aynı anda alamaz.

Oyuncunun tuşa bastığı an ile ekrandaki hareketin gerçekleştiği an arasında gecikme oluşur. Bu gecikme telafi edilmezse karakterler geç tepki verir, oyun hantallaşır. Ağ kodu (netcode), bu fiziksel gecikmeyi oyuncuya hissettirmemek için zamanı büken algoritmalar bütünüdür.

Netcode Çalışma Hattı: Beş Aşamalı Zaman Yolculuğu

Modern oyun motorları gecikmeyi gizlemek için belirlenmiş bir sırayı takip eder:

  1. Girdi Örnekleme (Input Sampling): Oyuncunun tuş vuruşları ve fare hareketleri yerel makinede okunur. Her eyleme yerel bir zaman damgası eklenir.
  2. İstemci Taraflı Tahmin (Client-Side Prediction): İstemci bilgisayar sunucunun cevabını beklemez. Tuşa basıldığı an karakteri yerel ekranda anında hareket ettirir. Gecikme hissi sıfırlanır.
  3. Sunucu Durum Doğrulaması (Server Snapshot Validation): Sunucu tüm oyunculardan gelen girdileri toplar. Kendi fizik motorunu çalıştırarak oyunun nihai ve tek gerçek durumunu hesaplar.
  4. Durum Uzlaştırması (State Reconciliation): Sunucu hesapladığı gerçek durumu istemcilere geri yollar. İstemci kendi tahmini ile sunucu gerçeğini karşılaştırır. Sapma varsa yerel konumu sunucu konumuna çeker.
  5. Gecikme Telafisi Geri Sarması (Lag Compensation Rewind): Bir oyuncu ateş ettiğinde sunucu zamanı o oyuncunun ping süresi kadar geriye sarar. Vuruş anında hedefin nerede olduğunu inceler. İsabet varsa hasarı onaylar ve zamanı tekrar günümüze getirir.

Gecikme Tabanlı Model mi, Rollback Netcode mu?

Eski çevrim içi oyunlar kilitli adım (lockstep) yöntemini kullandı. Bu yapıda sunucu en yavaş oyuncunun paketini bekler. Bir oyuncunun bağlantısı yavaşladığında tüm oyuncuların ekranı donar veya kontroller geç tepki verir.

Modern oyunlar geri sarma (rollback) mimarisini tercih eder. Sistem karşı oyuncudan veri gelmese bile onun son hareketine devam ettiğini varsayar. Gerçek veri ulaştığında tahmin yanlış çıkarsa, aradaki kareler milisaniyeler içinde geri sarılır, düzeltilir ve tekrar ileri sarılır.

Özellik Gecikme Tabanlı (Lockstep) Geri Sarma (Rollback)
Girdi Hissiyatı Gecikmeye bağlı yavaşlar Her zaman yerel hızda
Ağ Dalgalanması Oyun donar veya takılır Hızlı görsel düzeltme
İşlemci Yükü Düşük Yüksek (fizik tekrar hesaplanır)
Bant Genişliği Düşük veri transferi Yüksek veri transferi

Simülasyon: Ham Gecikme ve Zaman Çizelgesi

Aşağıdaki şema, 50 milisaniyelik bir gecikmede ateş etme eyleminin sunucu tarafından nasıl geriye sarılarak çözüldüğünü gösterir:

Zaman Ekseni:       T1 -------- T2 -------- T3 -------- T4 -------- T5
İstemci A (Yerel):  [Ateş Et] -> [İlerle]   [Bekle]    [Onay Geldi]
                          \                                  /
Ağ Gecikmesi:              \---> [Sunucu: T1 Anına Dön] ----/
                                 [A'nın Hedefini Kontrol Et]
                                 [Hasarı Hesapla]
İstemci B (Hedef):               [T1'de Koşuyor] -> [Hasar Aldı (Rollback)]

Ağ altyapısının oyun performansına etkisini test etmek için AI Playground üzerindeki kaynaklara göz atabilir veya İnteraktif Simülasyon Araçları ile veri paketlerinin gecikme davranışlarını inceleyebilirsiniz.

Duvar Arkasından Vurulma Efsanesi ve Yüksek Ping Gerçeği

Çevrim içi nişancı oyunlarında en yaygın şikayet siper arkasında vurulmaktır. Bu bir hata veya hile değildir; gecikme telafisinin doğal bir sonucudur.

Siz köşeyi dönüp duvara saklandığınızda, yüksek gecikmeli rakibinizin ekranında henüz köşeyi dönmemişsinizdir. Rakip ateş eder ve vurur. Sunucu paketi aldığında zamanı geriye sarar. Rakibin ateş ettiği anda sizin gerçekten açıkta olduğunuzu doğrular ve hasarı işler. Sunucu gerçeği onayladığı an kendi ekranınızda duvar arkasında ölmüş olursunuz.

Yüksek ping sahibi olmak bir avantaj sağlamaz. Sunucu yetkilidir. Tahminler tutarsızlaştığında sunucu yüksek pingli oyuncunun paketlerini reddeder. Bu oyuncu ışınlanma, mermilerin kaybolması ve kontrol kaybı yaşar.

Gerçek Hayat Senaryosu: Street Fighter V ve GGPO Standardı

Dövüş oyunları milisaniyelik hassasiyet gerektirir. 2016 yılında çıkan Street Fighter V, hatalı tasarlanmış bir geri sarma sistemi kullandı. Sistem iki oyuncunun saatini senkronize tutamadı. Bir oyuncu tamamen pürüzsüz oynarken, diğer oyuncunun ekranı kontrol edilemez şekilde geriye sarılıp titriyordu.

Buna karşılık, açık kaynaklı GGPO (Good Great Peace Out) kütüphanesi endüstri standardı haline geldi. GGPO, iki tarafın simülasyonunu kusursuz bir determinizmle eşitledi. Güncel dövüş oyunları bu mimariyi benimseyerek kıtalararası maçları dahi yerel konsol akıcılığına kavuşturdu.

Sıkça Sorulan Sorular (SSS)

Tick rate ile kare hızı (FPS) arasındaki fark nedir?

Kare hızı (FPS), ekran kartınızın monitöre saniyede kaç görüntü karesi çizdiğini belirtir. Tick rate ise oyun sunucusunun oyun dünyasını, oyuncu konumlarını ve fizik hesaplamalarını saniyede kaç kez güncellediğini gösteren frekanstır. Yüksek kare hızı görüntüyü akıcı yapar. Yüksek tick rate ise vuruş doğrulaması ve hareket hassasiyetini artırır. 128 tick bir sunucu, fiziksel dünyayı saniyede 128 defa baştan hesaplayarak gecikmeyi en aza indirir.

İnterpolasyon gecikmesi (interp delay) nedir ve neden kullanılır?

İnterpolasyon gecikmesi, sunucudan gelen paketler arasındaki boşlukları doldurmak amacıyla istemci ekranına kasıtlı olarak eklenen milisaniyelik bir gecikmedir. Sunucudan saniyede 64 paket geldiğinde iki paket arasında boşluk oluşur. İstemci, karakterlerin aniden ışınlanmasını önlemek için bilinen son iki konum arasında yumuşak bir geçiş çizgisi çizer. Bu ayar görüntüyü tamamen pürüzsüzleştirir ancak oyuncunun ekranda gördüğü hedefi birkaç milisaniye geçmişte bırakır.

Paket kaybı gizleme (packet loss concealment) nasıl çalışır?

Ağ üzerinden gönderilen veri paketleri bazen hedefe ulaşmadan kaybolur. Paket kaybı gizleme mekanizması, kaybolan verinin yerine en son onaylanan hareket vektörünü kullanarak tahminde bulunur. Oyuncu ileri koşarken bir paket düşerse, istemci oyuncunun bir önceki karedeki hızını koruduğunu varsayar. Yeni paket ulaştığında eksik veri gerçek konumla eşleştirilir. Kayıp oranı düşükse hareket akıcı kalır; oran yükseldiğinde ise karakterler ekranda ışınlanmaya başlar.

Çevrim içi oyunlarda neden TCP yerine UDP protokolü tercih edilir?

TCP protokolü gönderilen her paketin ulaştığını doğrular ve kaybolan paketi tekrar ister. Bu bekleme süreci oyunlarda kabul edilemez bir donmaya yol açar. UDP protokolü ise doğrulama beklemeden veriyi sürekli olarak hedefe fırlatır. Çevrim içi rekabetçi oyunlarda eskiyen verinin hiçbir önemi yoktur; en güncel konum bilgisi her zaman önceliklidir. Bu sebeple oyun mimarları hız ve düşük gecikme sağlayan UDP protokolünü kullanır.

Wi-Fi dalgalanması (jitter) oyun performansını neden kablodan daha kötü etkiler?

Wi-Fi sinyalleri duvarlar, ev aletleri ve diğer kablosuz ağlar yüzünden parazite maruz kalır. Bu durum ping değerinin sürekli değişmesine, yani jitter oluşmasına yol açar. Rollback ve istemci tahmini mekanizmaları öngörülebilir ağ gecikmelerinde kusursuz çalışır. Dalgalanan gecikme süreleri ise sunucunun zaman uzlaştırma algoritmasını bozar. İstemci sürekli hatalı tahmin düzeltmesi yapmak zorunda kalır; bu da ekranda takılma ve geriye sarma hissine sebep olur.

İlgili Derin Teknik Makaleler

Tüm Makaleler →