Bu Yazıda OSI Layer 4 Protokolleri olan TCP (Transmission Control Protocol) ve UDP (User Datagram Protocol) Hakkında Bilgi Edineceğiz.
Bu konudan önce OSI & TCP/IP Yazısını okumanızı tavsiye ederim.
Layer 4 İşlevleri - Transport Layer
- Üst Üç Katman (Application, Presentation, Session) tarafından hazırlanan Veriyi Layer 4 Başlığı ile Kapsüller (Encapsulation). Veri + Layer 4 Başlığı = Segment denir (PDU - Protocol Data Unit).
- Büyük veri parçalarını ağ üzerinden kolayca gönderebilmek ve hatalar meydana geldiğinde iletim sorunlarını en az indirmek için veriyi daha küçük parçalara böler ve yeniden birleştirir. Bölünen parçaların her birine Layer 4 Başlığı eklenerek Segment oluşur.
- Layer 4, Uygulamalara Çeşitli Servisler Sağlar. TCP'nin bu servisleri uygulamalara sağladığını, UDP'nin ise sağlamadığını göreceksiniz. Bu servislerden bazıları nelerdir?
- Reliable Data Transfer. Hedef Hostun alması gereken her bit veriyi aldığından emin olmak anlamına gelir.
- Error Recovery. İletimde bir hata oluşursa, Layer 4 verilerin tekrar gönderilmesini sağlayabilir.
- Data Sequencing. Veri parçaları hedefe bozuk gelse bile, Hedef Hostun veri parçalarını doğru sırada sıralayabildiğinden emin olmasını sağlar.
- Flow Control. Kaynak Hostun Hedef Hosta işleyebileceğinden daha hızlı trafik göndermemesini sağlar.
- Layer 4'ün diğer bir işlevi Layer 4 Adresleme (Port Number) sağlamasıdır. Port Numarası (Port Number) birkaç işlev sağlar:
- Kullanılmakta olan Application Layer Protokolünü Tanımlar.
- Session Multiplexing
Port Numbers / Session Multiplexing
PC1 internet üzerinden SRV1 ve SRV2'deki kaynaklara erişmek istiyor. PC1'in erişmek istediği servisi belirlemek ve PC1 ile Sunucular arasındaki Oturumları (Session) izlemek için Port Numaralarının nasıl kullanıldığını görelim.
Öncelikle Session Nedir? İki veya Daha Fazla İletişim Cihazı Arasındaki Veri Alışverişidir. Günlük kullanımda bilgisayarınızın aynı anda birden çok Oturumu idare edebilmesi gerekir. Örneğin internet üzerinden farklı servislere erişen birden fazla tarayıcı sekmeniz olabilir.
PC1 bu durumda SRV1 ile iletişim kuruyor.
PC1, 50000 Source Port Number ve 80 Destination Port Number ile Layer 4'de TCP kullanır.
Destination Port Number, Application Layer Protokolünü Tanımlar. Örneğin web sitelerine erişmek için kullanılan HTTP protokolü için TCP Port 80 kullanılır. SRV1, PC1'in erişmek istediği bir web sayfasını barındırıyor.
Source Port Number, PC Tarafından Rastgele Seçilir ve Destination Port Number ile Oturumun (Session) Tanımlanmasına Yardımcı olur.
SRV1, PC1'in mesajını aldıktan sonra muhtemelen bir yanıt gönderecektir. SRV1'in yanıtında, Source ve Destination Port Number Ters Çevrilir. Source Port Number 80, Destination Port Number 50000 olur.
PC1 bu mesajı aldığında Source / Destination Port Number sayesinde bu mesajın hangi Oturuma (Session) ait olduğunu bilir.
PC1, SRV1'e ayrı bir Oturum açarsa ne olur? HTTP Kullanıldığından Destination Port Number yine 80 olacaktır. Ancak Farklı bir Source Port Number Kullanılır.
SRV1, Source ve Destination Port Number ters çevirerek yanıt verecektir. PC1 bu mesajı aldığında Source / Destination Port Number sayesinde bu mesajın hangi Oturuma (Session) ait olduğunu bilir.
PC1 aynı anda SRV2'deki FTP Servisine erişmek istiyor. TCP Port 21, FTP (File Transfer Protocol) Protokolü için kullanılır. PC1, Destination Port Number olarak 21 ve Source Port Number olarak rastgele seçtiği 60000'ı kullanır.
SRV2, Source ve Destination Port Number ters çevirerek PC1'e yanıt verecektir. PC1 bu mesajı aldığında Source / Destination Port Number sayesinde bu mesajın hangi Oturuma (Session) ait olduğunu bilir.
Application Layer Protokollerinin Kullandığı Port Numaraları IANA (Internet Assigned Numbers Authority) Tarafından Belirlenir.
- Well-Known Port Numbers: 0 - 1023
- Bu Port Numaraları HTTP, FTP, vb. gibi Ana Protokoller için Kullanılır ve Çok Sıkı bir Şekilde Düzenlenir.
- Registered Port Numbers: 1024 - 49151
- Bu Port Numaralarını Kullanmak için Well-Known Port Numaraları Kadar Katı olmasa da Kayıt Gerekir.
- Ephemeral / Private / Dynamic Port Numbers: 49152 - 65535
- Hostlar Rastgele Source Port Number Seçerken Bu Aralığı Kullanır.
Özet
TCP (Transmission Control Protocol)
- Hedef Hosta Veri Gönderilmeden Önce Kaynak ve Hedef Host bir Bağlantı Kurmak için İletişim Kurar. Bağlantı Kurulduktan sonra Veri Alışverişi Başlar.
TCP Provides Reliable Data Transfer.
- Hedef Host, Aldığı Her TCP Segment'i Onaylamalıdır.
- Kaynak Host Segment için Onay Alamazsa Segment Yeniden Gönderilir (Retransmission - Error Recovery).
TCP Provides Data Sequencing.
- TCP Başlığındaki Sequence Number Alanı, Segment'ler Hedef Hosta Karışık bir Sırada Gelse Bile Doğru Sıraya Koyulmasını Sağlar.
TCP Provides Flow Control.
- Hedef Hostun Kaynak Hosta Verilerin Gönderilme Hızını Arttırmasını veya Azaltmasını Söyleyebilmesini Sağlar.
TCP Başlığı (TCP Header)
CCNA Sınavı için TCP Başlığının Tüm Alanlarını Bilmeniz Gerekmiyor.
- Source / Destination Port
- Length: 16 Bit
- 2^16 = 65.536 Avaible Port Numbers.
- Sequence Number / Acknowledgment Number (If ACK Flag Set).
- Bu İki Alan Data Sequencing, Reliable Data Transfer, Error Recovery için Kullanılır.
- TCP, Her Biri Farklı Amaca Hizmet Eden bir Dizi Flag Bitine Sahiptir.
- SYN, ACK ve FIN
- Bu Üç Flag Biti, Bağlantı Kurmak ve Sonlandırmak (Establish / Terminate Connection) için Kullanılır.
- Window Size
- Bu Alan, Verilerin Gönderilme Hızını Ayarlayan Flow Control için Kullanılır.
Establishing Connection: Three-Way Handshake
TCP'nin Bağlantı Kurması için Kullandığı Yönteme TCP Three-Way Handshake Denir.
PC1, HTTP kullanarak SRV1'deki bir web sayfasına erişmek istiyor. İlk olarak TCP Bağlantısı kurmalıdır. Bunu yapmak için TCP Başlığında Senkronizasyon anlamına gelen SYN, Onay anlamına gelen ACK adlı iki Flag Biti kullanır.
Three-Way Handshake Step 1
İlk olarak PC1, SYN Flag Set (SYN = 1) edilmiş şekilde SRV1'e bir TCP Segment gönderecektir.
Three-Way Handshake Step 2
SRV1, SYN / ACK Flag Set (SYN = 1, ACK = 1) edilmiş şekilde PC1'e bir TCP Segment göndererek yanıt verecektir.
Three-Way Handshake Step 3
PC1, ACK Flag Set (ACK = 1) edilmiş şekilde SRV1'e bir TCP Segment gönderir.
Three-Way Handshake tamamlandı ve bağlantı kuruldu. Artık gerçek veri alışverişi başlayabilir.
Terminating Connection: Four-Way Handshake
TCP'nin Bağlantıyı Sonlandırmak için Kullandığı Yönteme TCP Four-Way Handshake Denir.
PC1 artık SRV1 ile bağlantıya ihtiyacı olmadığına karar verdiğinde bağlantıyı sonlandırmak için bu süreci başlatacaktır. Bu işlem, TCP Başlığındaki FIN ve ACK Flag Bitlerini kullanır.
Four-Way Handshake Step 1
PC1, FIN Flag Set (FIN = 1) edilmiş şekilde SRV1'e bir TCP Segment gönderir.
Four-Way Handshake Step 2
SRV1, ACK Flag Set (ACK = 1) edilmiş şekilde PC1'e bir TCP Segment göndererek yanıt verecektir.
Four-Way Handshake Step 3
SRV1 FIN Flag Set (FIN = 1) edilmiş şekilde PC1'e bir TCP Segment gönderir.
Four-Way Handshake Step 4
PC1, ACK Flag Set (ACK = 1) edilmiş şekilde SRV1'e bir TCP Segment gönderir ve bağlantı sonlandırılır.
TCP Reliable Data Transfer / Data Sequencing
PC1 ve PC2 arasındaki veri alışverişine bakalım.
PC1, Three-Way Handshake için SYN Segment Gönderdiğinde Rastgele bir Initial Sequence Number Belirler, Örneğin 10.
PC2 Yanıt olarak SYN-ACK Segment Gönderdiğinde Kendi Rastgele Initial Sequence Number Belirler, Örneğin 50. Aynı zamanda TCP Başlığındaki ACK Alanını 11'e ayarlayarak PC1'in Segment'ini Aldığını Onaylar. Neden 11? Bunun Nedeni TCP'nin Forward Acknowledgment Adı Verilen bir şey Kullanmasıdır. SRV1, Almayı Beklediği Bir Sonraki Segment'in Sequence Number Bilgisini PC1'e Söyler.
PC1, Three-Way Handshake için son ACK Segment Gönderir. Sequence Number 11'dir ve Forward Acknowledgment kullanarak TCP Başlığındaki Acknowledgment Number Alanını 51 Değerine Ayarlar.
PC2, 51 Sequence Number ile Yanıt Verir ve Acknowledgment Number 12 Değerini Ayarlayarak Yine Forward Acknowledgment Kullanır.
Sonraki Veri Alışverişleri Böyle Devam Eder. Hostların Rastgele Initial Sequence Number Ayarladığını ve Forward Acknowledgment, Hostun Almayı Beklediği Bir Sonraki Segment'in Sequence Number'ını Belirtmek için TCP Başlığındaki Acknowledgment Number Alanını Kullandığını Unutmayın.
Sequence Number'ın Bir Başka İşlevi: Segment'ler Hedef Hosta Herhangi bir Nedenle Karışık Sırada Gelse Bile Host'ların Doğru Segment Sırasını Bilmelerini Sağlar.
TCP Retransmission (Error Recovery)
Kaynak Host Segment için Onay Almazsa Segment Yeniden Gönderilir. Bu durumu bir örnek ile açıklayalım.
PC1, SRV1'e Sequence Number 20 olan bir Segment gönderiyor.
SRV1, Forward Acknowledgment kullanarak ACK 21'i PC1'e gönderir.
PC1 daha sora Sequence Number 21'i gönderir, ancak bir nedenden dolayı SRV1'e ulaşmaz.
PC1, SRV1'den ACK Segment almadığı için belirli bir süre bekledikten sonra PC1 Segment'i yeniden gönderir.
Buna TCP Retransmission denir.
Bu sefer SRV1 gelen Segment'i alır ve PC1'e alındığını bildirmek için ACK 22 gönderir.
TCP Flow Control
Hedef Hostun Kaynak Hosta Verilerin Gönderilme Hızını Arttırmasını veya Azaltmasını Söyleyebilmesini Sağlar.
TCP Başlığındaki Window Size Alanı, Hedef Host Tarafından bir Onay İstenmeden Önce Daha Fazla Verinin Gönderilmesine İzin Verir.
Örnek: Bir Host, Sequence Number 20, 21 ve 22 olan Üç Segment Gönderebilir ve Alıcı Host Tarafından Bu Segment'leri Onaylamak için Acknowledgment Number 23 olan bir ACK Gönderilir.
Window Size Alanının Dinamik Olarak Ayarlanması için Sliding Window Kullanılır.
Window Size, Hostlar Arasındaki Bağlantıda bir Segment Kaybolana kadar Mümkün Olduğu Kadar Arttırılır. Ardından Window Size Daha Makul bir Düzeye İner ve Tekrar Yavaş Yavaş Artar.
UDP (User Datagram Protocol)
- TCP'den farklı olarak, UDP'de Kaynak Host Veri Göndermeden önce Hedef Host ile Bağlantı Kurulmaz. Basitçe gönderilir.
UDP does not Provide Reliable Data Transfer.
- UDP Kullanıldığında Alınan Segment'ler için ACK Gönderilmez. Bir Segment Kaybolursa UDP'nin Onu Yeniden İletecek Bir Mekanizması Yoktur.
- Segmentler Best Effort olarak Gönderilir. Temek olarak UDP'nin TCP gibi Teslimat Garantisi Sağlamadığı Anlamına Gelir. Gönderir, Emek Verir Ancak Hiçbir Garanti Vermez.
UDP does not Provide Data Sequencing.
- TCP'den Farklı olarak, UDP Başlığında Sequence Number Alanı Yoktur. Segment'ler Düzensiz Gelirse UDP'nin onları Tekrar Düzene Sokacak bir Mekanizması Yoktur.
UDP does not Provide Flow Control.
- Veri Akışını Kontrol Etmek için TCP Window Size gibi bir Mekanizması Yoktur.
UDP Başlığı (UDP Header)
- Source / Destination Port.
- Segment'in Uzunluğunu Gösteren Length Alanı.
- Alıcı Hostun Hataları Kontrol Edebilmesi için Checksum Alanı.
TCP & UDP Karşılaştırması
TCP Başlığındaki Ek Alanlar; Reliable Data Transfer, Data Sequencing, Error Recovery gibi ek işlevlerin sağlanmasına izin verir.
Peki hangi durumlarda TCP, hangi durumlarda UDP kullanılır?
- TCP, UDP'den Daha Fazla Özellik Sağlar, Ancak Daha Büyük Başlık Boyutu Nedeniyle Overhead (Ek Yük) Maliyetine Sahiptir. Ek olarak Acknowledgment / Retransmission gibi TCP'ye Özel İşlemler Veri Aktarımını Yavaşlatır.
- Dosya İndirmek gibi Güvenilir İletişim Gerektiren Uygulamalar için TCP Tercih Edilir. Bir sayfası eksik olan bir PDF dosyasını indirmek istemezsiniz. Tüm dosyanın alındığından emin olmak istenilir.
- Gerçek Zamanlı (Real-Time) Ses ve Video gibi Uygulamalar için (IP üzerinden Sesli Telefon Görüşmeleri (VoIP), Zoom, Skype, vb.) UDP Tercih Edilir. Bu Uygulamalar Gecikmeye Duyarlıdır (Delay Sensitive), TCP'nin İletişimi Yavaşlatmasını İstemezsiniz.
- Unutulmaması Gereken Nokta, UDP Kullanan Ancak Uygulamanın Kendi İçinde Güvenilirlik, vb. Sağlayan Bazı Uygulamalar Olmasıdır. TFTP (Trivial File Transfer Protocol) böyle bir örnektir.
- Duruma Bağlı olarak Hem TCP Hem de UDP Kullanan Bazı Uygulamalar Vardır. DNS (Domain Name System) Buna bir Örnektir.
- Hem TCP Hem de UDP, Port Numarası ile Layer 4 Adresleme Sağlar. Port Numarası, Application Layer Protokolünü Tanımlar ve Session Multiplexing Sağlar. TCP ve UDP'nin Her İkisi de Bu Temel İşlevleri Sağlar.
Önemli Well-Known Port Numaraları
Quizs
- a
- c
- b, d, e
- a, c, f
- c
Bu Konu için LAB Yapmayacağız, fakat aşağıdaki videoyu izleyerek TCP & UDP için anlattığımız bilgilerin gerçek hayatta da uygulandığını Wireshark Programı ile görebilirsiniz. Alt yazı seçeneklerinden İngilizce seçip otomatik çevir özelliğini Türkçe yapmayı unutmayın.
Yorum Gönder
Yorum Gönder