0% menganggap dokumen ini bermanfaat (0 suara)
39 tayangan45 halaman

Prinsip Reliable Data Transfer RDT

Dokumen ini membahas tentang protokol transfer data yang andal, termasuk prinsip-prinsip dan mekanisme untuk menangani kesalahan dalam pengiriman data. Berbagai versi protokol, seperti rdt1.0, rdt2.0, dan rdt3.0, dijelaskan dengan fokus pada pengiriman data yang dapat diandalkan melalui saluran yang tidak dapat diandalkan. Selain itu, dokumen ini juga mencakup penggunaan pengakuan (ACK) dan pengiriman ulang untuk memastikan integritas data yang ditransfer.

Diunggah oleh

an anan
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
39 tayangan45 halaman

Prinsip Reliable Data Transfer RDT

Dokumen ini membahas tentang protokol transfer data yang andal, termasuk prinsip-prinsip dan mekanisme untuk menangani kesalahan dalam pengiriman data. Berbagai versi protokol, seperti rdt1.0, rdt2.0, dan rdt3.0, dijelaskan dengan fokus pada pengiriman data yang dapat diandalkan melalui saluran yang tidak dapat diandalkan. Selain itu, dokumen ini juga mencakup penggunaan pengakuan (ACK) dan pengiriman ulang untuk memastikan integritas data yang ditransfer.

Diunggah oleh

an anan
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Reliable Data

Transfer & Pipeline

A note on the use of these Powerpoint slides:


We’re making these slides freely available to all (faculty, students, readers).
They’re in PowerPoint form so you see the animations; and can add, modify,
and delete slides (including this one) and slide content to suit your needs.

Computer
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) that you mention their source
(after all, we’d like people to use our book!)
Networking: A Top
 If you post any slides on a www site, that you note that they are adapted
from (or perhaps identical to) our slides, and note our copyright of this Down Approach
material.
7th edition
Thanks and enjoy! JFK/KWR
Jim Kurose, Keith Ross
All material copyright 1996-2016 Pearson/Addison Wesley
J.F Kurose and K.W. Ross, All Rights Reserved April 2016
Transport Layer 2-1
Pokok Bahasan Bab 3.2
3.1 layanan-layanan 3.5 connection-oriented
transport-layer transport: TCP
3.2 multiplexing dan • struktur segment
demultiplexing • reliable data transfer
3.3 connectionless • flow control
transport: UDP • manajemen connection
3.4 prinsip-prinsip 3.6 prinsip-prinsip
reliable data transfer congestion control
3.7 TCP congestion control

Transport Layer 3-2


Prinsip Reliable Data Transfer
 penting dalam application, transport, link layer
• termasuk 10 besar topik penting di jaringan!

 karakteristik unreliable channel akan menentukan


kompleksitas protokol reliable data transfer (rdt)
Transport Layer 3-3
Prinsip Reliable Data Transfer
 penting dalam application, transport, link layer
• termasuk 10 besar topik penting di jaringan!

 karakteristik unreliable channel akan menentukan


kompleksitas protokol reliable data transfer (rdt)
Transport Layer 3-4
Prinsip Reliable Data Transfer
 penting dalam application, transport, link layer
• termasuk 10 besar topik penting di jaringan!

 karakteristik unreliable channel akan menentukan


kompleksitas protokol reliable data transfer (rdt)
Transport Layer 3-5
Reliable data transfer: Proses
rdt_send(): dipanggil dari “atas” deliver_data():
(aplikasi). Mengoperkan data untuk dipanggil oleh rdt untuk
dihantarkan ke layer atas di penerima menghantarkan data ke layer atas

sisi sisi
pengirim penerima

udt_send(): rdt_rcv(): dipanggil ketika packet


dipanggil oleh rdt, tiba di sisi penerima pada channel
untuk mengirimkan packet
kepada penerima melalui
unreliable channel Transport Layer 3-6
Reliable data transfer: Proses
pendekatan kita:
 melihat pengembangan reliable data transfer protocol
(rdt) secara bertahap pada sisi pengirim & penerima
 hanya mempertimbangkan transfer data
unidirectional
• tetapi control info tetap mengalir dua arah!
 menggunakan finite state machines (FSM) untuk
menggambarkan pengirim & penerima
event: menyebabkan perubahan state
action: diambil ketika ada perubahan state
state: saat dalam “state”
ini, state berikutnya state state
secara unik ditentukan 1 event
oleh event berikutnya 2
action

Transport Layer 3-7


rdt1.0: reliable transfer melalui reliable channel
 channel yang mendasari diasumsikan reliable
secara sempurna
• tidak ada bit error
• tidak ada packet loss
 digunakan FSM yang terpisah untuk masing-masing
pengirim & penerima:
• pengirim mengirimkan data ke channel yang mendasarinya
• penerima membaca data dari channel yang mendasarinya

Wait for rdt_send(data) Wait for rdt_rcv(packet)


call from call from extract (packet,data)
above packet = make_pkt(data) below deliver_data(data)
udt_send(packet)

sender receiver
Transport Layer 3-8
rdt2.0: channel dengan bit error
 channel yang mendasari bisa menyebabkan flipped
bits pada packet
• checksum digunakan untuk mendeteksi bit error
 pertanyaannya: bagaimana mengatasi error
• acknowledgements (ACKs): penerima secara eksplisit
memberi tahu pengirim bahwa packet diterima dengan
baik
• negative acknowledgements (NAKs): penerima secara
eksplisit memberi tahu
Bagaimana pengirim
manusia bahwa packet
mengatasi “error”
mengalami error
selama
• pengirim percakapan
mengirimkan berlangsung?
ulang packet setelah menerima
NAK
 mekanisme baru pada rdt2.0 (dibandingkan
dengan rdt1.0):
• pendeteksian error
• umpan balik dari penerima ke pengirim: control
messages (ACK, NAK) Transport Layer 3-9
rdt2.0: channel dengan bit error
 channel yang mendasari bisa menyebabkan flipped
bits pada packet
• checksum digunakan untuk mendeteksi bit error
 pertanyaannya: bagaimana mengatasi error
• acknowledgements (ACKs): penerima secara eksplisit
memberi tahu pengirim bahwa packet diterima dengan
baik
• negative acknowledgements (NAKs): penerima secara
eksplisit memberi tahu pengirim bahwa packet
mengalami error
• pengirim mengirimkan ulang packet setelah menerima
NAK
 mekanisme baru pada rdt2.0 (dibandingkan
dengan rdt1.0):
• pendeteksian error
• umpan balik dari penerima ke pengirim: control
messages (ACK, NAK) Transport Layer 3-10
rdt2.0: spesifikasi FSM
rdt_send(data)
sndpkt = make_pkt(data, checksum) penerima
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
Λ
call from
below
pengirim
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-11


rdt2.0: skenario tidak ada error
rdt_send(data)
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
Λ call from
below

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-12


rdt2.0: skenario ada error
rdt_send(data)
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) &&
isNAK(rcvpkt)
Wait for Wait for rdt_rcv(rcvpkt) &&
call from ACK or udt_send(sndpkt) corrupt(rcvpkt)
above NAK
udt_send(NAK)

rdt_rcv(rcvpkt) && isACK(rcvpkt)


Wait for
Λ call from
below

rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
udt_send(ACK)

Transport Layer 3-13


rdt2.0 mempunyai kekurangan yang fatal!
apa yang terjadi jika penanganan duplikasi:
ACK/NAK yang rusak?  pengirim mengirim ulang
 pengirim tidak tahu apa packet jika ACK/NAK
yang terjadi pada rusak
penerima!  pengirim menambahkan
 pengirim tidak bisa serta sequence number pada tiap
merta melakukan packet
pengiriman ulang: ada  penerima membuang
kemungkinan duplikasi
(tidak menghantarkan ke
atas) packet yang
terduplikasi
stop and wait
pengirim mengirimkan satu
packet, lalu menunggu
penerima merespon
Transport Layer 3-14
rdt2.1: pengirim, menangani ACK/NAK yang rusak

rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK or
isNAK(rcvpkt) )
call 0 from
NAK 0 udt_send(sndpkt)
above
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)
Λ
Λ
Wait for Wait for
ACK or call 1 from
rdt_rcv(rcvpkt) && NAK 1 above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) ) rdt_send(data)

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


udt_send(sndpkt)

Transport Layer 3-15


rdt2.1: penerima, menangani ACK/NAK yang rusak

rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)


&& has_seq0(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt)
rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
Wait for Wait for
rdt_rcv(rcvpkt) && 0 from 1 from rdt_rcv(rcvpkt) &&
not corrupt(rcvpkt) && below below not corrupt(rcvpkt) &&
has_seq1(rcvpkt) has_seq0(rcvpkt)
sndpkt = make_pkt(ACK, chksum) sndpkt = make_pkt(ACK, chksum)
udt_send(sndpkt) udt_send(sndpkt)
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)

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

Transport Layer 3-16


rdt2.1: Diskusi
pengirim: penerima:
 sequence number  harus memeriksa
ditambahkan ke dalam packet apakah packet yang
 dua jenis sequence number (0 diterima terduplikasi
& 1) saja cukup. Mengapa? • state menunjukkan
apakah sequence
 harus memeriksa apakah number “expected
ACK/NAK yang diterima packet” 0 atau 1
rusak atau tidak  catatan: penerima tidak
 mempunyai state dua kali dapat mengetahui
lebih banyak apakah ACK/NAK yang
• state harus “mengingat” apakah terakhir dikirimkannya
“expected packet” harusnya telah diterima dengan
mempunyai sequence number baik oleh pengirim
0 atau 1 Transport Layer 3-17
rdt2.2: Protokol Tanpa NAK
 mempunyai fungsionalitas sama seperti rdt2.1, tetapi
hanya menggunakan ACK saja
 alih-alih mengirimkan NAK, penerima mengirimkan
ACK untuk packet terakhir yang diterimanya dengan
baik
• penerima harus secara eksplisit menyertakan sequence
number dari packet yang di-ACK-kan
 adanya ACK yang terduplikasi di pengirim
akan menghasilkan action yang sama
seperti diterimanya NAK:
kirim ulang packet yang sekarang

Transport Layer 3-18


rdt2.2: sender, receiver fragments
rdt_send(data)
sndpkt = make_pkt(0, data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) ||
Wait for Wait for
ACK isACK(rcvpkt,1) )
call 0 from
above 0 udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt) && && isACK(rcvpkt,0)
(corrupt(rcvpkt) || Λ
has_seq1(rcvpkt)) Wait for receiver FSM
0 from
udt_send(sndpkt) below fragment
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt)
&& has_seq1(rcvpkt)
extract(rcvpkt,data)
deliver_data(data)
sndpkt = make_pkt(ACK1, chksum)
udt_send(sndpkt) Transport Layer 3-19
rdt3.0: channels dengan errors dan loss

asumsi baru: channel di pendekatan: sender menunggu


sejumlah waktu untuk datangnya
bawahnya juga dapat ACK
kehilangan paket (data,  retransmit jika tidak ada ACK
ACKs) diterima
 jika pkt (or ACK) hanya ter-delay
• checksum, seq. #, (bukan hilang):
ACKs, retransmisi • Retransmisi menyebabkan
dapat membantu … duplikasi paket, tapi seq. #
tapi tidak mencukupi dapat dipakai utk mengatasi
• receiver harus
menspesifikasikan seq # dari
paket yang di-ACK
 requires countdown timer

Transport Layer 3-20


rdt3.0 sender
rdt_send(data)
rdt_rcv(rcvpkt) &&
sndpkt = make_pkt(0, data, checksum) ( corrupt(rcvpkt) ||
udt_send(sndpkt) isACK(rcvpkt,1) )
rdt_rcv(rcvpkt) start_timer Λ
Λ Wait for Wait
for timeout
call 0from
ACK0 udt_send(sndpkt)
above
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1) && notcorrupt(rcvpkt)
stop_timer && isACK(rcvpkt,0)
stop_timer
Wait Wait for
timeout for call 1 from
udt_send(sndpkt) ACK1 above
start_timer rdt_rcv(rcvpkt)
rdt_send(data) Λ
rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || sndpkt = make_pkt(1, data, checksum)
isACK(rcvpkt,0) ) udt_send(sndpkt)
start_timer
Λ

Transport Layer 3-21


rdt3.0 in action
sender receiver sender receiver
send pkt0 pkt0 send pkt0 pkt0
rcv pkt0 rcv pkt0
ack0 send ack0 ack0 send ack0
rcv ack0 rcv ack0
send pkt1 pkt1 send pkt1 pkt1
rcv pkt1 X
ack1 send ack1 loss
rcv ack1
send pkt0 pkt0
rcv pkt0 timeout
ack0 send ack0 resend pkt1 pkt1
rcv pkt1
ack1 send ack1
rcv ack1
send pkt0 pkt0
(a) no loss rcv pkt0
ack0 send ack0

(b) packet loss


