Ağ Paket Aracısı TCP Bağlantılarının Temel Gizemleri: Üçlü El Sıkışmanın Gerekliliğinin Açıklanması

TCP Bağlantısı Kurulumu
İnternette gezinirken, e-posta gönderirken veya çevrimiçi oyun oynarken, bunun arkasındaki karmaşık ağ bağlantısını genellikle düşünmeyiz. Ancak, sunucu ile aramızdaki istikrarlı iletişimi sağlayan şey, bu görünüşte küçük adımlardır. En önemli adımlardan biri TCP bağlantı kurulumudur ve bunun özü üç yönlü el sıkışmadır.

Bu makalede, üç yönlü el sıkışmanın prensibi, süreci ve önemi detaylı olarak ele alınacaktır. Adım adım, üç yönlü el sıkışmanın neden gerekli olduğunu, bağlantı istikrarını ve güvenilirliğini nasıl sağladığını ve veri aktarımı için ne kadar önemli olduğunu açıklayacağız. Üç yönlü el sıkışmayı daha derinlemesine anlayarak, ağ iletişiminin temel mekanizmalarını daha iyi anlayacak ve TCP bağlantılarının güvenilirliğine daha net bir bakış açısı kazanacağız.

TCP Üç Yönlü El Sıkışma Süreci ve Durum Geçişleri
TCP, veri iletiminden önce bağlantı kurulmasını gerektiren, bağlantı odaklı bir taşıma protokolüdür. Bu bağlantı kurma işlemi üç aşamalı bir el sıkışma ile gerçekleştirilir.

 TCP üç yönlü el sıkışması

Şimdi her bağlantıda gönderilen TCP paketlerine daha yakından bakalım.

Başlangıçta hem istemci hem de sunucu KAPALI durumdadır. İlk olarak, sunucu bir portta aktif olarak dinleme yapar ve DİNLEME durumundadır, bu da sunucunun başlatılması gerektiği anlamına gelir. Ardından, istemci web sayfasına erişmeye hazırdır. Sunucuyla bağlantı kurması gerekir. İlk bağlantı paketinin formatı aşağıdaki gibidir:

 SYN Paketi

Bir istemci bağlantı başlattığında, rastgele bir ilk sıra numarası (client_isn) oluşturur ve bunu TCP başlığının "Sıra numarası" alanına yerleştirir. Aynı zamanda, istemci giden paketin bir SYN paketi olduğunu belirtmek için SYN bayrağının konumunu 1 olarak ayarlar. İstemci, sunucuya ilk SYN paketini göndererek sunucuyla bağlantı kurmak istediğini belirtir. Bu paket uygulama katmanı verisi (yani gönderilen veri) içermez. Bu noktada, istemcinin durumu SYN-SENT olarak işaretlenir.

SYN+ACK Paketi

Bir sunucu, istemciden bir SYN paketi aldığında, kendi seri numarasını (server_isn) rastgele başlatır ve bu numarayı TCP başlığının "Seri numarası" alanına yerleştirir. Ardından, sunucu "Onay numarası" alanına client_isn + 1 girer ve hem SYN hem de ACK bitlerini 1'e ayarlar. Son olarak, sunucu uygulama katmanı verisi içermeyen (ve sunucunun göndereceği veri içermeyen) paketi istemciye gönderir. Bu sırada sunucu SYN-RCVD durumundadır.

ACK Paketi

İstemci sunucudan paketi aldıktan sonra, nihai yanıt paketine cevap vermek için aşağıdaki optimizasyonları gerçekleştirmesi gerekir: İlk olarak, istemci yanıt paketinin TCP başlığındaki ACK bitini 1 olarak ayarlar; İkinci olarak, istemci "Yanıt numarasını onayla" alanına server_isn + 1 değerini girer; Son olarak, istemci paketi sunucuya gönderir. Bu paket, istemciden sunucuya veri taşıyabilir. Bu işlemlerin tamamlanmasının ardından, istemci ESTABLISHED durumuna geçer.

Sunucu, istemciden gelen yanıt paketini aldıktan sonra, o da ESTABLISHED durumuna geçer.

