Cara Kerja rdt 1.0 , rdt 2.0 , rdt 2.1 , rdt 2.2 dan rdt 3.0


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
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.
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
Dilengkapi dengan errors dan loss.
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
c.       ACK hilang
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.

2 Komentar untuk "Cara Kerja rdt 1.0 , rdt 2.0 , rdt 2.1 , rdt 2.2 dan rdt 3.0"

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel