Tcp Tıkanıklık Kontrolü ve Slow Start - Congestion Avoidance Safhaları
 

Tcp Tıkanıklık Kontrolü ve Slow Start - Congestion Avoidance Algorimataları 
MSS(Maximum Segment Size) ve RTT (Round Trip Time)Kavramı

Tıkanıklık kontrolü haberleşen düğümler için değil , iletim ortamı için yapılmaktadır. Ve bu kontrolü gönderici taraf yapmaktadır. Gönderici taraf ağı (iletim ortamını) ne kadar yükleyebilirim kontrolü , için tıkanıklık kontrolü yapmaktadır .

TCP her bir bağlantı için bir yeniden iletim zamanlayıcısı kullanır .Bu değer round-trip time(RTT)  ölçümlerine dayalıdır.

-Her bir TCP bağlantısı bir segmentin iletimi ile ilgili segmente karşılık alınan ACK arasındaki zaman farkını ölçer .Ve burası çok önemli herhangi bir zaman diliminde yalnızca bir ölçüm vardır.

Sık kullanılan bir paket analiz programı olan Wireshark programı her gönderilen ve kabulu gelen segment için RTT değerini ölçer bu yüzden Wireshark ile analiz ederken bu durumu karşılaşırsanız şaşırmayın.Fakat işletim sistemimiz bir RTT ölçümü bitmeden yeni bir RTT ölçümü yapmaz. .Bu nedenle herhangi bir zamanda yalnızca bir ölçüm vardır. Bunu aşağıdaki şekilde daya iyi anlayabiliriz ;

 

Peki round-trip-time ölçümünün tıkanık kontrolü ile ilişkisi nedir ?
Tıkanıklık kontrolünde 2 algoritma beraber kullanılmaktadır. Bir modda bir algoritma diğer moda diğer algoritma kullanılmaktadır.

İlk modda Slow Start algoritması , ikinci modda ise Congestin Avoidance algoritması kullanılmaktadır.

Bir istemci bir sunucu ile bağlantı kurup veri alışverişi Tcp ile başlarken , bağlantı kurulumunda istemcinin SYN bayrağının set edilip gönderiliği ve sunucunun göndermiş olduğu SYN + ACK bayrağının set edilip gönderildiği segmentler incelendiğinde Tcp başlık boyutlarının 20 byte'dan büyük olduğunu görürüz .

Aşağıdaki şekildeki gibi genellikle Options alanından da 12 byte eklenerek 32 byte'lık başlıklardır bu segmentler , İstemcinin ilk syn bayrağı set edip gönderdiği tcp segmenti ile göndericinin syn + ack bayrağının set dip gönderdiği segmentleridir . Burada bir takım ekstra özellikler belirtilmektedir.



Yukarıdaki şekilde Opions alanında belirtilen kısımlardan şu anda konumuzla ilgili olan ekstra belirtilen özellik MSS - Maximum Segment Size  kısmıdır. Burada istemci ve sunucu birbirlerine MSS boyutlarını bildirmektedirler.

Şimdi bu MSS ile round-trip-time(RTT) ölçümüne ve slow start , congestion avoidance ilişkisine değinelim .

Tcp'de congestion window (cwnd) diye bir değer vardir. Bu değer başlangıçta 1MSS'dir.Ve Slow Start , Congestion Avoidance 'daki durumlarına göre artmakta veya azalmaktadır.
Tcp tıkanıklık kontrolünde ilk olarak slow start modda çalıştığını söylemiştik.

Şimdi RTT , MSS ve Slow Start kavramını ilişkilendirelim .

Slow Start  mod için ,

Sunucu bir segment gönderdi cwnd=1MSS 'dir. Segmentin ACK onayını aldıktan sonra cwnd=cwnd+1MSS  yani  cwnd=2MSS olur . Yani segment gönderir ve onayı gelir bu süreçte RTT ölçümü  başlayıp bitmediği bir süre ise cwnd  1MSS şeklinde artış gösterir.

