(Transport Layer) Computer Networking: A Top Down Approach Featuring the Internet, 3 rd edition. Jim Kurose, Keith Ross Addison-Wesley, July 2004

Taşıma Katmanı (Transport Layer)

A note on the use of these ppt slides: We’re making these slides freely available to all (faculty, students, readers

Author Can Dalman

17 downloads 425 Views 2MB Size
Taşıma Katmanı (Transport Layer)

A note on the use of these ppt slides: We’re making these slides freely available to all (faculty, students, readers). They’re in PowerPoint form so you can add, modify, and delete slides (including this one) and slide content to suit your needs. They obviously represent a lot of work on our part. In return for use, we only ask the following: ‰ If you use these slides (e.g., in a class) in substantially unaltered form, that you mention their source (after all, we’d like people to use our book!) ‰ If you post any slides in substantially unaltered form on a www site, that you note that they are adapted from (or perhaps identical to) our slides, and note our copyright of this material.

Computer Networking: A Top Down Approach Featuring the Internet, 3rd edition. Jim Kurose, Keith Ross Addison-Wesley, July 2004.

Thanks and enjoy! JFK/KWR All material copyright 1996-2004 J.F Kurose and K.W. Ross, All Rights Reserved

Taşıma Katmanı Transport Layer

3-1

Taşıma Katmanı Hedefler: ˆ Taşıma katmanı servislerinin prensiplerini anlamak: 

  

Çoklama/çoklamanın çözülmesi (multiplexing /demultiplexing) Güvenilir veri iletimi (reliable data transfer) Akış kontrolü (flow control) Tıkanıklık kontrolü (congestion control)

ˆ Internet deki taşıma

katmanı protokollerini öğrenmek:  



UDP: bağlantısız taşıma (connectionless transport) TCP: bağlantı yönelimli taşıma (connection-oriented transport) TCP tıkanıklık kontrolü (congestion control)

Taşıma Katmanı Transport Layer

3-2

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-3

Taşıma Servisleri ve Protokolleri ˆ Farklı ana sistemlerde çalışan

uygulama süreçleri arasında mantıksal bir bağlantı sunar ˆ Taşıma katmanı protokolleri ağ yönlendiricilerinde değil uç sistemler de uygulanır  gönderici tarafı: gönderici uygulama süreci tarafından aldığı mesajları segmentlere çevirir, ve ağ katmanına geçirir.  alıcı tarafı: segmentleri mesaj haline birleştirir ve uygulama katmanına geçirir. ˆ Uygulamalar için birden fazla taşıma katmanı protokolü mevcuttur  Internet: TCP ve UDP

uygulama taşıma ağ Veri bağlantısı fiziksel

network data link physical

network data link physical network data link physical

network data link physical

network data link physical uygulama taşıma ağ Veri bağlantısı fiziksel

Taşıma Katmanı Transport Layer

3-4

Taşıma ve ağ katmanları ˆ

ağ katmanı: ana

sistemler arasında mantıksal bağlantı sunar ˆ transport layer: farklı ana sistemler üzerinde çalışan süreçler arasında mantıksal bağlantı sunar 

Ağ katmanı üzerinde yer alır ve onun sunduğu servislere dayanır

Ev halkı benzeştirmesi:

Birbirine mektup gönderen bir evdeki 12 çocuk ile diğerindeki 12 çocuk ˆ süreçler = çocuklar ˆ Uygulama mesajları = zarf

içindeki mektuplar ˆ Ana sistemler = evler ˆ Taşıma katmanı protokolü = Ann ve Bill ˆ Ağ katmanı protokolü = posta servisi Taşıma Katmanı Transport Layer

3-5

Internet’de taşıma katmanı protokolleri ˆ güvenilir, sıralı teslim (TCP)   

Tıkanıklık kontrolü (congestion control ) Akış kontrolü (flow control) Bağlantı kurulumu (connection setup)

ˆ güvenilmez, sırasız teslim:

UDP 

IP’nin en iyi çabayla teslim servisi üzerinde bir eklenti yoktur

ˆ uygun olmayan servisler:  

gecikme garantisi Bant genişliği garantisi

uygulama taşıma ağk Veri bağlantısı fiziksel

network data link physical

network data link physical network data link physical

network data link physical

network data link physical uygulama taşıma ağ Veri bağlantısı fiziksel

Taşıma Katmanı Transport Layer

3-6

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-7

Çoklama / çoklamanın çözülmesi (Multiplexing/demultiplexing) Alıcı ana sistemde çoklamanın çözülmesi

Pek çok paketten verinin alınması, verinin başlık ile zarflanması (daha sonra çoklamanın çözülmesinde kullanılmak için

Alınan segmentlerin doğru soketlere teslimi = soket uygulama

= süreç P3

taşıma ağ veri bağlantısı fiziksel

ana sistem 1

P1 P1

Gönderici ana sistemde çoklama:

uygulama taşıma

P2

P4

uygulama taşıma ağ

ağ veri bağlantısı fiziksel

ana sistem 2

veri bağlantısı fiziksel

ana sistem 3 Taşıma Katmanı Transport Layer

3-8

Çoklamanın çözülmesi (demultiplexing) nasıl çalışır? ˆ ana sistem IP datagramını alır

Her datagramın bir kaynak bir de hedef IP adresi vardır  Her datagram 1 taşıma katmanı segmenti taşır  Her segmentin kaynak ve hedef port numarası vardır (hatırla: bazı çok bilinen uygulamaların port numaraları) ˆ Ana sistem IP adresi ve port numarasını kullanarak segmenti uygun sokete yönlendirir. 

32 bit kaynak port # hedef port #

diğer başlık alanları

Uygulama verileri (mesaj)

TCP/UDP segment biçimi Taşıma Katmanı Transport Layer

3-9

Bağlantısız çoklamanın çözülmesi ˆ Port numaraları ile soket

oluşturulur:

DatagramSocket mySocket1 = new DatagramSocket(99111); DatagramSocket mySocket2 = new DatagramSocket(99222);

ˆ UDP soketleri iki değişken

tarafından tanımlanır:

(hedef IP adresi, hedef port numarası)

ˆ Ana sistem UDP

segmentini alınca:  

Segmentdeki hedef port numarasını kontrol eder UDP segmentini ilgili port numarasına yönlendirir.

ˆ Farklı kaynak IP adresi

ve/veya kaynak port numarası olan IP datagramları aynı sokete yönlendirilir

Taşıma Katmanı Transport Layer

3-10

Bağlantısız çoklamanın çözülmesi DatagramSocket serverSocket = new DatagramSocket(6428); P2

SP: 6428 DP: 9157

istemci IP: A

P1 P1

P3

SP: 9157 DP: 6428

SP: 6428 DP: 5775

sunucu IP: C

SP: 5775 DP: 6428

istemci IP:B

SP “geri dönüş adresi”ni tanımlar Taşıma Katmanı Transport Layer

3-11

Bağlantı-yönelimli çoklamanın çözülmesi ˆ TCP soketler dört-

değişken tarafından tanımlanır:    

kaynak IP adresi kaynak port numarası hedef IP adresi hedef port numarasi

ˆ Alıcı ana sistem

segmenti uygun sokete yönlendirmek için dört değeri de kullanır

ˆ Sunucu ana sistem pek

çok eş zamanlı TCP soketini destekleyebilir: 

Her bir soket kendi dörtlü değişkeni ile tanımlanır

ˆ Web sunucularının her

bağlanan istemci için farklı soketleri vardır 

Sürekli olmayan HTTP’de her istek için farklı bir soket vardır

Taşıma Katmanı Transport Layer

3-12

Bağlantı-yönelimli çoklamanın çözülmesi

P1

P4

P5

P2

P6

P1P3

SP: 5775 DP: 80 S-IP: B D-IP:C

istemci IP: A

SP: 9157 DP: 80 S-IP: A D-IP:C

sunucu IP: C

SP: 9157 DP: 80 S-IP: B D-IP:C

istemci IP:B

Taşıma Katmanı Transport Layer

3-13

Uygulama Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-14

UDP: User Datagram Protocol [RFC 768] ˆ Bir taşıma protokolünün

yapabileceği en az şeyi yapar ˆ “en iyi çaba” teslim servisi , UDP segmentleri:  kaybolabilir  Uygulamaya sırasız bir şekilde ulaşabilir ˆ

bağlantısız: 



UDP gönderici ve alıcısı arasında bağlantı kurulumu yoktur Her UDP segmenti diğerlerinden bağımsız olarak yürütülür

Peki neden UDP var? ˆ Bağlantı kurulumu yok

(gecikmeye yol açabilir) ˆ basit: gönderici ve alıcı taraflarında bağlantı durum yoktur ˆ Küçük paket başlığı yükü ˆ Tıkanıklık kontrolü yoktur: UDP istenildiği kadar hızlı gönderebilir

Taşıma Katmanı Transport Layer

3-15

UDP: ˆ Genellikle multimedia

uygulamalarda kullanılır  Kayıpların tolere Uzunluk, UDP edilebildiği segmentinin başlığı da  Hızın önemli olduğu

kapsayan kullanımları bit miktarı

ˆ Diğer UDP  DNS  SNMP ˆ UDP üzerinden güvenilir iletim: güvenilirlik uygulama katmanında eklenebilir  Uygulamaya dayalı hata düzeltimi!

32 bits kaynak port # hedef port # Uzunluk (length)

Kontrol toplamı (checksum)

Uygulama verileri (application data) (mesaj) UDP segment yapısı Taşıma Katmanı Transport Layer

3-16

UDP kontrol toplamı (checksum) Amaç: iletilen segmentteki “hataları” (örn., değişen bitler) tespit etme Gönderici:

ˆ Segment içeriklerini 16

bitlik sözcükler olarak ele alır ˆ Kontrol toplamı (checksum): segment içeriğini 1 tümleyicilerinin toplamı olarak toplar ˆ Gönderici UDP kontrol toplamı alanına kontrol toplamı değeri ekler

Alıcı: ˆ Alınan segmentin kontrol

toplamını hesaplar ˆ Hesaplanan kontrol toplamının kontrol toplamı alanındaki değere eşitliğini kontrol eder:  

HAYIR – hata tespit edilmiştir EVET – hata tespit edilmemiştir. Fakat yine de hatalar olabilir? Daha sonra bahsedeceğiz …. Taşıma Katmanı 3-17 Transport Layer

Internet Kontrol Toplamı (Checksum) Örneği ˆ Örnek: iki 16-bit integerı toplayalım 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 Başa sarma

1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1

toplam1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 Kontrol toplamı1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1

Taşıma Katmanı Transport Layer

3-18

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-19

Güvenilir Veri İletiminin Prensipleri ˆ Sadece taşıma katmanında değil, uygulama ve bağlantı

katmanlarında da meydana gelir ˆ En önemli ağ konularının ilk-10 listesinin başında gelen bir konudur! uygulama katmanı

Taşıma katmanı

gönderici süreç

alıcı süreç

güvenilir kanal

sunulan servis

Güvenilir olmayan kanal

servis uygulaması

ˆ Güvenilmeyen kanalın özellikleri güvenilir veri iletiminin (rdt)

karmaşıklığını belirler

Taşıma Katmanı Transport Layer

3-20

Güvenilir veri iletimi: başlangıç rdt_send(): yukarıdan çağrılır, (e.g.,

uygulama tarafından). Teslim edilecek verileri alıcı taraftaki yukarı katmana aktarır

gönderen taraf

udt_send():rdt protokolünün gönderici ve alıcı taraflarının ikisi de bu çağrı ile paketleri güvenilir olmayan kanalda diğer tarafa gönderirler

deliver_data(): rdt protokolü, üst

katmana veri teslim etmek istediğinde kullanır

alıcı taraf

rdt_rcv(): alıcı tarafta bir paket,

kanalın alıcı tarafına geldiğinde çağrılır

Taşıma Katmanı Transport Layer

3-21

Güvenilir veri iletimi: başlangıç ˆ Güvenilir veri iletim protokolünü (rdt) adım

adım oluşturacağız ˆ Tek yönlü veri iletimi varsayalım 

Fakat kontrol bilgisi her iki yönde de akar!

ˆ Gönderici ve alıcıyı tanımlamak için sonlu durum

makinası (use finite state machines (FSM)) geçişe neden olan olay kullanalım olay meydana geldiğinde alınan eylem

durum: bu “durumda” iken diğer durum sonraki olay ile belirlenir

durum 1

olay eylem

durum 2

Taşıma Katmanı Transport Layer

3-22

Rdt1.0:

güvenilir bir kanal üzerinde güvenilir veri iletimi

ˆ Alttaki kanal son derece güvenilir  bit hataları yok  paketler kaybolmuyor ˆ Alıcı ve göndereci için ayrı FSM’ler:  gönderici veriyi alttaki kanala gönderir  alıcı veriyi alttaki kanaldan okur

Yukarıdan gelecek bir çağrıyı bekle

rdt_send(data) packet = make_pkt(data) udt_send(packet)

gönderici

Aşağıdan gelecek bir çağrıyı bekle

rdt_rcv(packet) extract (packet,data) deliver_data(data)

alıcı Taşıma Katmanı Transport Layer

3-23

Rdt2.0: bit hatalarına sahip bir kanal ˆ Alttaki kanal paketlerdeki bitleri değiştirebilir 

ˆ

bit hatalarını tespit etmek için kontrol toplamı

Soru : hataları nasıl düzelteceğiz?   

pozitif alındı (acknowledgements (ACKs)): alıcı açık olarak

göndericiye paketin alındığını bildirir

negatif alındı (negative acknowledgements (NAKs)): alıcı göndericiye pakette hatalar olduğunu söyler Gönderici NAK üzerine paketine yeniden gönderir

ˆ rdt2.0 daki yeni mekanizma (rdt1.0’in üstünde):   

Hata tespiti Alıcı geribildirimi: gönderici alıcı arasındaki kontrol mesajları (ACK,NAK) Tekrar iletim

Taşıma Katmanı Transport Layer

3-24

rdt2.0: FSM belirtimi rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Yukarıdan ACK bir çağrı veya udt_send(sndpkt) bekle NAK için bekle rdt_rcv(rcvpkt) && isACK(rcvpkt) Λ

gönderici

alıcı rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Aşağıdan bir çağrı bekle rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Taşıma Katmanı Transport Layer

3-25

rdt2.0: hatasız işlem rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && isACK(rcvpkt) Λ

rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Taşıma Katmanı Transport Layer

3-26

rdt2.0: hatalı senaryo rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for Wait for call from ACK or udt_send(sndpkt) above NAK rdt_rcv(rcvpkt) && isACK(rcvpkt) Λ

rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Wait for call from below rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Taşıma Katmanı Transport Layer

3-27

rdt2.0 önemli bir eksiği var! Eğer ACK ya da NAK bozulursa ne olacak?

ˆ Gönderici alıcıda ne olduğunu

bilmiyor!

ˆ Yeniden gönderirse : pek çok

kopya paket ortaya çıkar

Kopyaların üstesinden gelmek: ˆ Gönderici her pakete dizi numarası (sequence number) ekler ˆ Gönderici eğer ACK/NAK bozulduysa paketi yeniden gönderir. ˆ Alıcı kopya paketleri atar (yukarı göndermez)

Dur ve bekle stop and wait Gönderici bir paket gönderir sonra alıcının cevabını Bekler.

Taşıma Katmanı Transport Layer

3-28

rdt2.1: göndericinin bozuk ACK/NAK’lerin üstesinden gelmesi rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) &&

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

Yukarıdan çağrı 0 için bekle

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt)

