- Counter-Strike’ın eski
No user logon kopma sorunu CS2’de de yeniden üretilebiliyor; oyun başlatıldıktan hemen sonra sunucuya çok hızlı bağlanılırsa Steam ID doğrulaması başlamayabiliyor
- Kritik nokta,
CS2.exe başlatılırken çalışan levelload döngüsünün Steam3 doğrulamasını tamamlamadan erken kapanabilmesi ve sunucunun doğrulanmamış bir Steam ID ile bağlantıyı işlemesi
- Esportal loglarında normal kullanıcılar için bile
STEAM USERID validated kaydı bağlantıdan yaklaşık 1 dakika 20 saniye sonra yazıldı; başarısız kullanıcılar için ise 2~3 dakika sonra STEAMAUTH failure code 8 ve NETWORK_DISCONNECT_STEAM_LOGON ile kopma görüldü
- Oyunu yeniden kurmak, dosyaları doğrulamak, Steam’i yeniden başlatmak, PC’yi yeniden başlatmak veya WiFi’yi devre dışı bırakmak kök nedeni çözmüyor; önce CS2’yi açıp ana menüde 5~10 saniye beklemek gerekiyor
- Esportal, 10 Ocak 2024’te
CS2.exe tamamen başlatılmadan steam://connect/<IP>:<Port> çalıştıran davranışı düzeltti; ardından ilgili ticket oranı %0’a düştü
Uzun süredir tekrarlanan No user logon durumu
- Counter-Strike’taki
No user logon kopması, oyun sırasında rastgele ortaya çıkan bir sorun olarak biliniyor ve 2008’den 2023’e kadar çeşitli forumlarda ve Valve’ın resmi destek forumlarında tekrar tekrar raporlandı
No user logon ile bazı gönderilerde görülen No steam logon, teknik olarak aynı kök nedenin farklı adları olabilir
- İnternette yaygın olan çözümler kök nedeni düzeltmiyor
- oyunu yeniden kurmak
- oyun dosyalarını doğrulamak
- Steam’i yeniden başlatmak
- bilgisayarı yeniden başlatmak
- WiFi’yi devre dışı bırakmak
- CS2, 27 Eylül 2023’te CS:GO’nun yerini aldı ve normal kullanıcılar artık CS:GO’yu oynayamaz hale geldi
- Valve’ın HackerOne bug bounty kapsamına
cs2.exe dahil değildi ve CS2 Limited Test raporları da kapsam dışı olarak işaretlenmişti
Esportal’da aniden artan bildirimler
- Esportal bu sorunu geçmişte CS:GO’da da yaşadı; kayıtlardaki ilk görülme zamanı 2019-11-15 19:15:32 CET, son CS:GO vakası ise CS2’ye geçişten bir gün önce, 2023-09-26 21:38:01 CET idi
- CS2’nin ilk döneminde sorun kaybolmuş gibi görünüyordu, ancak 2024 Ocak ayının ilk haftasında kullanıcı bildirimleri arttı
- 2024-01-03: günlük ticket’ların %6’sı
- 2024-01-05~06: %18
- 2024-01-07: %23
- 2024-01-08: %10
- 2024-01-09: %9
- Bildirim saatleri çoğunlukla 13~17 CET aralığında yoğunlaştı; bu, Valve’ın bulunduğu Washington saatine göre 04~08 aralığına denk geliyor
- Önceden bildirimler günün tamamına daha dengeli yayılırken, yeni gözlemlenen sorun belirli saat aralıklarında yoğunlaştı
- Esportal dışındaki oyuncular da aynı sorunu yaşadığından, bu yalnızca belirli bir platforma özgü değildi
Belirtiler: geciken Steam doğrulaması ve kaybolan skin’ler
- Gözlemlenen
No user logon hatası, oyuncu oyun sunucusuna bağlandıktan 2~3 dakika sonra ortaya çıkıyordu ve bu süre oldukça tutarlıydı
- Bir iş arkadaşı, “Oyuna girdikten sonra birkaç dakika boyunca CS2’de skin’ler görünmüyor” dedi; Esportal dışındaki oyuncular da skin eksikliği bildirdi
- Skin’ler Steam ID sahipliğiyle bağlantılı olduğundan, kişisel skin’ler görünene kadar oyuncunun Steam üzerinden düzgün şekilde kimlik doğrulaması yapılmamış olması mümkündü
- Normal kullanıcı loglarında, bağlantıdan yaklaşık 1 dakika 20 saniye sonra
STEAM USERID validated kaydı görülüyordu
16:39:55: "Alice<1><>" connected
16:41:14: "Alice<1><>" STEAM USERID validated
17:17:32: "Alice<1><CT>" disconnected (reason "NETWORK_DISCONNECT_DISCONNECT_BY_USER")
- 3 Ocak 2024’ten önceki eski loglarda Steam doğrulaması bağlantıdan 2~3 saniye sonra tamamlanıyordu
- Washington’ın gece saatlerinde sorun doğrudan yeniden üretilebildi, ancak Washington gündüz saatlerinde yeniden üretilemedi
NETWORK_DISCONNECT_STEAM_LOGON ve failure code 8
- Başarısız kullanıcı loglarında,
STEAMAUTH: Client Bob received failure code 8 satırının hemen ardından bağlantı NETWORK_DISCONNECT_STEAM_LOGON ile kesiliyordu
16:40:13: "Bob<6><>" connected
16:43:02: STEAMAUTH: Client Bob received failure code 8
16:43:02: "Bob<6><TERRORIST>" disconnected (reason "NETWORK_DISCONNECT_STEAM_LOGON")
NETWORK_DISCONNECT_STEAM_LOGON, kullanıcının gördüğü No user logon mesajının dahili tanımlayıcısı gibi görünüyor
libengine2.so içinde STEAMAUTH: Client %s received failure code %d dizesi bulundu ve CS:GO’nun sızdırılmış kaynak kodundaki sv_steamauth.cpp ile tersine mühendislik sonuçları birlikte karşılaştırıldı
- CS2’de ilgili işlev,
eAuthSessionResponse değerine göre istemci bağlantısını kesiyor
1: k_EAuthSessionResponseUserNotConnectedToSteam
7: k_EAuthSessionResponseAuthTicketInvalidAlreadyUsed
8: k_EAuthSessionResponseAuthTicketInvalid
- failure code
8, Steam3 doğrulaması başarısız olduğunda görülen k_EAuthSessionResponseAuthTicketInvalid değerine karşılık geliyor gibi görünüyor
Steam3 doğrulama akışı
- Oyun istemcisi
CS2.exe, oyun sunucusuna bağlanırken kendi Steam ID bilgisini gönderir
- Oyun sunucusu, bu Steam ID’nin geçerli olup olmadığını ve oyunun sahibi olup olmadığını kontrol etmek için Steam3 sunucularına sorar
- Doğrulama yanıtı beklenirken oyuncu sunucuda oynamaya devam edebilir, ancak kişisel skin’ler görünmeyebilir
- Steam3 sunucusu “yes” döndürürse oyun sunucusu bu bilgiye güvenir ve skin gibi kişisel verileri uygulayabilir
- Steam3 sunucusu “no” döndürürse oyun sunucusu istemciyi
NETWORK_DISCONNECT_STEAM_LOGON ile bağlantıdan çıkarır
- Washington’ın gece saatlerinde Steam3 yanıtlarının yavaşladığı durumda, doğrulamanın tamamlanması yaklaşık 1 dakika 20 saniye sürüyordu
CS2.exe güven doğrulaması ve Steam istemcisi
- Steam ID’nin geçerli olması tek başına, ilgili
CS2.exe örneğinin aynı makinede oturum açmış Steam hesabının oyunu olduğunu kanıtlamaz
CS2.exe, kendi gönderdiği Steam ID’nin o anda oturum açmış Steam hesabıyla eşleşip eşleşmediğini doğrulatmak için aynı makinedeki Steam.exe ile bağlantı kurmak zorundadır
Steam.exe bu eşleşmeyi doğrularsa, Steam3 sunucusuna ilgili Steam ID’nin CS2 için geçerli olduğunu geçici olarak kaydeder
- Steam3’ün “no” döndürmesinin aday nedenleri içinde, gerçek soruna en yakın iki olasılık şunlara indirgeniyor
CS2.exe örneğine güvenilmemesi
- Steam3 sunucusunun bu
CS2.exe örneği için Steam ID bilgisini henüz bilmiyor olması
İstemci tarafındaki ipucu: NETWORK_DISCONNECT_LOOPSHUTDOWN
- Başarısız loglarda,
NETWORK_DISCONNECT_STEAM_LOGON öncesinde önce NETWORK_DISCONNECT_LOOPSHUTDOWN görünüyor
16:40:03: "Bob<6><>" connected
16:40:08: "Bob<6><Unassigned>" disconnected (reason "NETWORK_DISCONNECT_LOOPSHUTDOWN")
16:40:13: "Bob<6><>" connected
16:43:02: STEAMAUTH: Client Bob received failure code 8
16:43:02: "Bob<6><TERRORIST>" disconnected (reason "NETWORK_DISCONNECT_STEAM_LOGON")
NETWORK_DISCONNECT_LOOPSHUTDOWN sonrasında oyun 5 saniye sonra otomatik olarak yeniden bağlanmayı deniyor
- Bu ilk kopma, oyun sunucusu tarafından değil
CS2.exe’nin kendisi tarafından başlatılıyor
- Dolayısıyla kök neden oyun sunucusunda değil, oyun istemcisi tarafındaydı
Source 2’nin levelload döngüsü ve başlatma sırası
- Source 2 motoru aynı anda tek bir aktif döngü çalıştırır; bu döngü, belirli bir hedef tamamlanana kadar arka plan işlerini ve kullanıcı girdilerini tekrar tekrar işler
CS2.exe başlatıldıktan sonra en son çalışan döngü, gerçek menü etkileşimlerini ve oynanışı yöneten game döngüsüdür
- Konsol çıktısında,
game döngüsüne geçmeden hemen önce Steam kimlik doğrulama durumu OK olarak görünüyor
[SteamNetSockets] AuthStatus (steamid:<redacted>): OK (OK)
[Client] CL: CLoopModeLevelLoad::MaybeSwitchToGameLoop switching to "game" loopmode with addons ()
[EngineServiceManager] SwitchToLoop game requested: id [1] addons []
levelload, CS2 başlatılırken çalışan başlatma döngüsüdür; gerçek bir harita olmasa bile intro videosu ve ana menü gibi ilk ekranları yüklediği anlaşılıyor
levelload içindeki son işlerden biri, CS2.exe üzerinden Steam.exe aracılığıyla Steam3 doğrulamasını başlatmaktır
Hatanın doğrudan nedeni
- CS2 ancak
levelload döngüsü başarıyla tamamlandıktan sonra tamamen başlatılmış kabul edilebilir
levelload başlatması bitmeden erken sonlanırsa Steam3 doğrulaması başlamaz
- Bu durumdaki
CS2.exe örneği bozulmuş bir duruma girer ve yalnızca CS2 yeniden başlatılana kadar düzelmez
- Hatanın akışı şu şekildedir
CS2.exe başlatılır
levelload döngüsü başlar
- Steam3 doğrulaması başlatılmadan önce
levelload erken kapanır
game döngüsü, doğrulanmamış Steam ID ile oyun sunucusuna bağlanır
- oyun sunucusu Steam3’e doğrulama sorusu gönderir
- en fazla yaklaşık 2 dakika 50 saniye sonra başarısız yanıt alır ve
No user logon ile bağlantıyı keser
- Bu sorun burada CS2 örneği ve adlarıyla ele alınıyor, ancak CS:GO ve Counter-Strike: Source’ta da eşdeğer bir hata bulunuyor; yalnızca teknik adlar ve mekanizma farklı
Hatayı tetikleyen bağlantı yöntemleri
- Sorun, CS2’nin başlatılma biçimine bağlı bir race condition
- Hatayı neredeyse kesin olarak tetikleyen yöntem, CS2 açık değilken doğrudan oyun sunucusuna bağlanmaktır
- Riskli bağlantı yöntemleri şunlardır
- oyun dışı sunucu tarayıcısından, CS2 çalışmıyorken veya yeni açılmışken sunucuya bağlanmak
- Steam arkadaş listesinden, CS2 çalışmıyorken veya yeni açılmışken bir arkadaşın oyununa bağlanmak
steam://connect/127.0.0.1:27015 gibi Steam tarayıcı protokolüyle dışarıdan doğrudan bağlanmak
- CS2 başlatıldıktan sonra tamamen başlatılmadan bu işlemler yapılırsa görülme olasılığı daha yüksektir
- Nedenlerin ağırlığı şu benzetmeyle özetleniyor: “Counter-Strike’ı başlatma şekli %90, bilgisayar hızı %3, kullanıcı hızı %3, ayın durumu %3, gerçek kullanıcı ayar sorunu %1”
Gerçek çözüm yöntemi
- Yapılmaması gerekenler
- oyunu yeniden kurmak
- oyun dosyalarını doğrulamak
- Steam’i yeniden başlatmak
- bilgisayarı yeniden başlatmak
- WiFi’yi devre dışı bırakmak
- CS2 başlatılmadan önce dışarıdan oyun sunucusuna bağlanmak
- Bunun yerine önce CS2’yi başlatıp, oyun sunucusuna bağlanmadan önce yeterince beklemek gerekir
- Ölçüt olarak oyun konsolu görünene kadar beklenebilir veya intro videosu göründükten sonra 5~10 saniye beklenebilir
- Kesin olarak kontrol etmek için CS2 başlatıldıktan sonra oyun konsoluna
status yazıp şu satırı görmek yeterlidir
[EngineServiceManager] @ Current : game
Esportal düzeltmesinin sonucu
- Başarısız kullanıcı
Bobun ilk denemeden 9 dakika sonra doğrulamayı başarıyla geçmesinin nedeni, CS2’yi yeniden başlatmış olması ve o sefer hatanın şanssız şekilde tetiklenmemesiydi
- Bir kez Steam ID doğrulandıktan sonra, aynı oyun örneğinde Steam istemcisi kapatılmadığı sürece daha sonra başarısız olmuyor
- Esportal, 10 Ocak 2024’e kadar
CS2.exe işlemi görünür görünmez, tam başlatma tamamlanmadan bile steam://connect/<IP>:<Port> ile oyuncuyu matchmaking sunucusuna bağlıyordu
- Bu davranış düzeltilip tüm Esportal oyuncularına dağıtıldıktan sonra ilgili kullanıcı ticket’ları durdu
- Günlük ticket’lar içinde
No user logon oranı 2024-01-07 tarihinde %23 seviyesine kadar çıkmıştı, ancak 2024-01-10 ile 2024-01-12 arasında %0 seviyesine düştü
1 yorum
Hacker News yorumları
Diyagramdaki akış, Steam'in Session Tickets dediği yönteme daha yakın; gerçekte ise biraz daha nüanslı
Oyun istemcisi Steam sunucularından bir oturum bileti ister, ardından oyun sunucusuna belirli bir Steam ID'si olduğunu kanıtlayan bileti gönderir
Sonrasında oyun sunucusu, biletin birden fazla kez kullanılıp kullanılmadığını veya değiştirilip değiştirilmediğini doğrulamak için Steam Web API'sine çevrimiçi olarak kontrol atmalıdır
Görünüşe göre CS2 istemcisi, oturum bileti alma sürecindeki gecikmiş yanıtı düzgün işleyemiyor
Akış burada ayrıntılı biçimde anlatılıyor: https://partner.steamgames.com/doc/features/auth#3
Eğer yazıdaki diyagramdaki gibi çalışıyorsa, bir saldırganın kurbanın Steam ID'siyle sunucuya katılmak için yarışabilmesi oldukça endişe verici
Sorun, oyunun gerçekten oturum biletini oluşturmadan önce ya da yavaş Steam sunucu yanıtını beklerken kesilmesi ve bilet olmadan oyun sunucusuna bağlanabilmesinde gibi görünüyor
Yazı harika ama iz sürme süreci ile sonuçlar tamamen örtüşmüyor
“Counter-Strike'ın başlama şekli: sorumluluğun %90'ı” denirken, dünyanın dört bir yanındaki oyuncuların Esportal dışında da aynı sorunu yaşadığı ve bunun Washington gece yarısı bakımıyla doğrulandığı söylenmesi aynı anda pek doğru olamaz
Eğer sorumluluğun %90'ı başlatma biçimindeyse, sorun bakım saatlerinde yoğunlaşmazdı
Kilit nokta şu gibi görünüyor: “oyun döngüsü başlamadan hemen önce Steam ID doğrulaması başlatılıyor” ve “levelload başlatması bitmezse Steam3 doğrulaması son adım olduğu için başlamıyor”
Yani bakım saatlerinde steam3 sunucuları çok yavaşlarsa bu süreç uzuyor ve bu sırada oyunu başlatıp döngüyü kesme ihtimali artıyor
Bu yüzden “Counter-Strike'ın başlama şekli” de doğru olabilir ama “ayın durumu: sorumluluğun %3'ü” gibi bir ifade aslında bakım penceresine işaret ettiği için biraz hedefi şaşırıyor
Tavsiyeye “CET 13:00-17:00 arasında Valve bakım penceresi olduğu için birkaç dakika daha bekleyin” gibi bir not da eklenebilirdi
Her hâlükârda bu sorunu yaşadım ve “biraz bekleyip yüklemenin bitmesine izin verin” çözümü şimdiye kadar duyduğum en pratik ve en makul çözüm
CS:GO'da da bakım saatlerinden bağımsız olarak aynı sorun vardı, CS2'de ise yalnızca bakım saatlerinde gözlendi
Sonuçta CS:GO ve CS2'deki hataların doğası farklı da olabilir ama CS:GO yerini CS2'ye bıraktığı için bunu artık kanıtlamanın yolu yok
Eskiden Steam yokken, bir arkadaşın bağlandığı sunucuyu görüp anında katılabilmek için aktif oyuncular ve skorlar listesi gösteren bir araç yapmıştım
O aracı geliştirirken test ettiğim sunucuya hatalı bir paket gönderdim ve sunucu çöktü
Delphi ile yazılmış kaynak kodu hâlâ duruyor; 10 yıllık bug'lar hâlâ yaşıyorsa bunun bugün bile sunucuları çökertip çökertemeyeceğini merak ediyorum
Asıl bug, kimlik doğrulamanın LAN dışı çok oyunculu oturum başlatmanın zorunlu bir koşulu olmaması
Daha hızlı ve daha sağlam bir yöntem, Steam istemcisinin Valve'dan birkaç saat geçerli bir imzalı token alıp bunu saklaması ve oyun sunucusuna her bağlandığında o token'ı göndermesi olabilir
Oyun sunucusu da Valve tarafından verilmiş ve sunucu içeriğiyle birlikte dağıtılan açık sertifikayla bunu yerelde doğrulayabilir
Bazı paragraflar “şapkanın üstüne bir şapka daha koymak” gibi hissettiriyor
Zaten memeleşmiş paragrafların üstüne bir de alaycılık eklenince, daha ince olduğunda daha iyi çalışan unsur biraz aşırıya kaçmış gibi duruyor
Başkalarının da dediği gibi, ana fikre daha hızlı girmek daha iyi olurdu
Okuması çok eğlenceliydi. Oyun istemcisinin neden aniden çöktüğünü de aynı şekilde araştırmanın mümkün olup olmadığını merak ediyorum
Çalıştırılabilir dosya için bütünlük kontrolünün oyun çalışırken de sürüp sürmediğini ve bunlardan biri çalışma sırasında başarısız olursa başka bir bağlantı kesilme mesajı çıkıp çıkmadığını merak ediyorum
GTA V'in aşırı uzun yükleme sürelerini analiz eden yazı gibi ödüllendirilmeyi hak ediyor gibi görünüyor: https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times...
Çökmeler teorik olarak incelenebilir ama Valve çökme raporlarını diske kaydetmeyip sunucuya gönderiyor
Hata ayıklayıcı bağlıyken gerçek zamanlı yakalayamazsan analiz daha zor oluyor; VAC yüzünden uğraştırıcı ama imkânsız değil. VAC kapatılabilir
Yazının başına, çözümü arayıp gelenler için bir özet koymak düşünceli bir hareket olmuş
Ama hemen ardından “ne yapmamanız gerektiği” söyleniyor ve gerçekten yapılabilecek şey kilometre uzunluğundaki yazının ortasındaki tek bir cümleye saklanmış oluyor
Geçici çözümün özete eklenmesi daha iyi olurdu
Strunk and White tarzı yazma tercihleri kafama kazınmış olduğu için söylüyorum; istersen tamamen görmezden gelebilirsin
Geri bildirim istiyorsan yazıyı çok daha doğrudan ve kısa olacak şekilde sert biçimde kısaltmanı öneririm
Uzun yazılar yazılabilir ama birkaç dakika sonra ek açıklamalar ve anekdotlar birikince ana akışı oldukça hızlı kaybettim
Üstüne bir de Inception referanslı görsel gelince, bilgi aktaran bir metinden çok birbiriyle alakasız şeylerin toplandığı hissi güçleniyor
Ne söylemek istediğini düşün, onu söyle ve sonra dönüp gerçekten sadece onu söyleyip söylemediğini kontrol et
Geri kalanı yazarlık değil, daha çok klavye alıştırması. Söylenecek 3-4 şey varsa sadece onları söylemek yeterli
Yazı güzeldi ama birkaç soru kaldı
levelloadloop yalnızca oyun başlatılırken mi çalışıyor, sunucuya katılırken ve harita yüklenirken çalışmıyor mu?
Sorun, Steam kimlik doğrulama süreci başlamadan önce döngünün bitmesi ise bakım nedeniyle yavaşlama neden önemli hâle geliyor?
Bu döngü adı Portal gibi tek oyunculu oyunlarla ilgili görünüyor ve bu tür oyunlarda seviyeler kesintisiz değiştiği için isim orada çok daha doğal duruyor
2 numarada açıklamada boşluklar olduğu doğru ve cevabı bilmiyorum
Yine de bu yöntemin sorunu çözdüğü kesin. Sonuçtaki ayrıntılar eksik olabilir ama şu an daha derine inme ihtiyacı hissetmiyorum
Valve'ın ödül programı metninde “Steam platformu ve Valve'ın geliştirip yayımladığı mevcut oyunlar” ifadesi yer alıyor
Ayrıca 14 Haziran 2023 saat 10:00 PDT'den itibaren CS:GO için yeni raporların kapsam dışında olduğu ve CS2 Limited Test raporlarının da şu anda kapsam dışında olduğu yazıyor
Valve'ın güvenlikte zayıf olduğu doğru ama HackerOne açıklamasının tamamı geniş yorumlanırsa ben bunu kişisel olarak kapsam içinde sayardım
“Scope” sekmesi
csgo.exedışlanacak şekilde güncellenmediği için, yalnızca o sekmeye güvenmek de zorYine de Valve'ın orayı lütfen güncellemesi lazım
Yine de sonuca katılıyorum; mantıklı geliyor