Tarayıcı’nın URL’ine bir şeyler yazıp arattığımızda ne olur?

İsa Gül
4 min readOct 12, 2022

Aslında hemen hemen her gün hepimiz haberleri okumak, bir konuda araştırma yapmak veya bir müzik dinlemek için tarayıcının url kısmına bir şeyler yazar ve enter tuşuna basarız. Peki tüm buradaki süreç arka planda nasıl işler? Örneğin, tarayıcımızın url kısmına google.com yazdık ve enter tuşuna bastık. Peki sonrasında nasıl google anasayfasını görüntüleyebildik? Aralardaki süreçlerde neler yaşandı?

Buradaki temel iş, belirli kuralları yerine getirerek client ile server arasındaki veri iletişimini sağlamaktır. Client dediğimiz, bizim istekte bulunduğumuz herhangi bir cihazdaki tarayıcılar (bilgisayarlar, akıllı telefonlarımızda bulunan chrome, firefox, safari gibi). Server ise bizim görüntülemek istediğimiz internet sayfasındaki tüm bilgileri içerisinde barındıran bilgisayarlar olarak açıklanabilir.

Öncelikle bizim yazdığımız google.com ifadesinin aslında internet dünyasında bir anlamı yok. Asıl ihtiyacımız olan şey google.com’a karşılık gelen IP adresi. Peki browser bu IP adresini nasıl buluyor?

DNS(Domain Name System) olarak adlandırılan ve her domain adına karşılık gelen IP adreslerinin barındığı bir sistem mevcut. İnternet dünyasında her bir domaine karşılık gelen bir IP adresi bulunmaktadır. Biz domain adını yazdığımızda browser bu IP adresini DNS yardımıyla bulur ve o IP adresine bağlanmak ister. Bu IP adresi aslında bizim erişmek istediğimiz sunucunun adresidir. DNS’in temel görevi bizim işimizi kolaylaştırmak. Çünkü her sitenin IP adresini ezberlemek ve o şekilde URL kısmına yazmak hepimiz için çok zor olurdu. DNS’i bir telefon rehberi gibi de düşünebiliriz. Nasıl orada her telefon numarasına karşılık gelen isimler mevcutsa burada da her domaine karşılık gelen IP adresleri bulunmakta. Browser doğru DNS kaydını bulurken süreyi kısaltmak adına bazı cache mekanizmalarını kontrol eder.

Browser ilgili kaydı, öncelikle kendi cache’inde ardından işletim sisteminin kendi cache’inde arar. Bulamadığında router’ın cache’ine ve son olarak da internet servis sağlayıcısının cache’ine bakar. Eğer hiçbir yerde bulamazsa o zaman internet servis sağlayıcımızın DNS sunucusu yazdığımız domain’e karşılık gelen IP adresini bulana kadar bir DNS sorgusu başlatır. Bu sorgu DNS sunucuları arasında recursive bir şekilde ilgili IP adresinin bulunduğu veya bulunamadığı yanıtı dönene kadar devam eder. Tüm bu süreç aşağıdaki görseli oluşturmaktadır.

DNS yardımıyla yazdığımız domaine karşılık gelen IP adresini bulduk.

Bundan sonraki süreçte ise client ilgili server’a bir bağlantı kurma isteğinde bulunacaktır. O esnada o server’a birden çok client veri akışı sağlamak adına istekte bulunabilir. Server’in hangi paketlerin hangi client’a gitmesini bilmesi için öncesinde client ve server arasında bir anlaşma yapması gerekir. Client ve server arasındaki bağlantıları sağlamak için birçok internet protokolü bulunmaktadır. Bizim örneğimizde https://www.google.com adresinde bağlantı şemamız https olduğundan dolayı client ilgili server’a bir TCP connection başlatır. HTTP, HTTPS, SSH, Telnet, SMTP, POP gibi protokollerin veri transferi TCP ile yapılır. TCP bağlantılarında three-way handshake yöntemi kullanılır.

Birinci adımda client, server’ın yeni bir bağlantıya açık olup olmadığını öğrenmek adına bir SYN paketi gönderir.

İkinci adımda server client’a yeni bir bağlantıya açık olduğu mesajını ileten bir SYN/ACK paketi gönderir.

Son adımda ise client, server’dan gelen paketi alır ve bu kez bir ACK paketi göndererek yanıtı kabul eder. Böylelikle client ve server arasında veri akışını sağlayacak güvenilir bir bağlantı sağlanmış olur.

Three-Way Handshake

TCP bağlantımız da hazır.

Client ve server arasında bağlantı kurulur kurulmaz, artık client server’a bir GET request’i atar. Bu, client’ın server’dan google.com’un içeriğini istemesi olarak da açıklanabilir. Server bu isteği alır ve status code bilgisi, response header (buradaki bilgilerle browser, response’u nasıl handle edeceğini anlar) ve ilgili path’deki resource (html, js, css, image, data gibi) ile birlikte yanıtı client’a gönderir.

Browser yanıtı aldıktan sonra, response header’da bulunan content-type’a göre (bizim örneğimiz için text/html) sayfayı yalın bir HTML sayfası olarak render eder. Ardından ilgili css, js veya image’leri de yine aynı şekilde server’dan alır ve yeniden bu adımları gerçekleştirmemek adına cache’inde barındırır. Sonuç olarak aşağıdaki görseldeki durum gerçekleşmiş olur.

Tüm adımların ardından artık google.com’un anasayfası tarayıcımızda görünür oldu. 🥳

--

--