Transport Layer 3-22
rdt3.0 in action
sender receiver
sender receiver send pkt0 pkt0
send pkt0 pkt0 rcv pkt0
ack0 send ack0
rcv pkt0
send ack0 rcv ack0
ack0 send pkt1 pkt1
rcv ack0 rcv pkt1
send pkt1 pkt1
rcv pkt1 send ack1
ack1 ack1
send ack1
X
loss timeout
resend pkt1 pkt1
rcv pkt1
timeout
resend pkt1 pkt1 rcv ack1 pkt0 (detect duplicate)
rcv pkt1 send pkt0 send ack1
(detect duplicate) ack1
ack1 send ack1 rcv ack1 rcv pkt0
rcv ack1 ack0 send ack0
pkt0 send pkt0 pkt0
send pkt0 rcv pkt0
rcv pkt0 ack0 (detect duplicate)
ack0 send ack0 send ack0

(c) ACK loss (d) premature timeout/ delayed ACK

Transport Layer 3-23


Performansi rdt3.0
 rdt3.0 sudah tepat, tapi bermasalah dari sisi performa
 e.g.: 1 Gbps link, 15 ms prop. delay, 8000 bit packet:

L 8000 bits
Dtrans = R = = 8 microsecs
109 bits/sec

 U sender: utilization – fraction of time sender busy


sending
U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

 jika RTT=30 msec, 1KB pkt setiap 30 msec: 33kB/sec


thruput pada 1 Gbps link
 protokol membatasi penggunaan sumber daya
fisik!
Transport Layer 3-24
rdt3.0: operasi stop-and-wait
sender receiver
Bit pertama dari paket dikirim, t = 0
Bit terakhir dari paket dikirim, t = L /
R

Bit pertama dari paket tiba


RTT Bit terakhir dari paket tiba, kirim
ACK

ACK tiba, kirim paket berikutnya


, t = RTT + L / R

U L/R .008
sender = = = 0.00027
RTT + L / R 30.008

Transport Layer 3-25


Protokol dengan pipeline
pipelining: sender mengijinkan lebih dari satu, “in-
flight”, paket yang belum ter-ACK
• jangkauan dari seq. # harus ditambah
• buffering di sisi sender dan/atau receiver

 Dua bentuk protokol pipeline yang umum: go-Back-N,


selective repeat
Transport Layer 3-26
Pipelining: increased utilization
sender receiver
Bit pertama paket dikirim, t = 0
Bit terakhir paket dikirim, t = L /
R

Bit pertama tiba


RTT Bit terakhir riba, kirim ACK
Bit terakhir dari paket 2 tiba, kirim ACK
Bit terakhir dari paket 3 tiba, kirim ACK
ACK tiba, kirim paket
berikutnya, t = RTT + L / R
3-packet pipelining
meningkatkan utilization
sebanyak faktor 3!
U 3L / R .0024
sender = = = 0.00081
RTT + L / R 30.008

Transport Layer 3-27


Pipelined protocols: overview
Go-back-N: Selective Repeat:
 sender bisa punya N  sender bisa punya N
packet yang tidak ter- packet yang tidak ter-
ACK pada pipeline ACK pada pipeline
 receiver hanya kirim  rcvr mengirim individual
cumulative ack ack untuk tiap paket
• tidak meng-ack packet
jika terdapat gap
 Sender punya timer  sender menjaga timer
untuk paket terlama yg untuk setiap paket yg
belum ter-ACK belum ter-ACK
• jika timer habis, • Jika timer habis, hanya
retransmit semua packet retransmit paket yg belum
yang belum ter-ACK ter-ACK
Transport Layer 3-28
Go-Back-N: sender
 k-bit seq # pada pkt header
 “window” sampai N, paket berurutan tidak ter-ACK diijinkan

 ACK(n): ACKs semua paket sampai, termasuk seq # n -


“cumulative ACK”
• Mungkin akan menerima ACK terduplikasi ACKs (see
receiver)
 timer untuk paket terawal yg sedang dikirim yg belum ter-
ACK
 timeout(n): retransmit paket n dan semua paketTransport
dengan Layer 3-29
seq # lebih tinggi
GBN: sender extended FSM
rdt_send(data)
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)
base=1
nextseqnum=1
timeout
start_timer
Wait
udt_send(sndpkt[base])
rdt_rcv(rcvpkt) udt_send(sndpkt[base+1])
&& corrupt(rcvpkt) …
udt_send(sndpkt[nextseqnum-1])
rdt_rcv(rcvpkt) &&
notcorrupt(rcvpkt)
base = getacknum(rcvpkt)+1
If (base == nextseqnum)
stop_timer
else
start_timer
Transport Layer 3-30
GBN: receiver extended FSM
default
udt_send(sndpkt) rdt_rcv(rcvpkt)
&& notcurrupt(rcvpkt)
Λ && hasseqnum(rcvpkt,expectedseqnum)
expectedseqnum=1 Wait extract(rcvpkt,data)
sndpkt = deliver_data(data)
make_pkt(expectedseqnum,ACK,chksum) sndpkt = make_pkt(expectedseqnum,ACK,chksum)
udt_send(sndpkt)
expectedseqnum++