Λ

rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) udt_send(sndpkt)

( corrupt(rcvpkt) || isNAK(rcvpkt) ) udt_send(sndpkt)

ACK veya NAK 0 için bekle

Λ ACK veya NAK 1 için bekle

Yukarından çağrı 1 için bekle

rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt)

Taşıma Katmanı Transport Layer

3-29

rdt2.1: alıcının bozuk ACK/NAK’lerin üstesinden gelmesi rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt)

rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)

sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt)

sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Aşağıdan 0 için bekle

Aşağıdan 1 için bekle

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt)

rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt)

extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Taşıma Katmanı Transport Layer

3-30

rdt2.1: özet Gönderici: ˆ Paketlere dizi numarası eklendi ˆ (0,1) iki dizi numarası yeterli mi? Neden? ˆ Alınan ACK/NAK’in bozuk olup olmadığı kontrol edilmelidir ˆ FSM’ler daha öncekinin iki katı duruma sahiptir 

Alıcı: ˆ Alınan paketin kopya olup olmadığını kontrol etmelidir 

Durum beklenen paket dizi numarasının 0 ya da 1 olmasını belirler

ˆ not: alıcı göndericideki

alınana son ACK yada NAK’ın OK olup olmadığını bilemez

Durum paketin 0 ya da 1 dizi numarasına sahip olup olmadığını bilmelidir

Taşıma Katmanı Transport Layer

3-31

rdt2.2: NAK kullanmayan protokol ˆ Sadece ACK kullanarak rdt2.1’deki aynı fonksiyonlara sahiptir ˆ NAK yerine, alıcı sadece son doğru alınan paket için ACK

gönderir 

Alıcı ACK’lenen paket için dizi numarasını açıkça belirtmelidir

ˆ Göndericide kopya ACK ler NAK ile aynı eyleme sebep olur:

paketi yeniden göndermek

Taşıma Katmanı Transport Layer

3-32

rdt2.2: gönderici alıcı parçaları rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && Yulkarıdan 0 için bekle

rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) udt_send(sndpkt)

aşağıdan 0 için bekle

( corrupt(rcvpkt) || isACK(rcvpkt,1) ) udt_send(sndpkt)

ACk 0 için bekle

gönderici FSM parçası

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0)

alıcı FSM parçası

Λ

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt)

Taşıma Katmanı Transport Layer

3-33

rdt3.0: bit hatalı ve kayıplı kanal için Yeni varsayım: alttaki kanal paketleri kaybedebilir (veri aya da ACK’leri) 

Kontrol toplamı (checksum), dizi sayısı (seq. #), ACKler, yeniden gönderimler faydalı ancak yeterli değiller

Yaklaşım: gönderici “makul” bir süre kadar ACk için beklemelidir. ˆ Bu sürede ACk gelmezse yeniden

gönderir ˆ Eğer paket (veya ACK) sadece geciktiyse (kaybolmadıysa):  Yeniden gönderilen kopya olacaktır, ancak dizi numarası kullanımı bunu üstesinden gelecektir  Alıcı ACK’lenen paketin dizi numarasını belirtmelidir ˆ Geri sayım zamanlayıcısı (countdown timer) gerektirir

Taşıma Katmanı Transport Layer

3-34

rdt3.0 gönderici

rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer

rdt_rcv(rcvpkt)

Λ

Yukarıdan çağrı 0 için bekle

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1)

timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) )

Λ

ACk0 için bekle

timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) stop_timer

stop_timer

Λ

rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) )

ACK 1 için bekle

Aşağıdan çağrı 1 için bekle rdt_send(data)

rdt_rcv(rcvpkt)

Λ

sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer

Taşıma Katmanı Transport Layer

3-35

rdt3.0 protokolünün işleyişi

kayıpsız işlem

kayıp paket

Taşıma Katmanı Transport Layer

3-36

rdt3.0 in action

kayıp ACK

Erken zaman aşımı

Taşıma Katmanı Transport Layer

3-37

rdt3.0 protokolünün performansı ˆ rdt3.0 çalışır fakat performansı pek de iyi değildir

ˆ örnek: 1 Gbps hatta, 15 ms uçtan uca yayılma gecikmesi ile,

1KByte’lik paket gönderirken:

d

ilet

=

U

  

L (packet length in bits) 8kb/pkt = = 8 microsn R (transmission rate, bps) 10**9 b/sec

=

sender gönderici

L/R RTT + L / R

=

.008 30.008

= 0.00027

U gönderici: fayda – göndericinin göndermekle meşgul olduğu sürenin kesri her 30.008 msn’de 8KB’lik paket -> 1 Gbps’lik hatta 267Kbps etkili akış Fiziksel kaynakların kullanımını ağ protokolü kısıtlar! Taşıma Katmanı Transport Layer

3-38

rdt3.0: dur ve bekle işleyişi gönderici

alıcı

Paketin ilk bitinin iletimi, t = 0 Paketin son bitinin iletimi, t = L / R Paketin ilk biti ulaşır Paketin son biti ulaşır, ACK gönderilir

RTT

ACK gelir, sonraki paketi gönderir, t = RTT + L / R

U

=

gönde gönderici

L/R RTT + L / R

=

.008 30.008

= 0.00027

Taşıma Katmanı Transport Layer

3-39

İç içe geçme (pipeline) hattı: artan fayda sender

receiver

Paketin ilk bitinin iletimi, t = 0 Paketin son bitinin iletimi, t = L / R Paketin ilk biti ulaşır Paketin son biti ulaşır, ACK gönderilir 2 inci paketin son biti ulaşır, ACK gönd. 3 üncü paketin son biti ulaşır,ACK gönd.

RTT

ACK arrives, send next packet, t = RTT + L / R

Fayda 3 katı artar!

U

=

sender gönderici

3*L/R RTT + L / R

=

.024 30.008

= 0.0008

Taşıma Katmanı Transport Layer

3-40

İç içe geçme (pipeline) protokolü Boru hattı: gönderici alındı geri bildirimi yapılacak pek çok paketi ardı ardına gönderir  

Dizi numara aralığı arttırılmaldır Gönderici ve alıcı taraflarında tampona alma gerekir

ˆ İç içe geçme (pipeline) protokollerinde iki temel

yaklaşım:  

Geri Git N (go-Back-N), Seçici Tekrarlama (selective repeat)

Taşıma Katmanı Transport Layer

3-41

Geri Git N (Go-Back-N: GBN) Gönderici:

ˆ Paket başlığında k-bitlik dizi numarası ˆ Henüz alındı bilgisi alınmamış paketler için N boyutunda “pencere”

(window) boyutu

Pencere boyutu N

Halihazırda ACK mesajı alınmış

Kullanılabilir henüz gönderilmemiş

Gönderilmiş ama ACK mesajı alınmamış

kullanılamaz

ˆ ACK(n): dizi numarası n olan dahil tüm paketleri ACKler –

“kümülatif ACK” (cumulative ACK) ˆ Gönderimdeki her paket için zamanlayıcı ˆ Zaman aşımı (n): penceredeki paket n ve dizi numarası daha yüksek olan paketleri yeniden iletir Taşıma Katmanı Transport Layer

3-42

Geri Git N (Go-Back-N: GBN) ˆ Protokol çalıştıkça “N Penceresi” yavaş yavaş

sağa doğru kayacaktır. Bu yüzden N’e Pencere Boyutu (Window size), GBN protokolüne de “sliding window” adı verilmektedir. ˆ Neden bir pencere tanımlamak zorundayız? Kullanıcının limitsiz bir window size (pencere boyutu) kullanarak veri aktarımına izin veremez miyiz?

Taşıma Katmanı Transport Layer

3-43

GBN göndericisinin genişletilmiş tanımı rdt_send(data)

Λ base=1 nextseqnum=1

if (nextseqnum < base+N) { sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data)

Wait rdt_rcv(rcvpkt) && corrupt(rcvpkt)

timeout start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1])

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer

Taşıma Katmanı Transport Layer

3-44

GBN göndericisi ˆ Gönderici tarafında GBN’in cevap vermesi gereken

durumlar: 





Üst katmandan uyandırılma: Eğer window boşsa, paketi hazırla ve gönder. Eğer Window dolmuşsa uygulamayı uyar. ACK alımı: Sequence number’ı N olan ACK alındığında, o Sequence number’a kadar olan tüm paketlerin sorunsuz ulaştığı anlaşılacaktır.(kümülatif alındı (ACK)) Zaman aşımı durumu: doğrulanmamış olan son paket için bir kronometre çalıştırılabilir. Her ACK alımında eğer ACK’sı bekleyen paket varsa kronometre baştan başlatılabilir.

Taşıma Katmanı Transport Layer

3-45

GBN alıcısının genişletilmiş tanımı default udt_send(sndpkt)

Λ

Bekle expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum)

rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++

sadece ACK’li: doğru olarak alınan en büyük sıralı dizin numarasına sahip paket için her zaman ACK gönderir  

Kopya ACK’ler oluşabilir Expectedseqnum ı bilmelidir

ˆ Sıralama dışı paket:  atılır (tampona alınmaz) -> alıcıda tampona alma yoktur!  En büyük sıralı dizi numarası olan paket yeniden ACK’lenir Taşıma Katmanı Transport Layer

3-46

GBN alıcısı ˆ Alıcı tarafında GBN:  N sequence number’ı olan doğru ve sıralı bir paket alınmışsa (yani bir üst katmana en son gönderilmiş olan paket n-1 ise) alıcı N sequence number’lı paket için bir ACK oluşturur ve bunu gönderir, paketi de uygulama katmanına iletir.  Tüm diğer durumlarda paket’i atar ve son düzgün alınmış ve sıralı olan paket için bir ACK oluşturur ve gönderir. Paketler tek tek uygulama katmanına iletildiğine göre K sequence number’lı paketin alınıp uygulama katmanına iletilmesi K’ya kadar olan tüm paketlerin düzgün ver sıralı alındığını anlamına gelir. Dolayısıla kümülatif doğrulama (cumulative acknowledgements) GBN’nin doğasında bulunmaktadır.

Taşıma Katmanı Transport Layer

3-47

GBN in işleyişi

Taşıma Katmanı Transport Layer

3-48

Seçici Tekrarlama (Selective Repeat –SR)

ˆ Her ne kadar GBN başarılı bir mekanizma olsa da sıkıntı

çekebileceği durumlar mevcuttur. Özellikle eğer Pencere genişliği ve bant genişliği gecikmesi (bandwidth-delay) büyükse, birçok paket pipeline’da bulunabilir. Burada oluşacak tek bir paket hatası birçok paketin tekrar gönderilmesine sebebiyet verecektir. ˆ Hatta oluşabilecek hataların olasılığı arttıkça gereksiz yere gönderilen paket sayısı da önemli derecede artacaktır. ˆ Selective Repeat protokolleri sadece hatalı olan paketlerin gönderilmesi prensibine dayanır. Burada her bir doğru alınan paketin ACK edilmesi gerekecektir. Tekrar N boyunda bir penceremiz olacak, pipeline’da bulunan doğrulanmamış paket sayısını sınırlamak için. GBN’den farklı olarak gönderen penceredeki belli Taşıma Katmanı 3-49 Transport Layer paketlerin ACK’sını almış olacaktır.

Seçici Tekrarlama (Selective Repeat –SR) ˆ Alıcı doğru olarak alınan herbir paket için ayrı

ayrı alındı mesajı (ack) gönderir 

Gerekirse paketleri bir üst katmana sıralı iletebilmek için tamponda tutar

ˆ Gönderici sadece alındı mesajı (ack) gelmeyen

paketleri yeniden gönderir 

Her alındı mesajı alınmamış paket için gönderici zamanlayıcısı

ˆ Gönderici penceresi (sender window)  N ardışık dizin #’sı  Yine gönderilmiş ancak alındı bilgisi alınmamış (unACKed) paketlerin dizin #sını sınırlar Taşıma Katmanı Transport Layer

3-50

Seçici Tekrarlama: gönderici, alıcı pencereleri Halihazırda ACK mesajı alınmış Gönderilmiş ama henüz ACK mesajı alınmamış

Kullanılabilir ama henüz gönderilmemiş kullanılamaz kullanılamaz

dizi numaralarına göndericinin bakışı Sıradışı (tampona alınmış) ama halihazırda ACK mesajı gönderilmiş Beklenen ama henüz alınmamış

Kabul edilebilir (pencere içerisinde) Kullanılabilir değil

dizi numaralarına alıcının bakışı Taşıma Katmanı Transport Layer

3-51

Seçici Tekrarlama gönderici

yukarıdan alınan veriler :

ˆ Eğer penceredeki bir sonraki

dizi #sı müsaitse, paketi gönderir

zaman aşımı(n):

ˆ pkt n’i tekrar gönder,

zamanlayıcı yeniden başlatır ACK(n) in [sendbase,sendbase+N]: ˆ pkt n’i alındı olarak işaretler ˆ eğer n en küçük alındı bilgisi gelmemiş pkt ise, pencere boyutunu bir sonraki alındı bilgisi gelmemiş dizi # sına ilerletir

alıcı [rcvbase, rcvbase+N-1]

deki pkt n

ˆ n için alındı mesajı ACK(n)

gönderir ˆ Sıralı değilse: tampona alır ˆ Sıralı ise: iletir (aynı zamanda tapona alınmış sıralı pakt leri de ileteir), pencere boyutunu bir sonraki alındı bilgisi gelmemiş pakt in dizi # sına ilerletir [rcvbase-N,rcvbase-1] deki

pkt n

ˆ ACK(n) alındı mesajı üretir

diğer türlü: ˆ yok say

Taşıma Katmanı Transport Layer

3-52

Seçici Tekrarlama İşlemi

Taşıma Katmanı Transport Layer

3-53

Seçici Tekrarlama: eşleme Örnek: ˆ Dizi # ları: 0, 1, 2, 3 ˆ Pencere boyutu=3 ˆ Alıcı iki senaryodaki

farkı anlamaz! ˆ (a) daki gibi kopya veriyi yeni gibi hatalı olarak geçirir Q: dizin # ile pencere boyutu arasındaki ilişki nedir?

Taşıma Katmanı Transport Layer

3-54

Güvenilir Veri İletimi Mekanizmaları ve Kullanımları ˆ Kontrol toplamı: bit hatalarını tespit etmek için ˆ ˆ ˆ

ˆ ˆ

kullanılır Zamanlayıcı: kanal içerisinde kaybolan paketlerin yeniden iletilmesini sağlamak için kullanılır Dizi numarası: kayıp paketlerin tespitini ve kopya paketlerin belirlenmesini sağlar Alındı: bir paketin ya da paket setinin doğru olarak alındığı bilgisinin göndericiye bildirilmesi için kullanılır Negatif alındı: göndericiye bir paketin doğru alınmadığını söylemek için kullanılır Pencere, boru hattı: Belli bir aralık içerisinde bulunan paketlerin gönderilmesini sağlar Transport Layer

3-55

SORU ˆ 3 büyüklüğünde bir gönderici penceresine sahip bir

GBN protokolü düşünün . t anında alıcının beklediği, sıradaki paketin k dizi numarasına sahip olduğunu varsayın. Ortamın mesajları yeniden sıralamadığını da varsayın. Aşağıdaki soruları cevaplayın: ˆ A) t anında göndericinin penceresindeki olası dizi numarası seti hangi aralıklar arasında başlıyor olabilir? ˆ B) t anında halihazırda göndericiye geri yayılan tüm olası mesajlardaki ACK alanının değeri hangi aralıklar arasında olabilir?

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-57

TCP: Genel Bakış ˆ Noktadan noktaya:  Bir gönderici, bir alıcı ˆ güvenilir, sıralı

akışı: 

bayt

“mesaj sınırları” yoktur

ˆ Boru hattı:  TCP tıkanıklık ve akış kontrolü pencere boyutunu ayarlar ˆ

soket

gönderme & alma tamponları uygulama verileri yazar

uygulama verileri okur

TCP gönderim tamponu

RFCs: 793, 1122, 1323, 2018, 2581

ˆ Tam dubleks veri:  Aynı bağlantıda iki yönlü veri akışı  MSS: maksimum segment boyutu

ˆ Bağlantı-yönelimli:  El sıkışma (kontrol mesajlarının değişimi) Î veri değişiminden önce alıcı ve göndericinin durum bilgileri ˆ Akış kontrolü:  Gönderici alıcıyı zorlamaz soket

TCP alım tamponu segment

Taşıma Katmanı Transport Layer

3-58

TCP segment yapısı 32 bit URG: acil veri (genellikle kullanılmaz) ACK: ACK # geçerli PSH: verileri hemen üst katmana aktar (genellikle kullanılmaz) RST, SYN, FIN: Bağlantı kurulumunda (kurma, kaldırma komutları) Internet Kontrol toplamı (UDP’deki gibi)

kaynak port #

hedef port #

Dizin numarası Alındı (ACK) numarası

Başlık Kulla UA P R S F uzun. nılmaz

Internet kontrol toplamı

Alıcı penceresi Acil veri işaretçisi

seçenekler (çeşitli uzunlukta)

Veri baytları ile sayılır (segmentler ile değil!) Alıcının kabul etmeyi isteyeceği bayt sayısı

veriler

(çeşitli uzunlukta)

Taşıma Katmanı Transport Layer

3-59

TCP dizin # sı ve ACK ler Dizin #’ları:  Segment verisindeki ilk baytın bayt akış numarası ACKler:  Diğer tarafdan beklenen bir sonraki baytın dizin # sı  toplu ACK Soru: alıcı sırasız segmentlerin üstesinden nasıl gelir?  A: TCP belirtimi bir şey söylemez – uygulayıcıya bağlıdır

Ana sistem A

Ana sistem B

kullanıcı ‘C’ yazar

Ana sistem ‘C’ alımı için ACK gönderir ‘C’ harfini geri yansıtır

Ana sistem yansıtılan ‘C’ için ACK gönderir

Basit telnet senaryosu

time

Taşıma Katmanı Transport Layer

3-60

TCP dizin # sı ve ACK ler 



Farzedelim ki A’daki bir process B’deki bir process’e bir grup veri göndermek istemekte. A’daki TCP bu veri yığınındaki her bir byte’ı birbirinden farklı olacak şekilde numaralandıracaktır. Veri akışının 500,000byte’lık bir dosyadan oluştuğunu, MSS’in 1,000 byte olduğunu ve veri akışındaki ilk byte’ın 0 olarak numaralandırıldığını farzedelim. TCP 500 tane segment oluşturacak. Birinci segment’in Sequence Number’ı 0, ikinci segment’in sequence number’ı 1000, üçüncü segment’in sequence number’ı 2000 vs. olacaktır. Her bir sequence sayısı TCP header’ındaki Sequence Number alanına eklenir.

Taşıma Katmanı Transport Layer

3-61

TCP dizin # sı ve ACK ler  Her

ne kadar burada verilen örnekte ilk byte’ın Sequence number’ını 0’dan başlatmış olsak ta, gerçek kullanımında TCP ilk byte’a rastgele(random) bir sayı atamakta ve bunu alıcıya da iletmektedir.  Bu şekilde bir random number’ın seçilmesindeki en temel sebep, daha önceden kurulmuş ama şimdi tamamlanmı,ş bu iki host arasındaki eski bir bağlantıdan kalma ve aynı Sequence Number’ı taşıyan bir segment olmasıdır. Bu şekilde rastgele bir sayı seçilerek bu ihtimal azaltılmaya çalışılmaktadır.

Taşıma Katmanı Transport Layer

3-62

TCP dizin # sı ve ACK ler ˆ ACK Number alanı biraz daha karışık. TCP full-

duplex olduğundan A, B’ye veri gönderirken aynı anda B’den veri alabilmektedir. B’den gelen her bir segment’in, B’den A’ya akan veri ile ilintili olarak bir Sequence Number’ı bulunmaktadır. A’nın Acknowledgement alanına koyduğu sayı, A’nın B’den beklediği bir sonraki byte’ın sequence number’ıdır. ˆ Farzedelim ki A B’den 0’dan 535’e kadar olan tüm byte’ları aldı ve B’ye bir segment göndermek üzere. Başka bir deyişle A şu aşamada B’den 536. byte’ı ve devamını beklemekte. Bu durumda A göndereceği segment’in Acknowledgement number alanına 536 yazıp B’ye gönderir. Taşıma Katmanı Transport Layer

3-63

TCP dizin # sı ve ACK ler ˆ Başka bir durumda da A B’den 0’dan 535’e ve 900’den 1000’e

kadar olan byte’ları aldığını, fakat herhangi bir sebepten dolayı 536’dan 899’a kadar olan byte’ları almadığını farzedelim. Bu yüzden A’nın bir sonraki göndereceği segment’te Acknowledgement alanına 536 yazacaktır. TCP, ilk kayıp byte’a kadar olan kısmı doğruladığı için TCP’nin kümülatif doğrulama yaptığı söylenir. ˆ Fakat burada başka önemli bir nokta ortaya çıkmakta: A, üçüncü segment’i yani 900’den 1000’e kadar olan byte’ları ikinci segment’ten önce aldı, yani üçüncü segment sıralama dışı ulaştı. ˆ Peki sırası bozulmuş segment’ler aldığı alıcı taraf ne yapmalı? Burada bir temel kural olmamasına rağmen iki temel yaklaşım kullanılmaktadır:  Sıralamayı bozan byte’ları anında atmak  Sıralamayı bozan byte’ları önbellekte tutup eksik byte’ları beklemek Taşıma Katmanı Transport Layer

3-64

Örnek: TELNET ˆ Farzedelim ki A, B ile bir telnet bağlantısı

kurmakta. A bu durumda istemci (client), B’de sunucu (server) olmaktadır. İstemci tarafından istemcideki uygulamada her yazılan karakter sunucuya gönderilecek, sunucu da ekrana yazdırmak için aynı karakteri istemciye gönderecektir. Bu karakter kullanıcının Telnet arayüzünde gözükecek ama aslında aynı karakter iki host arasında gidip gelmiş olacak TCP vasıtasıyla (traverse twice the network). ˆ Kullanıcının sadece ‘c’ harfini bastığını farzedelim ve gönderilen ve alınan TCP segmentlerine kısaca bir bakalım. Taşıma Katmanı Transport Layer

3-65

Örnek: TELNET

Taşıma Katmanı Transport Layer

3-66

Örnek: TELNET ˆ İstemci ve sunucu için başlangıç sequence

number’larının 42 ve 79 olduğunu farzedelim. ˆ İstemciden ilk gönderilen segment’in sequence number’ı 42, sunucudan ilk gönderilen segment’in sequence number’ı 79 olacaktır. ˆ Her hangi bir veri gönderilmeden önce ama bağlantı kurulduktan sonra istemci sunucudan 79 sequence number’lı segment’i, sunucu da 42 sequence number’lı segment’i beklemektedir. ˆ Örnekte de gösterildiği üzere 3 segment gönderilmektedir. İlk segment istemciden sunucuya gönderilmiş, içinde tek byte’lık C bulunmakta ve sequence number’ı 42. Sunucudan da herhangi bir veri almadığı için de acknowledgement number kısmında 79 bulunmakta. Taşıma Katmanı Transport Layer

3-67

Örnek: TELNET ˆ İkinci segment sunucudan istemciye gönderilmekte

ve çift amaca hizmet etmekte: 



İlk önce almış olduğu veriyi doğrulamakta: Acknowledgement kısmına 43 koyarak, sunucu istemciye 42. byte’a kadar herşeyi aldığını ve şimdi 43’ü beklediğini ifade etmekte. İkinci amacı bu segment’in ‘C’ harfini ekrana yazdırmak, dolayısıyla C harfini tekrar göndermekte.

ˆ Bu ikinci segment’in sequence number’ı 79, sunucunun

göndereceği byte’lara verdiği ilk değerdir. ˆ Dikkat ederseniz istemciden sunucuya giden verinin Acknowledgement’i sunucudan istemciye giden veriyi taşıyan segment’in içinde bulunmaktadır. Buna piggybacking (sırtta taşıma) adı verilmektedir. Taşıma Katmanı Transport Layer

3-68

Örnek: TELNET ˆ Üçüncü segment istemciden sunucuya

gönderilmektedir: Tek amacı sunucudan almış olduğu veriyi doğrulamaktır. Bu segment’in taşıdığı veri alanı boş olacak, ve acknowledgement alanında taşıdığı değer 80 olacaktır. Bunun sebebi 80’e kadar olan tüm verileri almış olması ve şimdi 80 ve sonrasını beklemesidir. ˆ İşin ilginç tarafı herhangi bir veri taşımamasına rağmen bir sequence number’ının bulunmasıdır. Bunun sebebi, bu şekilde tanımlanmış bir zorunlu alanın bulunması ve dolayısıyla TCP’nin bu alanı bir sonraki sequence number’la doldurmasıdır. Taşıma Katmanı Transport Layer

3-69

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-70

TCP Gidiş Dönüş Süresi ve Zaman aşımı Q: TCP zaman aşımı (timeout) değeri nasıl belirlenir? ˆ RTT’den daha uzun 

RTT ler farklı farklıdır

ˆ Çok kısa: prematüre

zaman aşımı (premature timeout)  Gereksiz yeniden iletimler ˆ Çok uzun : segment kaybına yavaş reaksiyon verme

Q: RTT nasıl tahmin edilebilir?

ˆ SampleRTT: Segmentin

iletiminden ACK alındısına kadar geçen süre  Yeniden iletimleri yok say ˆ SampleRTT farklı farklı olabilir, want estimated RTT “smoother”  Sadece şu andaki SampleRTT yerine yakın zamandaki birkaç ölçümün ortalaması alınır

Taşıma Katmanı Transport Layer

3-71

TCP Gidiş Dönüş Süresi ve Zaman aşımı EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT ˆ Üssel ağırlıklı hareket eden ortalama (Exponential

weighted moving average – EWMA) ˆ Ağırlıklı ortalama, en son örneklere eski bir örnekten daha çok ağırlık katar ˆ Tipik değer: α = 0.125

Taşıma Katmanı Transport Layer

3-72

Örnek RTT tahmini: RTT: gaia.cs.umass.edu to fantasia.eurecom.fr 350

RTT (milliseconds)

300

250

200

150

100 1

8

15

22

29

36

43

50

57

64

71

78

85

92

99

106

time (seconnds) SampleRTT

Estimated RTT

Taşıma Katmanı Transport Layer

3-73

Gidiş Dönüş Süresi ve Zaman aşımı Zaman aşımını (timeout) ayarlamak ˆ EstimtedRTT artı “güvenlik marjı” (“safety margin”) 

EstimatedRTT’de geniş değişiklikler varsa -> daha geniş güvenlik marjı (safety margin)

ˆ SampleRTT’nin EstimatedRTT’den ne kadar değişiklik

gösterdiğinin ilk tahmini aşağıdaki şekilde hesaplanır :

DevRTT = (1-β)*DevRTT + β*|SampleRTT-EstimatedRTT| (typically, β = 0.25) Zaman aşımı (timeout) aralığı Zaman aşımı (TimeoutInterval) = EstimatedRTT + 4*DevRTT olarak ayarlanır Taşıma Katmanı Transport Layer

3-74

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-75

Güvenilir Veri İletimi ˆ TCP IP’nin

güvenilmeyen servisi üzerinde rdt (güvenilir veri iletim) servisi oluşturur ˆ Pipelined segments ˆ Kümülatif acks ˆ TCP bir tek yeniden iletim zamanlaması kullanır

ˆ Yeniden iletimler:  Zaman aşımı (timeout)  Kopya alındı (duplicate acks) gerçekleşmesinde uygulanır

ˆ Öncelikle basit bir TCP

göndericisi düşünelim:  

Kopya alındıları (acks) yok sayalım Akış kontrolü (flow control) ve tıkanıklık kontrolünü (congestion control) yok sayalım,

Taşıma Katmanı Transport Layer

3-76

TCP göndericisi olayları: Uygulamadan alınan veri: ˆ dizi # (seq #) ile segment oluşturulur ˆ dizi # (seq #) segmentteki ilk veri baytının bayt-akis (byte-stream) numarasıdır ˆ Eğer çalışmıyorsa zamanlayıcıyı başlatır (zamanlayıcıyı en eski alındı mesajı alınmamış segment olarak düşün) ˆ expiration interval: TimeOutInterval

Zaman aşımı (timeout): ˆ Zaman aşımına yol açan segmenti yeniden ilet ˆ Zamanlayıcıyı yeniden başlat ACK (alındı bilgisi) alımı: ˆ Eğer daha önce alındısı alınmamış (unacked) segment için alındı (ack)alıyorsa  

Ack lenenleri günceller Hala ack lenmemiş segment varsa zamanlayıcı yeniden başlatılır.

Taşıma Katmanı Transport Layer

3-77

NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { switch(event)

TCP göndericisi

event: Yukarıdaki uygulamadan alınan veriler Dizi numarası NextSeqNum olan TCp segmenti oluştur If (zamanlayıcı çalışmıyorsa) zamanlayıcıyı başlat Comment: segmenti IP’ye ilet • SendBase-1: en son NextSeqNum = NextSeqNum + length(data) kümülatif olarak

(basit)

event: zaman aşımı henüz alındı bilgisi alınmamış en düşük dizi numarasına sahip segmenti yeniden ilet start timer event: ACK değeri y olan bir ACK alındığında if (y > SendBase) { SendBase = y if (henüz alındı bilgisi alınmamış segmentler varsa) zamanlayıcıyı başlat } } /* end of loop forever */

alındı bilgisi gelmiş olan bayt Örnek: • SendBase-1 = 71; y= 73, ise alıcı 73 ve sonrasını beklemektedir; y > SendBase, ise yeni veri ACK’lenmiştir

Taşıma Katmanı Transport Layer

3-78

TCP: yeniden iletim senaryoları Host A

X

loss Sendbase = 100 SendBase = 120

SendBase = 100

time

SendBase = 120

lost ACK scenario

Host B

Seq=92 timeout

Host B

Seq=92 timeout

timeout

Host A

time

premature timeout Taşıma Katmanı Transport Layer

3-79

TCP yeniden iletim senaryoları

timeout

Host A

Host B

X

loss

SendBase = 120

time Cumulative ACK scenario Taşıma Katmanı Transport Layer

3-80

TCP ACK üretimleri

[RFC 1122, RFC 2581]

Olaylar

TCP Alıcısı

Beklenen dizi #’na sahip sıralı segmentin varışı. Beklenen dizi #’na sahip tüm veri ACK’lenmiştir

Geciktirilmiş ACK. Diğer sıralı segment için 500msn bekler. Bir sonraki segment gelmezse, ACK gönderir.

Beklenen dizi #’na sahip sıralı segmentin varışı. ACK iletimi için bekleyen bir önceki segment varsa

Toplu ACK ile sıralı iki segment için alındı gönderilir

Beklenenden daha büyük dizi #’lı sıradışı bir segmentin varışı. Boşluk tespit edilmiştir.

Bir sonraki beklenen byte’ın dizi # belirterek kopya ACK gönderir.

Alınan verilerdeki boşluğu kısmen veya tamamen dolduran segmentin varışı

Segmentin boşluğun küçük kenarından başladığını sunarak hemen ACK gönderir. Taşıma Katmanı Transport Layer

3-81

Hızlı Yeniden İletim (Fast Retransmit) ˆ Zaman aşımı periyodu

göreceli olarak uzun olabilir: 

Kayıp paketi yeniden göndermek için uzun bekleme

ˆ Kayıp segmentleri kopya

ACK’ler ile tespit etme. 



Gönderici sıklıkla pek çok segmenti arka arkaya gönderir Eğer segment kayıp ise, pek çok kopya ACK olacaktır.

ˆ Eğer gönderici aynı data için

3 ACK alırsa, ACK’lenen segmentden sonra gelen segmentin kaybolduğunu varsayar: 

Hızlı yeniden iletim(fast retransmit): segmenti zamanlayıcının süresi dolmadan yeniden gönderir.

Taşıma Katmanı Transport Layer

3-82

Hızlı yeniden iletim algoritması: event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } else { increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y } Daha önce ACK’lenmiş bir segment için kopya ACK

Hızlı yeniden iletim (fast retransmit) Taşıma Katmanı Transport Layer

3-83

Zaman aşımı aralığını çiftlemek: ˆ Bir zaman aşımı sonrasında zaman aşımı

aralığının uzunluğu:  Bir

zaman aşımı meydana geldiğinde TCP, alındı mesajı gönderilmemiş olan en küçük dizi numarasına sahip segmenti yeniden iletir.  Ancak bir sonraki zaman aşımı aralığını son EstimatedRTT ve DevRTT değerlerinden türetmek yerine, bir önceki değeri iki ile çarpar. • Örn. İlk kez zaman aşımı meydana geldiğinde değer 0,75 ise bir sonrakinde unu 1,5 olarak ayarlar.

 Bu

bize bir anlamda tıkanıklık kontrolü de sağlamış olur

Taşıma Katmanı Transport Layer

3-84

TCP GBN mi SR midir? ˆ GBN:  Alındı mesajları topludur  Sıradış segmentler için ACK gönderilmez ˆ SR:  Doğru ancak sıradışı paketleri tampona alır  Seçici alındı, seçici yeniden iletim yapar ˆ GBN ve SR nin melezidir diyebiliriz!

Taşıma Katmanı Transport Layer

3-85

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-86

TCP Akış Kontrolü ˆ TCP bağlantısının alcı

tarafında alıcı tamponu (receive buffer) vardır

Akış kontrolü Göndericinin alıcının tamponunu çok fazla ve çok hızlı göndererek taşırmasını engeller

ˆ Hız eşleştirme servisi:

ˆ Uygulama süreci

göndericinin gönderdiği hızı, alıcının okuduğu hızla eşleştirir.

verileri bu tampondan okumada yavaş olabilir Taşıma Katmanı Transport Layer

3-87

TCP akış kontrolü: nasıl çalışır? ˆ Alıcı ne kadar boş alan

(TCP alıcısının, sıralama dışı segmentleri attığını varsayarak başlayalım ) ˆ kullanılabilir boş tampon = RcvWindow = RcvBuffer-[LastByteRcvd LastByteRead]

olduğunu segmentteki RcvWindow değeri ile bildirir. ˆ Gönderici ACK’lenmemiş verileri RcvWindow değeri ile sınırlar 

Alıcı tamponunun taşmasını engeller

Taşıma Katmanı Transport Layer

3-88

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-89

TCP Bağlantı Yönetimi Hatırla: TCP göndericisi ve

alıcısı veri segmentlerini görndermeden önce “bağlantı” kurarlar ˆ TCP değişkenleri belirlenir:  Dizi numaraları  tamponlar, akış kontrol bilgileri (örn. RcvWindow) ˆ istemci: bağlantı başlatıcı Socket clientSocket = new Socket("hostname","port number");

ˆ

sunucu: istemci tarafından

iletişime geçilen

Socket connectionSocket = welcomeSocket.accept();

3 yönlü el sıkışma: Adım 1: İstemci TCP SYN segmentini sunucuya gönderir  İlk dizi # nı belirler  Uygulama katmanı verisi bulunmaz Adım 2: Sunucu SYN alır, SYNACK ile cevap verir 

Sunucu tamponları ayırır

Sunucu için ilk dizi # nı belirler Adım 3: İstemci SYNACK alır, ACK ile cevap verir, veri içerebilir 

Taşıma Katmanı Transport Layer

3-90

TCP Bağlantı Yönetimi (devam.) Bağlantıyı kapama: client closes socket: clientSocket.close();

istemci

close

Adım 1: İstemci sunucuya

close

ACK ile cevap verir. Bağlantıyı keser, FIN gönderir.

timed wait

TCP FIN kontrol segmenti gönderir

Adım 2: Sunucu FIN alır,

sunucu

closed

Taşıma Katmanı Transport Layer

3-91

TCP Bağlantı Yönetimi (devam) Adım 3: İstemci FIN alır, ACK ile cevaplar. 

istemci

sunucu

closing

“timed wait” değeri girer – Alından FINlere ACK ile cevap verir

closing

Adım 4: Sunucu, ACK alır. timed wait

Bağlantı kapanır.

closed

closed

Taşıma Katmanı Transport Layer

3-92

TCP Bağlantı Yönetimi (devam)

TCP sunucu döngüsü

TCP istemci döngüsü

Taşıma Katmanı Transport Layer

3-93

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı Transport Layer

3-94

Tıkanıklık Kontrolü Prensipleri Tıkanıklık: ˆ “çok fazla kaynağın

ağın kaldırabileceğinden çok

fazlasını çok hızlı göndermesinden” kaynaklanır ˆ Akış kontrolünden farklıdır! ˆ belirtileri:  Kayıp paketler (yönlendiricilerdeki tamponlarda taşma)  Uzun gecikmeler (yönlendirici tamponlarında kuyruklar) ˆ İlk 10 ağ problemi arasındadır! Taşıma Katmanı Transport Layer

3-95

Tıkanıklığın nedenleri/maliyeti: Senaryo 1 Host A

ˆ İki gönderici, iki

alıcı ˆ Sonsuz tamponu olan bir yönlendirici ˆ Yeniden iletim yok

Host B

λout

λin : original data

unlimited shared output link buffers

ˆ Tıkanıklık

olduğunda uzun beklemeler

Taşıma Katmanı Transport Layer

3-96

Tıkanıklığın nedenleri/maliyeti: Senaryo 2 ˆ

sonlu tampona sahip bir yönlendirici

ˆ Gönderici kaybolan paketleri yeniden

iletir

Host A

Host B

λin : original data λ'in : original data, plus retransmitted data

λout

finite shared output link buffers

Taşıma Katmanı Transport Layer

3-97

Tıkanıklığın nedenleri/maliyeti: Senaryo 2 ˆ Tampon boş olduğunda paket gönderdiği bir durum varsayarsak

= R/2 = λ out in λ ˆ Sadece bir paketin kesin olarak kayıp olduğu bilinirse: out = R/3 ˆ Uzun gecikme nedenli yeniden iletimler, yönlendiricilerin hat bant genişliğini gereksiz yere kullanımına yol açar λout = R/4 R/2 R/2 R/2

λ

λin

R/2

a.

Tıkanıklığın “maliyeti” :

λout

λout

λout

R/3

λin

b.

R/2

R/4

λin

R/2

c.

ˆ Geciken bir paketin yeniden gönderimi durumlarında, orijinal paketin

yeniden iletim işi bir kayıptır ˆ Gereksiz yeniden iletimler: hatta aynı paketin pek çok kopyası olacaktır Taşıma Katmanı 3-98 Transport Layer

Tıkanıklığın nedenleri/maliyeti: Senaryo 3 ˆ Dört gönderici ˆ Birden çok atlamalı yol ˆ Zaman aşımı/yeniden iletimler Host A

λ ve in in artarsa ne olur?

Q:

λ

λin : original data

λout

λ'in : original data, plus retransmitted data

finite shared output link buffers

Host B

Taşıma Katmanı Transport Layer

3-99

Tıkanıklığın nedenleri/maliyeti: Senaryo 3 H o s t A

λ o u t

H o s t B

Tıkanıklığın başka bir ”maliyeti”: ˆ Bir paket yol esnasında atıldığında, bu paketi atıldığı noktaya kadar iletmek içi her yukarı akış hattı tarafından kullanılan iletim kapasitesi kaybedilmiş olur!

Taşıma Katmanı 3-100 Transport Layer

Tıkanıklık kontrolü yaklaşımları Tıkanıklık kontrolü için iki temel yaklaşım vardır: Uçtan uca tıkanıklık kontrolü yaklaşımı : ˆ Ağdan herhangibir geri

bildirim alınmaz ˆ Tıkanıklık uç sistemlerin kayıp ve gecikmeleri takibi ile anlaşılır ˆ TCP’deki yaklaşımdır

Ağ yardımı ile tıkanıklık kontrolü: ˆ Yönlendiriciler ağdaki tıkanıklık durumu ile ilgili uç sistemlere açık bir geri besleme sunarlar 



Tıkanıklığı belirten bir bit kullanılır (SNA, DECbit, TCP/IP ECN, ATM) Yönlendirici, göndericiyi hat üzerinde destekleyebileceği iletim hızı ile ilgili olarak açık şekilde bilgilendirir

Taşıma Katmanı 3-101 Transport Layer

Örnek: ATM ABR tıkanıklık kontrolü ABR: kullanılabilir bit hızı (available bit rate): ˆ “elastik” bir veri iletim

servisi ˆ Ağ “yük altında değilken”:  Kullanılabilir bant genişliğini kullanabilmenin avantajından yararlanmayı ˆ Ağ tıkanık iken ise:  Göndericinin daha önceden belirlenmiş minimum bir iletim hızına kısılmasını sağlar

RM – Kaynak yönetim Hücreleri (resource management cells): ˆ Ana sistemler ve anahtarlar

arası tıkanıklıkla ilgili bilgileri taşır ˆ RM hücrelerindeki bit’ler switchler tarafından ayarlanır switches (“network-yardımlı”)  NI bit: hızda artış yok -no increase in rate Îorta dereceli tıkanıklık  CI bit: tıkanıklık göstergesi ˆ RM hücreleri göndericiye bit’ler değiştirilmeden geri Taşıma Katmanı 3-102 gönderilir. Transport Layer

Örnek: ATM ABR tıkanıklık kontrolü

ˆ RM hücrelerindeki iki-byte’lık ER-kesin hız (explicit rate) alanı  

Tıkalı bir anahtar RM hücresindeki ER alanındaki değeri düşürebilir Böylece kaynaktan hedefe doğrutüm anahtarlardaki desteklenen minimum hız ayarlanabilir

ˆ Veri hücrelerindeki EFCI biti : tıkanık switch’de 1 olarak

ayarlanır 

Eğer RM hücresini takip eden veri hücresinde EFCI bit’i ayarlanmışsa, gönderici geri dönen RM hücresindeki CI bit’ini ayarlar Taşıma Katmanı 3-103 Transport Layer

Taşıma Katmanı ˆ 3.1 Taşıma katmanı

servisleri ˆ 3.2 Çoklama (multiplexing) ve çoklamanın çözülmesi (demultiplexing) ˆ 3.3 Bağlantısız taşıma: UDP ˆ 3.4 Güvenilir veri iletiminin prensipleri

ˆ 3.5 Bağlantı yönelimli

taşıma: TCP    

segment yapısı güvenilir veri iletimi akış kontrolü bağlantı yönetimi

ˆ 3.6 Tıkanıklık kontrolü

prensipleri ˆ 3.7 TCP tıkanıklık kontrolü

Taşıma Katmanı 3-104 Transport Layer

TCP Tıkanıklık Kontrolü ˆ TCP’nin congestion control mekanizması, her bir

kullanıcının ağdaki sıkışıklığı algıladığı oranda veri göndermesini azaltması ve limitlemesi prensibi ile çalışmaktadır. ˆ Gönderen, kendisi ile alıcı arasında düşük bir tıkanıklık olduğunu algılıyorsa o zaman gönderme oranını artırabilir, eğer yoğun tıkanıklık olduğunu düşünüyorsa da o zaman gönderme oranını düşürmelidir.   

TCP bağlantıya bıraktığı trafiği nasıl kısıtlayabilir? Kendisi ile alıcı arasında tıkanıklık olduğunu nasıl anlıyor? İki nokta arasındaki tıkanıklığa dayalı olarak aktarım oranını değiştirecek ne tür bir fonksiyon kullanmalı? Taşıma Katmanı 3-105 Transport Layer

TCP Tıkanıklık Kontrolü  TCP

bağlantıya bıraktığı trafiği nasıl kısıtlayabilir?

Bir göndericideki alındı mesajı alınmamış olan veri miktarı CongWin (Tıkanıklık penceresi) ve RcvWindow değerlerinin minimumunu geçmemelidir LastByteSent-LastByteAcked ≤ min {CongWin,RcvWindow}

Kabaca göndericinin gönderim hızı rate =

CongWin Bytes/sec RTT Taşıma Katmanı 3-106 Transport Layer

TCP Tıkanıklık Kontrolü ˆ Kendisi ile alıcı arasında tıkanıklık olduğunu

nasıl anlıyor?  Zaman

aşımı  3 kopya ACK ˆ Tıkanıklık yoksa doğru ve düzenli gelen

alındıları CongWin boyutunu artırmak için kullanır

Taşıma Katmanı 3-107 Transport Layer

TCP Tıkanıklık Kontrolü ˆ TCP tıkanıklık kontrolü algoritması ˆ 3 ana bileşeni vardır:  Toplamsal artış, çarpımsal düşüş (additive increase, multiplicative decrease - AIMD)  Yavaş başlangıç (slow start)  Zaman aşımı olayına tepki

Taşıma Katmanı 3-108 Transport Layer

TCP AIMD Çarpımsal düşüş: kayıp meydana geldiğinde CongWin değeri yarıya indirilir congestion window

Toplamsal artış: Kayıp olmadığı durumda CongWİn değeri her RTT için 1 MSS artırılır.

24 Kbytes

16 Kbytes

8 Kbytes

time

Long-lived TCP connection Taşıma Katmanı 3-109 Transport Layer

TCP Slow Start ˆ Bağlantı kurulduğunda, CongWin = 1 MSS olarak

belirlenir  

Örn: MSS = 500 bytes & RTT = 200 msec İlk hız = 20 kbps

ˆ Kullanılabilir bant genişliği >> MSS/RTT  bunu adım adım 1 MSS ile artırmak kayıp olurdu

ˆ Kayıp meydana gelirse CongWin değeri yarıya düşer,

sonra da önce tanımladığımız gibi çizgisel artar.

Taşıma Katmanı 3-110 Transport Layer

TCP Slow Start Host A

Host B

RTT

Başlangıç fazında hızı doğrusal-çizgisel artırmak yerine TCP göndericisi hızını, her RTT’de CongWin değerini ikiye katlayarak,üssel olarak artırır Özet: ilk hız yavaştır ancak üssel olarak artar

time

Taşıma Katmanı 3-111 Transport Layer

Zaman aşımı ˆ TCP yavaş başlamanın sona ereceği bir Threshold

(eşik) değeri belirler Î Başta 65Kbyte gibi büyük bir değer seçilir ˆ Zaman aşımı yaşandığında zaman aşımı olayının yaşandığı zamanki CongWin değerinin yarısı yeni Threshold olarak belirlenir ˆ Zaman aşımından sonra TCP göndericisi yavaş başlama fazına girer :  

CongWin=1MSS Üssel olarak yeni belirlenen Threshold değerine kadar hızını artırır

Taşıma Katmanı 3-112 Transport Layer

Tıkanıklık Kontrolü ˆ Neden TCP, zaman aşımında Congwin’i 1

MSS’ye düşürürken, 3 kopya ACK alımında yarıya indirerek tepki verir?

ˆ 3 kopya ACK alımı networkün hala belli

miktar veriyi iletebildiği anlamına gelir ˆ Zaman aşımı ise daha ciddidir Î hızlı kurtarma (fast recovery) Taşıma Katmanı 3-113 Transport Layer

TCP Reno vs TCP Thoe

Taşıma Katmanı 3-114 Transport Layer

Özet: Tıkanıklık Kontrolü ˆ CongWin Threshold değerinin altındaysa,

gönderici slow-start fazındadır, pencere üssel artar.

ˆ CongWin Threshold değerinin üstündeyse,

gönderici tıkanıklık önleme fazındadır, pencere lineer artar.

ˆ 3 kopya ACK meydana geldiğinde, Threshold

CongWin/2 olarak ayarlanır ve CongWin de Threshold’a eşitlenir, pencere lineer artar

ˆ Zaman aşımı meydana geldiğinde, Threshold

CongWin/2 olarak ayarlanır ve CongWin 1 MSS’ye eşitlenir, pencere Threshold’a kadar üssel artar Taşıma Katmanı 3-115 Transport Layer

Tıkanıklık Kontrolü Olay

Durum

TCP Gönderici Eylemi

Açıklama

Daha önce alındı bilgisi alınmayan veriler için ACK alımı

Yavaş Başlama Slow Start (SS)

CongWin = CongWin + MSS, If (CongWin > Threshold) durum “Congestion Avoidance” (Tıkanıklıktan kaçınma) olarak ayarlanır

Her RTT’de CongWin değerinin ikiye katlanması ile sonuçlanır

Daha önce alındı bilgisi alınmayan veriler için ACK alımı

Tıkanıklıkta n Kaçınma Congestion Avoidance (CA)

CongWin = CongWin+MSS * (MSS/CongWin)

CongWin değerinin her RTT için 1 MSS çarpımı ile büyümesiyle sonuçlanan toplamsal artış.

Üç kopya ACK tarafından tespit edilen kayıp olayı

SS veya CA

Threshold = CongWin/2, CongWin = Threshold, durum “Congestion Avoidance” olarak ayarlanır

Çarpımsal düşüşü uygulayan hızlı kurtarma. CongWin 1 MSS altına düşmez.

Zaman aşımı

SS veya CA

Threshold = CongWin/2, CongWin = 1 MSS, durumu “Slow Start” olarak ayarlanır

Yavaş başlamaya girer

Çift ACK

SS veya CA

Alındı bilgisi alınan segment için çift ACK sayımını artırır.

CongWin and Threshold değişmez Taşıma Katmanı 3-116 Transport Layer

TCP Fairness (Adalet) Fairness amacı: Eğer K TCP bağlantısı aynı R bant genişliğine sahip dar boğaz hattını paylaşıyorlarsa, her biri ortalama R/K iletim hızına sahip olmalıdır TCP bağlantısı 1

TCP bağlantısı 2

Darboğaz yönlendirici kapasitesi R

Taşıma Katmanı 3-117 Transport Layer

Why is TCP fair? İki yarışan bağlantı: ˆ Toplamsal artış, çıktı arttıkça 45 derecelik eğim verir ˆ Çarpımsal düşüş çıktıyı (throughput) orantılı olarak azaltır

R

Eşit bant genişliği paylaşımı

kayıp: pencere çarpımsal olarak azaltılır tıkanıklıktan kaçınma: toplamsal artış kayıp: pencere çarpımsal olarak azaltılır tıkanıklıktan kaçınma: toplamsal artış

Bağlantı 1 çıktısı

R Taşıma Katmanı 3-118 Transport Layer

Adalet Adalet ve paralel TCP bağlantıları ˆ Uygulamaların iki ana sistem arasında paralel bağlantı kurmalarını hiçbir  Hızın tıkanıklık şey engelleyemez. kontrolünden etkilenmesini istemezler ˆ Web tarayıcıları bunu ˆ Yerine UDP kullanırlar: kullanır Adalet ve UDP ˆ Multimedia uygulamaları genellikle TCP kullanmazlar



audio/video paketlerini sabit hızda gönderir, paket kaybını tolere edebilirler

Taşıma Katmanı 3-119 Transport Layer

Taşıma Katmanı: Özet ˆ Taşıma katmanı servisleri

ardındaki presnsipler:  Çoklama, çoklamanın çözülmesi (multiplexing, demultiplexing)  Güvenilir veri iletimi (reliable data transfer)  Akış kontrolü (flow control)  Tıkanıklık kontrolü (congestion control)

ˆ Tüm bunların

Internet’teki uygulamalarını gördük  UDP  TCP

Haftaya: ˆ ağ “sınır”ından çıkıp (application, transport layers) ˆ Ağ “çekirdeği”ne geçiyoruz Taşıma Katmanı 3-120 Transport Layer

Smile Life

Show life that you have a thousand reasons to smile

Get in touch

© Copyright 2024 DOKU.TIPS - All rights reserved.