Tuesday, November 29, 2022

Modul 9 : Pertemuan 11 (Socket Programming - Multirecipient)

 Multirecipient


1.1 Tujuan

  1. Mahasiswa memahami konsep pengiriman data untuk Multi Recipient
  2. Mahasiswa mampu membuat program pengiriman data untuk Multiple Recipient

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Setelah sebelumnya kita mempelajari beberapa metode untuk penanganan request dari banyak client ke server, maka muncul pertanyaan Bagaimana Jika kita akan mengirimkan data ke banyak penerima? Ada beberapa solusi yang dapat diterapkan diantaranya adalah menggunakan fasilitas yang disediakan oleh jaringan yaitu broadcast dan multicast. Dalam penerapannya metode broadcast dan multicast sendiri memiliki keterbatasan, yaitu:

  1. Hanya UDP socket yang dapat melakukan broadcast dan multicast
  2. Broadcast hanya mencakup lingkup lokal, biasanya jaringan area local (LAN).
  3. Multicast di seluruh Internet saat ini tidak didukung oleh sebagian besar penyedia layanan Internet.

Broadcast merupakan pengiriman data dengan tujuan semua alamat yang berada dalam 1 jaringan. Aplikasi akan mengirimkan data ke alamat broadcast, apabila data dikirim ke alamat ini maka semua host yang berada dalam jaringan tersebut akan menerima data. Sebelum mengirimkan data ke alamat broadcast, maka kita harus meminta “izin” kepada sistem untuk melakukan broadcast dengan men-set opsi SO_BROADCAST harus pada sisi pengirim. Berbeda dengan broadcast, multicast merupakan pengiriman data dengan tujuan alamat group dalam 1 jaringan. Pada prakteknya dalam pemrograman tidak perlu set permission untuk multicast. Multicast sender dapat men set nilai TTL untuk mengirimkan datagram. Langkah-langkah yang harus dilakukan dalam pemrograman untuk melakukan broadcast maupun multicast pada dasarnya sama dengan pemrograman menggunakan UDP, namun pada broadcast perlu penambahan socket option SO_BROADCAST, sehingga sistem mengizinkan untuk melakukan broadcast.

1.3 Percobaan

Program 1: program multicast

multicast_server.py

multicast_client.py













Hasil Program 

Analisa:
Pada program diatas merupakan program multicast yang mana server dapat menerima 2 client tetapi dengan berbeda PC dengan membuat multicast_group dan server address yang sama. Alamat untuk multicast, yang disebut grup multicast, adalah subset dari rentang alamat IPv4 reguler (224.0.0.0 hingga 230.255.255.255) yang dicadangkan untuk lalu lintas multicast. Disini grup multicast nya adalah 224.3.2.79 . Alamat ini diperlakukan secara khusus oleh router dan switch jaringan, sehingga pesan yang dikirim ke grup dapat didistribusikan melalui Internet ke semua penerima yang telah bergabung dengan grup. Lalu, Mengirim Pesan Multicast Klien gema yang dimodifikasi ini akan mengirim pesan ke grup multicast, lalu melaporkan semua tanggapan yang diterimanya. 

Program2
broadcast_server.py








    broadcast_client.py








Hasil program 

Analisa:

Pada program diatas merupakan program broadcast yang merupakan transmisi jaringan one-to-all. ). Pada server menggunakan domain AF_INET  yang Menyediakan datagram, yang merupakan pesan tanpa sambungan dengan panjang maksimum tetap yang keandalannya tidak dijamin. Datagram dapat rusak, diterima rusak, hilang, atau dikirim berkali-kali. Opsi ini mengambil nilai int. Ini adalah opsi Boolean. Opsi SO_REUSEPORT yang disetel ke soket menentukan bahwa aturan yang digunakan dalam memvalidasi alamat yang disediakan oleh subrutin bind harus memungkinkan penggunaan kembali kombinasi port/alamat lokal. Setiap pengikatan kombinasi port/alamat harus menentukan opsi soket SO_REUSEPORT. 










Wednesday, November 23, 2022

Tugas 5 Socket Programming

Multirecipient

