DEV Community

Cover image for URL Yazıldıqda Hansı Proseslər İşləyir? (DNS, TCP, TLS, HTTP izahı ilə)
Metin Abbaszade
Metin Abbaszade

Posted on

URL Yazıldıqda Hansı Proseslər İşləyir? (DNS, TCP, TLS, HTTP izahı ilə)

Müasir internet istifadəçisinin gündəlik etdiyi ən adi hərəkətlərdən biri brauzerdə bir vebsayta daxil olmaqdır. Məsələn, http://example.com yazdıqda səhnə arxasında çox sayda mühüm protokol və mexanizm işə düşür: DNS Lookup, TCP bağlantısı, TLS handshake (əgər HTTPS-dirsə), HTTP sorğusu və cavabı, sonda isə bağlantının bağlanması.

Bu məqalədə bu prosesləri proqramçı və sistem səviyyəsində addım-addım izah edirik.

1. DNS Lookup – Domen Adından IP ünvanına keçid

İlk mərhələdə brauzer ünvan çubuğuna yazılan domen adını (məsələn, example.com) müvafiq IP ünvanına çevirmək üçün DNS sisteminə sorğu göndərir.

Məsələn:

example.com  →  93.184.216.34
Enter fullscreen mode Exit fullscreen mode

Bu mərhələ başa çatmadan hansısa serverlə əlaqə qurmaq mümkün deyil. Əgər brauzerin cache-ində və ya sistem səviyyəsində (OS DNS cache, hosts faylı) ünvan tapılmasa, DNS resolver-ə sorğu göndərilir.

2. TCP Üçlü Salamlaşma (Three-Way Handshake)

Serverə məlumat göndərmək üçün əvvəlcə etibarlı bir əlaqə qurulmalıdır. Bu TCP protokolu vasitəsilə həyata keçirilir.

Bağlantı belə qurulur:

Image description

  • SYN (Synchronize) nədir -> SYN bayrağı TCP bağlantısının qurulmasına başlamaq üçün göndərilir.

  • SYN-ACK ->Bu, serverin SYN-ə cavab olaraq göndərdiyi mesajdır və iki funksiyanı yerinə yetirir:
    1.ACK ilə müştərinin SYN paketini qəbul etdiyini təsdiqləyir,
    2.SYN ilə öz əlaqə istəyini bildirir (serverin öz sıra nömrəsi ilə).

Burada belə bir sual çıxır:

Niyə 3 addım? 2 kifayət deyil? 🤔
Əgər üçüncü addım olmasa, əlaqə başlasa da, qarşılıqlı anlaşma olmaz — və TCP heç vaxt ‘təxmin’ əsasında işləməz.

Portlar:
HTTP üçün: 80
HTTPS üçün: 443
Nəticədə hər iki tərəf arasında iki yönlü, ardıcıllıqla təmin olunmuş etibarlı əlaqə qurulur.

3. (Əgər HTTPS-dirsə) TLS Handshake — Məlumatların Şifrələnməsi

Əgər URL https:// ilə başlayırsa, TLS (əvvəllər isə SSL-dən istifadə edilirdi) şifrələmə protokolu tətbiq olunur. Bu mərhələdə müştəri və server simmetrik açarlarla şifrələnmiş əlaqə qurur.

Əsas addımlar:

  • ClientHello → Müştəri öz TLS versiyalarını, dəstəklədiyi şifrələmə alqoritmlərini (cipher suites) və random (R₁) dəyərini təqdim edir.
  • ServerHello → Server uyğun cipher seçir, öz random dəyərini (R₂) və sertifikat göndərir.
  • Key Exchange → Müştəri tərəfindən yaradılmış gizli dəyər (pre-master secret) serverə göndərilir.
  • Session Key → Hər iki tərəf eyni sessiya açarını hesablayır və təsdiqləyir.
  • Finished Messages → Şifrələnmiş "finished" mesajları göndərilir. ➡️ Bu mərhələdən sonra bütün HTTP mesajları artıq TLS-in yaratdığı təhlükəsiz kanal içərisindən ötürülür.

4. HTTP Sorğusu və Server Cavabı

Bu mərhələdə brauzer serverə HTTP protokolu vasitəsilə konkret bir resurs (məsələn, /index.html) istədiyini bildirir.

A. HTTP Request (Müştəri → Server)

GET /index.html HTTP/1.1
Host: example.com
User-Agent: MyBrowser/1.0
Accept: text/html
Enter fullscreen mode Exit fullscreen mode
  • GET /index.html HTTP/1.1 -> Müştəri serverdən /index.html adlı resursu, HTTP/1.1 protokolu ilə, almaq üçün sorğu göndərir.

  • Host: example.com -> Serverə hansı domenə aid resursun istənildiyini bildirir — eyni IP-də fərqli saytları ayırmaq üçün vacibdir.

  • User-Agent: MyBrowser/1.0-> Müştəri proqramının (brauzer, API, bot) özünü təqdim etmə üsuludur

  • Accept: text/html -> Müştərinin cavab olaraq hansı formatda məzmun istədiyini göstərir

B. Server emalı
Server:

  • URI-yə baxır (/index.html)
  • Faylı və ya resursu tapır
  • Status kodu və cavab başlıqları yaradır

C. HTTP Response (Server → Müştəri)

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1024

<html>…</html>
Enter fullscreen mode Exit fullscreen mode
  • HTTP/1.1 200 OK -> Server bildirir ki, HTTP sorğusu uğurla yerinə yetirildi və istənilən resurs tapıldı.

  • Content-Type: text/html; charset=utf-8 -> Cavabın HTML formatında olduğunu və simvolların UTF-8 kodlaşdırması ilə yazıldığını göstərir.

  • Content-Length: 1024 -> Serverin göndərdiyi məzmunun dəqiq uzunluğunu (baytla) göstərir ki, müştəri nə qədər data qəbul edəcəyini bilsin.

  • -> Serverin cavab bədənindəki faktiki HTML məzmundur və brauzerdə görünəcək səhifəni təşkil edir.

Bu cavabla birlikdə müştəriyə HTML məzmun çatdırılır və brauzer bu məzmunu parse edərək ekranda göstərir.

5. Bağlantının Bağlanması (Teardown)

İş bitdikdən sonra, həm müştəri, həm server bağlantını təhlükəsiz və ardıcıllıqlı şəkildə bağlamalıdır.

A. TLS “close_notify” (yalnız HTTPS)
TLS şifrələməsi varsa, hər iki tərəf qarşı tərəfə “mətn ötürülməsi bitdi” mesajı göndərir:

Client → Server: close_notify
Server → Client: close_notify

B. TCP Dördlü Bağlanış (Four-Way Teardown)

Image description

  • FIN (Finish) -> FIN bayrağı TCP əlaqəsinin bir istiqamətdə bağlanmasını bildirir.
  • ACK (Acknowledgment) -> ACK bayrağı göndərilən məlumatların və ya nəzarət mesajlarının uğurla alındığını təsdiq etmək üçün istifadə olunur.

Bu addımlar tam TCP protokoluna uyğun, təhlükəsiz şəkildə əlaqənin sonlanması üçün vacibdir.

Sonda isə belə bir sual yaranır:

Əgər "Three way handshake" zamanı SYN-ACK mümkündürsə, "Four-way Teardown" zamanı niyə FİN və ACK ayrı ayrı göndərilir?
Texniki olaraq FIN və ACK eyni paketdə göndərilə bilər, lakin TCP protokolu bu iki addımı məntiqi olaraq ayırır, çünki bu, təhlükəsizlik, axın nəzarəti və debugging üçün daha anlaşıqlıdır.

Top comments (0)