Ağ Paket Aracısı TCP Bağlantılarının Temel Gizemleri: Üçlü El Sıkışma ihtiyacını açığa çıkardı

TCP Bağlantı Kurulumu
Web'de gezinirken, e-posta gönderirken veya çevrimiçi bir oyun oynarken çoğu zaman bunun arkasındaki karmaşık ağ bağlantısını düşünmeyiz. Ancak sunucuyla aramızda istikrarlı bir iletişim 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ü de üçlü el sıkışmadır.

Bu yazıda üçlü el sıkışmanın prensibi, süreci ve önemi detaylı olarak ele alınacaktır. Üç yollu el sıkışmanın neden gerekli olduğunu, bağlantı kararlılığını ve güvenilirliğini nasıl sağladığını, veri aktarımı için ne kadar önemli olduğunu adım adım açıklayacağız. Üç yönlü el sıkışmanın daha derin anlaşılmasıyla, ağ iletişiminin altında yatan mekanizmaları daha iyi anlayacağız ve TCP bağlantılarının güvenilirliğine ilişkin daha net bir görüş kazanacağız.

TCP Üç Yollu El Sıkışma Süreci ve Durum Geçişleri
TCP, veri aktarımından önce bağlantı kurulmasını gerektiren bağlantı yönelimli bir aktarım protokolüdür. Bu bağlantı kurma işlemi üç yönlü bir el sıkışma ile yapılır.

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

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

Başlangıçta hem istemci hem de sunucu KAPALIDIR. İlk olarak, sunucu aktif olarak bir bağlantı noktasını dinler ve LISTEN durumundadır, bu da sunucunun başlatılması gerektiği anlamına gelir. Daha sonra 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 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'e ayarlar. İstemci, sunucuya ilk SYN paketini göndererek sunucuyla bağlantı kurmak istediğini belirtir. Bu paket, uygulama katmanı verilerini (yani gönderilen verileri) içermez. Bu noktada client'ın 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 daha sonra bu numarayı TCP başlığının "Seri numarası" alanına koyar. Daha sonra 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 (ve sunucu için veri içermeyen) paketi istemciye gönderir. göndermek için). Şu anda sunucu SYN-RCVD durumundadır.

ACK Paketi

İstemci paketi sunucudan 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'e ayarlar; İkinci olarak, müşteri "Cevap numarasını onayla" alanına sunucu_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 KURULDU durumuna girecektir.

Sunucu, istemciden yanıt paketini aldığında KURULDU durumuna da geçer.

Yukarıdaki süreçten de görebileceğiniz gibi, üçlü el sıkışma gerçekleştirirken üçü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 röportajlarda sıklıkla sorulan bir sorudur. Üç yönlü el sıkışma tamamlandıktan sonra, her iki taraf da KURULDU durumuna girerek bağlantının başarıyla kurulduğunu belirtir; bu noktada istemci ve sunucu birbirlerine veri göndermeye başlayabilir.

Neden üç el sıkışma? İki kere değil, dört kere mi?
Yaygın cevap şudur: "Çünkü üç yönlü el sıkışma, alma ve gönderme yeteneğini garanti eder." Bu cevap doğrudur ama sadece yüzeysel sebeptir, asıl sebebi ortaya koymaz. Aşağıda bu konuya ilişkin anlayışımızı derinleştirmek için üçlü el sıkışmanın nedenlerini üç açıdan analiz edeceğim.

Üç yönlü el sıkışma, tarihsel olarak tekrarlanan bağlantıların başlatılmasını etkili bir şekilde önleyebilir (ana neden)
Üç yönlü el sıkışma, her iki tarafın da güvenilir bir başlangıç ​​sıra numarası almasını garanti eder.
Üçlü el sıkışma kaynakların israfını önler.

Sebep 1: Geçmişteki Yinelenen Birleştirmelerden Kaçının
Özetle, üç yönlü el sıkışmanın ana nedeni, eski yinelenen bağlantı başlatma işleminin neden olduğu karışıklığı önlemektir. Karmaşık bir ağ ortamında, veri paketlerinin iletimi her zaman hedef ana bilgisayara belirlenen süreye uygun olarak gönderilmemekte, ağ tıkanıklığı ve diğer nedenlerden dolayı eski veri paketleri hedef ana bilgisayara ilk önce ulaşabilmektedir. Bunu önlemek için TCP, bağlantıyı kurmak üzere üç yönlü el sıkışmayı kullanır.

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

Bir istemcinin arka arkaya birden fazla SYN bağlantı kurma paketi göndermesi durumunda ağ tıkanıklığı gibi durumlarda aşağıdaki durumlar meydana gelebilir:

1- Eski SYN paketleri sunucuya en son SYN paketlerinden önce ulaşır.
2- Sunucu, eski SYN paketini aldıktan sonra istemciye SYN + ACK paketini yanıtlayacaktır.
3- İstemci SYN + ACK paketini aldığında kendi bağlamına göre bağlantının geçmişe dönük bir bağlantı (sıra numarası dolmuş veya zaman aşımı) olduğunu tespit eder ve ardından bağlantıyı iptal etmek için sunucuya RST paketini 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 bağlama dayalı olarak mevcut bağlantının geçmiş bir bağlantı olup olmadığını belirlemesine olanak tanır:

1- Geçmiş bağlantı ise (sıra numarasının süresi dolmuş veya zaman aşımı), üçüncü el sıkışmanın gönderdiği paket, geçmiş bağlantıyı iptal eden bir RST paketidir.
2- Eğer tarihi bir bağlantı değilse üçüncü kez gönderilen paket ACK paketidir ve iletişim kuran iki taraf bağlantıyı başarıyla kurar.

Bu nedenle TCP'nin üç yönlü el sıkışmayı kullanmasının ana nedeni, geçmiş bağlantıları engellemek 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 iletim 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ı, yinelenen verileri ortadan kaldırabilir ve verilerin doğruluğunu garanti edebilir.

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

● Sıra numarası, karşı tarafın aldığı veri paketini tanımlayarak güvenilir veri iletimini sağlar.

Bu nedenle, bir TCP bağlantısı kurulduğunda istemci, başlangıç ​​sıra numarasıyla birlikte 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 ister. Daha sonra sunucu, ilk sıra numarasını içeren SYN paketini istemciye gönderir ve ilk sıra numaralarının güvenilir bir şekilde senkronize edildiğinden emin olmak için istemcinin bir kez ve tamamen yanıt vermesini bekler.

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

Her iki tarafın ilk sıra numaralarını güvenilir bir şekilde senkronize etmek için dört yönlü el sıkışma da mümkün olsa da, ikinci ve üçüncü adımlar tek bir adımda birleştirilebilir ve sonuçta üç yönlü el sıkışma elde edilebilir. Bununla birlikte, iki el sıkışma yalnızca bir tarafın başlangıç ​​sıra numarasının diğer taraf tarafından başarılı bir şekilde alındığını garanti edebilir, ancak her iki tarafın da başlangıç ​​sıra numarasının doğrulanabileceğine dair bir garanti yoktur. Bu nedenle, TCP bağlantılarının istikrarını ve güvenilirliğini sağlamak için üç yönlü el sıkışma en iyi seçimdir.

Sebep 3: Kaynakları İsraf Etmekten Kaçının
Eğer sadece "iki el sıkışma" varsa, istemcinin SYN isteği ağda engellendiğinde, istemci sunucu tarafından gönderilen ACK paketini alamadığından SYN yeniden gönderilecektir. Ancak üçüncü bir el sıkışma olmadığından sunucu, istemcinin bağlantı kurmak için 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, aşağıdakilere yol açar:

Kaynak israfı: İstemcinin SYN isteği engellenirse, birden fazla SYN paketinin tekrar tekrar iletilmesiyle sonuçlanırsa, sunucu, isteği aldıktan sonra birden fazla yedek geçersiz bağlantı kuracaktır. Bu, sunucu kaynaklarının gereksiz israfına yol açar.

Mesaj saklama: Üçüncü bir el sıkışmanın olmaması nedeniyle, sunucunun, istemcinin bağlantıyı kurmak için ACK onayını doğru şekilde alıp almadığını bilmesinin hiçbir yolu yoktur. Sonuç olarak, eğer mesajlar ağda sıkışıp kalırsa, istemci tekrar tekrar SYN istekleri göndermeye devam edecek ve sunucunun sürekli olarak yeni bağlantılar kurmasına neden olacaktır. Bu, 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 kararlılığını ve güvenilirliğini sağlamak amacıyla TCP, bu sorunların oluşmasını önlemek amacıyla bağlantıyı kurmak için üç yönlü el sıkışmayı kullanır.

Özet
Ağ Paket AracısıTCP bağlantı kurulumu üç yönlü el sıkışma ile yapılır. Üç yollu el sıkışma sırasında istemci öncelikle sunucuya bağlantı kurmak istediğini belirten SYN bayrağını içeren bir paket gönderir. Sunucu, istemciden gelen isteği aldıktan sonra istemciye bağlantı isteğinin kabul edildiğini belirten SYN ve ACK bayraklarını içeren bir paket yanıtlar ve kendi başlangıç ​​sıra numarasını gönderir. Son olarak istemci, bağlantının başarıyla kurulduğunu belirtmek için sunucuya bir ACK bayrağıyla yanıt verir. Böylece iki taraf KURULUM durumuna geçmiş olur ve birbirlerine veri göndermeye başlayabilirler.

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ılar üzerinden 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önderim zamanı: Ocak-08-2025