TCP'nin Gizli Silahı: Ağ Akışı Kontrolü ve Ağ Tıkanıklığı Kontrolü

TCP Güvenilirlik Taşımacılığı
TCP protokolünü güvenilir bir taşıma protokolü olarak biliyoruz, ancak taşımacılığın güvenilirliğini nasıl sağlıyor?

Güvenilir iletim elde etmek için, veri bozulması, kayıp, çoğaltma ve dereceden dış kısımlar gibi birçok faktör dikkate alınmalıdır. Bu sorunlar çözülemiyorsa, güvenilir iletim sağlanamaz.

Bu nedenle TCP, güvenilir iletim elde etmek için dizi numarası, onay cevap, yeniden denetleme kontrolü, bağlantı yönetimi ve pencere kontrolü gibi mekanizmalar kullanır.

Bu yazıda, TCP'nin kayar penceresine, akış kontrolüne ve tıkanıklık kontrolüne odaklanacağız. Yeniden yeniden iletim mekanizması bir sonraki bölümde ayrı olarak ele alınmıştır.

Ağ Akış Kontrolü
Ağ akış kontrolü veya ağ trafik kontrolü olarak bilin, aslında üreticiler ve tüketiciler arasındaki ince ilişkinin bir tezahürüdür. Muhtemelen bu senaryoya çok fazla işte veya röportajlarda karşılaştınız. Üreticinin üretim kapasitesi tüketicinin tüketme kapasitesini büyük ölçüde aşarsa, kuyruğun süresiz olarak büyümesine neden olur. Daha ciddi bir durumda, Rabbitmq mesajları çok fazla biriktiğinde, tüm MQ sunucusunun performans bozulmasına neden olabileceğini bilebilirsiniz. Aynı şey TCP için de geçerlidir; Kontrolsüz bırakılırsa, ağa çok fazla mesaj konulacak ve tüketiciler kapasitelerini aşacak, üreticiler ise ağın performansını büyük ölçüde etkileyecek yinelenen mesajlar göndermeye devam edecekler.

Bu fenomeni ele almak için TCP, gönderenin akış kontrolü olarak bilinen alıcının gerçek alım kapasitesine göre gönderilen veri miktarını kontrol etmek için bir mekanizma sağlar. Alıcı bir alma penceresini korurken, gönderen bir gönderme penceresini korur. Bu pencerelerin yalnızca tek bir TCP bağlantısı için olduğu ve tüm bağlantıların bir pencereyi paylaşmadığı belirtilmelidir.

TCP, bir alma penceresi için bir değişken kullanarak akış kontrolü sağlar. Alma penceresi, gönderene hala ne kadar önbellek alanının mevcut olduğuna dair bir gösterge verir. Gönderen, alıcının fiili kabul kapasitesine göre gönderilen veri miktarını kontrol eder.

Alıcı ana bilgisayarı, gönderene alabileceği verilerin boyutunu bildirir ve gönderen bu sınıra gönderir. Bu sınır pencere boyutu, TCP başlığını hatırlıyor musunuz? Alıcının alabileceği veya almaya istekli olduğu bayt sayısını belirtmek için kullanılan bir alma pencere alanı vardır.

Gönderen ana bilgisayar, periyodik olarak alıcı ana bilgisayarının hala veri kabul edip edemeyeceğini tespit etmek için kullanılan bir pencere probu paketi gönderir. Alıcının arabelleği taşma tehlikesi olduğunda, gönderene gönderilen veri miktarını kontrol etmesini istemek için pencere boyutu daha küçük bir değere ayarlanır.

İşte bir ağ akış kontrol diyagramı:

Trafik kontrolü

