Cara Kerja rdt 1.0 , rdt 2.0 , rdt 2.1 , rdt 2.2 dan rdt 3.0
Saturday, December 1, 2012
Nich
saya udah kerja loo buat ini semalaman,, eh si bapak Sabriansyah Rizkika Akbar
malah lupa naruh tugas di elearning jadi timbang berkarat ku posting di Blogku
ajalah^^
Ini tentang Cara Kerja rdt 1.0 , rdt 2.0 , rdt 2.1 , rdt 2.2 dan rdt 3.0
Ini tentang Cara Kerja rdt 1.0 , rdt 2.0 , rdt 2.1 , rdt 2.2 dan rdt 3.0
RDT=
Realible Data Transfer trus di semua tipe memakai UDT = Unit Data Transfer yang
bertugas ngirimin, jadi dia semacam pak pos gitu,, hehehe..
====================================================================
NAMA : FIRCHA YENIS SAPUTRI
NIM
: 115060900111032
rdt 1.0
Jadi disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada perintah maka jalankan fungsi packet=make_pkt yaitu membuat paket yang akan dikirimkan lewat udt_send.
Jadi disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada perintah maka jalankan fungsi packet=make_pkt yaitu membuat paket yang akan dikirimkan lewat udt_send.
Lalu
disisi reveiver rdt_rcv menunggu panggilan dari bawah(layer data link), ketika
ada sinyal maka dia menerima paket yang selanjutnya akan dijalankan fungsi
extract yaitu mengekstrak paket data untuk selanjutnya dikirim ke layer
aplikasi(di sisi penerima).
Kelemahan
rdt 1.0 :
Tidaka
da pengecekan bit eror pada setiap paket.
rdt 2.0
Memperbaiki
kelemahan rdt 1.0 yaitu dengan adanya checksum untuk mendeteksi bitnya eror
atau tidak. rdt 2.0 mencoba meniru bagaimana cara manusia berdialog, yaitu
ketika 2 orang sedang berbicara jika yang satunya kurang mengerti akan bertanya
‘maaf kamu tadi bilang apa? ‘ yang menandakan bahwa dia tidak menangkap
pembicaraan.
Caranya
agar bisa recover data yang hilang yaitu dengan ada pemberitahuan,
pemberitahuan sendiri ada 2 yaitu :
a. Acknowledgement
:
Penerima
secara eksplisit memberitahu pengirim bahwa data diterima dengan baik.
b. Negativ
acknowledgement :
Penerima
secara eksplisit memberiitahu pengirim kalau paketnya terdapat bit-bit yang
eror atau hilang.
Maka
si pengirim akan mengirimkan lagi file tersebut.
rdt
2.0 spesifikasi FSM
sama
dengan rdt 1.0 hanya saja ditambah ACK dan NAK pada sisi pengirim.
a. Pengiriman
dengan tanpa Eror
Jadi
disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada
perintah maka jalankan fungsi packet=make_pkt(data,checksum) yaitu membuat
paket dan menyertakan checksum yang akan
dikirimkan lewat udt_send.
Lalu
disisi reveiver rdt_rcv menunggu panggilan dari bawah(layer data link), ketika
ada sinyal maka dia menerima paket dan mengeceknya rusak atau tidak, jika tidak
maka selanjutnya akan dijalankan fungsi
extract yaitu mengekstrak paket data untuk selanjutnya dikirim ke layer
aplikasi(di sisi penerima) dan ia juga mengirim ACK melalui udt_send, jadi
disisi sender menerima pemberitahuan paket sampai dan tidak rusak.
b. Pengiriman
dengan eror
Jadi
disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada
perintah maka jalankan fungsi packet=make_pkt(data,checksum) yaitu membuat
paket dan menyertakan checksum yang akan
dikirimkan lewat udt_send.
Lalu
disisi reveiver rdt_rcv menunggu panggilan dari bawah(layer data link), ketika
ada sinyal maka dia menerima paket dan mengeceknya rusak atau tidak,karena
rusak maka selanjutnya akan dijalankan
fungsi rdt_rcv(rcv_pkt)&&corrupt(rcv_pkt)
maka udt_send mengirim NAK.
Lalu
disisi sender berada di state Menunggu ACD/NAK, karena menerima NAK maka
udt_send mentransmisikan ulang yaitu pada fungsi rdt_rcv(rcvpkt)&&is
NAK(rcv_pkt) dan udt_send yang mengirimkan file itu lagi.
Lalu
disisi reveiver rdt_rcv menunggu panggilan dari bawah(layer data link), ketika
ada sinyal maka dia menerima paket dan mengeceknya rusak atau tidak, jika tidak
maka selanjutnya akan dijalankan fungsi
extract yaitu mengekstrak paket data untuk selanjutnya dikirim ke layer
aplikasi(di sisi penerima) dan ia juga mengirim ACK melalui udt_send, jadi
disisi sender menerima pemberitahuan paket sampai dan tidak rusak.
Kelemahan
rdt 2.0 :
Sangat
fatal yaitu jika ACK/NAK rusak, karena jika itu terjadi maka sender tidak tau
apa yang terjadi disisi receiver. Solusinya adalah diberi waktu (misalnya jika
setelah 3sekon tidak menerima file ACK/NAK) maka file akan ditransmisikan
ulang. Namun hal ini menyebabkan duplikasi data.
rdt 2.1
Memperbaiki
kelemahan rdt 2.0 yaitu dengan menambahkan sequence number pada setiap paket.
Carakerjanya
samadengan 2.0 hanya saja ada 2 paket dan diberikan sequence number yaitu ‘0’
dan ‘1’.
Pada
sisi pengirim :
Pada
state 1 disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada
perintah maka jalankan fungsi packet=make_pkt(0,data,checksum) yaitu membuat
paket dan memberi sequence number 0 dan menyertakan checksum yang akan dikirimkan lewat udt_send.
Lalu
berada pada state ke 2 yaitu menunggu untuk ACK atau NAK dimana ada 2 kemungkinan
yaitu jika NAK maka data rusak dan segera kembali mentransmisikan paket 0
melalui udt_send lagi.
Jika
ACK maka paket 0 telah selesai.
Lalu
berada pada state ke 3 yaitu menunggu panggilan dari atas (layer aplikasi)
lagi, ketika ada perintah maka jalankan fungsi packet=make_pkt(1,data,checksum)
yaitu membuat paket dan memberi sequence number 1 dan menyertakan checksum yang akan dikirimkan lewat udt_send.
Lalu
berada pada state ke 4 yaitu menunggu untuk ACK atau NAK dimana ada 2
kemungkinan yaitu jika NAK maka data rusak dan segera kembali mentransmisikan
paket 1 melalui udt_send lagi.
Jika
ACK maka paket 1 telah selesai.
Pada
sisi penerima :
Pada
state 1 disisi reveiver rdt_rcv menunggu panggilan 0 dari bawah(layer data
link), ketika ada sinyal maka dia menerima paket dan mengeceknya rusak atau
tidak, ada 2 kemungkinan yaitu jika NAK maka data rusak dan menjalankan fungsi
rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)) dan mengirimkan paket NAK dengan
checksum melalui udt_send agar disisi sender menerima pemberitahuan paket
rusak. Jika ACK maka data utuh dan menjalankan fungsi
rdt_rcv(rcvpkt)&&(not corrupt(rcvpkt)) || has_seq0 dan mengirimkan paket
ACK dengan checksum melalui udt_send agar disisi sender menerima pemberitahuan
paket sampai dan tidak rusak.
Jika
paket utuh dan tidak eror maka selanjutnya akan dijalankan fungsi extract
yaitu mengekstrak paket data dengan seq 0 untuk selanjutnya dikirim ke layer
aplikasi(di sisi penerima).
Setelah
itu masuk pada state ke2 yaitu menunggu panggilan 1 dari bawah(layer data
link), ketika ada sinyal maka dia menerima paket dan mengeceknya rusak atau
tidak, ada 2 kemungkinan yaitu jika NAK maka data rusak dan menjalankan fungsi
rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)) dan mengirimkan paket NAK dengan
checksum melalui udt_send agar disisi sender menerima pemberitahuan paket rusak.
Jika ACK maka data utuh dan menjalankan fungsi rdt_rcv(rcvpkt)&&(not
corrupt(rcvpkt)) || has_seq1 dan mengirimkan paket ACK dengan checksum melalui
udt_send agar disisi sender menerima pemberitahuan paket sampai dan tidak
rusak.
Jika
paket utuh dan tidak eror maka selanjutnya akan dijalankan fungsi extract
yaitu mengekstrak paket data dengan seq 1 untuk selanjutnya dikirim ke layer
aplikasi(di sisi penerima).
Kelemahan
rdt 2.1 :
Sama
dengan 2.0 yaitu sisi sender tidak tau apa yang terjadi di receiver jika
NAK/ACK tidak sampai dan sisi receiver juga tidak tau apakah NAK/ACK sampai
dengan baik disisi sender.
rdt 2.2
Memperbaiki
kelemahan rdt 2.0 yaitu dengan meningkatkan sequence number. Pada rdt 2.2 NAK
dihilangin (hanya menggunakan ACK yang diberi seq no).
Jika
disisi sender menerima ACK yang duplikat/ganda maka fungsi yang dijalankan sama
seperti NAK yaitu sender mengirimkan paket itu lagi.
Pada
sisi pengirim :
Pada
state 1 disisi sender menunggu panggilan dari atas (layer aplikasi), ketika ada
perintah maka jalankan fungsi packet=make_pkt(0,data,checksum) yaitu membuat paket
dan memberi sequence number 0 dan menyertakan checksum yang akan dikirimkan lewat udt_send.
Lalu
berada pada state ke 2 yaitu menunggu untuk ACK 0 dimana ada 2 kemungkinan
yaitu jika menerima paket 1 maka data rusak dan segera kembali mentransmisikan
paket 0 melalui udt_send lagi.
Jika
menerima paket 0 maka sudah benar dan telah selesai.
Pada
sisi penerima:
Pada
state 1 disisi reveiver rdt_rcv menunggu panggilan 0 dari bawah(layer data
link), ketika ada sinyal maka dia menerima paket dan mengeceknya rusak atau
tidak, ada 2 kemungkinan yaitu jika data rusak maka menjalankan fungsi
rdt_rcv(rcvpkt)&&(corrupt(rcvpkt)||has_seq1(rcvpkt)).
Jika
data utuh maka menjalankan fungsi rdt_rcv(rcvpkt)&&(not
corrupt(rcvpkt)) || has_seq1(rcvpkt)
lalu menjalankan fungsi extract yaitu mengekstrak paket data untuk
selanjutnya dikirim ke layer aplikasi(di sisi penerima). Receiver juga
mengirimkan paket ACK1 dengan checksum melalui udt_send agar disisi sender
menerima pemberitahuan paket sampai dan tidak rusak.
Kelemahan
rdt 2.2 :
Ketika
pengiriman paket ack ternyata proses itu butuh waktu(delay) lagi.
rdt 3.0
Jadi
sender memberikan waktu(timer) bagi ACK.
Hal
yang akan dilakukan adalah :
a. Jika
tidak ada ACK yang tiba akan retransmit paket tersebut
b. Jika
seandainya ACKnya tidak hilang tapi hanya macet(delay) akan menyebabkan paket
terduplikasi, namun ada sequence number jadi paket ke 2 yang dating dapat
dikenali identik dengan yang pertama sehingga tidak perlu menjalankan fungsi
ekstrak apalagi sampai mengirimkannya ke layer aplikasi.
Ada 4 kondisi yaitu tanpa kehilangan data/lancer, kehilangan paket,kehilangan ACK dan ACK terlambat/kehabisan waktu.
Demikian
penjelasannya :
a. Tanpa
kehilangan data
1. Sender
mengirim paket 0
2. Receiver
menerima paket 0 dan mengirim ack 0
3. Sender
menerima ack 0 dan mengirim paket 1
4. Receiver
menerima paket 1 dan mengirim ack 1
5. Sender
menerima ack 1 dan mengirim paket 0
6. Receiver
menerima paket 0 dan mengirim ack 0 dst
b. Paket
hilang
1. Sender
mengirim paket 0
2. Receiver
menerima paket 0 dan mengirim ack 0
3. Sender
menerima ack 0 dan mengirim paket 1 (paket 1 hilang)
4. Karena
receiver tidak menerima paket maka tidak mengirim ack 1setelah sekian waktu
sehingga sender mengirim ulang paket 1
5. Receiver
menerima paket 1 dan mengirim ack 1
6. Sender
menerima ack 1 dan mengirim paket 0
7. Receiver
menerima paket 0 dan mengirim ack 0 dst
1. Sender
mengirim paket 0
2. Receiver
menerima paket 0 dan mengirim ack 0
3. Sender
menerima ack 0 dan mengirim paket 1
4. Receiver
menerima paket 1 dan mengirim ack 1(ack hilang di perjalanan)
5. Karena
tidak segera menerima ack 1 setelah sekian waktu maka sender mengirim ulang
paket 1
6. Sender
menerima ack 1 dan mengirim paket 0
7. Receiver
menerima paket 0 dan mengirim ack 0 dst
d. Waktu
yang habis dahulu karena ACK yang terlambat
1. Sender
mengirim paket 0
2. Receiver
menerima paket 0 dan mengirim ack 0
3. Sender
menerima ack 0 dan mengirim paket 1
4. Receiver
menerima paket 1 dan mengirim ack 1
5. ACK
terlambat sehingga sender mengira data tidak sampai dan mentransmisikan ulang
paket 1
6. Receiver
menerima paket 1(terjadi duplikasi data namun terdeteksi) dan receiver mengirim
ack1 semntara si sisi sender menerima ack1 lalu mengirim paket 0
7. Receiver
menerima paket 0 dan mengirimkan ack 0
8. Sender
menerima ack 1 dan mengirimkan paket 0
9. Receiver
menerima paket 0(terjadi duplikasi data namun terdeteksi) dan mengirimkan ack0
PIPELINING
Karena
performansi rdt 3.0 sangat buruk, yaitu membuang banyak Gigalink dan hanya
mendapatkan beberapa kB maka diperbaiki dengan adanya pipelining, yaitu : dalam
1 penerbangan langsung mengirim banyak paket, agar mengurangi waktu yang
dibutuhkan untuk mengirimkan data. Namun seq no harus ditingkatkan agar tetap
urut per size window.
Misalnya
: dalam 1 penerbangan terdapat 3 size window maka
Usender=[(3L/R)/(RTT+(L/R))]
Ada
2 algoritma yaitu :
a. Go
Back N
Penerima
hanya mengirim paket kumulatif.
Kelemahan
: Lama nunggunya sampai semua
dating(terjadi delay lagi).
b. Selective
Penerima
mengirim paket individual yang udah benar (bit-bitnya) tapi diberi seq number
meskipun 1 window size (Jadi tempatnya tetap teratur/urut di tujuan)
Namun
ada dilemma selective yaitu :
Receiver
tidak dapat melihat perbedaan antara 2 skenario yaitu data paket yang
duplikat diterima sebagai paket baru.