6 TCP/IP ve internet iletişimi
Verinin kablodan ve Wi-Fi’dan nasıl geçtiğine 3. ve 5. haftada, bu işin katmanlara nasıl bölündüğüne de 4. haftada baktık. Bu hafta yerel bağlantının çalıştığını varsayıp katmanlarda yukarı çıkıyoruz: tarayıcıya bir adres yazınca sayfa bilgisayarına nasıl geliyor?
İnternette kullanılan iletişim kurallarına (protokollere) topluca TCP/IP denir. Ad, en çok kullanılan iki protokolden gelir: TCP ve IP. 4. haftada OSI’nin yedi katmanını arızanın yerini bulmak için kullandık. İnternetin protokolleri ise çoğunlukla dört katmanlı TCP/IP modeliyle anlatılır.
Dört vakada sırasıyla şunlara bakacağız: isteğin sunucudaki hangi programa gittiği, aynı anda açık bağlantıların nasıl karışmadığı, kaybolan veriye ne olduğu ve yolunu şaşıran paketin nerede durduğu. Sonra hepsini TCP/IP modeline ve bir web isteğinin adımlarına yerleştireceğiz.
Sınavda sorulur: TCP/IP modelinin dört katmanı; port kavramı ve neden gerektiği; HTTP 80, HTTPS 443, DNS 53, SSH 22; geçici (ephemeral) port fikri; Connection refused ile zaman aşımının farkı; ping’in (ICMP) port kullanmadığı; TCP ile UDP’nin temel farkı; IP TTL’in amacı, tracert’ün ondan nasıl yararlandığı ve DNS TTL ile karıştırılmaması; web isteğinin dört adımı ve bir hata mesajının hangi adımı gösterdiği.
Sınav dışı (bilgi amaçlı): TCP’nin iç işleyişi (bağlantı kurma mesajları, sıra numaraları, hız ayarı); HTTP/3 ve QUIC; TLS’in ayrıntısı; port aralıklarının sınırları (0–65535, 0–1023); DHCP’nin port numaraları; netstat ve Test-NetConnection çıktısının satırları.
6.1 Vaka 1: Site açılıyor, SSH bağlanmıyor
Bir teknisyen okulun sunucusundaki siteyi tarayıcıda açabiliyor. Aynı sunucuya SSH ile (uzaktaki bir bilgisayara güvenli komut satırı bağlantısı) bağlanmak isteyince şu çıktıyı alıyor:
Tarayıcı: https://okul-sunucu.example → site açılıyor
> ssh [email protected]
ssh: connect to host okul-sunucu.example port 22: Connection refused
6.1.1 Kanıt ne söylüyor
Site açıldığına göre sunucu ayakta ve ona ulaşılıyor. Sunucu da adres de aynı, ama bir istek çalışıyor, öteki geri çevriliyor. İki isteği birbirinden port ayırıyor.
IP adresi verinin hangi cihaza gideceğini söyler. Port ise o cihazda hangi uygulamaya gideceğini söyleyen numaradır. Adres ve port çoğu zaman iki noktayla yan yana yazılır:
203.0.113.10:443
└────┬─────┘ └┬┘
IP adresi port
hangi cihaz? hangi uygulama?
Bir sunucuda web, SSH ve DNS hizmeti aynı anda çalışabilir. Her hizmet kendi portunu dinler, yani o numaraya gelen bağlantıları bekler. https:// ile açılan site TCP 443’e, SSH TCP 22’ye gider. Bu sunucuda 443’te bir hizmet bekliyor, 22’ye gelen bağlantı ise geri çevriliyor.
Connection refused mesajını 4. haftadan tanıyorsun: istek karşıya ulaştı ve o porta yapılan bağlantıya açık bir ret cevabı geldi. Ya 22’de dinleyen bir SSH hizmeti yok ya da bir güvenlik kuralı bu bağlantıyı reddediyor.
Güvenlik kuralları çoğu zaman ret cevabı bile göndermez, paketi cevapsız atar. O zaman bilgisayar bir süre bekler ve Connection timed out (zaman aşımı) görülür. Zaman aşımı daha az şey söyler: paket yolda kalmış da olabilir, sunucu kapalı da olabilir, bir kural paketi atmış da olabilir.
443 gibi bir TCP ya da UDP portu yazılımdaki bir numaradır, elle tutulur bir şey değildir. Switch üzerindeki “Port 1, Port 2…” ise kablonun takıldığı fiziksel yuvadır. Aynı sözcük iki ayrı anlamda kullanılır. Bir soruda port geçince hangisinin kastedildiğine dikkat et.
6.1.2 Bilmen gereken dört port
| Hizmet | Protokol ve port | Kullanım |
|---|---|---|
| HTTP | TCP 80 | Şifrelenmemiş web |
| HTTPS | TCP 443 | TLS ile şifrelenmiş web |
| DNS | UDP ve TCP 53 | Adı IP adresine çevirme |
| SSH | TCP 22 | Uzak bilgisayara güvenli bağlantı |
TLS, web trafiğini şifreleyen protokoldür. Adresteki https’nin sonundaki s onu gösterir. Site destekliyorsa tarayıcı HTTPS’i HTTP/3 ile UDP 443 üzerinden de gönderebilir. Ayrıntısı sınav dışı.
Bunlar varsayılan portlardır. Yönetici bir hizmeti başka bir portta da çalıştırabilir. O zaman port adreste yazılır: https://okul-sunucu.example:8443 adresi 443’e değil, 8443’e bağlanır.
Bu dördü dışında port numarası ezberlemen gerekmez. Vakada başka bir port geçerse hizmetin adıyla birlikte verilir. Örneğin 9. haftada göreceğin DHCP, UDP 67 ve 68 portlarını kullanır. Bu numaraları bilmen gerekmez.
6.2 Vaka 2: Aynı anda üç bağlantı, karışmayan cevaplar
Bir bilgisayarda Chrome ve Edge aynı siteyi açmış, bir de SSH oturumu açık. Hepsi aynı IP adresinden, 192.168.20.45’ten çıkıyor.
6.2.1 Kanıt ne söylüyor
Üçü de TCP bağlantısıdır. Her TCP bağlantısı dört değerle tanınır ve bu dörtlü her bağlantıda farklıdır: kaynak IP, kaynak port, hedef IP, hedef port.
Chrome : 192.168.20.45:53124 → 203.0.113.10:443
Edge : 192.168.20.45:53125 → 203.0.113.10:443
SSH : 192.168.20.45:53126 → 198.51.100.5:22
İlk iki satırda hedef aynı: aynı sunucu, aynı port. Onları kaynak port ayırıyor. İşletim sistemi bağlantıyı başlatırken o an boşta olan bir port numarası seçer. Numara yalnız bağlantı sürerken kullanılır, bağlantı bitince başka bir bağlantıya verilebilir. Bu yüzden ona geçici (ephemeral) port denir. Sunucunun portu ise hizmete göre bilinir: web için 443, SSH için 22.
Cevap gelirken kaynak ve hedef yer değiştirir:
İstek : 192.168.20.45:53124 → 203.0.113.10:443
Cevap : 203.0.113.10:443 → 192.168.20.45:53124
İşletim sistemi cevabın hedef portuna (53124) bakar ve cevabı Chrome’a teslim eder. Edge’in cevabı 53125’e gelir. Aynı bilgisayarda müzik, görüntülü konuşma ve tarayıcı aynı anda çalışırken cevapların birbirine karışmaması da buna dayanır.
6.3 Vaka 3: Neden DNS UDP, web TCP?
Bir öğrenci “UDP hızlıdır, o hâlde her şey UDP kullansın” diyor.
6.3.1 Kanıt ne söylüyor
TCP ve UDP, portlarla birlikte taşıma katmanında çalışan iki protokoldür. İkisi farklı güvence verir. Hangisinin seçileceğini hız tek başına belirlemez.
| Özellik | TCP | UDP |
|---|---|---|
| Bağlantı | Veri göndermeden önce karşı uçla bağlantı kurar | Bağlantı kurmadan paketleri tek tek gönderir |
| Kayıp ve sıra | Veriyi sıralar, kaybolanı yeniden gönderir | Kaybolanı yeniden göndermez, sırayı korumaz |
| Ek yük | Daha fazla | Daha az |
| Örnek | Web, SSH | DNS sorguları, görüntülü konuşma |
Ek yük, verinin kendisi dışında gidip gelen her şeydir: her pakete eklenen başlıklar ve iletişimi yönetmek için gönderilen mesajlar. TCP’de iki uç veri göndermeden önce birkaç mesajla birbirine hazır olduğunu bildirir, gelen veri için de onay gönderir.
Web neden TCP? Bir sayfanın yarısı eksik gelirse işe yaramaz. TCP kayıp parçayı yeniden gönderir ve sırayı düzeltir. HTTP/3 ise UDP’nin üstünde çalışan QUIC protokolünü kullanır. Kaybolanı yeniden gönderme ve sıraya koyma işini orada QUIC yapar, çünkü sayfa yine eksiksiz ve sıralı gelmek zorundadır.
DNS sorgusu neden UDP? Sorgu tek küçük bir pakete sığar, cevap da çoğu zaman öyle. TCP ile önce bağlantı kurmak, sonra kapatmak için sorgunun kendisinden çok daha fazla mesaj gerekirdi. Cevap gelmezse istemci yeniden sorar. Cevap UDP ile gönderilemeyecek kadar büyükse istemci aynı soruyu TCP 53 üzerinden yeniden sorar.
Görüntülü konuşma neden UDP? Kaybolan bir görüntü karesini birkaç saniye sonra yeniden göndermenin anlamı yok, o an geçmiştir. Görüntü bir an bozulur ama konuşma sürer.
Bu yüzden “UDP hızlıdır” demek yetmez. TCP daha çok güvence verir, UDP daha az ek yük getirir. Uygulama hangisine ihtiyaç duyuyorsa onu kullanır.
TCP, alıcının alabileceğinden fazlasını göndermemeye de dikkat eder. Bunun ve sıralamanın iç işleyişi sınavda sorulmaz. TCP’nin veriyi karşıya eksiksiz ve sırasıyla ulaştırmaya çalıştığını bilmen yeterli. Hat tamamen koparsa TCP de veriyi ulaştıramaz.
TCP güvenilirdir ama veriyi şifrelemez. Web trafiğini TLS şifreler.
6.4 Vaka 4: Paket sonsuza kadar dolaşırsa ne olur?
İki router yanlış yapılandırılmış ve paketi birbirine geri gönderiyor. Bilgisayardan ping atılınca şu cevap geliyor:
> ping 198.51.100.7
Reply from 10.0.0.2: TTL expired in transit.
Reply from 10.0.0.2: TTL expired in transit.
Bu paket ağda sonsuza kadar dolaşır mı?
6.4.1 Kanıt ne söylüyor
Hayır, çünkü IPv4 başlığında TTL (Time To Live) alanı vardır. Paketi gönderen bilgisayar bu alana bir başlangıç değeri yazar. Paket her router’dan geçtiğinde TTL bir azaltılır. Değer sıfıra ulaşınca router paketi atar ve gönderene “TTL bitti” mesajı yollayabilir. Çıktıdaki TTL expired in transit satırı bu mesajdır: cevabı hedef değil, paketi atan 10.0.0.2 router’ı veriyor.
Adında “time” geçse de TTL bir zaman ölçüsü değil, hop sayacıdır (hop: paketin bir router’dan geçmesi). Yanlış yönlendirme bununla düzelmez, ama yönlendirme döngüsüne giren, yani router’lar arasında gidip gelen bir paket sonsuza kadar dolaşamaz. IPv6’da aynı alanın adı Hop Limit’tir.
ping çıktısında 4. haftada gördüğün TTL=57 de bu alandır: cevap paketi sana ulaştığında TTL’den kalan değer.
Paketin geçtiği router’ları listeleyen tracert komutu (Linux ve macOS’ta traceroute) da bu davranıştan yararlanır. Ayrı ayrı paketler gönderir: ilkinin TTL’i 1, ikincisinin 2, üçüncüsünün 3 olur. Her seferinde TTL’i biten router “TTL bitti” mesajıyla kendini gösterir. Hedefe iki router üzerinden gidildiğini düşün:
TTL 1 → 1. router TTL'i 0 yapar, paketi atar, "TTL bitti" der → 1. satır
TTL 2 → 2. router TTL'i 0 yapar, paketi atar, "TTL bitti" der → 2. satır
TTL 3 → paket hedefe ulaşır, hedef cevap verir → son satır, tracert durur
Bazı router’lar “TTL bitti” mesajını göndermez, çıktıda onların yerinde yıldız görünür. 10. haftada bu çıktıyı yorumlayacağız.
ping ve “TTL bitti” mesajları ICMP protokolüyle gider. ICMP ağın hata ve kontrol mesajlarını taşır, port kullanmaz.
DNS’te de TTL adında bir değer vardır: bir DNS kaydının önbellekte (bilgisayarın ya da DNS sunucusunun daha önce aldığı cevapları sakladığı yer) en çok kaç saniye tutulacağını söyler. İsim aynı, kavram farklı: IP TTL paketin router geçiş sayısını sınırlar, DNS TTL bir kaydın önbellek ömrünü belirler.
6.5 TCP/IP modelinin dört katmanı
Vakalarda gördüklerimizi TCP/IP’nin dört katmanına yerleştirelim:
| TCP/IP katmanı | Görevi | Örnekler | OSI karşılığı |
|---|---|---|---|
| Uygulama | Uygulamaların birbiriyle nasıl konuşacağının kuralları | HTTP, DNS, SSH | 5–7 |
| Taşıma | Veriyi bir cihazdaki uygulamadan ötekindeki uygulamaya taşır | TCP, UDP, portlar | 4 |
| İnternet | IP adresiyle paketi ağdan ağa iletir | IPv4, IPv6, TTL, ICMP | 3 |
| Ağ erişimi | Veriyi yerel ağda kabloyla ya da radyo dalgasıyla taşır | Ethernet, Wi-Fi | 1–2 |
Port, TCP ve UDP taşıma katmanında, TTL internet katmanında durur. 3. ve 5. haftada gördüğün kablo, MAC adresi ve Wi-Fi ise ağ erişimi katmanının işidir. Bazı kaynaklar ağ erişimini fiziksel ve veri bağlantı diye ikiye ayırıp beş katman sayar. Bu derste dört katman kullanıyoruz.
6.6 Bir web isteğinin dört adımı
Tarayıcıya https://emrecan.dev yazdığında olanları dört adımda izleyebilirsin. Bilgisayarın ağa bağlı olduğunu, adın IP adresinin önbellekte olmadığını ve siteyle açık bir bağlantı bulunmadığını varsayalım:
| Adım | Ne olur | Protokol ve port | Bu bölümde |
|---|---|---|---|
| 1. İsim çözme | Bilgisayar emrecan.dev’in IP adresini DNS sunucusuna sorar |
UDP 53 | Vaka 3 |
| 2. Bağlantı | Bilgisayar geçici bir kaynak portundan sunucunun 443 portuna bağlanır, TLS ile şifrelemede anlaşılır | TCP 443 | Vaka 1 ve 2 |
| 3. İstek | Tarayıcı HTTP isteğini bu bağlantı üzerinden gönderir | TCP 443 | |
| 4. Yanıt | Sunucu sayfayı gönderir, kaybolan parçayı TCP yeniden gönderir | TCP 443 | Vaka 3 |
Dört adımın hepsinde paketleri IP taşır: paket varsayılan ağ geçidinden (gateway, yerel ağın dışarı açılan kapısı) ISP’nin (internet servis sağlayıcısı) ağına, oradan router’lar üzerinden sunucuya gider. Her router TTL’i bir azaltır (Vaka 4).
Bu adımlar arıza ararken de işe yarar. Tarayıcının ya da komutun verdiği hata mesajı, isteğin hangi adımda takıldığını gösterir:
| Hata mesajı | Takıldığı adım |
|---|---|
DNS_PROBE_FINISHED_NXDOMAIN, Could not resolve host |
1. İsim çözme: ad IP adresine çevrilemedi |
ERR_CONNECTION_REFUSED, Connection refused |
2. Bağlantı: karşıya ulaşıldı, o porttaki bağlantıya ret cevabı geldi |
ERR_CONNECTION_TIMED_OUT, Connection timed out |
2. Bağlantı: hiç cevap gelmedi. Yol kopuk, sunucu kapalı ya da bir kural paketi atıyor olabilir |
404 Not Found, 500 Internal Server Error |
4. Yanıt: bağlantı kuruldu, sunucu hata bildiren bir yanıt gönderdi |
404 Not Found istenen sayfanın sunucuda bulunamadığını, 500 Internal Server Error sunucunun isteği işlerken kendi içinde hataya düştüğünü söyler. İkisinde de sunucu cevap vermiştir: ağ çalışıyor, sorun sitede.
Gerçek bir sayfa açılırken sayfadaki resim ve dosyalar için ek istekler, önbellek gibi başka ayrıntılar da vardır. Bu hafta yalnız temel akışa bakıyoruz. 12. haftada adımları komutlarla sınayacağız.
6.7 Ekranda ne gördük
Derste sınıf bilgisayarında iki komut çalıştırılır. Aşağıda örnek çıktıları var. Senin bilgisayarında adresler, süreler ve bağlantılar farklı çıkar. Terminali nasıl açacağın 1. haftanın “Terminal, komut ve iki ağ komutu” kısmında yazıyor. Test-NetConnection bir PowerShell komutudur, Komut İstemi’nde (cmd) çalışmaz. Başlat düğmesine sağ tıklayıp açtığın Terminal, PowerShell ile açılır. Listede Terminal yoksa Başlat menüsüne powershell yazıp Windows PowerShell’i aç.
> Test-NetConnection 1.1.1.1 -Port 443
ComputerName : 1.1.1.1
RemoteAddress : 1.1.1.1
RemotePort : 443
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.20.45
TcpTestSucceeded : True
> Test-NetConnection 1.1.1.1 -Port 22
WARNING: TCP connect to (1.1.1.1 : 22) failed
ComputerName : 1.1.1.1
RemoteAddress : 1.1.1.1
RemotePort : 22
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.20.45
PingSucceeded : True
PingReplyDetails (RTT) : 18 ms
TcpTestSucceeded : False
1.1.1.1 herkesin kullanabildiği bir DNS sunucusudur. Burada ona DNS sorusu sormuyoruz, yalnız iki porta TCP bağlantısı kurmayı deniyoruz. İlk komut 443 portuna bağlanır (TcpTestSucceeded : True), çünkü bu sunucu şifreli DNS için 443’te de dinliyor. İkinci komut 22 portunu dener ve başaramaz. Sonucu yazmadan önce 20 saniye kadar bekleyebilir. Aynı çıktıda PingSucceeded : True da var: sunucu ping’e cevap veriyor, ama 22’ye bağlantı kurulamıyor. Okulun ya da evin ağındaki kurallar bu sonuçları değiştirebilir. 4. haftadaki kuralı burada yeniden görüyorsun: ping çalışması bir hizmetin çalıştığını göstermez, çünkü ping port kullanmaz.
> netstat -n
Active Connections
Proto Local Address Foreign Address State
TCP 192.168.20.45:53124 203.0.113.10:443 ESTABLISHED
TCP 192.168.20.45:53125 203.0.113.10:443 ESTABLISHED
TCP 192.168.20.45:53126 198.51.100.5:22 ESTABLISHED
netstat -n bilgisayarın o anda açık TCP bağlantılarını listeler. Her satır Vaka 2’deki dörtlüdür: Local Address bilgisayarın kendi IP adresi ve portu, Foreign Address karşı tarafın IP adresi ve portu. Bilgisayardan giden pakette bunlar kaynak ve hedeftir. ESTABLISHED bağlantının kurulduğunu gösterir. Türkçe Windows’ta başlıklar Türkçedir: Local Address yerine “Yerel Adres”, Foreign Address yerine “Yabancı Adres” yazar.
Senin listen bundan uzun olur. 127.0.0.1 ile başlayan satırlar bilgisayarın kendi içindeki bağlantılardır. HTTP/3 kullanan sitelerin bağlantısı UDP olduğu için bu listede görünmez. Daha önce açmadığın bir siteyi açıp komutu yeniden çalıştırırsan listeye kendi geçici portunu alan yeni satırlar eklenir.
6.9 Tek sayfa özet
- TCP/IP’nin dört katmanı yukarıdan aşağıya: uygulama, taşıma, internet, ağ erişimi. Port, TCP ve UDP taşıma katmanında; IP, TTL ve ICMP internet katmanındadır.
- IP adresi hangi cihaza, port o cihazdaki hangi uygulamaya gidileceğini söyler. Tek IP üzerinde onlarca bağlantı bu sayede karışmaz.
- Bir TCP bağlantısı dört değerle tanınır: kaynak IP, kaynak port, hedef IP, hedef port.
- Bilinmesi gereken portlar: HTTP 80, HTTPS 443, DNS 53, SSH 22. Aralık sınırları sınav dışı.
- Sunucunun portu hizmete göre bilinir. İstemcinin portu geçicidir (ephemeral): işletim sistemi bağlantıyı başlatırken seçer.
- TCP veriyi sıralar ve kaybolanı yeniden gönderir. UDP daha az ek yük getirir. “UDP hızlıdır” demek yetmez.
- IP TTL bir hop sayacıdır: döngüye giren paketin sonsuza kadar dolaşmasını önler.
tracertTTL’i 1, 2, 3 diye artırarak yolu çıkarır. DNS TTL ise bir kaydın önbellekte kaç saniye tutulacağını söyler. - Web isteği: isim çözme → bağlantı → istek → yanıt. Hata mesajı hangi adımda takıldığını gösterir.
Connection refused: karşıya ulaşıldı, o porttaki bağlantı reddedildi. Zaman aşımında hiç cevap gelmez.pingport kullanmaz.
6.10 Bu bölümün kazanımları
Bu bölümü bitiren öğrenci:
- IP adresi ile portun farklı sorulara cevap verdiğini açıklar.
- Temel hizmet portlarını (HTTP, HTTPS, DNS, SSH) tanır ve kapalı port belirtisini yorumlar.
- Geçici (ephemeral) port ile bağlantıların nasıl ayırt edildiğini açıklar.
- TCP ile UDP’nin farklı güvenceler verdiğini gerekçelendirir.
- IP TTL’in amacını açıklar ve DNS TTL ile karıştırmaz.
- TCP/IP katmanlarını sıralar ve bir kavramın hangi katmana ait olduğunu belirler.
- Bir web isteğinin adımlarını sıralar ve hata mesajını doğru adıma bağlar.