Ağ tıkanıklığı kontrolü
Tıkanıklık kontrolünü tanıtmadan önce, alma penceresine ve Gönder penceresine ek olarak, bir tıkanıklık penceresi de olduğunu anlamamız gerekir; bu, esas olarak gönderenin Alma penceresine veri göndermeye başladığı oranda sorunu çözmek için kullanılan bir tıkanıklık penceresi de bulunur. Bu nedenle, tıkanıklık penceresi TCP gönderen tarafından da korunur. Çok az veya çok fazla veri göndermek ideal olmadığı için, ne kadar veri göndermenin uygun olduğuna karar vermek için bir algoritmaya ihtiyacımız var, dolayısıyla tıkanıklık penceresi kavramı.

Önceki ağ akış kontrolünde, kaçındığımız, gönderenin alıcının önbelleğini verilerle dolduran, ancak ağda neler olduğunu bilmiyorduk. Tipik olarak, bilgisayar ağları ortak bir ortamdadır. Sonuç olarak, diğer ana bilgisayarlar arasındaki iletişim nedeniyle ağ tıkanıklığı olabilir.

Ağ tıkandığında, çok sayıda paket gönderilmeye devam edilirse, gecikme ve paket kaybı gibi sorunlara neden olabilir. Bu noktada, TCP verileri yeniden canlandıracaktır, ancak yeniden iletim ağ üzerindeki yükü artıracak, bu da daha büyük gecikmeler ve daha fazla paket kaybı ile sonuçlanacaktır. Bu kısır bir döngüye girebilir ve büyümeye devam edebilir.

Bu nedenle, TCP ağda olanları görmezden gelemez. Ağ tıkandığında, TCP gönderdiği veri miktarını azaltarak kendini feda eder.

Bu nedenle, tüm ağı gönderenden gelen verilerle doldurmaktan kaçınmayı amaçlayan tıkanıklık kontrolü önerilmektedir. Gönderenin göndermesi gereken veri miktarını düzenlemek için TCP, tıkanıklık penceresi adı verilen bir kavramı tanımlar. Tıkanıklık kontrol algoritması, gönderen tarafından gönderilen veri miktarını kontrol etmek için şık tıkanıklık penceresinin boyutunu ağın tıkanıklık derecesine göre ayarlayacaktır.

Tıkanıklık penceresi nedir? Bunun Gönder penceresiyle ne ilgisi var?

Tıkanıklık penceresi, gönderenin gönderebileceği veri miktarını belirleyen gönderen tarafından tutulan bir durum değişkenidir. Tıkanıklık penceresi, ağın tıkanıklık seviyesine göre dinamik olarak değişir.

Gönderen pencere, gönderen ve alıcı arasında alıcının alabileceği veri miktarını gösteren bir pencere boyutu üzerinde kararlaştırılmış bir pencere boyutudur. Tıkanıklık penceresi ve gönderme penceresi ilişkilidir; Gönderen pencere genellikle tıkanıklık ve alıcı pencerelerin, yani SWND = min (CWND, RWND) ile eşittir.

Tıkanıklık penceresi cwnd aşağıdaki gibi değişir:

Ağda tıkanıklık yoksa, yani yeniden iletim zaman aşımı gerçekleşmez, tıkanıklık penceresi artar.

Ağda tıkanıklık varsa, tıkanıklık penceresi azalır.

Gönderen, ACK onay paketinin belirtilen süre içinde alınıp alınmadığını gözlemleyerek ağın tıkanmış olup olmadığını belirler. Gönderen, ACK onay paketini belirtilen süre içinde almazsa, ağın tıkanmış olduğu düşünülmektedir.

Tıkanıklık penceresine ek olarak, TCP tıkanıklık kontrol algoritmasını tartışmanın zamanı geldi. TCP tıkanıklığı kontrol algoritması üç ana parçadan oluşur:

Yavaş Başlangıç:Başlangıçta, CWND tıkanıklık penceresi nispeten küçüktür ve gönderen, ağın kapasitesine hızlı bir şekilde uyum sağlamak için tıkanıklık penceresini katlanarak artırır.
Tıkanıklıktan kaçınma:Tıkanıklık penceresi belirli bir eşiği aştıktan sonra, gönderen tıkanıklık penceresini, tıkanıklık penceresinin büyüme hızını yavaşlatmak ve ağın aşırı yüklenmesini önlemek için doğrusal bir şekilde artırır.
Hızlı iyileşme:Tıkanıklık meydana gelirse, gönderen tıkanıklık penceresini yarıya indirir ve alınan yinelenen Acks aracılığıyla ağ kurtarmanın yerini belirlemek için hızlı kurtarma durumuna girer ve daha sonra tıkanıklık penceresini artırmaya devam eder.

Yavaş başlangıç
Bir TCP bağlantısı kurulduğunda, tıkanıklık penceresi CWND başlangıçta minimum MSS (maksimum segment boyutu) değerine ayarlanır. Bu şekilde, ilk gönderme oranı MSS/RTT bayt/saniyedir. Mevcut gerçek bant genişliği genellikle MSS/RTT'den çok daha büyüktür, bu nedenle TCP, yavaş başlama yoluyla elde edilebilen optimal gönderme hızını bulmak ister.

Yavaş başlangıç ​​işleminde, tıkanıklık penceresinin değeri CWND 1 mss'ye başlatılır ve iletilen paket segmenti her kabul edildiğinde, CWND değeri bir MSS tarafından artırılır, yani CWND değeri 2 ms olur. Bundan sonra, bir paket segmentinin her başarılı iletimi için CWND değeri iki katına çıkar. Spesifik büyüme süreci aşağıdaki şekilde gösterilmiştir.

 Ağ tıkanıklığı kontrolü

Ancak, gönderme oranı her zaman büyüyemez; Büyüme bir ara bitmeli. Peki, gönderme oranı ne zaman bitiyor? Yavaş başlangıç ​​tipik olarak gönderme oranındaki artışı birkaç yoldan biriyle sona erdirir:

İlk yol, yavaş başlangıç ​​gönderme işlemi sırasında paket kaybı olmasıdır. Bir paket kaybı meydana geldiğinde, TCP gönderenin tıkanıklık penceresini CWND'yi 1 olarak ayarlar ve yavaş başlangıç ​​işlemini yeniden başlatır. Bu noktada, başlangıç ​​değeri paket kaybı üreten CWND değerinin yarısı olan yavaş başlangıç ​​eşiği sshtresh kavramı tanıtılır. Yani, tıkanıklık tespit edildiğinde, sshtresh değeri pencere değerinin yarısıdır.

İkinci yol, yavaş başlangıç ​​eşiği sshtresh değeri ile doğrudan ilişkili olmaktır. SSTHRESH değeri, tıkanıklık tespit edildiğinde pencere değerinin yarısı olduğundan, CWND SSThresh'ten daha büyük olduğunda her iki katına çıkan paket kaybı meydana gelebilir. Bu nedenle, TCP'nin tıkanıklık kontrol moduna geçmesine ve yavaş başlangıç ​​yapmasına neden olacak SSThresh'e CWND'yi ayarlamak en iyisidir.

Yavaş başlangıcın sona ermesinin son yolu, üç gereksiz ACK algılanırsa, TCP hızlı bir yeniden iletim gerçekleştirir ve kurtarma durumuna girer. (Neden üç ACK paketi olduğu açık değilse, yeniden iletim mekanizmasında ayrı olarak açıklanacaktır.)

Tıkanıklıktan kaçınma
TCP tıkanıklık kontrol durumuna girdiğinde, CWND tıkanıklık eşiğinin yarısına ayarlanır sshtresh. Bu, bir paket segmenti her alındığında CWND değerinin iki katına çıkamayacağı anlamına gelir. Bunun yerine, her bir şanzıman tamamlandıktan sonra CWND değerinin sadece bir MSS (maksimum paket segment uzunluğu) arttırıldığı nispeten muhafazakar bir yaklaşım benimsenmiştir. Örneğin, 10 paket segmenti kabul edilse bile, CWND'nin değeri yalnızca bir MSS artacaktır. Bu doğrusal bir büyüme modelidir ve aynı zamanda büyüme üzerinde bir üst sınır vardır. Paket kaybı meydana geldiğinde, CWND'nin değeri bir MSS olarak değiştirilir ve sshtresh değeri CWND'nin yarısına ayarlanır. Veya 3 gereksiz ACK yanıtları alındığında MSS'nin büyümesini de durduracaktır. CWND'nin değerini yarıya indirdikten sonra hala üç gereksiz ACK alınırsa, sshtresh değeri CWND değerinin yarısı olarak kaydedilir ve hızlı kurtarma durumu girilir.

Hızlı Kurtarma
Hızlı iyileşme durumunda, tıkanıklık penceresinin değeri CWND, alınan her bir yedek ACK, yani sırayla gelmeyen ACK için bir MSS tarafından artırılır. Bu, iletim verimliliğini mümkün olduğunca artırmak için ağda başarıyla iletilen paket segmentlerinden yararlanmak içindir.

Kayıp paket segmentinin bir ACK geldiğinde, TCP CWND'nin değerini azaltır ve daha sonra tıkanıklıktan kaçınma durumuna girer. Bu, tıkanıklık penceresinin boyutunu kontrol etmek ve ağ tıkanıklığını daha da arttırmaktan kaçınmaktır.

Tıkanıklık kontrol durumundan sonra bir zaman aşımı meydana gelirse, ağ koşulu daha ciddi hale gelir ve TCP tıkanıklıktan kaçınma durumundan yavaş başlangıç ​​durumuna geçer. Bu durumda, tıkanıklık penceresinin cwnd değeri 1 mss, maksimum paket segment uzunluğu ve yavaş başlangıç ​​eşiğinin değeri CWND'nin yarısına ayarlanmıştır. Bunun amacı, ağ tıkanıklığının derecesini dengelemek için ağ iyileştikten sonra tıkanıklık penceresinin büyüklüğünü yeniden derecelendirmektir.

Özet
Güvenilir bir taşıma protokolü olarak TCP, dizi numarası, onay, yeniden iletim kontrolü, bağlantı yönetimi ve pencere kontrolüne göre güvenilir taşıma uygular. Bunlar arasında, akış kontrol mekanizması, ağ tıkanıklığı ve performans bozulması sorunlarını önleyen alıcının gerçek alıcı kapasitesine göre gönderen tarafından gönderilen veri miktarını kontrol eder. Tıkanıklık kontrol mekanizması, gönderen tarafından gönderilen veri miktarını ayarlayarak ağ tıkanıklığının oluşumunu önler. Tıkanıklık penceresi ve gönderme penceresi kavramları birbiriyle ilişkilidir ve gönderendeki veri miktarı, tıkanıklık penceresinin boyutunu dinamik olarak ayarlayarak kontrol edilir. Yavaş başlangıç, tıkanıklıktan kaçınma ve hızlı iyileşme, TCP tıkanıklık kontrol algoritmasının üç ana parçasıdır, bu da tıklama penceresinin boyutunu, ağın kapasitesi ve tıkanıklık derecesine uyum sağlamak için farklı stratejiler yoluyla ayarlar.

Bir sonraki bölümde, TCP'nin yeniden iletim mekanizmasını ayrıntılı olarak inceleyeceğiz. Güvenilir iletim elde etmek için yeniden iletim mekanizması TCP'nin önemli bir parçasıdır. Kayıp, bozuk veya gecikmiş verileri yeniden canlandırarak verilerin güvenilir iletimini sağlar. Geri yeniden işlem mekanizmasının uygulama ilkesi ve stratejisi, bir sonraki bölümde ayrıntılı olarak tanıtılacak ve analiz edilecektir. Bizi izlemeye devam edin!


Post-zaman:-24-2025 Şubat