Daha sonra bir segment gönderdi onay geldi cwnd=3MSS olur .
Daha sonra bir segment gönderdi ACK onayı geldi ve aynı zamanda segmenti gönderdiği ve onayını aldığı zaman içerisinde 1 RTT ölçümü yapılmış ise cwnd=2*cwnd 6MSS olur .

 Yani sonuç olarak , eğer bir RTT ölçümü bitmeden segment gönderirse cwnd=cwnd+1MSS şeklinde artar , eğer bir RTT ölçümü yapılmışsa segmentin gönderilmesi ve onayı arasında gönderici  cwnd=cwnd*2  ikişer katları şeklinde artırır cwnd'yi .

Bu anlattığımız durum aşağıdaki şekilde çok güzel bir biçimde izah edilmiştir.

Şimdi sorulması gereken soru Bu durum hep böylemi devam edecektir ?
Hayır .  Bu durum  cwnd<ssthresh olana kadar devam edecektir. cwnd>=ssthresh  olduğu andan itibaren cwnd herzaman  cwnd=cwnd+1MSS ;  şeklinde artacaktır. Rtt ölçümü yapılsa dahi  yine de cwnd 1MSS'şer artacaktır her onay gelişinde.İşte bu durum yani  cwnd>=ssthresh  durumu 2.mod yani Congestion Avoidance durumudur .

Congestion Avoidance modunda bir segment için gönderim ve onay dahilinde RTT sayımı olsa dahi cwnd=cwnd+1MSS  şeklinde artacaktır. Aşağıdaki şekilde çok güzel bir şekilde açıklamaktadır.



Peki ssthresh değeri başlangıçta nedir ? 
Ssthresh değeri başlangıçta yayınlanan pencere boyutuna (window size) eşittir .

Congestion Avoidance algoritması işletilir bu modda.
Burada lineer bir artış ile gönderici aldığı her onay sonrasında cwnd değerini cwnd=cwnd+1MSS şeklinde artırmaktadır.

Peki sonuna kadar böyle artacak mıdır ? Hayır
Taki , Tcp bir paket kaybı sezene kadar. Tcp bir paket kaybı sezerse tıkanıklık olduğunu varsayar .2 Durumda Tcp paket kaybı olduğunu anlıyordu
1- Yeniden İletim Zamanlayıcısının süreaşımı
2 - Aynı değere sahip ACK paketlerinin alınması

Süre aşımı meydana geldiği anda gönderici
- ssthresh değerini  ssthresh=ssthresh/2  yapar .
- cwnd değere tekrar  cwnd=1MSS yapılır .
Tekrar algoritma slow start modundan başlayarak işletilmeye devam eder . cwnd>=ssthresh olduğu anda Congestion Avoidance işletilir Daha sonra  tekrar tıkanıklık olduğu anlışılır  ...  işte döngümüz bu şekilde devam etmektedir.

Slow Start , Congestion Avoidance ve Tıkanıklık Durumunda yapılanlar aşağıdaki grafikte çok güzel bir biçimde özetlenmiştir.

 

Author: Engin ATALAY
Date: 02.01.2013 20:32:00
View Count: 7880
 
 

COMMENTS
 
Resim Yüklenemedi
ise 306 ikinci midterm
28 Nisan 2015 22:53
elit tayfa was here
 
 
 
 
 
Resim Yüklenemedi
bedirhan
24 Nisan 2014 02:19
Gerçekten çok yardımcı oldu emeğinize sağlık
 
 
 
 
 
Resim Yüklenemedi
Yunus Onur Atasoy
26 Haziran 2013 00:09
Çok faydalı bir yazı olmuş gerçekten. Emeğinize sağlık
 
 
 
 
 
Resim Yüklenemedi
NoviceCoder
4 Haziran 2013 13:02
Allah razı olsun... Çok makbule geçti....
 
 
 
 
 
Resim Yüklenemedi
Maşaallah
3 Ocak 2013 00:13
Barakallah Subhanallah ne güzel
 
 
 
 
 
 
 
 
 
 
 
 
WRITE COMMENT
 
 
Your Name :
 
 
 
E-mail :
 
 
 
Your Message :
 
 
 
 
 
 
 
This project : ASP.NET MVC , RAZOR, Entity Framework , CSS , HTML , JQUERY(2.0.2) , AJAX the C# side-tier architecture was developed with logic.
 
Yukarı Çık