← Blog'a Dön

Telefon İnternetle Nasıl Konuşur?

Telefon İnternetle Nasıl Konuşur?
Veri Paketlerinin Görünmez Yolculuğu
Bir Android uygulamasında "Yükle" butonuna bastınız. Yarım saniye sonra veriler ekranda. Bu süreçte neler oldu?
Veri, uygulamanızdan çıkıp fiziksel dünyada bir yolculuğa çıktı, bir sunucuya ulaştı, oradan geri döndü ve uygulamanıza teslim edildi. Bu yolculuğun her adımı katmanlı bir sistemin parçasıdır.

Katmanlı Ağ Mimarisi
İnternetteki iletişim bir anda gerçekleşmez. Verinin gönderilmesi ve alınması birbirinin üzerine inşa edilmiş katmanlar aracılığıyla gerçekleşir. Bu katmanlar arasındaki işbölümü, her birinin yalnızca kendi sorumluluğuna odaklanmasını sağlar.
Bu yapıyı anlamanın en sezgisel yolu, her katmanın bir öncekinin sunduğu hizmeti kullanarak kendi hizmetini sunması fikridir.
En altta fiziksel iletim var. Bitler, WiFi sinyali ya da 4G/5G dalgaları olarak havada, ya da fiber optik kablo üzerinden ışık olarak taşınır. Bu katman bitleri bir noktadan başka bir noktaya götürmekten başka bir şey bilmez.
Onun üstünde IP katmanı var. IP, verilerin adresler arasında doğru yönlendirilmesini sağlar. Her cihazın bir IP adresi vardır ve veri paketleri bu adresler arasında yönlendirilir.
IP'nin üstünde TCP var. TCP güvenilirliği sağlar. Verinin eksiksiz, sıralı ve hatasız ulaşmasını garanti eder. Paketler kaybolursa yeniden gönderir, sıra bozulursa düzeltir.
Ve en üstte HTTP var. Bu, uygulamanızın gerçekten konuştuğu dildir.

IP Adresi ve DNS: Adres Defteri
Bir sunucuya bağlanmak istediğinizde önce o sunucunun nerede olduğunu bilmeniz gerekir. Ama siz yalnızca api.example.com gibi bir alan adı biliyorsunuzdur.
DNS (Domain Name System) bu çeviriyi yapar. Alan adlarını IP adreslerine dönüştüren devasa, dağıtık bir adres defteridir.
Uygulamanız api.example.coma bağlanmak istediğinde önce bir DNS sorgusu gönderir. DNS sunucusu bu alan adının karşılığı olan IP adresini döndürür. Artık uygulamanız gerçek adresi bilir ve bağlantı kurabilir.
Bu çeviri her istekte tekrar tekrar yapılmaz. Yanıtlar belirli bir süre boyunca önbellekte tutulur. Ama DNS önbelleği temizlendiğinde ya da ilk bağlantıda bu adım kaçınılmazdır.

TCP Bağlantısı: Güvenilir Bir Kanal Kurmak
IP adresi bilindikten sonra TCP bağlantısı kurulur. TCP'nin bağlantı kurma sürecine üç yönlü el sıkışma (three-way handshake) denir.
Telefon sunucuya "Bağlanmak istiyorum" mesajı gönderir. Sunucu "Tamam, hazırım" diye yanıtlar. Telefon "Aldım, başlıyoruz" der. Bu üç adım tamamlandığında güvenilir bir iletişim kanalı kurulmuş olur.
Bu el sıkışma neden önemli? TCP iki tarafın da iletişime hazır olduğunu ve birbirini duyabildiğini doğrular. Bundan sonra gönderilen her paketin alındığı onaylanır, kayıp paketler yeniden iletilir, sıra bozulması düzeltilir.

HTTPS: Güvenli Kanal
Günümüzde çoğu iletişim düz HTTP değil, HTTPS üzerinden gerçekleşir. HTTPS, HTTP'nin TLS şifrelemesiyle korunmuş halidir.
TLS bağlantısı kurulurken sunucu bir sertifika sunar. Bu sertifika sunucunun gerçekten iddia ettiği kim olduğunu kanıtlar. Telefon bu sertifikayı doğrular ve ardından her iki tarafın da anlayabileceği bir şifreleme anahtarı üzerinde anlaşır.
Bu noktadan sonra aralarındaki tüm veri şifrelidir. Arada bir saldırgan trafiği dinlese bile anlamsız karakterler görür. Şifreleme anahtarı olmadan veriyi çözemez.
Android 9'dan itibaren HTTP trafiğine varsayılan olarak izin verilmez. Ağ güvenlik yapılandırması açıkça belirtilmeden tüm iletişimin HTTPS üzerinden yapılması zorunludur. Bu kısıtlama bir engel değil, kullanıcı verilerini koruyan önemli bir güvencedir.

Paket Yolculuğu: Verinin Fiziksel Seyahati
HTTP isteğiniz hazırlandığında bu veri tek bir bütün olarak gönderilmez. Paketlere bölünür.
Her paket belirli bir boyut sınırına sahiptir. Büyük veriler onlarca, hatta yüzlerce pakete bölünür. Her paket kaynak IP adresi, hedef IP adresi ve sıra numarasıyla etiketlenir.
Bu paketler ağ üzerinde aynı yoldan gitmek zorunda değildir. Her biri o an için en uygun rotayı kullanabilir. Bir paket İstanbul üzerinden, bir diğeri Frankfurt üzerinden gidebilir. Hedefte TCP bunları sıra numaralarına göre birleştirir ve orijinal veriyi yeniden oluşturur.

WiFi ve Hücresel: Farklı Fiziksel Katmanlar
Telefon internete iki temel yöntemle bağlanır: WiFi ve hücresel ağ.
WiFi'de veri, radyo dalgaları aracılığıyla erişim noktasına iletilir. Erişim noktası bu veriyi kablo üzerinden internet omurgasına taşır. Kısa mesafe, yüksek hız, düşük gecikme.
Hücresel ağda veri, baz istasyonlarına radyo sinyalleriyle iletilir. 4G LTE ve 5G, bu iletimin protokollerini tanımlar. Baz istasyonu veriyi mobil operatörün çekirdek ağına, oradan internete bağlar. Daha geniş kapsama, ama genellikle WiFi'den daha yüksek gecikme.
Uygulama katmanından bakıldığında bu fark görünmez. NetworkCapabilities API'siyle bağlantı tipini sorgulayabilirsiniz, ama HTTP isteğiniz her iki durumda da aynı şekilde gider.

Geliştirici Perspektifinden Bakış
Bu katmanlı yapıyı anlamak ağ sorunlarını teşhis etmeyi doğrudan kolaylaştırır.
Bağlantı hiç kurulamıyorsa sorun DNS çözümlemesinde, TCP el sıkışmasında ya da fiziksel ağda olabilir. Bağlantı kuruldu ama yanıt gelmiyor ya da gelirken kesiliyor ise sorun TCP paket kaybında ya da sunucu tarafında olabilir. Güvenlik hatası alıyorsanız sorun TLS sertifikasında ya da Android'in ağ güvenlik yapılandırmasındadır.
Katmanları bilmek, hangi sorunun hangi katmanda aranacağını söyler. Ve bu bilgi teşhis sürecini saatlerden dakikalara indirebilir.