Öz Güveninizi Sarsacak Bu "İki General Problemi"ni Çözmeye Çalışırken Kafanız Yanabilir!

Siz de beyninizin sınırlarını zorlayan bulmacaları, problemleri, düşünce deneylerini çözmeyi seviyorsanız bir de "iki general problemi"ni deneyin.

İki ordu, iki general, bir elçi ve bir düşman ordusunun yer aldığı problem; aslında oldukça basit gibi görünse de net bir sonuca ulaşmak için düşünürken beyin yakabiliyor.

"Ben problem çözmek için yaratılmışım." diyenlerin bile kendine olan güvenini kırabilecek bu problemin detaylarına geçelim. Bakalım neler düşüneceksiniz?

“İki general problemi” ya da “iki ordu problemi” nedir?

"Zattiri" ülkesinde bir savaş vardır. Zattiri’deki ordu, iki bölgeye bölünmüştür. Ordulardan birine "zattiri bir" ordusu, diğerine "zattiri iki" ordusu diyelim. Zattiri ordularının başında da birer general vardır ve mesajlaşarak yani elçi yoluyla anlaşırlar.

Fakat mesajlarının her zaman, ulaşamama riski de vardır. Bu oranın yüzde kaç olduğu fark etmez. Risk vardır işte. Zattiri bir ordusunun generali, zattiri iki ordusunun generaline şöyle bir mesaj gönderir:

"12 saat sonra, düşmana karşı taarruza geçelim. Bu mesajı aldığına dair bana teyit mesajı gönder. Eğer göndermezsen bizim zattiri bir ordusu saldırıya geçmeyecek."

Zattiri iki ordusunun generali, bu mesajı alır ve ondan beklendiği üzere teyit mesajını elçiyle gönderir fakat kendisi de aynı şekilde teyit etmek ister. Zattiri bir ordusunun generalinden teyit mesajı talep eder ve mesajı almazsa taarruza geçmeyeceğini söyler.

Sorumuza geçelim.

Bu zattiri orduları, birbirine elçi göndererek ortak bir paydada buluşup taarruza geçebilir mi? Gerçekten anlaştıklarından %100 emin olabilir mi?

Yeterince düşündüyseniz sonuç geliyor…

Aslında bu problemde birden fazla senaryo var. İlk senaryoya göre elçi, iki general arasında sonsuz bir döngüye girerek mesajı teyit ediyor. Her iki general de gönderdiği elçinin geri dönüp teyit mesajı vermesini bekliyor ve tekrar gönderiyor. Bu döngü hiç bitmiyor.

Diğer bir senaryoda ise zattiri bir ordusu, saldırının yerini elçi vasıtasıyla bildirmek istiyor. Gönderilen elçi geri dönmüyor. Bu yüzden zattiri bit ordusu da saldırıya geçemiyor çünkü elçinin başına yolda bir şey gelmiş olabilir veya zattiri iki ordusu, saldırı yerini kabul etmeyip elçiyi öldürmüş olabilir.

Son senaryomuzda ise elçi, zattiri bir generalinin mesajını zattiri iki ordusuna iletiyor ve ordu, mesajı kabul ediyor. Daha sonra elçi, kabul mesajını göndermek için zattiri bir ordusuna doğru tekrar yola çıkıyor. Ancak zattiri iki ordusu saldırıya geçmiyor çünkü elçi, geri dönerken ölmüş olabilir ve bu durumda da zattiri bir ordusu da hücum etmez. Bu yüzden zattiri iki ordusu, mesajın geri iletildiğinden emin olmak zorunda.

Problemi, analoji yoluyla bilgisayar bilimine bağlayabiliriz.

Tarafları; iki general yerine iki bilgisayar sistemi olarak düşünürsek sorun, yine iletişim kanalıdır ve iki sistem arasında her zaman güvensizlik yaratır. Bilgisayar veri iletimi kontrol protokolü TCP (Transmission Control Protocol), bu sistemdeki bağlantıyı sona erdirmek için "4 way handshake" (dört yönlü el sıkışma) yöntemini kullanır. 

Gönderilen iletişim talebi, kanalın öteki ucundaki sistem bir ACK (acknowledge) ile yanıtlayıp gönderdiği için bir bağlantıyı yanıtlayarak karşı tarafa yardım eder. Tüm iletilerin eksiksiz bir biçimde alındığı, sonlandırmayı başlatan sistemden başka bir ACK ile takip edilir. İki taraf da bağlantının sonlandırıldığını bilir fakat sorun yine iki sistem arası paylaşılan bilgidir.

Örnek verecek olursak, ilk mesaj başarılı olur ancak ikinci mesaj kaybolursa yarı açık bir bağlantı oluşur. İlk taraf da bağlantının kapatıldığının farkında olmadığı için TCP güvenilir bir protokol olmasına rağmen problemi çözemez.

Ee sonuç ne yani?

Yok. Elçi ne kadar git gel yaparsa yapsın iki taraf da hücum etmek için yeterince emin olamaz.

Sizin bu probleme dair başka senaryo ve çözüm önerileriniz var mı? Yorumlarda merakla bekliyor olacağız.

Kaynaklar: Medium, Medium 2Scaler

Kafanız yeterince yanmadıysa aşağıdaki içeriklerimize de göz atabilirsiniz: