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