Değerli arkadaşlar, merhaba! Bu yazımızda, yine çok önemli bir konu olan TCP/IP konusu hakkında konuşacağız.
TCP/IP protokolü, kapak fotoğrafında da gördüğünüz gibi TCP ve IP’nin birleşiminden oluşan bir modeldir. IP adreslerinin ne olduğunu zaten önceki yazılarımızdan biliyorsunuz, eğer bilmiyorsanız lütfen aşağıdaki blogları okumadan bu blogu okumayınız çünkü IP adreslerini anlamanız gerekiyor:
Okumanız gereken ilk blog: IP Adresleri
İkinci blog: Sayı Sistemleri Bölüm 1
Üçüncü blog: Sayı Sistemleri Bölüm 2
IP kavramının ne olduğunu bildiğinizi varsayarak sadece TCP’nin ne olduğunu anlatacağım daha sonra bu ikisi arasındaki bağlantıyı anlamaya çalışacağız.
TCP (Transmission Control Protocol), Türkçe’ye “Geçiş Kontrol Protokolü” olarak çevirilebilir. TCP, bilgisayarlar arasındaki iletişimin küçük paketler hâlinde ve kayıpsız olarak gerçekleştirilmesini sağlar. Peki bu nasıl olur? Örneğin şu an bütün bu blog yazısının toplam 6000 byte (bayt) olduğunu düşünelim. Ben bu yazıyı siteye yüklerken TCP denen arkadaşımız bu 6000 byte’lık veriyi 1500’er byte’a ayırıyor. 6000 / 1500 = 4. Yani bu verinin her parçası 1500 byte’tan oluşuyor ve 4 parçaya bölünerek işleme alınıyor. İşte, bölünen bu parçalara 'paket' adı veriliyor. Daha sonra, veri kaybı yaşanmaması veya veri karışıklığı sebebiyle bütünlüğün bozulmaması için TCP, ayırdığı her pakete bir sıra numarası veriyor ve bu sıra numarasına göre işlemlerini gerçekleştiriyor. Dolayısıyla veri giderken veya gelirken, TCP sayesinde verinin bütünlüğü sağlanır; verinin sağlam olup olmadığı, veride bir sorun olup olmadığı tespit edilir. Karşı tarafın, veriyi alıp almadığını da kontrol eder. Bu arada eğer trafik gerçekten yoğunsa TCP, 1500 byte’lık paketleri daha küçük (örneğin 1400 byte) paketlere de bölebilir.
Bununla birlikte ‘darboğazları’ engeller. Darboğaz, kapasitenin aşılması veya sınırların zorlanması demektir. Örneğin bir marketin günde 1200 adet çikolata alabiliyor olduğunu varsayalım. Eğer üretici firma o gün o markete 2200 adet çikolata götürürse burada bir darboğaz (yavaşlama, tıkanıklık, yoğunluk) yaşanacaktır. İşte TCP, göndereceği paketleri, paketlerin geçtiği yolların kapasitesine göre ayarlar. Mesela, bir yol üzerinden dakikada 500 paket geçiyorsa ama yollanan paketler 1500 adet ise TCP, bu iletimi yavaşlatır. Bu sayede bir yığılma gerçekleşmez ve bir aksama olmaz. Yoğunluk olmaması açısından markete getirilen 2200 adet çikolatanın sabah 1200 adedi, akşam da kalan 1000 adedinin alındığını düşünün; aynı mantık.
Bunun yanında bir kimlik doğrulama sağlar. Yani TCP, veriyi göndereni ve alanı bilir, kimliklerine göre bunları ayırır. Bu sayede hem bütünlük hem de güvenlik sağlamış olur. HTTP, HTTPS, POP3, SMTP, FTP gibi önemli protokoller de TCP vasıtasıyla yapılır.
TCP, çift yönlü yani full duplex bir yapıya sahiptir. Konunun detayları için buyurun: OSI Katmanları
Az önce de dediğimiz gibi TCP'nin kullandığı yol, paket alışverişine dayanır. Hemen bir örnek verelim; aşağıdaki örnekte 'Server' yani 'Sunucu' 'S' ile, 'Client' yani 'İstemci' ise 'C' ile ifade edilmiştir.
Yukarıdaki iletişimin tam adı ‘Three Way Handshake’ yani ’Üç Yönlü El Sıkışma’dır; dikkat ederseniz 3 aşamadan oluşuyor. İlk adıma baktığımızda C (Client), Server’a (S) bir ‘SYN
’ paketi atıyor. SYN
, İngilizce’de ‘synchronize’ veya ‘sync’ şeklinde karşımıza çıkar; anlamı da ‘senkronize etmek’ şeklindedir. Burada, bu paketin yollanması ile Client, Server tarafına bir istek (request) yollamış olur. Kısacası burada Client, Server’a; “Ben sana bağlantı isteği yolluyorum.” Diyor.
Bu isteğin karşılığı olarak Server, Client’a ‘SYN –
ACK
’ şeklinde bir paket yolluyor. Buradaki SYN paketinin amacı, Client’in attığı SYN paketini onaylamaktır. ACK paketinin amacı ise Client’ın yolladığı isteği kabul etmektir. Zaten SYN
’nin açılımı söyledik; ACK
, İngilizce’deki ‘Acknowledge’ kelimesinden gelir ve anlamı ‘onaylamak’ şeklindedir. Kısacası Server bu kısımda Client’a şöyle bir şey diyor: “Ben senin yolladığın paketi aldım, onaylıyorum.”
Üçüncü aşamaya baktığımıza, Server’dan 'SYN – ACK
' paketi alan Client, Server’a bir 'ACK
' paketi yolluyor. Bunun anlamının ‘onaylamak’ olduğunu söylemiştik. O zaman bu hareketin anlamı şu şekilde ifade edilebilir: “Onaylandı.”
Bunu daha iyi anlamanız için bir telsiz konuşmasından esinlenebiliriz:
Client: “İstek yolluyorum.” (SYN
)
Server: “Anlaşıldı, onaylıyorum.” (SYN – ACK
)
Client: “Anlaşıldı, onaylandı.” (ACK
)
Dilerseniz bu konuyu, ağımızdaki trafiği dinleyerek pratikte görelim. Böylece geçip giden paketleri daha net görebiliriz.
Ekranı yakınlaştırarak bakabilirsiniz. 10.0.2.6
bizim kurban makinenin IP adresi, kırmızı ile üzerini kapattığım ve üzerine ‘sitemiz’ yazdığım kısım ise sitemizin IP adresi. Başlığa baktığımız zaman ‘source’ kısmı ‘kaynak’ anlamına gelir, ‘destination’ kısmı ‘hedef’ anlamına gelir. İlk satırda kaynak biziz çünkü istekte bulunan taraf ilk biz olduk. İkinci satırda kaynak, sitemizin kendisi oldu çünkü bize cevap veriyor yani istek sırası kendisinde. Son olarak üçüncü satırda kaynak tekrar biz oluyoruz. Bu sıralamanın az önce ‘SYN, SYN – ACK, ACK
’ olduğunu belirttik.
Şimdi, önce ağı dinlemeye aldık daha sonra kurban makineden kendi sitemizin ana sayfasına girdik. Tam bu sırada olan şey, en solda gördüğünüz gibi SYN, SYN – ACK, ACK
şeklinde. Ortadaki küçük yeşil kutuya baktığınızda işlem sırasında kullanılan protokolü görürsünüz; dediğimiz gibi, işlemler gerçekten de TCP protokolü ile gerçekleşmiş. Hemen yanındaki yeşil kutuya da bakarsanız sırasıyla SYN, SYN – ACK, ACK
işlemlerinin gerçekleştiğini görürsünüz.
İşte, bir TCP bağlantısı kurulduğunda arka taraftaki işlemler tam olarak bu şekilde gerçekleşiyor. Bu bağlantıyı kapatmak için ise ‘FIN
’ paketi yollanır; aşağıdaki görseli inceleyelim.
Bunu da aynı mantık ile düşünebiliriz sadece ufak bir farkı var. Bir oturum (bağlantı) sonlandırılırken Client (C) ‘FIN
’ paketi yollar. Server (S) ise buna direkt olarak ‘ACK
’ ile karşılık verir. Daha sonra Client de ‘ACK
’ paketi yollar ve oturum “Client tarafında sonlanır” yani Server tarafında oturum hâlâ açıktır. Eğer Server da oturumu kapatmak isterse ‘ACK
’ paketinin yanında bir de ‘FIN
’ paketi yollar. Hemen onu da görelim:
Server da aynı şekilde oturumu sonlandırmak istediğinde yukarıda gördüğünüz şekilde bir iletişim söz konusu oluyor. TCP bağlantısına 'Three Way Handshake - Üç Yönlü El Sıkışma' diyorduk. TCP bağlantısı kesildiği zaman ise bu olaya 'Four Way Handshake - Dört Yönlü El Sıkışma' adını veriyoruz.
Bu alanı okumadan önce lütfen okuyun: OSI Katmanları
TCP'nin ne olduğunu öğrendik ve TCP/IP'yi de 'TCP protokolü' ile 'IP protokolünün' birleşimi olarak nitelendirdik. Buradan yola çıkarak kurabileceğimiz ilk cümle şudur: "'TCP' ile 'IP' ayrı protokoller iken bunların birleşiminden oluşan 'TCP/IP bir referans modelidir'. Yani TCP/IP'nin 'TCP' ve 'IP' ile bir alakası kalmıyor sadece ayrı bir model haline geliyor."
TCP/IP, verilerin aktarılmadan önce nasıl paketleneceğini, bu paketlerin nasıl taşınacağını, nasıl adresleneceğini ve hedef tarafından nasıl çözümlenip alınacağını kontrol eden bir ‘veri iletim modelidir’. TCP, Taşıma Katmanı’nda çalışırken IP, Ağ Katmanı’nda çalışır. TCP, paketleri iletmekle görevlidir, IP ise paketleri yönlendirmekle ilgilidir.
Bunu anlamak için OSI katmanlarını bilmenizi istiyorum çünkü TCP/IP modeli, OSI'nin 7 katmanını 4 katmana düşürüyor; hemen görelim:
Şimdi, renk uyumuna bakarak okumanızı istiyorum. OSI’nin 7, 6 ve 5. katmanları, TCP/IP üzerinde birleşip ‘Uygulama Katmanı’ olarak anılıyor. 4. katman olan Taşıma Katmanı ise aynı kalıyor ve TCP/IP üzerinde de ‘Taşıma Katmanı’ olarak geçiyor. OSI’deki Ağ Katmanı (3. katman), TCP/IP modelinde ‘İnternet’ olarak geçiyor ve son olarak OSI’deki 2 ve 1. katmanlar yani Veri İletim Katmanı ve Fiziksel Katman, TCP/IP üzerinde birleşerek ‘Ağ Erişim Katmanı’ ismini alıyor. İşte, TCP/IP’nin çalışma mantığı, OSI ile kıyaslandığı zaman bu şekilde gerçekleşiyor.
“Peki, bunlar birleşiyor da ne oluyor?” diye bir soru sorabilirsiniz tabii. Bu katmanlar birleştiği için ayrı işlemler yapılmış olmuyor. Örneğin Uygulama, Sunum ve Oturum Katmanları TCP/IP için Uygulama Katmanı olmuş ama bu durum, TCP/IP’deki Uygulama Katmanı’nın farklı çalıştığı anlamına gelmiyor. Burada olan şey tam olarak şöyle: OSI’deki üç katmanın yaptığı iş, TCP/IP’de tek bir katmanda gerçekleşiyor ve buna genel bir isim olarak Uygulama Katmanı deniyor.
Elbette, bundan kaynaklı bazı farklılıklar ortaya çıkıyor. Örneğin OSI Modeli’nde her katman kendi işini yaptığı için yani veri iletimi, her katmanda farklı farklı işlemlerden geçtiği için daha rahat, kolay ve hızlı bir şekilde işlem gerçekleştirilebiliyor. Fakat TCP/IP üzerinde, OSI Katmanları’ndan bazı katmanlar birleştiği için veri iletimi sırasında tek bir katmanda birden fazla iş yapılmak zorunda kalınıyor. Bu da beraberinde yavaşlık ve karışıklık getiriyor.
NOT: Bazı kaynaklarda TCP/IP Modeli’nin 5 katmandan oluşmuş hâlini görebilirsiniz; sorun değildir. Bazı kaynaklar Veri İletim Katmanı’nı ve Fiziksel Katman'ı ayırmadan kullanır; kafanız karışmasın, ikiside geçerlidir ama 4 katmanlı hâli daha kabul gören bir gösterimdir.
OSI'de olduğu gibi burada da 'encapsulation' kavramı vardır. Encapsulation konusu genellikle OSI ile birlikte anlatıldığı için burada anlatım yapmak yerine sadece görsel koyacağım. Zaten OSI blogumuzu okuduysanız mantığı biliyorsunuzdur. Hem OSI blogunda daha fazla katman olduğu için daha detaylı bir anlatım mevcut; mantık tamamen aynı. Aşağıdaki TCP Başlığı, IP Başlığı ve MAC Başlığı; katmanlarda kullanılan protokollerdir; hepsi OSI blogunda mevcuttur. Şimdi, görselimizi görelim. Lütfen incelemeyi ve yorumlamayı ihmal etmeyin.
En basit tabiriyle iki bilgisayar nasıl haberleşir? Dikkatli bakın:
OSI, bu konuda size daha mantıklı gelebilir ama TCP'nin de OSI ile aynı şeyleri yaptığını unutmayın. Sadece katman sayısı az. Yukarıda, paket aynen gönderilir, sadece içerisindeki veriler ve bilgisayarın kendi özellikleri değişecektir.
Yayınlanma Tarihi: 2022-07-25 16:05:57
Son Düzenleme Tarihi: 2022-09-04 17:41:26