ACK-only: selalu kirim ACK untuk paket yang benar


dengan seq # tertinggi
• Mungkin mengakibatkan duplikasi ACKs
• Hanya perlu mengingat expectedseqnum
 out-of-order pkt:
• batalkan (jangan buffer): no receiver buffering!
• re-ACK pkt dengan seq # tertinggi
Transport Layer 3-31
GBN in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
send pkt3 Xloss receive pkt1, send ack1
012345678
(wait)
receive pkt3, discard,
012345678 rcv ack0, send pkt4 (re)send ack1
012345678 rcv ack1, send pkt5 receive pkt4, discard,
(re)send ack1
ignore duplicate ACK receive pkt5, discard,
(re)send ack1
pkt 2 timeout
012345678 send pkt2
012345678 send pkt3
012345678 send pkt4 rcv pkt2, deliver, send ack2
012345678 send pkt5 rcv pkt3, deliver, send ack3
rcv pkt4, deliver, send ack4
rcv pkt5, deliver, send ack5

Transport Layer 3-32


Selective repeat
 receiver secara individual memberitahu semua
paket yg diterima dengan benar
• buffers pkts, sesuai kebutuhan, untuk pengiriman ke
layer atas
 sender hanya mengirim paket yang ACK-nya
tidak diterima
• sender timer untuk setiap paket yang tidak ter-ACK
 sender window
• N seq # berurutan
• Batasi seq # dari paket terkitim, tapi belum ter-ACK

Transport Layer 3-33


Selective repeat: sender, receiver windows

Transport Layer 3-34


Selective repeat
sender receiver
data dari atas: pkt n pada [rcvbase,
rcvbase+N-1]
 if seq # berikutnya
tersedia di window, kirim  kirim ACK(n)
pkt  out-of-order: buffer
timeout(n):  in-order: kirim (also
deliver buffered, in-
 resend pkt n, restart timer order pkts), pindah
ACK(n) in [sendbase,sendbase+N]: window paket
 Tandai pkt n diterima berikutnya yang belum
 if n pkt terkecil tidak ter- ter-ACK
