Dua protokol transport yang digunakan untuk mentransfer file meliputi: TCP dan UDP. UDP adalah protokol yang tidak dapat diandalkan sedangkan TCP menyediakan keandalan, kontrol aliran, dan kontrol kemacetan, namun UDP memiliki fase pembuatan koneksi yang eksplisit, yang mungkin tidak diinginkan oleh beberapa aplikasi. Tujuan dari proyek ini adalah untuk merancang dan mengimplementasikan aplikasi transfer file yang memiliki semua fitur bagus TCP tanpa tahap pembuatan koneksi.
Server dan Klien UDP menggunakan format header berikut:
Server menerima permintaan file dari klien. Ini mengekstrak nama file dari permintaan dan mendapatkan konten file dalam buffer. Ini kemudian mengelompokkan file menjadi potongan-potongan berukuran 1450 byte seperti yang didukung oleh header.
Ada dua ukuran jendela yang perlu dipertimbangkan:
Server mulai mengirimkan segmen file hingga ukuran jendela kemacetan minimum dan ukuran jendela yang diiklankan. Setelah mengirimkan semua segmen dalam sebuah jendela, ia menunggu untuk menerima pengakuan. Ketika pengakuan diterima untuk nomor urut yang kurang dari nomor urut berikutnya yang akan dikirim, maka itu berarti beberapa segmen sebelumnya tidak diterima dengan benar dan server menerima 3 duplikat pengakuan dari klien. Ini kemudian menetapkan nomor urut berikutnya berdasarkan pengakuan yang diterima. Setelah menerima pengakuan kumulatif, ia melanjutkan pengiriman segmen di jendela berikutnya. Ketika pengakuan duplikat diterima, server akan mulai mengirimkan segmen dari paket yang tidak diterima dengan benar.
Menerapkan algoritma Jacobson/Karel untuk memperkirakan waktu pulang pergi (RTT) untuk paket yang diterima oleh klien dan pengakuan diterima oleh server. Jika server tidak mendapatkan pengakuan dalam RTT, server akan mengirimkan ulang paket tersebut lagi.
Kode semu:
Estimated_RTT = (1-α) Estimated RTT + (α) Sample_RTT
In the original TCP Specification, α=.0125
Jacobson/Karels included a variation component to the calculation for the Estimated_RTT
Estimated_RTT = Estimated_RTT + δ (Sample_RTT-Estimated_RTT)
Deviation = Deviation + δ (|Sample_RTT- Estimated_RTT|- Deviation)
Timeout = μ * Estimated_RTT + φ * Deviation
Typically φ=4, μ = 1, δ is between 0 and 1
Server dimulai dengan mengirimkan 1 segmen. Kemudian, berikut 2 fase pengendalian kemacetan:
Mulai Lambat: Ukuran segmen ditingkatkan secara eksponensial hingga diakui dengan benar oleh penerima dalam batas waktu dan ukuran jendela kemacetan kurang dari ssthresh yang diatur ke 64000 byte.
Penghindaran Kemacetan: Ketika ukuran jendela kemacetan menjadi lebih besar atau sama dengan ssthresh, ukuran jendela kemacetan meningkat secara linier sebesar 1 ukuran segmen.
Timeout: Dihitung menggunakan algoritma Jacobson/Karel yang diberikan di atas. Ketika batas waktu terjadi, ssthresh diatur ke setengah nilai jendela kemacetan dan jendela kemacetan diatur ulang ke ukuran 1 segmen.
vagrant up
Ini akan mem-boot mesin server dan klien
vagrant ssh reliableUDPServer
vagrant ssh reliableUDPClient
make
./Server port advertised_window
Server menerima argumen baris perintah berikut:
port: nomor port yang akan digunakan untuk komunikasi
diiklankan_jendela: jumlah byte yang diizinkan dikirim oleh server sebelum menunggu pengakuan
./Client server_host_name port file_name advertised_window
Klien menerima argumen baris perintah berikut:
port dan iklan_jendela: sama seperti yang ada di server
server_host_name: nama host server
file_name: nama file yang diminta oleh klien
Setelah kode berhasil dijalankan, Anda akan menemukan file yang diminta klien di folder ReliableUDPClient.
Pendekatan Jaringan Komputer-Top-Down