Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Bab 3 Transport Layer: Computer Networking: A Top Down Approach

Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 45

Bab 3

Transport Layer

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 pengirim bahwa packet mengalami error
• pengirim mengirimkan ulang packet setelah menerima NAK
Bagaimana
 mekanisme baru padamanusia mengatasi“error
rdt2.0 (dibandingkan dengan”
rdt1.0): selama percakapan berlangsung?
• 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)
penerima
sndpkt = make_pkt(data, checksum)
udt_send(sndpkt)

rdt_rcv(rcvpkt) &&
Wait for
isNAK(rcvpkt)
Wait for call rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
from above ACK or NAK
udt_send(sndpkt)
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) &&
Wait for
isNAK(rcvpkt)
Wait for call rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
from above ACK or NAK
udt_send(sndpkt)
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) &&
Wait for
isNAK(rcvpkt)
Wait for call rdt_rcv(rcvpkt) &&
corrupt(rcvpkt)
from above ACK or NAK
udt_send(sndpkt)
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  pengirim mengirim ulang packet
jika ACK/NAK rusak
rusak?  pengirim menambahkan sequence
 pengirim tidak tahu apa number pada tiap packet
yang terjadi pada  penerima membuang (tidak
penerima! menghantarkan ke atas) packet
 pengirim tidak bisa serta yang terduplikasi
merta melakukan
pengiriman ulang: ada
kemungkinan duplikasi

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) ||
isNAK(rcvpkt) )
Wait for call 0 Wait for ACK
from above or NAK 0
udt_send(sndpkt)
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt) rdt_rcv(rcvpkt)
&& isACK(rcvpkt) && notcorrupt(rcvpkt)
&& isACK(rcvpkt)



Wait for ACK Wait for
or NAK 1 call 1 from
rdt_rcv(rcvpkt) && above
( corrupt(rcvpkt) ||
isNAK(rcvpkt) )
rdt_send(data)
sndpkt = make_pkt(1, data, checksum)
udt_send(sndpkt) 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) && rdt_rcv(rcvpkt) &&


(corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum) (corrupt(rcvpkt)
sndpkt = make_pkt(NAK, chksum)
udt_send(sndpkt) udt_send(sndpkt)

Wait for Wait for


0 from 1 from
rdt_rcv(rcvpkt) && rdt_rcv(rcvpkt) &&
below below
not corrupt(rcvpkt) && 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 ditambahkan ke  harus memeriksa apakah
dalam packet packet yang diterima
 dua jenis sequence number (0 & 1) terduplikasi
saja cukup. Mengapa? • state menunjukkan apakah
 harus memeriksa apakah sequence number
ACK/NAK yang diterima rusak “ expected packet” 0 atau 1
atau tidak  catatan: penerima tidak
 mempunyai state dua kali lebih dapat mengetahui apakah
banyak ACK/NAK yang terakhir
• state harus “ mengingat” apakah dikirimkannya telah
“ expected packet” harusnya diterima dengan baik oleh
mempunyai sequence number
0 atau 1 pengirim

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) ||
isACK(rcvpkt,1) )
Wait for call Wait for ACK
0 from above 0
udt_send(sndpkt)
sender FSM
fragment rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)

rdt_rcv(rcvpkt) &&
(corrupt(rcvpkt) ||
has_seq1(rcvpkt)) 
Wait for
0 from receiver FSM
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) )
start_timer
rdt_rcv(rcvpkt) 
 Wait for Wait for
call 0from ACK0 timeout
above udt_send(sndpkt)
start_timer
rdt_rcv(rcvpkt)
&& notcorrupt(rcvpkt)
rdt_rcv(rcvpkt)
&& isACK(rcvpkt,1)
&& notcorrupt(rcvpkt)
&& isACK(rcvpkt,0)
stop_timer
stop_timer

Wait for Wait for


timeout ACK1 call 1 from
udt_send(sndpkt) 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 L/R .008
U = 0.00027
sender = =
30.008
RTT + L / R
 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
packet yang tidak ter- yang tidak ter-ACK pada
ACK pada pipeline 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
untuk paket terlama yg setiap paket yg belum ter-
belum ter-ACK ACK
• Jika timer habis, hanya
• jika timer habis, retransmit paket yg belum ter-
retransmit semua packet ACK
yang belum 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 paket Transport
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])
udt_send(sndpkt[base+1])

rdt_rcv(rcvpkt) udt_send(sndpkt[nextseqnum-1])
&& corrupt(rcvpkt)

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)

Wait
extract(rcvpkt,data)
expectedseqnum=1 deliver_data(data)
sndpkt = sndpkt = make_pkt(expectedseqnum,ACK,chksum)
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
send pkt2 receive pkt0, send ack0
012345678
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 pkt  kirim ACK(n)
 out-of-order: buffer
timeout(n):
 in-order: kirim (also
 resend pkt n, restart timer deliver buffered, in-
ACK(n) in [sendbase,sendbase+N]: order pkts), pindah
 Tandai pkt n diterima window paket
 if n pkt terkecil tidak ter- berikutnya yang belum
ACK, naikkan window ter-ACK
base ke seq # tidak ter- pkt n pada [rcvbase-N,rcvbase-
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
send pkt2 receive pkt0, send ack0
012345678
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 window 0123012 pkt0
will accept packet
utk menghindari (b) oops!
with seq number 0
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 receiver • bi-directional data flow pada
koneksi yang sama
 reliable, in-order byte • MSS: maximum segment
steam: size
• Tidak ada “ batas pesan”  connection-oriented:
• handshaking (pertukaran
 pipelined: control msg) inisiasi sender,
• TCP congestion dan flow receiver state sebelum
control menentukan bertukar data
ukuran window  flow controlled:
• sender tidak akan memenuhi
receiver

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 byte acknowledgement number
pertama pada data segmen rwnd
checksum urg pointer
acknowledgements: window size
• seq # of dari byte N
berikutnya yang diinginkan
• ACK kumulatif
sender sequence number space
Q: bagaimana receiver
menangani segmen yg out-of- sent sent, not- usable not
order? ACKed yet ACKed but not usable
(“in-flight”) yet sent
• A: TCP spec tidak
menspesifikasikan, - incoming segment to sender
source port # dest port #
terserah implementator sequence number
acknowledgement number
A rwnd
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: gaia.cs.umass.edu to fantasia.eurecom.fr

350

RTT: gaia.cs.umass.edu to fantasia.eurecom.fr


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: http://gaia.cs.umass.edu/kurose_ross/interactive/ Transport Layer 3-45

You might also like