XDP (atau Express Data Path) adalah utilitas jaringan yang tersedia di kernel Linux. XDP digunakan di banyak perusahaan populer untuk menyelesaikan beberapa masalah jaringan serius yang mereka hadapi sambil menangani jutaan permintaan per detik. Ini adalah program sumber terbuka berlisensi MIT yang digabungkan dalam kernel Linux dari versi 4.8.
XDP adalah prosesor paket data jaringan yang berkinerja dan dapat diprogram. Muncul untuk mengurangi beberapa masalah sisi server yang serius seperti serangan DDoS (Distributed Denial-of-Service) atau sebagai penyeimbang muatan.
Butuh XDP
Kebutuhan akan jalur data jaringan yang berkinerja selalu merupakan fitur yang diperlukan untuk server Linux. Tetapi programabilitas dari jalur data tersebut juga harus ada sehingga pengembang membuat sesuatu yang dapat digunakan darinya. Meskipun XDP memiliki jalur pembelajaran yang cukup curam, karena perkembangan banyak alat dan kerangka kerja baru-baru ini, menulis kode XDP cukup mudah dilakukan saat ini.
Keuntungan besar XDP adalah kecepatannya. Fungsionalitas utama XDP adalah pengembang dapat membangun fungsionalitas baru untuk memfilter paket tanpa memodifikasi kernel itu sendiri.
Ada beberapa skenario ketika beberapa paket tidak perlu melakukan perjalanan melalui seluruh tumpukan jaringan untuk hanya memutuskan untuk meneruskan atau menjatuhkan paket. Itu harus dilakukan pada lapisan pertama tumpukan jaringan dengan menempatkan beberapa filter. Filter ini harus diprogram sedemikian rupa sehingga mereka dapat dengan mudah mengenali paket jahat dan membuangnya tepat di awal tumpukan. Ini dapat menghemat banyak daya pemrosesan dan waktu.
Dengan XDP, filtrasi ini dimungkinkan tepat di bagian depan tumpukan jaringan.
Sekarang menggunakan XDP, pengembang dapat memfilter paket apa pun yang mungkin dikirim oleh peretas mana pun untuk melakukan serangan DDoS. Ini dapat mengurangi banyak overhead dalam tumpukan jaringan kernel normal. Fitur ini baru-baru ini didemonstrasikan oleh Cloudflare dalam demonstrasi perlindungan DDoS mereka.
Beberapa fitur penting dari XDP adalah sebagai berikut :
- Tidak memerlukan perangkat keras khusus: XDP dapat menjalankan perangkat keras apa pun yang Anda gunakan. Ya, kecepatan dapat terganggu jika Anda tidak memiliki perangkat yang dioptimalkan atau drivernya, tetapi untuk tujuan pengujian, Anda tidak memerlukan perangkat keras khusus.
- Tidak memerlukan bypass kernel: XDP berjalan sebelum paket mencapai tumpukan jaringan kernel. Fungsi callback diaktifkan saat paket diterima dan XDP memprosesnya secepat mungkin.
- Itu tidak menggantikan tumpukan TCP/IP: XDP hadir di tingkat terendah dari tumpukan jaringan. Ketika melewati paket, maka paket memasuki tumpukan jaringan kernel normal yang mencakup tumpukan TCP/IP.
- Ia bekerja bersama dengan TCP/IP dengan semua fitur BPF (Berkeley Packet Filter): XDP tidak menggantikan apapun. Ia bahkan menggunakan eBPF untuk memproses paket dan memberikan waktu yang lebih mudah bagi pengembang untuk menulis kode.
Mengapa XDP Sangat Cepat
XDP adalah jalur data jaringan berbasis eBPF yang dapat diprogram dan berkinerja tinggi di kernel Linux. Keuntungan kinerja XDP adalah karena pemrosesan paket bare metal pada tingkat terendah dari tumpukan perangkat lunak. Ini berarti bahwa paket data yang berasal dari jaringan mencapai XDP terlebih dahulu sebelum proses kernel lainnya.
Oleh karena itu, teknisi dapat memprogram XDP untuk mengoptimalkannya untuk berbagai kasus penggunaan. Dari perlindungan DDoS hingga penyeimbang beban.
XDP dimuat langsung di tumpukan jaringan. Ketika sebuah paket diterima oleh tumpukan jaringan, ia mendapat panggilan balik dan memproses paket secepat mungkin. XDP dapat menjatuhkan 26 juta paket per detik per inti dalam perangkat keras komoditas.
Alasan utama mengapa XDP sangat cepat adalah, pengguna diizinkan untuk langsung membaca atau membuat perubahan pada data paket jaringan dan mengambil keputusan tentang cara menangani paket pada tahap awal. Ini membutuhkan overhead proses yang sangat sedikit dan menghasilkan kecepatan yang lebih baik.
Hubungkan Stack Jaringan Dengan XDP
Anda dapat terhubung ke jaringan dengan XDP dengan berbagai cara, tetapi saya menyebutkan beberapa metode populer di sini.
- Generic XDP : Dalam proses ini, XDP dimuat di kernel, tetapi mendapat manfaat kinerja yang sangat sedikit. Ini adalah cara mudah untuk menjalankan program XDP tanpa dukungan dari perangkat keras.
- Native XDP : Native XDP dimuat oleh driver jaringan itu sendiri. Ini membutuhkan dukungan dari driver kartu jaringan.
Jenis Operasi yang Dilakukan XDP
Beberapa operasi yang dapat dilakukan XDP setelah paket diterima oleh antarmuka jaringan adalah:
- XDP_DROP : Ini menjatuhkan paket dan tidak memprosesnya. Menggunakan program eBPF untuk menganalisis pola lalu lintas dan dapat menjatuhkan paket secara real-time.
- XDP_PASS : Ini meneruskan paket ke tumpukan jaringan untuk diproses lebih lanjut. Itu dapat mengubah konten paket sebelum itu terjadi.
- XDP_ABORTED : Ini menjatuhkan paket data jaringan, meninggalkan pengecualian tracepoint.
- XDP_TX : meneruskan paket ke antarmuka jaringan yang sama yang menerimanya. Paket dapat dimodifikasi pada unmodified.
- XDP_REDIRECT : Arahkan ulang paket ke NIC lain (pengontrol antarmuka jaringan).
XDP dan eBPF
eBPF adalah versi lanjutan dari Berkeley Packet Filter. Ini seperti mesin virtual abstrak yang berjalan di dalam kernel Linux. eBPF digunakan untuk menjalankan program yang ditentukan pengguna di dalam lingkungan kotak pasir di kernel Linux. Umumnya digunakan untuk menjalankan alat jaringan dan pemantauan di server Linux untuk memastikan kinerja yang optimal.
XDP adalah kerangka kerja yang digunakan untuk menulis pemrosesan paket berkecepatan sangat tinggi dalam aplikasi BPF. Untuk membuatnya lebih cepat, XDP menjalankan BPF segera setelah paket diterima oleh tumpukan jaringan.
XDP memiliki kurva belajar yang sangat curam. Oleh karena itu pengembang membuat alat dan kerangka kerja untuk memudahkan memprogram menggunakan eBPF. Itu membuatnya sangat mudah untuk menulis kode untuk memproses pemrosesan jaringan frekuensi sangat tinggi menggunakan XDP dan eBPF. Keuntungan inti dari XDP adalah tidak mengharuskan Anda untuk memodifikasi kernel, yang sangat memusingkan para insinyur.
Tapi seperti kata orang, kekuatan besar datang dengan tanggung jawab besar. Karena XDP menjalankan eBPF sedini mungkin sebelum paket diurai oleh kernel itu sendiri, program eBPF harus melakukan semua parsing sendiri dan tidak dapat mengandalkan kernel untuk melakukan apa pun untuknya.
Sebagai seorang programmer, sebagian besar waktu Anda bekerja dengan terminal. Ini adalah panduan untuk menghias prompt terminal Anda. Periksalah.
Kasus Penggunaan Umum XDP dan eBPF
- Serangan DDoS : Kasus penggunaan utama XDP adalah perlindungan DDoS (Distributed Denial of Service). Selama serangan DDoS, penyerang mencoba menggunakan sumber daya server sebanyak mungkin dengan tidak meninggalkan proses apa pun untuk pengguna akhir. Menggunakan XDP sebagai lapisan tumpukan jaringan yang sangat cepat, tidak ada biaya pemrosesan yang terkait dengan menjatuhkan paket data jaringan. Setelah pemfilteran XDP, paket melewati semua metode pemfilteran lain yang disediakan oleh kernel Linux.
- Load balancer : XDP juga digunakan sebagai load balancer untuk menangani sejumlah besar lalu lintas ke server. Termasuk Facebook, banyak perusahaan teknologi raksasa yang menggunakan teknologi ini. Sebelumnya, para insinyur menggunakan server khusus sebagai penyeimbang beban. Yang sanga
t sulit dikelola dan harus bekerja dengan sangat baik untuk melayani jutaan pelanggan. Tapi bayangkan menggunakan lapisan XDP sebagai penyeimbang beban tanpa server pusat, akibatnya, tidak ada satu pun titik kegagalan. - Firewall : XDP dengan eBPF dapat digunakan untuk menulis berbagai aturan firewall untuk melindungi sistem dengan overhead yang sangat minim.
Pertanyaan yang Sering Diajukan
Apa itu BCC adalah eBPF?
BCC dibangun di atas eBPF. Ini adalah toolkit atau kerangka kerja untuk program pelacakan dan manipulasi kernel yang hadir dengan antarmuka baris perintah yang sangat berguna. BCC membantu menulis instruksi Kernal dalam C. BCC juga menyertakan pembungkus di sekitar LLVM.
Apa itu libBPF?
LibBPF adalah seperangkat alat alternatif untuk membuat aplikasi BPF. Itu ditulis dalam bahasa pemrograman C.