Tcp Tıkanıklık Algoritmaları

ergün elvan bilsel
Ankara Bilişimciler Platformu
4 min readFeb 20, 2023

--

TCP tıkanıklık kontrolü ve kaçınma algoritmaları , özellikle yüksek bant genişliği /yüksek gecikme süreli ağlarda önemli bir bağlantı ayarlama özelliğidir .

TCP tıkanıklık kontrolü algoritmasını iyileştirmeyi amaçlayan en yaygın kullanılan algoritmaların bir listesi yazının devamında sunulacaktır. Algoritmalar yıllar içinde gelişmeye devam etmiştir ve avantajlarıyla birlikte eksiklikleri araştırılmıştır.

  • Tıkanıklık penceresi (cwnd) arabelleğini kontrol etmek için ağ tıkanıklığını nasıl tespit ettiklerine bağlı olarak üç önemli türden incelenmiştir.

*Tıkanıklık Penceresi (cwnd), TCP’nin bir ACK almadan önce ağa gönderebileceği veri miktarını sınırlayan bir TCP durum değişkenidir . Alıcı Penceresi (rwnd), hedef tarafın alabileceği veri miktarını bildiren bir değişkendir. İki değişken(cwnd,rwnd) birlikte, TCP bağlantılarındaki veri akışını düzenlemek, tıkanıklığı en aza indirmek ve ağ performansını iyileştirmek için kullanılır.

Server gönderilen paketleri, client işleyebileceğini aştığında ağ tıkanıklığı oluşur. Buffer dolduğunda, paketler üst katmanlara iletilmeyi beklerken hem server hem de hedefte geçici olarak buffer’lar da saklanır. Bu, tıkanıklığa yol açabilir ve aşırı durumlarda paket kaybına, yeniden iletimlere, azalan veri çıkışına, performansın düşmesine ve hatta ağ çökmesine neden olabilir.

TCP Header aracılığıyla alıcı penceresinin (rwnd) boyutunu gösterir . Bu, alabileceği veri miktarını duyurur ve tıkanıklık penceresinin(cwnd), bir ACK olmadan güvenilir bir şekilde iletebileceği veri miktarını belirlemesini sağlar. Alındıktan sonra, veriler alıcı ara belleğinde saklanır ve alıcı, alınan veri miktarına bağlı olarak bir ACK veya bir dizi ACK gönderir.

Tıkanıklık penceresi boyutu, maksimum alıcı penceresine kadar veya ağ sınırına ulaşana kadar artmaya devam eder. Bununla birlikte, veri gönderme hızı tıkanıklık penceresine bağlıdır ve alıcı penceresi büyük olsa bile, tıkanıklık penceresi daha küçük olabilir — özellikle ağ maksimum RWND boyutuna eşdeğer veri iletimini desteklemiyorsa.

Tıkanıklık, yinelenen bir onay veya zaman aşımı sinyalinin alınmasıyla algılanır. Bu gerçekleştiğinde, TCP gönderici, tıkanıklık penceresi boyutunu kullanılan algoritma tarafından belirlenen bir faktör kadar azaltarak gönderme hızını azaltır. Kaynağın gönderebileceği maksimum onaylanmamış veri miktarı, iki pencereden düşük olanıdır.

TCP Reno (1986)

Eski işletim sistemleri tarafından kullanılan geleneksel TCP tıkanıklık kontrolü. Reno, üçlü yinelenen ACK’ler tarafından tetiklenen yavaş başlatma, tıkanıklıktan kaçınma ve hızlı yeniden iletim kullanır. Reno, ağ tıkanıklığını algılamak için Packet Loss yöntemini kullanır.

loss-based — tıkanıklığı belirlemek ve buffer değiştirmek için paket kaybına yanıt verir . TCP Reno, New-Reno ve CUBIC dahil bu yöntemi kullanmaktadır.
delay-based — tıkanıklığı belirlemek ve arabellek boyutunu değiştirmek için gecikme varyasyonlarını ( RTT ) kullanır.
model-based — BBR gibi modern algoritmalar, tıkanıklığı belirlemek için faktörlerin kombinasyonunu kullanır, hem rate-based hem de delay-based’dir.

Paket kaybı(Packet Loss) , bir bilgisayar ağında dolaşan bir veya daha fazla veri paketi hedeflerine ulaşamadığında meydana gelir. Paket kaybı, gönderilen paketlere göre kaybedilen paketlerin yüzdesi olarak ölçülür. Paket kaybı, bir ağdaki tıkanıklığın bir göstergesidir.

TCP Westwood (TCPW, 2001)

TCP Westwood’daki temel yenilikçi fikir , server tarafında geri dönen ACK’lerin oranını izleyerek client tarafından kullanılan bant genişliğini ölçmektir. Bu, bağlantının TCP Reno’dan daha hızlı olmasını sağlar.

TCP HYBLA(2004)

TCP Hybla, RTT’nin genellikle büyük olduğu Uydu ağlarında TCP performansını iyileştirmeyi hedefler.

Gidiş-dönüş süresi/gecikmesi olarak da adlandırılan RTT, bir ağın sağlığını belirlemede çok önemli bir araçtır. Veri talebi ile bu verinin görüntülenmesi arasındaki süredir. Milisaniye cinsinden ölçülen süredir. RTT, belirli bir adrese ping atılarak analiz edilebilir ve belirlenebilir. Bir ağ talebinin bir hedefe ulaşması ve orijinal kaynağa geri dönmesi için geçen süreyi ifade eder.

