Tcp Tikaniklik Kontrolü ve Slow Start - Congestion Avoidance Algorimatalari
MSS(Maximum Segment Size) ve RTT (Round Trip Time)Kavrami
Tikaniklik kontrolü haberlesen dügümler için degil , iletim ortami için yapilmaktadir. Ve bu kontrolü gönderici taraf yapmaktadir. Gönderici taraf agi (iletim ortamini) ne kadar yükleyebilirim kontrolü , için tikaniklik kontrolü yapmaktadir .
TCP her bir baglanti için bir yeniden iletim zamanlayicisi kullanir .Bu deger round-trip time(RTT) ölçümlerine dayalidir.
-Her bir TCP baglantisi bir segmentin iletimi ile ilgili segmente karsilik alinan ACK arasindaki zaman farkini ölçer .Ve burasi çok önemli herhangi bir zaman diliminde yalnizca bir ölçüm vardir.
Sik kullanilan bir paket analiz programi olan Wireshark programi her gönderilen ve kabulu gelen segment için RTT degerini ölçer bu yüzden Wireshark ile analiz ederken bu durumu karsilasirsaniz sasirmayin.Fakat isletim sistemimiz bir RTT ölçümü bitmeden yeni bir RTT ölçümü yapmaz. .Bu nedenle herhangi bir zamanda yalnizca bir ölçüm vardir. Bunu asagidaki sekilde daya iyi anlayabiliriz ;
Peki round-trip-time ölçümünün tikanik kontrolü ile iliskisi nedir ?
Tikaniklik kontrolünde 2 algoritma beraber kullanilmaktadir. Bir modda bir algoritma diger moda diger algoritma kullanilmaktadir.
Ilk modda Slow Start algoritmasi , ikinci modda ise Congestin Avoidance algoritmasi kullanilmaktadir.
Bir istemci bir sunucu ile baglanti kurup veri alisverisi Tcp ile baslarken , baglanti kurulumunda istemcinin SYN bayraginin set edilip gönderiligi ve sunucunun göndermis oldugu SYN + ACK bayraginin set edilip gönderildigi segmentler incelendiginde Tcp baslik boyutlarinin 20 byte'dan büyük oldugunu görürüz .
Asagidaki sekildeki gibi genellikle Options alanindan da 12 byte eklenerek 32 byte'lik basliklardir bu segmentler , Istemcinin ilk syn bayragi set edip gönderdigi tcp segmenti ile göndericinin syn + ack bayraginin set dip gönderdigi segmentleridir . Burada bir takim ekstra özellikler belirtilmektedir.
Yukaridaki sekilde Opions alaninda belirtilen kisimlardan su anda konumuzla ilgili olan ekstra belirtilen özellik MSS - Maximum Segment Size kismidir. Burada istemci ve sunucu birbirlerine MSS boyutlarini bildirmektedirler.
Simdi bu MSS ile round-trip-time(RTT) ölçümüne ve slow start , congestion avoidance iliskisine deginelim .
Tcp'de congestion window (cwnd) diye bir deger vardir. Bu deger baslangiçta 1MSS'dir.Ve Slow Start , Congestion Avoidance 'daki durumlarina göre artmakta veya azalmaktadir.
Tcp tikaniklik kontrolünde ilk olarak slow start modda çalistigini söylemistik.
Simdi RTT , MSS ve Slow Start kavramini iliskilendirelim .
Slow Start mod için ,
Sunucu bir segment gönderdi cwnd=1MSS 'dir. Segmentin ACK onayini aldiktan sonra cwnd=cwnd+1MSS yani cwnd=2MSS olur . Yani segment gönderir ve onayi gelir bu süreçte RTT ölçümü baslayip bitmedigi bir süre ise cwnd 1MSS seklinde artis gösterir.
Daha sonra bir segment gönderdi onay geldi cwnd=3MSS olur .
Daha sonra bir segment gönderdi ACK onayi geldi ve ayni zamanda segmenti gönderdigi ve onayini aldigi zaman içerisinde 1 RTT ölçümü yapilmis ise cwnd=2*cwnd 6MSS olur .
Yani sonuç olarak , eger bir RTT ölçümü bitmeden segment gönderirse cwnd=cwnd+1MSS seklinde artar , eger bir RTT ölçümü yapilmissa segmentin gönderilmesi ve onayi arasinda gönderici cwnd=cwnd*2 ikiser katlari seklinde artirir cwnd'yi .
Bu anlattigimiz durum asagidaki sekilde çok güzel bir biçimde izah edilmistir.
Simdi sorulmasi gereken soru Bu durum hep böylemi devam edecektir ?
Hayir . Bu durum cwnd<ssthresh olana kadar devam edecektir. cwnd>=ssthresh oldugu andan itibaren cwnd herzaman cwnd=cwnd+1MSS ; seklinde artacaktir. Rtt ölçümü yapilsa dahi yine de cwnd 1MSS'ser artacaktir her onay gelisinde.Iste 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 sayimi olsa dahi cwnd=cwnd+1MSS seklinde artacaktir. Asagidaki sekilde çok güzel bir sekilde açiklamaktadir.
Peki ssthresh degeri baslangiçta nedir ?
Ssthresh degeri baslangiçta yayinlanan pencere boyutuna (window size) esittir .
Congestion Avoidance algoritmasi isletilir bu modda.
Burada lineer bir artis ile gönderici aldigi her onay sonrasinda cwnd degerini cwnd=cwnd+1MSS seklinde artirmaktadir.
Peki sonuna kadar böyle artacak midir ? Hayir
Taki , Tcp bir paket kaybi sezene kadar. Tcp bir paket kaybi sezerse tikaniklik oldugunu varsayar .2 Durumda Tcp paket kaybi oldugunu anliyordu
1- Yeniden Iletim Zamanlayicisinin süreasimi
2 - Ayni degere sahip ACK paketlerinin alinmasi
Süre asimi meydana geldigi anda gönderici
- ssthresh degerini ssthresh=ssthresh/2 yapar .
- cwnd degere tekrar cwnd=1MSS yapilir .
Tekrar algoritma slow start modundan baslayarak isletilmeye devam eder . cwnd>=ssthresh oldugu anda Congestion Avoidance isletilir Daha sonra tekrar tikaniklik oldugu anlisilir ... iste döngümüz bu sekilde devam etmektedir.
Slow Start , Congestion Avoidance ve Tikaniklik Durumunda yapilanlar asagidaki grafikte çok güzel bir biçimde özetlenmistir.
COMMENTS