Yukarıdaki süreçten de görebileceğiniz gibi, üç aşamalı el sıkışma işleminde, üçüncü el sıkışma veri taşımaya izin verirken, ilk iki el sıkışmaya izin vermez. Bu, mülakatlarda sıkça sorulan bir sorudur. Üç aşamalı el sıkışma tamamlandıktan sonra, her iki taraf da ESTABLISHED durumuna geçer; bu da bağlantının başarıyla kurulduğunu gösterir ve bu noktada istemci ve sunucu birbirlerine veri göndermeye başlayabilir.

Neden üç kez el sıkışmak? İki kez değil, dört kez?
En sık verilen cevap, "Çünkü üçlü el sıkışma, alma ve gönderme yeteneğini garanti eder." şeklindedir. Bu cevap doğru olsa da, yalnızca yüzeysel bir nedendir ve asıl nedeni ortaya koymaz. Aşağıda, bu konuyu daha iyi anlamamız için üçlü el sıkışmanın nedenlerini üç açıdan analiz edeceğim.

Üç aşamalı el sıkışma, geçmişte tekrarlanan bağlantıların başlatılmasını etkili bir şekilde önleyebilir (ana neden).
Üç aşamalı el sıkışma, her iki tarafın da güvenilir bir başlangıç ​​sıra numarası aldığını garanti eder.
Üçlü el sıkışma, kaynak israfını önler.

1. Sebep: Geçmişteki Yinelenen Birleştirmelerden Kaçının
Özetle, üç aşamalı el sıkışmanın temel nedeni, eski ve yinelenen bağlantı başlatmalarından kaynaklanan karışıklığı önlemektir. Karmaşık bir ağ ortamında, veri paketlerinin iletimi her zaman belirtilen zamana göre hedef sunucuya gönderilmez ve ağ tıkanıklığı ve diğer nedenlerden dolayı eski veri paketleri hedef sunucuya önce ulaşabilir. Bunu önlemek için TCP, bağlantıyı kurmak için üç aşamalı el sıkışma kullanır.

Üç aşamalı el sıkışma, geçmişteki mükerrer bağlantıları önler.

Bir istemci art arda birden fazla SYN bağlantı kurma paketi gönderdiğinde, ağ tıkanıklığı gibi durumlarda aşağıdakiler meydana gelebilir:

1- Eski SYN paketleri, en yeni SYN paketlerinden önce sunucuya ulaşır.
2- Sunucu, eski SYN paketini aldıktan sonra istemciye bir SYN + ACK paketiyle yanıt verecektir.
3- İstemci SYN + ACK paketini aldığında, kendi bağlamına göre bağlantının geçmişe ait bir bağlantı (sıra numarası süresi dolmuş veya zaman aşımına uğramış) olduğunu belirler ve ardından bağlantıyı sonlandırmak için sunucuya RST paketini gönderir.

İki aşamalı bağlantıda, mevcut bağlantının geçmişe ait bir bağlantı olup olmadığını belirlemenin bir yolu yoktur. Üç aşamalı bağlantı ise, istemcinin üçüncü paketi göndermeye hazır olduğunda, mevcut bağlantının geçmişe ait bir bağlantı olup olmadığını bağlama göre belirlemesine olanak tanır:

1- Eğer bağlantı geçmişe aitse (sıra numarası süresi dolmuş veya zaman aşımı olmuşsa), üçüncü el sıkışma ile gönderilen paket, geçmişe ait bağlantıyı sonlandırmak için kullanılan bir RST paketidir.
2- Eğer geçmişe dayalı bir bağlantı değilse, üçüncü kez gönderilen paket bir ACK paketidir ve iletişim kuran iki taraf bağlantıyı başarıyla kurmuştur.

Dolayısıyla, TCP'nin üç aşamalı el sıkışmayı kullanmasının temel nedeni, geçmiş bağlantıları önlemek için bağlantıyı başlatmasıdır.

Sebep 2: Her iki tarafın başlangıç ​​sıra numaralarını senkronize etmek.
TCP protokolünün her iki tarafı da güvenilir iletimi sağlamak için önemli bir faktör olan bir sıra numarası tutmalıdır. Sıra numaraları TCP bağlantılarında önemli bir rol oynar. Şunları yaparlar:

Alıcı, yinelenen verileri ortadan kaldırabilir ve verilerin doğruluğunu sağlayabilir.

Alıcı, verilerin bütünlüğünü sağlamak için paketleri sıra numarasına göre sırayla alabilir.

● Sıra numarası, karşı tarafça alınan veri paketini tanımlayarak güvenilir veri iletimini sağlar.

Bu nedenle, bir TCP bağlantısı kurulduktan sonra, istemci başlangıç ​​sıra numarasıyla SYN paketleri gönderir ve sunucunun istemcinin SYN paketinin başarılı bir şekilde alındığını gösteren bir ACK paketiyle yanıt vermesini bekler. Ardından, sunucu başlangıç ​​sıra numarasıyla SYN paketini istemciye gönderir ve başlangıç ​​sıra numaralarının güvenilir bir şekilde senkronize edildiğinden emin olmak için istemcinin yanıtını bekler.

Her iki tarafın ilk seri numaralarını senkronize edin.

Her iki tarafın başlangıç ​​sıra numaralarını güvenilir bir şekilde senkronize etmek için dörtlü el sıkışma da mümkün olsa da, ikinci ve üçüncü adımlar tek bir adımda birleştirilerek üçlü el sıkışma elde edilebilir. Ancak, iki el sıkışma yalnızca bir tarafın başlangıç ​​sıra numarasının diğer taraf tarafından başarıyla alındığını garanti eder, her iki tarafın başlangıç ​​sıra numarasının da doğrulanabileceğini garanti etmez. Bu nedenle, TCP bağlantılarının istikrarını ve güvenilirliğini sağlamak için üçlü el sıkışma en iyi seçenektir.

3. Sebep: Kaynak İsrafından Kaçınmak
Eğer yalnızca "iki aşamalı el sıkışma" varsa, istemcinin SYN isteği ağda engellendiğinde, istemci sunucu tarafından gönderilen ACK paketini alamaz, bu nedenle SYN yeniden gönderilir. Ancak, üçüncü bir el sıkışma olmadığı için, sunucu istemcinin bağlantı kurmak için ACK onayını alıp almadığını belirleyemez. Bu nedenle, sunucu yalnızca her SYN isteğini aldıktan sonra proaktif olarak bağlantı kurabilir. Bu da aşağıdaki sonuçlara yol açar:

Kaynak israfı: Eğer istemcinin SYN isteği engellenirse ve bu durum birden fazla SYN paketinin tekrar tekrar iletilmesine yol açarsa, sunucu isteği aldıktan sonra birden fazla gereksiz geçersiz bağlantı kuracaktır. Bu da sunucu kaynaklarının gereksiz yere israfına neden olur.

Mesaj tutma sorunu: Üçüncü bir el sıkışma adımının olmaması nedeniyle, sunucu istemcinin bağlantıyı kurmak için gerekli olan ACK onayını doğru şekilde alıp almadığını bilemez. Sonuç olarak, mesajlar ağda takılı kalırsa, istemci sürekli olarak SYN istekleri göndermeye devam eder ve bu da sunucunun sürekli olarak yeni bağlantılar kurmasına neden olur. Bu durum ağ tıkanıklığını ve gecikmeyi artıracak ve genel ağ performansını olumsuz etkileyecektir.

Kaynak israfından kaçının.

Bu nedenle, ağ bağlantısının istikrarını ve güvenilirliğini sağlamak için TCP, bu sorunların oluşmasını önlemek amacıyla bağlantıyı kurmak için üç aşamalı el sıkışma yöntemini kullanır.

Özet
OAğ Paket AracısıTCP bağlantı kurulumu üç aşamalı bir el sıkışma ile gerçekleştirilir. Üç aşamalı el sıkışma sırasında, istemci önce sunucuya bağlantı kurmak istediğini belirten SYN bayrağı içeren bir paket gönderir. İstemciden gelen isteği aldıktan sonra, sunucu istemciye bağlantı isteğinin kabul edildiğini belirten SYN ve ACK bayrakları içeren bir paket gönderir ve kendi başlangıç ​​sıra numarasını iletir. Son olarak, istemci sunucuya bağlantının başarıyla kurulduğunu belirten bir ACK bayrağı ile yanıt verir. Böylece, iki taraf da KURULMUŞ (ESTABLISHED) durumunda olur ve birbirlerine veri göndermeye başlayabilirler.

Genel olarak, TCP bağlantı kurulumu için üç aşamalı el sıkışma süreci, bağlantı istikrarını ve güvenilirliğini sağlamak, geçmiş bağlantılar üzerinden karışıklığı ve kaynak israfını önlemek ve her iki tarafın da veri alıp gönderebilmesini sağlamak üzere tasarlanmıştır.


Yayın tarihi: 08 Ocak 2025