Tujuan demo kali ini yaitu mengimplementasikan switching hub (1 Switch, 3 Host) sederhana sebagai contoh untuk menunjukan metode bagaimana cara penerapan penggunaan Ryu.
Switching hub memiliki fungsi yang beragam, berikut contoh fungsinya:
- Mempelajari MAC Address dari host yang terkoneksi ke port dan menyimpannya di MAC Address Table.
- Ketika menerima paket yang ditujukan ke suatu host yang dikenal (MAC Addressnya tersimpan), maka akan dikirim secara langsung.
- Ketika menerima paket yang ditujukan ke host yang belum dikenal (MAC Addressnya belum tersimpan), maka secara otomatis melakukan flooding data.
Switching Hub by OpenFlow
Switch Openflow bisa menerima instruksi dari Controller openflow seperti Ryu contohnya.
- Menuliskan lagi alamat paket yang diterima atau dikirim dari port tertentu.
- Mentransfer paket yang diterima ke kontroler (Packet-In).
- Mentransfer paket yang diteruskan oleh kontroler dari port tertentu (Packet-Out).
Switching Hub bisa mengkombinasikan beberapa fungsi di atas. Pertama-tama Packet-In function digunakan untuk mempelajari MAC Address nya, yang mana kontroler menggunakan Packet-In function untuk menerima paket dari switch. Switch lalu menganalisa paket yang diterima untuk mempelajari MAC address dari host dan informasi tentang port yang terhubung.
Setelah dipelajari, switch mentransfer paket yang diterima. Kemudian Switch menginvestigasi apakah destination MAC Address dari paket itu sesuai dengan host. Tergantung dari hasil investigasi switch, device akan melakukan hal ini:
- Jika host sudah mempelajari host … Gunakan fungsi Packet-Out untuk mentransfer paket dari port yang terhubung.
- Jika host tidak diketahui … Gunakan fungsi Packet-In untuk melakukan flooding
Berikut langkah-langkahnya dengan gambar:
1. Status Awal
Ini adalah status awal ketika flow table nya kosong. Kita asumsikan host A terkoneksi dengan port 1, host B ke port 4 dan host C ke port 3.
2. Host A -> Host B
Ketika paket terkirim dari host A ke host B, maka pesan Packet-In terkirim dan MAC Address dari host A telah dipelajari oleh port 1. Karena port untuk host B belum dikenali, maka paketnya ‘flooded’ yaitu diterima oleh host B dan host C.
Packet In:
in-port: 1 eth-dst: Host B eth-src: Host A |
Packet Out:
action: OUTPUT:Flooding |
3. Host B -> Host A
Ketika paket balik lagi dari host B ke host A, maka entri tadi di tambahkan ke flow table dan juga paket-paket telah tertransfer ke port 1. Karena alasan itulah paket, tidak diterima oleh host C
Packet In:
in-port: 4 eth-dst: Host A eth-src: Host B |
Packet-Out:
action: OUTPUT:Port 1 |
4. Host A -> Host B
Untuk memastikan, ketika paket dikirim dari host A ke host B, entrinya sudah ditambahkan ke flow table dan juga paket langsung ditransfer ke port 4.
Packet-In:
in-port: 1 eth-dst: Host B eth-src: Host A |
Packet-Out:
action: OUTPUT:Port 4 |
Demo Time
Prerequisite
1. Install Docker
sudo apt install docker.io |
sudo apt update |
2. Pull Docker Image dari Ryu (OVS, Mininet, Ryu)
$ docker pull osrg/ryu-book |
3. Enable root user untuk membuka aplikasi X11-Xterm di terminal mininet
$ sudo xhost +si:localuser:root |
4. Install Curl
sudo apt install curl |
5. Install Docker Compose
sudo curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose |
sudo chmod +x /usr/local/bin/docker-compose |
Memulai Simulasi Switching Hub Sederhana
1. Jalankan konfigurasi docker compose
2. Start a Ryu-Mininet-OVS Cluster
docker-compose run –rm ryu-book |
3. Start mininet dengan konfigurasi topologinya
mn –topo single,3 –mac –switch ovsk –controller remote -x |
Maka akan langsung muncul masing-masing terminal untuk tiap device dari xterm. Berikut maksud command di atas:
- Masuk Ke Xterm S1 untuk mengecek status dari OvS:
ovs-vsctl show |
ovs-dpctl show |
Switch 1 (Bridge) telah dibuat dan 3 port sudah ditambahkan.
- Tentukan Openflow Versionnya (OpenFlow 13):
ovs-vsctl set Bridge s1 protocols=OpenFlow13 |
- Mari Kita cek bahwa flow table-nya kosong:
ovs-ofctl -O OpenFlow13 dump-flows s1 |
- Run Ryu Controller di C0
Masuk Ke Xterm C0 (Untuk mengeksekusi Switching Hub):
ryu-manager –verbose ryu.app.example_switch_13 |
- Tunggu Beberapa saat, begini proses konektivitas-nya:
- Lalu setelah muncul itu, cek di switch bahwa flow entri nya telah di tambahkan:
ovs-ofctl -O OpenFlow13 dump-flows s1 |
Cek Konektivitas
//Sekilas Info //
1. ARP request
Pada titik ini, host 1 tidak tahu MAC Address dari host 2, oleh karena itu, sebelum adanya ICMP echo request, ARP request harus di broadcast.
2. ARP reply
Respon terhadap ARP, host 2 mengembalikan ARP reply ke host 1
3. ICMP echo request
Sekarang host 1 tahu MAC Address dari host 2, lalu host 1 mengirimkan echo request ke host 2.
4. ICMP echo reply
Karena host 2 sudah tahu MAC Address dari host 1, host 2 mengembalikan echo reply ke host 1.
——
- Sebelum melakukan ping, execute command tcpdump di setiap host untuk mengecek paket yang diterima secara real-time.
- Setelah itu coba PING satu paket saja dari h1 ke h2:
- Cek flow table di switch nya lagi:
- Berikut log output di controller dari example_switch_13
- Cek tcpdump (inspeksi terhadap lalu lintas jaringan) pada masing2 host
Kesimpulan
Pada Practice kali ini, telah dipelajari bagaimana implementasi dari switching hub sederhana sebagai bahan dasar untuk menjelaskan basic procedures atas pengimplementasian dari Ryu Controller dan metode sederhana untuk mengontrol Openflow switch menggunakan Openflow.
Thanks For Ryu Documentation (Referensi utama) : https://book.ryu-sdn.org/en/Ryubook.pdf
Comments