ACK, naikkan window pkt n pada [rcvbase-N,rcvbase-
base ke seq # tidak ter- 1]
ACK berikutnya  ACK(n)
Selain itu:
 ignore Transport Layer 3-35
Selective repeat in action
sender window (N=4) sender receiver
012345678 send pkt0
012345678 send pkt1
012345678 send pkt2 receive pkt0, send ack0
send pkt3 Xloss receive pkt1, send ack1
012345678
(wait)
receive pkt3, buffer,
012345678 rcv ack0, send pkt4 send ack3
012345678 rcv ack1, send pkt5 receive pkt4, buffer,
send ack4
record ack3 arrived receive pkt5, buffer,
send ack5
pkt 2 timeout
012345678 send pkt2
012345678 record ack4 arrived
012345678 rcv pkt2; deliver pkt2,
record ack5 arrived
012345678 pkt3, pkt4, pkt5; send ack2

Q: what happens when ack2 arrives?

Transport Layer 3-36


sender window receiver window
Selective repeat: (after receipt) (after receipt)

dilema 0123012 pkt0


pkt1
0123012 0123012
0123012 pkt2 0123012
Contoh: 0123012
0123012 pkt3
 seq #’s: 0, 1, 2, 3 0123012
X
 window size=3 pkt0 will accept packet
with seq number 0
(a) no problem
 receiver melihat
tidak ada yg beda receiver can’t see sender side.
dari 2 skenario tsb! receiver behavior identical in both cases!
something’s (very) wrong!
 data terduplikat
diterima sebagai 0123012 pkt0
data baru di (b) 0123012 pkt1 0123012
0123012 pkt2 0123012
X 0123012
Q: apa hubungan X
antara ukuran seq timeout
retransmit pkt0 X
# dan ukuran 0123012 pkt0
will accept packet
window utk (b) oops!
with seq number 0
menghindari
problem di (b)? Transport Layer 3-37
Chapter 3 outline
3.1 transport-layer 3.5 connection-oriented
services transport: TCP
3.2 multiplexing and • segment structure
demultiplexing • reliable data transfer
3.3 connectionless • flow control
transport: UDP • connection management
3.4 principles of reliable 3.6 principles of congestion
data transfer control
3.7 TCP congestion control

Transport Layer 3-38


TCP: Overview RFCs: 793,1122,1323, 2018, 2581

 point-to-point:  full duplex data:


• satu sender, satu • bi-directional data flow pada
koneksi yang sama
receiver
• MSS: maximum segment size
 reliable, in-order byte  connection-oriented:
steam: • handshaking (pertukaran
• Tidak ada “batas pesan” control msg) inisiasi sender,
receiver state sebelum
 pipelined: bertukar data
• TCP congestion dan  flow controlled:
flow control • sender tidak akan memenuhi
menentukan ukuran receiver
window

Transport Layer 3-39


TCP segment structure
32 bits
URG: urgent data Dihitung dari
(biasanya tdk dipakai) source port # dest port #
ukuran byte data
sequence number (bukan segmen!)
ACK: ACK #
valid acknowledgement number
head not
PSH: push data now len used
UAP R S F receive window
(generally not used) # bytes
checksum Urg data pointer
Receiver
RST, SYN, FIN: ingin terima
options (variable length)
Pembentukan koneksi
(setup, teardown
commands)
application
Internet data
checksum (variable length)
(seperti di UDP)

Transport Layer 3-40


TCP seq. numbers, ACKs
outgoing segment from sender
sequence numbers: source port # dest port #
sequence number
• Angka byte stream dari acknowledgement number

byte pertama pada data checksum


rwnd
urg pointer
segmen window size
acknowledgements: N

• seq # of dari byte


berikutnya yang sender sequence number space
diinginkan
• ACK kumulatif sent
ACKed
sent, not-
yet ACKed
usable not
but not usable
Q: bagaimana receiver (“in-
flight”)
yet sent

menangani segmen yg out- incoming segment to sender


of-order? source port # dest port #
sequence number
• A: TCP spec tidak acknowledgement number
menspesifikasikan, - A rwnd

terserah implementator checksum urg pointer

Transport Layer 3-41


TCP seq. numbers, ACKs
Host A Host B

User
types
‘C’ Seq=42, ACK=79, data = ‘C’
host ACKs
receipt of
‘C’, echoes
Seq=79, ACK=43, data = ‘C’ back ‘C’
host ACKs
receipt
of echoed
‘C’ Seq=43, ACK=80

simple telnet scenario

Transport Layer 3-42


TCP round trip time, timeout
Q: bagaimana TCP Q: Bagaimana
mengeset nilai mengestimasi RTT?
timeout?  SampleRTT: ukur waktu
 Lebih panjang dari RTT dari transmisi segment
• tapi RTT bervariasi sampai ACK diterima
 Terlalu pendek: timeout • abaikan retransmisi
prematur, terjadi  SampleRTT bervariasi,
retransmisi yg tdk perlu ingin perkiraan RTT “lebih
 Terlalu panjang: reaksi halus”
terhadap segment loss • Cari rata-rata dari
terlalu lama beberapa pengukuran
baru, bukan hanya
SampleRTT saat ini

Transport Layer 3-43


TCP round trip time, timeout
EstimatedRTT = (1- α)*EstimatedRTT + α*SampleRTT
 exponential weighted moving average
 dipengaruhi sampel sebelumnya
 typical value: α = 0.125 RTT: [Link] to [Link]

350

RTT: [Link] to [Link]


RTT (milliseconds)

300

250
RTT (milliseconds)

200

sampleRTT
150

EstimatedRTT

100
1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106
time (seconnds)
time (seconds) Transport Layer 3-44
SampleRTT Estimated RTT
TCP round trip time, timeout
 timeout interval: EstimatedRTT ditambah “batas
aman”
• Sangat bervariasi pada EstimatedRTT -> perbesar batas aman
 perkirakan deviasi SampleRTT dari EstimatedRTT:

DevRTT = (1-β)*DevRTT +
β*|SampleRTT-EstimatedRTT|
(typically, β = 0.25)
TimeoutInterval = EstimatedRTT + 4*DevRTT

Perkiraan RTT “batas aman”

* Check out the online interactive exercises for more


examples: [Link] Transport Layer 3-45

Anda mungkin juga menyukai