SMTP (Simple Mail Transfer Protocol) adalah protokol TCP/IP standar internet untuk pengiriman surat elektronik dari pengirim ke satu atau lebih penerima. Untuk terhubung ke server email SMTP, kami memerlukan detail HOSTNAME , USERNAME , PASSWORD dan PORT NUMBER . Python menyediakan smtplib modul built-in untuk mengirim email menggunakan SMTP Server. Tidak diperlukan instalasi tambahan. Jadi pertama-tama, kita perlu mengimpor ini di bagian atas skrip dan menentukan objek sesi klien SMTP yang dapat digunakan untuk mengirim email.


Unicast 
Unicast adalah metode pengiriman pada IPv4 yang konsepnya adalah “Point to Point” atau “One to One”, jadi paket yang dikirim hanya akan diterima oleh satu host. Analoginya adalah seperti topologi diatas ada PC0, PC1, PC2, PC3, PC4 yang berada dalam 1 segment jaringan. Lalu ada 2 PC yang sedang berkomunikasi contohnya PC0 dengan PC1, PC selain PC0 dan PC1 tidak akan mengetahui ataupun ikut berkomunikasi.
Unicast biasa digunakan pada protokol : HTTP, FTP, SMTP, Telnet, DNS ,dll.




Kelebihan Unicast
  1. Server merespon permintaan dari klien pada waktu yang tepat.
  2. Server mengirimkan data yang berbeda untuk permintaan yang berbeda dari setiap pelanggan, yang mudah untuk menerapkan layanan yang dipersonalisasi.

Kekurangan unicast
  1. Server mengirimkan aliran data ke setiap klien. Lalu lintas server = jumlah klien × lalu lintas klien.
  2. Pada aplikasi media streaming yang jumlah pelanggannya banyak dan trafik tiap client banyak, maka server mengalami overload.
  3. Bandwidth jaringan yang ada adalah struktur piramida. Bandwidth backbone antar kota hanya 5% dari total bandwidth semua pengguna. Jika hanya 5% pelanggan di jaringan yang menggunakan protokol unicast, jaringan backbone akan kelebihan beban.

Broadcast

Broadcast adalah salah satu metode pengiriman di IPv4 yang memiliki konsep “One to Everyone” merupakan alamat IPv4 yang didesain agar diproses oleh semua host dalam jaringan yang sama. jika ada satu host yang mengirim paket secara broadcast maka setiap host yang aktif di segment jaringan yang sama akan memprosesnya. Analoginya adalah ketika PC0 mengirim paket secara broadcast maka seluruh PC lain akan menerima dan memprosesnya

Dalam jaringan LAN, komputer asal sebagai host mengirimkan data informasi kepada sembarang komputer lain yang terhubung di dalam jaringan. Transmisi jaringan broadcast memiliki kekurangan yaitu sistem asal yang menjadi host tidak akan mengetahui bagaimana respon dari sistem tujuan apakah data diterima dengan baik atau data terjadi corrupt. Contoh penggunaan broadcast adalah transmisi saluran data pada televisi.

Multicast

Multicast adalah metode pengiriman pada IPv4 yang memiliki konsep “One to Many“. Multicast menggunakan IP 224.0.0.0 – 239.255.255.255. Dapat kita analogikan ada PC0, PC1, PC2, PC3, dan PC4. Lalu PC0, PC1, dan PC2 sedang berkomunikasi tanpa diikuti oleh PC3 dan PC4. Contoh dalam kehidpan sehari-harinya adalah ketika seorang pelatih memberikan instruksi kepada pemainnya tanpa diketahui oleh tim lawan. Multicast berjalan pada protokol seperti Live Streaming, Radio Online, dll. Yang dimaksud Multicast adalah komunikasi yang tidak dapat di pause. Multicast biasa digunakan untuk komunikasi routing protocol untuk mencari jalur tercepat.

Modul 8 : Pertemuan 10 (Socket Programming - Multithreading)

 Multithreading


1.1 Tujuan

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Forking sebagai salah satu metode penanganan multiple request dari client yang sudah dipelajari sebelumnya memiliki kelemahan, yaitu:

a. Performansi

b. Portability

c. Kompleksitas

Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.

1.3 Percobaan

Percobaan 1

echo_server_multithread.py


echo_client.py

Hasil Program


Analisa: 
Ketika kita coba jalankan programnya, maka pada server akan server langsung mendengarkan dan menghubungkan pada host dan port pada client. Disini server dapat menerima beberapa client yang mana setelah kita run pada client 1 maka ia akan menampilkan teks bahwa client 1 telah terhubung pada host pada 127.0.0.1 dan port 12345, maka pada server langsung tersambung dengan client 1 dengan menampilkan connection from 127.0.0.1, 36944. Begitupun sama dengan Client 2. kita perlu mengimpor modul `threading`, modul threading tingkat tinggi dengan berbagai fitur berguna. Kami menggunakan metode konstruktif `Thread` untuk membuat instance thread. Thread, dalam modul ini, merangkum utas dengan baik, menyediakan antarmuka yang bersih untuk bekerja dengannya. Kemudian kita tambahkan import socket. Lalu, kita memanggil host dengan 'localhost' dan port dengan 12345. 

Percobaan 2
chat_server.py

chat_client.py



Hasil Program


Analisa : 
Nama host server dan port terikat bersama dan terhubung ke soket. Menerima Paket/Pesan dari Server, Untuk menerima pesan, socket_server memanggil fungsi recv() untuk menerima 1024 data. Ini disimpan dalam objek pesan dan diterjemahkan menggunakan fungsi decode(). Pesan tersebut kemudian dicetak dengan nama host server dan pesan diterima.Klien dapat memasukkan pesan apa pun sebagai input dan menyandikannya dan mengirimkannya ke server menggunakan soket.














Tugas 4 Socket Programming

Multiplexing

Multiplexing adalah cara menangani beberapa klien dalam satu proses server. Aplikasi ini memungkinkan klien untuk terhubung ke server dan menambahkannya ke watch list. Watch list hanyalah sebuah array deskriptor soket. Kemudian sistem operasi memberitahu aplikasi klien (jika ada) yang perlu dilayani atau jika klien baru telah membuat koneksi. Untuk menangani permintaan dari client, server menggunakan fungsi select(). Fungsi select() merupakan sebuah fungsi sistem yang memungkinkan programmer untuk menentukan socket descriptor yang akan digunakan. 

Preforking

Preforking : Membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai,Preforking membatasi semua cost yang terkait dengan pembuatan child process ke bagian inisialisasi aplikasi  ketika sebuah client terkoneksi, maka proses yang menanganinya telah terbentuk. Preforking menciptakan salinan sebuah proses membutuhkan biaya kinerja yang cukup besar, tambah lagi jika dilakukan pada aplikasi yang besar. Biaya kinerja akan semakin mahal seiring banyaknya jumlah client yang terhubung dengan server. Untuk mengurangi biaya kinerja yang dipergunakan untuk menggandakan proses induk digunakan strategi preforking, yaitu dengan membuat proses anak dengan jumlah tertentu pada saat aplikasi dimulai, kemudian proses anak akan melayani client yang terhubung. Fungsi accept() tidak dipanggil pada parent process, tapi pada setiap child process. Listening socket descriptor tidak di close di child process.

Contoh program menggunakan python untuk Multiplexing dan preforking

Server

Client

Hasil program 










Monday, November 21, 2022

Tugas 3 Socket Progamming

Arsitektur client server

Arsitektur client – server melibatkan minimal 1 server dan 1 client untuk saling berkomunikasi. Server berfungsi sebagai pihak yang merespons apa yang dikirim client, sedangkan client merupakan sisi yang meminta data sesuai dengan permintaan user. mendefinisikan client-server sebagai arsitektur yang paling banyak digunakan saat ini. Dimana client dapat melakukan proses sendiri, ketika client meminta data, server akan mengirimkan data sesuai yang diminta, kemudian proses akan dilakukan di client.

Client adalah sembarang sistem atau proses yang melakukan suatu permintaan data atau layanan ke server.

Server adalah sistem atau proses yang menyediakan data atau layanan yang diminta oleh client. Secara fisik, sebuah server dapat berupa komputer mainframe, mini-komputer, workstation, ataupun PC atau peranti lain seperti printer, server tidak harus berupa sistem fisik, tetapi juga suatu proses.

Dalam model Klien/Server, sebuah aplikasi dibagi menjadi dua bagian yang terpisah, tapi masih merupakan sebuah kesatuan yakni komponen Klien dan komponen Server. Komponen klien juga sering disebut sebagai front-end, sementara komponen server disebut sebagai back-end. Komponen klien dari aplikasi tersebut dijalankan dalam sebuah workstation dan menerima masukan data dari pengguna. Komponen klien tersebut akan menyiapkan data yang dimasukkan oleh pengguna dengan menggunakan teknologi pemrosesan tertentu dan mengirimkannya kepada komponen server yang dijalankan di atas mesin server, umumnya dalam bentuk request terhadap beberapa layanan yang dimiliki oleh server. Komponen server akan menerima request dari klien dan langsung memprosesnya lalu mengembalikan hasil pemrosesan tersebut kepada klien. Klien pun menerima informasi hasil pemrosesan data yang dilakukan server dan menampilkannya kepada pengguna, dengan menggunakan aplikasi yang berinteraksi dengan pengguna.

Forking

forking merupakan cara tradisional untuk menghandle multiple clients Ketika sebuah aplikasi memanggil fork (), maka dibuat copyan dari calling program, sampai ke program counter(PC), dan child process baru dimulai dengan copyan tersebut. Hasil kembalian dari fork() : sekali dalam program pemanggil dan waktu berikutnya dalam child process. Nilai kembalian dalam program pemanggil adalah PID dari child process baru, sementara dalam child process itu adalah 0.

Proses bercabang adalah cara tradisional untuk menyusun tugas paralel, dan merupakan bagian mendasar dari rangkaian alat Unix. Forking didasarkan pada gagasan menyalin program: ketika sebuah program memanggil rutin fork, sistem operasi membuat salinan baru dari program itu di memori, dan mulai menjalankan salinan itu secara paralel dengan yang asli. Beberapa sistem tidak benar-benar menyalin program aslinya (ini adalah operasi yang mahal), tetapi salinan baru berfungsi seolah-olah itu adalah salinan literal.

Setelah operasi fork, salinan asli dari program disebut proses induk , dan salinan yang dibuat oleh os.forkdisebut proses anak . Secara umum, orang tua dapat membuat sejumlah anak, dan anak dapat membuat proses anak mereka sendiri -- semua proses bercabang berjalan secara mandiri dan paralel di bawah kendali sistem operasi. Ini mungkin lebih sederhana dalam praktiknya daripada teori; skrip Python pada Contoh 3-1 mem-fork proses anak baru hingga Anda mengetikkan "q" di konsol.

Multithreading

Multithreading adalah kemampuan yg memungkinkan kumpulan instruksi atau proses dpt dijalankan secara bersamaan dlm sebuah program. multithreading juga cara untuk mencapai multitasking. Dalam multithreading, konsep utas digunakan. Mari kita pahami dulu konsep thread dalam arsitektur komputer. Salah satu solusi untuk permasalahan diatas adalah penggunaan thread. Thread berjalan secara paralel dan menggunakan shared memory global. Karena semua thread berjalan dalam proses dan ruang memori yang sama, secara otomatis thread berbagi soket yang lewat di antara mereka. Hal ini serupa dengan cara child process mewarisi deskriptor soket. Namun, tidak seperti proses, thread biasanya lebih murah untuk memulai, dan bekerja pada mesin Unix dan Windows di bawah standar Python.


Dalam komputasi, proses adalah turunan dari program komputer yang sedang dieksekusi. Setiap proses memiliki 3 komponen dasar:
  1. Program yang dapat dieksekusi.
  2. Data terkait yang dibutuhkan oleh program (variabel, ruang kerja, buffer, dll.)
  3. Konteks eksekusi program (Status proses)

Multi-threading: Beberapa utas dapat ada dalam satu proses di mana:

  1. Setiap utas berisi set register dan variabel lokalnya sendiri (disimpan dalam tumpukan) 
  2. Semua utas proses berbagi variabel global (disimpan di tumpukan) dan kode program 

Pertimbangkan diagram di bawah ini untuk memahami bagaimana banyak utas ada di memori



Contoh program menggunakan python untuk forking dan multithreading

Server

Client

Hasil program 




Sunday, November 6, 2022

Praktikum Multiplexing

 Multiplexing


1.1 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Multiplexing adalah cara menangani beberapa klien dalam satu proses server. Aplikasi ini memungkinkan klien untuk terhubung ke server dan menambahkannya ke watch list. Watch list hanyalah sebuah array deskriptor soket. Kemudian sistem operasi memberitahu aplikasi klien (jika ada) yang perlu dilayani atau jika klien baru telah membuat koneksi. Untuk menangani permintaan dari client, server menggunakan fungsi select(). Fungsi select() merupakan sebuah fungsi sistem yang memungkinkan programmer untuk menentukan socket descriptor yang akan digunakan.

1.2 Percobaan

Program 1

multiplexing_server.py

multiplexing_client.py

Hasil Program 


Program 2

tcp_echo_server.py

tcp_echo_client.py

Hasil Program

Program 3

tcp_multiplexing_server.py


tcp_multiplexing_client.py


Hasil Program



Latihan

1. Buat kembali program diatas dengan menggunakan program udp

2. Buatlah program calculator sederhana dengan protokol tcp dimana client mengirimkan soal (cth: 2+2), dan server membalas dengan hasil perhitungan (cth: 4), program client kemudian menampilkan hasil dari server dan siap menerima inputan soal baru. Program client akan berhenti jika menerima inputan cancel. Gunakan multiplexing pada program server agar dapat menangani lebih dari 1 client secara bersamaan.

3. Buatlah kembali program sesuai dengan spesifikasi soal 2 dengan protokol udp.


Saturday, November 5, 2022

Modul 6 : Pertemuan 7 (Socket Programming dengan Multitasking/Forking)

 Arsitektur Client-Server Forking

1.2 Dasar Teori

Konsep client-server merupakan dasar dari setiap transaksi yang terjadi pada setiap aplikasi jaringan. Socket merupakan antarmuka antara application process dan transport layer. Merupakan cara tradisional untuk menangani multiple clients. Ketika sebuah aplikasi memanggil fork (), maka dibuat copyan dari calling program, sampai ke program counter(PC), dan child process baru dimulai dengan copyan tsb. 

Hasil kembalian dari fork() : sekali dalam program pemanggil dan waktu berikutnya dalam child process. Nilai kembalian dalam program pemanggil adalah PID dari child process baru, sementara dalam child process itu adalah 0.

1.3 Percobaan

Program 1

Server1.py

Client1.py


Hasil Program 

Analisa:
Pada program diatas dia hanya melayani 1 client,  fungsi handle_client nantinya akan mengirimkan pesan “Selamat, anda sudah terhubung” dan fungsi server() dengan inisialisasi variabel i = 1 untuk counter nomor client. Pada percobaan ini juga dibuat looping while untuk counter nomor client jika i <= 10 maka looping selesai. fungsi recv() dan pesan akan di decode lalu menampilkan pesan yang sudah di decode.

Program 2

forking-server.py

forking-client.py


Hasil Program

Analisa:
Pada program diatas dapat menerima semua client. variabel message akan di encode pada variabel encoded_message dengan encoder utf-8. Dan jika variabel message bernilai tidak sama dengan “q” maka client akan send() variabel encoded_message

Program 3

tcp_server_forking.py

tcp_client.py

Hasil Program

Analisa: 

Pada program diatas setiap client yang terkonek memberikan id yang berbeda beda. While True maka akan menjalankan fungsi client_sock.recv() pada variabel data dan jika variabel data kosong atau nilainya sama dengan “END” maka program break atau selesai.

1.4 Latihan

1. Modifikasi program-program tersebut diatas, sehingga dapat mencatat/ menampilkan waktu yang dibutuhkan untuk mengirimkan data dari client

lat1_tcp_server_forking.py

lat1_tcp_client_forking.py

Hasil Program

2. Buatlah program calculator sederhana dengan protokol tcp dimana client mengirimkan soal (cth: 2+2), dan server membalas dengan hasil perhitungan (cth: 4), program client kemudian menampilkan hasil dari server dan siap menerima inputan soal baru. Program client akan berhenti jika menerima inputan cancel. Gunakan forking pada program server agar dapat menangani lebih dari 1 client secara bersamaan.

latihan2_server.py

latihan2_client.py

Hasil Program

3. Buatlah program client dan server menggunakan forking untuk permasalahan berikut: Sebuah perusahaan menggaji pegawai sales berdasarkan komisi. Seorang pegawai sales akan menerima $200/minggu ditambah 9% dari total penjualannya selama seminggu. Contoh: Andi berhasil melakukan penjualan sebesar $3000/minggu, maka total gaji yang diterima tiap minggu = $200 + 9%*$3000 = $470. Program harus menggunakan fungsi calculateSalary untuk menghitung gaji yang diterima oleh setiap pegawai. Client akan mengirimkan informasi nama pegawai, dan total penjualan selama seminggu. Kemudian server akan mengirimkan kembali total gaji yang diterima pegawai. Output disisi client nama pegawai, total penjualan dan total gaji yang diterima pegawai.

lat3_server.py



lat3_client.py

Hasil Program

4. Buatlah kembali program sesuai dengan spesifikasi soal 2 dengan protokol udp.