TCP Bağlantı Kurulumu
İnternette gezinirken, e-posta gönderirken veya çevrimiçi oyun oynarken, genellikle arkasındaki karmaşık ağ bağlantısını düşünmeyiz. Ancak, sunucuyla aramızdaki istikrarlı iletişimi sağlayan, bu görünüşte küçük adımlardır. En önemli adımlardan biri TCP bağlantı kurulumudur ve bunun özünde üçlü el sıkışma yatar.
Bu makalede, üçlü el sıkışmanın ilkesi, süreci ve önemi ayrıntılı olarak ele alınacaktır. Adım adım, üçlü 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. Üçlü el sıkışmayı daha derinlemesine anlayarak, ağ iletişiminin altında yatan mekanizmaları daha iyi anlayacak ve TCP bağlantılarının güvenilirliğine dair daha net bir görüş kazanacağız.
TCP Üç Yollu El Sıkışma Süreci ve Durum Geçişleri
TCP, veri iletiminden önce bağlantı kurulmasını gerektiren bağlantı odaklı bir aktarım protokolüdür. Bu bağlantı kurma işlemi, üç yönlü bir el sıkışma ile gerçekleştirilir.
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 portu aktif olarak dinler ve DİNLE durumundadır; bu, sunucunun başlatılması gerektiği anlamına gelir. Ardından, istemci web sayfasına erişmeye hazırdır. Sunucuyla bir bağlantı kurması gerekir. İlk bağlantı paketinin biçimi aşağıdaki gibidir:
Bir istemci bir bağlantı başlattığında, rastgele bir başlangıç 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ğı konumunu 1 olarak ayarlar. İstemci, sunucuya ilk SYN paketini göndererek sunucuyla bağlantı kurmak istediğini belirtir. Bu paket, uygulama katmanı verileri (yani gönderilen veriler) içermez. Bu noktada, istemcinin durumu SYN-SENT olarak işaretlenir.
Bir sunucu, bir istemciden SYN paketi aldığında, kendi seri numarasını (server_isn) rastgele başlatır ve ardından bu numarayı TCP başlığının "Seri numarası" alanına girer. Ardından, sunucu "Onay numarası" alanına client_isn + 1 girer ve hem SYN hem de ACK bitlerini 1 olarak ayarlar. Son olarak, sunucu, uygulama katmanı verisi (ve sunucunun göndereceği veri) içermeyen paketi istemciye gönderir. Bu sırada sunucu SYN-RCVD durumundadır.
İstemci sunucudan paketi aldıktan sonra, son yanıt paketine yanıt vermek için aşağıdaki optimizasyonları gerçekleştirmesi gerekir: İlk olarak, istemci yanıt paketinin TCP başlığının 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şlemler tamamlandığında, istemci KURULUŞ durumuna geçecektir.
Sunucu, istemciden yanıt paketini aldıktan sonra, ESTABLISHED durumuna geçer.
Yukarıdaki işlemden de görebileceğiniz gibi, üçlü el sıkışma gerçekleştirilirken üçüncü el sıkışmanın veri taşımasına izin verilir, ancak ilk iki el sıkışmanın veri taşımasına izin verilmez. Bu, mülakatlarda sıklıkla sorulan bir sorudur. Üçlü el sıkışma tamamlandığında, her iki taraf da KURULU durumuna geçer ve bu da bağlantının başarıyla kurulduğunu gösterir. Bu noktada istemci ve sunucu birbirlerine veri göndermeye başlayabilir.
Neden üç el sıkışma? İki değil, dört kez?
Yaygın cevap şudur: "Çünkü üçlü el sıkışma, alma ve gönderme yeteneğini garanti altına alır." Bu cevap doğrudur, ancak yalnızca yüzeysel bir nedendir, 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 inceleyeceğim.
Üçlü el sıkışma, tarihsel olarak tekrarlanan bağlantıların başlatılmasını etkili bir şekilde önleyebilir (ana neden)
Üçlü el sıkışma, her iki tarafın da güvenilir bir başlangıç sıra numarası aldığının garantisini verir.
Üçlü el sıkışma, kaynak israfını önler.
Neden 1: Tarihsel Yinelenen Birleştirmelerden Kaçının
Özetle, üçlü el sıkışmanın temel nedeni, eski bağlantıların tekrar başlatılmasının neden olduğu karışıklığı önlemektir. Karmaşık bir ağ ortamında, veri paketlerinin iletimi her zaman hedef bilgisayara belirtilen zamana uygun olarak gönderilmez ve ağ yoğunluğu ve diğer nedenlerden dolayı eski veri paketleri hedef bilgisayara önce ulaşabilir. TCP, bunu önlemek için bağlantıyı kurmak üzere üçlü el sıkışma kullanır.
Bir istemci, ağ tıkanıklığı gibi durumlarda, art arda birden fazla SYN bağlantı kurma paketi gönderdiğinde aşağıdakiler meydana gelebilir:
1- Eski SYN paketleri sunucuya en son SYN paketlerinden önce ulaşır.
2- Sunucu eski SYN paketini aldıktan sonra istemciye bir SYN + ACK paketi yanıtlayacaktır.
3- İstemci SYN+ACK paketini aldığında kendi bağlamına göre bağlantının geçmiş bir bağlantı olduğunu (sıra numarası dolmuş veya zaman aşımına uğramış) belirler ve ardından bağlantıyı sonlandırmak için sunucuya RST paketi gönderir.
İki el sıkışma bağlantısında, mevcut bağlantının geçmiş bir bağlantı olup olmadığını belirlemenin bir yolu yoktur. Üç yönlü el sıkışma, istemcinin üçüncü paketi göndermeye hazır olduğunda, mevcut bağlantının geçmiş bir bağlantı olup olmadığını belirlemesine olanak tanır:
1- Tarihsel bir bağlantı ise (sıra numarası süresi dolmuş veya zaman aşımına uğramışsa) üçüncü el sıkışmada gönderilen paket, tarihsel bağlantıyı sonlandırmak için bir RST paketidir.
2- Eğer tarihsel bir bağlantı değilse, üçüncü kez gönderilen paket bir ACK paketidir ve iletişim kuran iki taraf arasında bağlantı başarılı bir şekilde kurulmuştur.
Dolayısıyla TCP'nin üçlü el sıkışmayı kullanmasının temel nedeni, geçmişteki 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ına sahip olmalıdır. Sıra numaraları, TCP bağlantılarında önemli bir rol oynar. Aşağıdakileri yaparlar:
Alıcı, tekrarlanan verileri eleyebilir ve verilerin doğruluğunu sağlayabilir.
Alıcı, verilerin bütünlüğünü garanti altına almak için paketleri sıra numarasına göre alabilir.
● Sıra numarası, karşı tarafa ulaşan veri paketini tanımlayarak güvenilir veri iletimi sağlar.
Bu nedenle, bir TCP bağlantısı kurulduktan sonra, istemci başlangıç sıra numarasına sahip SYN paketleri gönderir ve sunucunun istemcinin SYN paketinin başarıyla alındığını belirten bir ACK paketiyle yanıt vermesini ister. Ardından, sunucu başlangıç sıra numarasına sahip SYN paketini istemciye gönderir ve başlangıç sıra numaralarının güvenilir bir şekilde senkronize edilmesini sağlamak için istemcinin kesin olarak yanıt vermesini bekler.
Her iki tarafın başlangıç sıra numaralarını güvenilir bir şekilde senkronize etmek için dört yönlü bir el sıkışma da mümkün olsa da, ikinci ve üçüncü adımlar tek bir adımda birleştirilerek üçlü bir 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ça başarıyla alınmasını garanti edebilir; ancak her iki tarafın başlangıç sıra numarasının doğrulanabileceğinin garantisi yoktur. 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çimdir.
Neden 3: Kaynakları İsraf Etmekten Kaçının
Yalnızca "çift el sıkışma" varsa, istemci SYN isteği ağda engellendiğinde, istemci sunucu tarafından gönderilen ACK paketini alamaz ve bu nedenle SYN yeniden gönderilir. Ancak, üçüncü bir el sıkışma olmadığı için sunucu, istemcinin bağlantıyı kurmak için bir ACK onayı alıp almadığını belirleyemez. Bu nedenle, sunucu yalnızca her SYN isteğini aldıktan sonra proaktif olarak bağlantı kurabilir. Bu durum aşağıdakilere yol açar:
Kaynak israfı: İstemcinin SYN isteği engellenirse ve birden fazla SYN paketinin tekrar tekrar iletilmesiyle sonuçlanırsa, sunucu isteği aldıktan sonra birden fazla geçersiz bağlantı kurar. Bu durum, sunucu kaynaklarının gereksiz yere israfına yol açar.
Mesaj tutma: Üçüncü bir el sıkışmanın olmaması nedeniyle, sunucunun istemcinin bağlantıyı kurmak için ACK onayını doğru bir şekilde alıp almadığını bilmesinin bir yolu yoktur. Sonuç olarak, mesajlar ağda takılırsa, istemci SYN isteklerini tekrar tekrar göndermeye devam edecek ve bu da sunucunun sürekli olarak yeni bağlantılar kurmasına neden olacaktır. Bu durum, ağ tıkanıklığını ve gecikmeyi artıracak ve genel ağ performansını olumsuz etkileyecektir.
Bu nedenle, ağ bağlantısının istikrarını ve güvenilirliğini sağlamak amacıyla TCP, bu sorunların oluşmasını önlemek için bağlantıyı kurarken üçlü el sıkışmayı kullanır.
Özet
TheAğ Paket BrokeriTCP bağlantı kurulumu üçlü el sıkışma ile yapılır. Üçlü el sıkışma sırasında, istemci önce sunucuya SYN bayrağı içeren bir paket göndererek bağlantı kurmak istediğini belirtir. İstemciden gelen isteği aldıktan sonra, sunucu istemciye SYN ve ACK bayrakları içeren bir paket göndererek bağlantı isteğinin kabul edildiğini belirtir ve kendi başlangıç sıra numarasını gönderir. Son olarak, istemci sunucuya bağlantının başarıyla kurulduğunu belirten bir ACK bayrağı göndererek yanıt verir. Böylece, iki taraf da KURULU durumuna geçer ve birbirlerine veri göndermeye başlayabilir.
Genel olarak, TCP bağlantı kurulumu için üç yönlü el sıkışma süreci, bağlantı istikrarını ve güvenilirliğini sağlamak, geçmiş bağlantılardaki karışıklığı ve kaynak israfını önlemek ve her iki tarafın da veri alıp gönderebilmesini sağlamak için tasarlanmıştır.
Gönderi zamanı: 08-Oca-2025