TCP BIC (2004)

BIC kontrolü, yüksek hızlı/yüksek gecikmeli ağlar için optimize edilmiş tıkanıklık kontrol algoritmasıdır. BIC, maksimum süreyi sürdürecek en büyük tıkanıklık penceresini bulmak için bir ikili arama algoritması kullanan benzersiz bir tıkanıklık penceresi algoritmasına sahiptir.

TCP CUBIC (2007)

CUBIC, şu anda kullanımda olan en popüler tıkanıklık kontrol/kaçınma algoritmalarından biridir. 2.6.19'dan sonraki Linux çekirdeklerinde varsayılan olarak kullanılır, Windows Server 2019'da da varsayılandır.

TCP BBR (2016)

Bottleneck Bandwidth and Round-trip propagation time (BBR) modern bir tıkanıklık kontrolü ve kaçınma algoritmasıdır. İlk olarak 2016 yılında Google’da geliştirildi ve 2020'de bazı değişikliklerle ikinci bir sürümü kullanıma sunuldu. Linux’ta kernel 4.9'dan beri mevcuttur ve YouTube ve Google Cloud tarafından kullanılan varsayılan algoritmadır. Yukarıdaki algoritmaların çoğu losed-based olsa da ( sıkışıklığı ve daha düşük iletim hızlarını algılamak için packet-loss’a dayanırlar ), BBR model-based ve ağın kapasitesinin bir modelini oluşturmak için maksimum bant genişliğini ve gidiş-dönüş süresini kullanır.

TCP Tıkanıklık Kontrol Teknikleri

Ağlarda yüksek bir oranda paket gönderirlerse, bağlantı (link) kapasitesi aşılması durumunda iletişimde aksaklıklar yaşanır. Bu durum tıkanıklık olarak adalandırılır. Tıkanıklığın pek çok sebebden dolayı meydana gelebilir. Başlıca nedeni ağ kapasitesiden daha fazla olan paket sayısıdır. Eğer gönderilmek istenilen paketler ağ kapasitesini aĢmıyorsa hepsi hedefe iletilir, ancak iletim hataları nedeniyle düĢen birkaç paket olabilir. Trafiğin artması sonucunda yönlendirici paketleri kaybetmeye başlar. Trafik çok yüksek olduğunda ağ performansı düĢer ve neredeyse hiçbir paket alınmaz.

Tıkanık kontrol kontrol teknikleri Açık Döngü ve Kapalı Döngü olmak üzere ikiye ayrılır.

Açık Döngü

Tıkanıklığı önler ve sistemin sıkışık duruma girmemesini sağlar. Bu kontrol tekniği, kaynak temelli ve hedefe dayalı olmak üzere ikiye ayrılır. Kaynak temelli yöntemde trafik tıkanıklığı kaynak tarafında kontrol edilir. Hedefe dayalı yöntemde ise hedefe uygun önlemler alınır ve kaynağa bilgi verilir.

Açık döngü tıkanıklık kontrolü, tekrar iletim (retransmission), pencere (window), onay (acknowledgment), düşürme (discarding) ve kabul (admission) politikaları olmak üzere beş kategoriye ayrılır. Tekrar iletim politikasında gönderici bir paketin kaybolduğunu veya bozulduğunu farkettiğinde paketi yeniden iletir.

Yeniden iletim, genel olarak ağdaki sıkışıklığı artırabilir.

Kapalı Döngü

Kapalı döngü tıkanıklık kontrolü, ağın tıkanıklık duruma girmesini engellemez ancak daha sonra onun algılanması ve kaldırılması için çalışır. Bu yöntemde ağın durumu kontrol edilir, tıkanıklık olup olmadığı ya da ne kadar tıkanıklık olduğu belirlenir. Kapalı döngü tıkanıklık kontrolü, geri basınç (backpressure), Şok paket (choke packet), kapalı işaretleme (implicit signaling) ve açık işaretleme (explicit signaling) politikaları olmak üzere dört kategoriye ayrılır.
Backpressure : tıkanıklık olan yönlendirici diğer yönlendiricilerden paket almayı durdurur.

Choke packet : yönlerdirici tıkanıklığı bildirmek için kaynağa paket gönderir.

Paketin geçtiği ara yönlendiriciler uyarılmaz.

Implicit signaling: yönlendiriciler ile kaynak arasında iletişim yoktur. Kaynak gönderdiği pakete belirlenen süre içerisinde onay alamazsa, ağ üzerinde tıkanıklık olduğunu tahmin eder ve paket gönderme hızını yavaşlatır.

Explicit signaling : tıkanıklık olan yönlendirici açıkça kaynağa veya hedefe bir sinyal gönderebilir.

Choke packet yönteminden farklıdır (bu amaçla ayrı bir paket kullanılır).

Paketin geçtiği ara yönlendiriciler uyarılmaz.

Explicit signaling yönteminde ise sinyal, veri taşınan paketlere dâhil edilir.

TCP Tıkanıklık Kontrolü

TCP, kaynak ve hedef arasında bağlantı odaklı, güvenilir bir veri iletimi sağlar. TCP tıkanıklık kontrolünün temel fikri yavaş başlatma, tıkanıklığı önleme ve tıkanıklık tespitidir. Gönderici paketleri ağa göndermeye başlar ve paket kayıpları saptayana kadar iletim hızını artırır. TCP, paket kaybını ağ tıkanıklığının belirtisi olarak algılar.

--

--