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