- Gnutella nyaris menjadi protokol berbagi berkas yang terlupakan, tetapi merupakan contoh nyata ketika jutaan pengguna yang tidak secara sadar memikirkan teknologi terdesentralisasi memecahkan masalah unduhan MP3
- Pada 2000–2001, penetrasi internet di AS mencapai 50%, pemutar MP3 makin murah, keterbatasan streaming, dan budaya mengelola berkas secara langsung mendorong adopsi
- Berkat arsitektur tanpa server dan tidak adanya single point of failure, setelah pembatalan oleh AOL pun sistem ini sulit dibalikkan dan tetap berjalan meski selama bertahun-tahun ada upaya penghentian
- Struktur dasarnya adalah gabungan transfer berkas HTTP dan protokol gosip TCP, dengan PING/PONG, QUERY/QUERYHIT, dan PUSH menangani pencarian, respons, dan penerobosan firewall
- Alasan ia menghilang dari arus utama bukan karena kegagalan teknis yang langsung, melainkan karena lingkungan pengguna pada masanya menghilang, sementara jaringannya tetap hidup dalam skala yang lebih kecil
Mengapa Gnutella bertahan lama
- Gnutella adalah protokol berbagi berkas yang telah dilupakan banyak orang, tetapi merupakan contoh ketika jutaan pengguna biasa yang tidak berusaha memahami teknologi terdesentralisasi memakainya untuk menyelesaikan masalah nyata
- Pengguna bergabung ke jaringan Gnutella bukan karena motivasi seperti kenaikan nilai token, melainkan karena unduhan MP3; jaringan ini tumbuh eksplosif, lalu bertahan hampir 10 tahun dalam fase stabil, dan setelah itu mempertahankan ekor panjang dengan penggunaan yang menurun
- Gnutella adalah teknologi komponen yang tersembunyi di bawah proyek yang lebih mencolok seperti LimeWire, dan karena model walled garden platform modern, kini banyak pengguna internet yang bahkan nyaris tidak lagi mengingat sistem berkas itu sendiri
- Proyek Gnutella bermula ketika demo internal yang dibatalkan AOL bocor ke publik, dan karena desain terdesentralisasi tanpa server, setelah dipublikasikan sistem ini sulit untuk ditarik kembali
- Gnutella tetap berjalan selama bertahun-tahun meskipun ada upaya penghentian, dan salinan asli
Gnutella.exe juga masih bisa ditemukan di archive.org
- Ada alasan jelas mengapa ini sulit disebut sebagai protokol yang gagal
- Ia mampu berkembang hingga jutaan pengguna aktif serentak, dan berkembang sebagai use case arus utama selama sekitar 10 tahun
- Alasan ia menghilang dari arus utama bukanlah kegagalan langsung dari protokol itu sendiri, melainkan karena lingkungan pengguna tempat Gnutella lahir telah lenyap
- Hingga hari ini pun ia masih terus berjalan dalam skala yang diperkecil
Kondisi historis yang mendorong adopsi
- Sekitar 2000–2001, penetrasi internet di kalangan konsumen AS mencapai 50%, dan internet sedang berubah dari alat bagi penggemar menjadi infrastruktur sehari-hari
- Ada beberapa kondisi yang bekerja bersamaan sehingga berbagi berkas musik menjadi umum
- Industri musik gagal beradaptasi dengan preferensi konsumen yang berubah
- Pemutar MP3 dan penyimpanan solid-state menjadi lebih murah dan lebih tersebar luas
- Pada internet dial-up yang lambat, streaming musik tidak realistis
- Mengelola sendiri ruang disk, direktori, cadangan, dan berkas unduhan masih dapat diterima bahkan bagi pengguna komputer umum saat itu
- Kondisi ini menciptakan masa keemasan berbagi berkas yang berlanjut hingga awal 2010-an, dan LimeWire menjadi nama yang mewakili pengalaman era tersebut
- Gnutella sulit dimatikan karena tidak memiliki single point of failure, dan protokol dasarnya memang sederhana, tetapi dapat diperluas dengan mudah berkat ekstensi opsional yang disertakan dalam spesifikasi
Karakter dasar protokol
- Bagi sebagian besar pengguna, Gnutella adalah alat transfer berkas, tetapi pada intinya ia lebih mirip mesin pencari P2P untuk menemukan blob
- Secara prinsip ia juga bisa dipakai untuk hal seperti DNS sederhana, tabel pencarian metadata key/value global, atau layanan pencocokan liga Unreal Tournament, tetapi dalam sejarah nyata ia diingat sebagai sarana mengunduh berkas yang cocok dengan kueri pencarian, terutama unduhan MP3
- Draf spesifikasi Gnutella 0.6 menyatakan bahwa sumber daya yang dibagikan bisa berupa apa saja: pemetaan ke sumber daya lain, kunci enkripsi, berkas dalam format apa pun, metadata sumber daya yang dapat ditentukan lewat kunci, dan lain-lain
- Alur penggunaan umum adalah sebagai berikut
- Menjalankan klien Gnutella seperti LimeWire, BearShare, atau GTK-Gnutella
- Klien terhubung ke beberapa peer di suatu tempat di internet
- Pengguna memasukkan kata pencarian seperti
LinkinPark.mp3.exe
- Kueri menyebar dari peer ke peer ke arah luar jaringan
- Hasil perlahan kembali dari komputer acak di seluruh dunia
- Pengguna menebak apakah berkas itu palsu dari namanya, membandingkan kecepatan koneksi, dan berharap tidak ada virus
- Saat berkas dipilih, klien langsung mengunduh potongan lewat HTTP dari komputer pengguna lain
- Saat menerima berkas yang salah, pengguna bisa saja tanpa sengaja menemukan konten baru atau malah menerima malware, dan perilaku mencari sambil memungut seperti ini menghilang bersama munculnya mesin rekomendasi
- Klien biasanya menyediakan empat fungsi utama
- Manajer kueri: menangani pencarian yang menyebar lambat di ribuan peer
- Manajer berkas: menentukan direktori atau jalur yang akan dibagikan, serta lokasi penyimpanan berkas unduhan
- Manajer transfer: menangani resume, pemecahan, dan pengelolaan transfer berkas dua arah
- Fitur tambahan: mencakup IRC chat, papan pesan, monitor kueri pencarian, penjelajahan host tertentu, dan fungsi lain, tetapi banyak di antaranya bukan bagian dari protokol itu sendiri
- Ekosistem Gnutella memang memiliki pemimpin pasar seperti LimeWire, tetapi banyak klien hidup berdampingan, dan pengembang independen pun bisa menulis klien dari nol
- Dalam proses implementasi Gnutella Bun Client, ditemukan banyak hal yang tidak ada di spesifikasi, fitur yang tidak terdokumentasi, dan kemampuan yang tersebar di spesifikasi tambahan, sehingga protokol ini berevolusi secara organik
Gabungan HTTP dan protokol gosip
- Jika kita menjalankan server HTTP di komputer pribadi dan memberi tahu alamat IP-nya, berbagi berkas tampak mungkin dilakukan, tetapi saat ini sulit mengekspos port TCP masuk karena NAT, firewall, dan kebijakan ISP rumahan
- Dua puluh tahun lalu, menjalankan server HTTP kecil di mesin lokal dan mengeksposnya lewat IP publik jauh lebih umum dan lebih memungkinkan dibanding sekarang
- Gnutella memanfaatkan lingkungan ini sehingga setiap peserta dapat meng-host berkas di dalam mesh peer yang saling bergosip
- Tahap transfer saat mengunduh berkas dengan LimeWire mirip dengan mengambil berkas memakai
curl atau wget
- Namun hanya dengan server HTTP saja tidak cukup untuk menjadi jaringan berbagi berkas P2P
- Bahkan saat itu pun banyak ISP tidak menyediakan IP statis yang stabil
- Alamat IP yang dibagikan hari ini bisa berubah besok
- URL acak seperti
http://74.6.231.21:4000 kemungkinan besar tidak diindeks mesin pencari, dan akan offline ketika laptop ditutup
- Bersama server HTTP, klien Gnutella juga menjalankan protokol gosip berbasis TCP
- Ia mengumumkan keberadaannya di dalam mesh peer yang menyediakan direktori berbagi lewat HTTP kepada peserta Gnutella lain
- Informasi seperti alamat peer, bandwidth, latensi, dan kueri pencarian bergerak melalui mesh
- Ada juga alat untuk menangani firewall, meski untuk menyelesaikan masalah NAT modern diperlukan ekstensi tambahan di kemudian hari
- Peran dasar node Gnutella ada tiga
- Mentransfer berkas ke siapa pun yang menginginkannya melalui server HTTP lokal
- Mencari dan mengumumkan berkas yang tersedia lewat pesan gosip
- Dalam beberapa kasus menggunakan teknik untuk menembus firewall
- Karena Gnutella tidak memiliki titik masuk pusat atau registri pengguna, setelah masuk ke dalam mesh, peserta akan menemukan peer baru, kueri pencarian masuk, dan lalu lintas jaringan lain
Bootstrapping
- Bootstrapping adalah proses mencari beberapa peer awal agar bisa masuk pertama kali ke dalam mesh P2P yang tidak mengundang siapa pun dan tidak punya pintu depan
- Jaringan global Gnutella adalah campuran alamat IP para peserta, dan cukup dengan terhubung ke satu peer tepercaya yang tersambung ke jaringan utama, kita sudah bisa mulai melihat lalu lintas jaringan dari kumpulan besar pengguna
- Seiring waktu, lebih banyak peer ditemukan lewat pesan PONG, dan daftar peer disimpan ke disk untuk koneksi ulang
- Karena perubahan alamat IP atau kondisi offline, sebagian dari daftar peer yang disimpan akan gagal seiring waktu, dan klien akan mencoba daftar itu satu per satu sampai menemukan peer yang valid
- Saat pertama kali bergabung ke jaringan atau kembali setelah lama tidak tersambung, daftar yang tersimpan saja mungkin tidak cukup, sehingga bootstrapping diperlukan
- Cara yang paling umum adalah Gnutella Web Cache (GWebCache)
- Ini adalah federasi server web independen yang dijalankan sukarelawan, biasanya berupa aplikasi web kecil berbasis CGI atau PHP
- Mereka mencatat alamat IP peserta Gnutella yang secara sukarela memberikan informasi
- Mereka mencatat IP atau domain server GWebCache lain sebagai cadangan bila server saat ini mati
- Mereka menyediakan daftar server GWebCache alternatif
- Mereka menyediakan daftar alamat IP peserta jaringan Gnutella yang saat ini diketahui
- Beberapa klien Gnutella tersambung ke server cache secara otomatis, sementara yang lain mengharuskan pengguna menyalin IP ke berkas konfigurasi atau menu pengaturan
- Setelah terhubung ke peer awal, lebih banyak peer akan terkumpul secara tidak langsung dari dalam pesan jaringan, sehingga ketergantungan pada cache berkurang
- GWebCache bukan bottleneck terpusat
- Ada banyak server GWebCache yang tidak saling terkait
- Ada juga berbagai cara untuk melakukan bootstrap klien tanpa GWebCache
- Bahkan tanpa GWebCache, Gnutella tetap bisa bertahan dalam bentuk yang kurang nyaman
- Contoh permintaan daftar bootstrap adalah sebagai berikut
- Dengan menambahkan
?get=1&client=TEST&version=1 di akhir URL, daftar dapat diambil, tetapi jika meminta terlalu sering akan cepat terkena rate limit
http://cache.jayl.de/g2/gwc.php
http://gweb.4octets.co.uk/skulls.php
http://midian.jayl.de/g2/bazooka.php
http://p2p.findclan.net/skulls.php
http://skulls.gwc.dyslexicfish.net/skulls.php
- Contoh output-nya adalah sebagai berikut
H|106.107.193.27:23459|88579
H|182.233.59.26:23464|88581
U|http://bj.ddns.net/skulls/skulls.php|208999
U|http://scissors.gwc.dyslexicfish.net:3709/|341201
- Entri yang diawali
H adalah peer, sedangkan entri yang diawali U adalah server cache redundan yang bisa dipakai nanti
Tipe pesan inti
- Gnutella adalah protokol berbasis TCP, dan ketika terhubung ke peer yang menerima koneksi masuk, hal pertama yang terjadi adalah handshake
- Klien mengirim
GNUTELLA CONNECT/0.4 atau GNUTELLA CONNECT/0.6, dan jika pihak lawan mengirim respons positif, koneksi terbentuk lalu pesan biner Gnutella mulai mengalir
- Semua pesan biner dimulai dengan header 23 byte
- Header berisi ID pesan, tipe payload, TTL, jumlah hop, dan panjang payload
- TTL adalah sisa umur pesan, sedangkan jumlah hop adalah jarak yang sudah ditempuh
TTL + Hops menunjukkan jangkauan yang semula dimaksudkan untuk pesan tersebut
- Ada lima pesan inti yang benar-benar penting
- PING: mencari peer yang hidup, tipe payload
0x00
- PONG: merespons PING dan memuat alamat IP, port, serta statistik berbagi, tipe payload
0x01
- QUERY: permintaan pencarian yang dimulai pengguna atau peer terdekat, tipe payload
0x80
- QUERYHIT: respons positif terhadap QUERY yang mencakup catatan hasil berkas dan informasi koneksi untuk mengunduh, tipe payload
0x81
- PUSH: solusi bypass untuk uploader di balik firewall, yang meminta pemilik berkas agar tersambung kembali ke sisi downloader, tipe payload
0x40
- Ada juga pesan
BYE, tetapi tidak benar-benar wajib
- Pesan protokol mendukung extension data field, sehingga klien dapat menambahkan fungsi tanpa merusak seluruh jaringan
- GTK-Gnutella mendukung fitur seperti TLS, IPv6, dan UDP yang tidak ada di protokol inti kecil itu
Ekstensi protokol
- Mungkin saja membuat klien Gnutella yang berfungsi hanya dengan mengimplementasikan lima tipe pesan tadi, tetapi spesifikasinya berasal dari hampir 30 tahun lalu dan ekosistemnya tidak berhenti
- Gnutella meninggalkan ruang untuk memasukkan ide baru ke dalam paket lama
- GGEP (Gnutella Generic Extension Protocol) menyediakan ruang serbaguna untuk memasukkan data ekstensi ke dalam pesan biasa
- HUGE (Hash/URN Gnutella Extensions) memungkinkan klien mengidentifikasi berkas lewat hash SHA alih-alih hanya berdasarkan nama berkas
- Ada juga kabar tentang dukungan payload ekstensi XML, tetapi spesifikasi membahasnya dalam bentuk lampau dan hal itu tidak teramati pada lalu lintas jaringan modern
- Desain awalnya kecil, tetapi cukup lentur untuk terus berkembang
Cara kerja pencarian dan transfer
- Pesan PING/PONG berfungsi seperti detak jantung yang bolak-balik antar node
- PING tidak memiliki payload wajib selain header umum 23 byte, tetapi dapat memuat data ekstensi GGEP opsional
- PONG memuat port, alamat IPv4, jumlah berkas yang dibagikan, dan jumlah kilobyte yang dibagikan dari servent yang merespons
- Node mengumpulkan informasi IP/port yang melekat pada PONG agar menjadi anggota mesh yang lebih terhubung, lalu menyimpan informasi ini untuk sesi berikutnya
- QUERY/QUERYHIT bekerja mirip PING/PONG, tetapi membawa lalu lintas pencarian alih-alih iklan peer
- QUERY memuat field kecepatan minimum, yaitu bandwidth transfer, lalu diikuti string pencarian yang diakhiri NUL
- Contoh:
beethoven.mp3
- Pesan QUERY menyebar seperti banjir ke arah luar dari pengirim, dan pesan QUERYHIT kembali ke arah pengirim bila ada hasil
- QUERYHIT memuat alamat IP, port, kecepatan, dan kumpulan hasil dari pihak yang merespons
- Setiap hasil mencakup indeks berkas, ukuran berkas, nama berkas, serta metadata atau ekstensi opsional
- Indeks berkas dipakai kemudian saat meminta berkas lewat HTTP
- Karena sifat flood routing Gnutella, hasil datang dengan lambat dan kadang butuh beberapa menit sampai selesai
- Para insinyur LimeWire merancang dynamic query routing untuk menangani ini dengan cara yang lebih skalabel
- Mereka memanfaatkan bloom filter dan topologi jaringan yang cerdas
- Berkat konfigurasi tingkat lanjut ini, jaringan dapat berkembang hingga skala jutaan pengguna tanpa masalah flood routing
- Hingga kini sebagian besar klien arus utama masih mengimplementasikan sistem ini
PUSH dan firewall
- Pesan PUSH adalah solusi bypass yang membantu sebagian server HTTP keluar dari balik firewall, tetapi tidak menyelesaikan semua kasus
- Alih-alih klien tersambung ke server seperti pada HTTP biasa, mekanismenya lebih dekat ke meminta server agar tersambung ke sisi klien
- Pesan PUSH memuat pengenal servent dan pengenal lain yang dibutuhkan uploader untuk menemukan downloader
- Karena klien tidak bisa tersambung langsung, ia meminta pihak lawan untuk menyambung kembali dan mengirim berkas
- Detail lebih lengkap dapat dilihat di spesifikasi Gnutella
- Klien modern menggunakan teknik tambahan dan ekstensi UDP untuk menangani masalah seperti ini dengan lebih alami
Makna yang tersisa dan bahan rujukan
- Berkat desain awal yang baik, Gnutella berkembang hingga jutaan pengguna serentak, menghindari pemblokiran, dan tetap online selama puluhan tahun tanpa bantuan eksternal
- Fakta bahwa ini bukan jaringan yang runtuh begitu lalu lintas nyata masuk, melainkan jaringan yang merupakan bagian dari budaya Y2K dan tetap belum lenyap, menunjukkan ketangguhan desainnya
- Kesimpulannya mendekati bahwa alasan sebenarnya Gnutella memudar adalah karena ia bertahan lebih lama daripada dunia yang menciptakannya
- Jaringannya sendiri bertahan lebih lama daripada situs-situs yang dulu meng-host materi terkait protokol tersebut
-
Tautan referensi
1 komentar
Pendapat di Lobste.rs
Saya ingat Gnutella memudahkan orang mengunduh banyak file yang cocok dengan kata pencarian, biasanya MP3, tapi juga ada “yang lain” itu
Senang rasanya diingatkan lagi, meski sedih melihat web sekarang sudah berubah jadi monster
Asrama kampus pada pertengahan 2000-an adalah jaringan datar, dan iTunes sangat populer, membagikan musik ke siapa pun di jaringan
Dalam seminggu, saya sudah memenuhi laptop HP 64-bit baru yang dibeli di Circuit City dengan Evanescence dan Green Day, dan rasanya Columbia House CD Club sudah tidak diperlukan lagi
Beberapa tahun setelah lulus, seseorang membicarakannya di depan orang yang salah, sehingga TI resmi mengetahuinya, dan akhirnya harus ditutup
Belakangan saya sadar ternyata maksudnya bukan “jaringan datar” dari node berbagi file yang dibangun di atas jaringan kampus, melainkan jaringannya sendiri yang memang datar
Tetap saja, masa kuliah memang waktu yang menyenangkan untuk melakukan hal seperti ini
Soulseek masih cukup hidup dan berjalan dengan baik
Hal paling lucu tentang Gnutella adalah bahwa ia sama sekali tidak ada hubungannya dengan proyek GNU, hanya saja GNU terlihat keren jadi dimasukkan ke dalam namanya
Saya sering penasaran seberapa jauh teknologi inti Gnutella bisa dipakai ulang untuk penemuan konten small-web yang lebih baru atau yang mirip Gemini
Mengatakan bahwa sesuatu “gagal” itu tidak lengkap. Pada umumnya sesuatu tidak sekadar berhasil atau gagal; ia hanya bisa berhasil atau gagal terhadap tujuan tertentu
Ada dua alasan besar mengapa pengguna Gnutella sudah tidak ada lagi, dan keduanya bisa dianggap sebagai kegagalan
Pertama, Gnutella dan berbagai perangkat lunaknya tidak cukup melindungi privasi pengguna, sehingga mengekspos mereka pada risiko nyata maupun yang dirasakan
Kedua, sebagai sistem distribusi file media, ini sangat bagus, tetapi tidak bisa memberi keseimbangan kualitas/harga yang memuaskan sebagian besar pengguna. Ia memberi akses tanpa batas yang diinginkan pengguna, tetapi tidak bisa menjamin konten yang asli, sedangkan Spotify memberi keduanya
Dalam pengertian itu, pengguna Gnutella masih ada, hanya saja sekarang mereka memakai hal lain
Saya sempat memikirkan arsip file
*.gmiyang bisa dicari lewat ekstensi Gnutella, serta sistem pointer agar orang bisa menandatangani dan menerbitkan dokumen gemtextIdenya sendiri bukan hal baru, tetapi kombinasi distribusi Gemtext + Gnutella tampak baru: https://github.com/RickCarlino/gnutella-bun-client/…
Tulisan ini adalah hasil brainstorming bolak-balik dengan GPT-5.4 dan saya kubur dulu untuk nanti, jadi sebenarnya belum berniat membagikannya; mohon dibaca dengan hati-hati
Saya ingin mendengar gagasan apa pun yang ada di ranah Gemini + Gnutella, dan saya mudah ditemukan di Linkedin, Reddit, Fediverse, dll., serta ada info kontak di blog saya
OnionShare juga cukup menarik: https://onionshare.org/
Bisa menjadi bagian dari DaRkWeB
Dari dokumennya, ini tampak lebih seperti alat transfer file koneksi langsung
Saya rasa satu hal yang terlewat dari alasan Gnutella bertahan lama dalam kondisi saat itu adalah bahwa praktis tidak ada insentif nyata untuk melakukan spam pencarian P2P
Setelah itu, spam pencarian P2P benar-benar muncul
Sepertinya alasan serupa juga menjelaskan mengapa hampir tidak ada spam di IRC saat ini
Menarik bahwa banyak bagian protokol ini mempercayai klien
GUID seharusnya acak, tetapi karena dikendalikan pengguna, semua orang bisa saja menetapkan GUID mereka menjadi
0000. Jika Gnutella dibuat ulang dengan pendekatan modern, kemungkinan besar akan ada sistem pertukaran kunci yang rumit dan identitas berbasis kunci ED25519Jumlah file yang diiklankan, bandwidth, dan sebagainya pada dasarnya juga bergantung pada anggapan bahwa pengguna berkata jujur. Jika protokolnya lebih rumit, mungkin ia akan mencoba benar-benar memverifikasi klaim-klaim seperti itu
Kalau terlalu banyak menambahkan penandatanganan kunci atau pengelolaan reputasi, implementasinya mungkin akan jadi terlalu rumit, dan justru kesederhanaannya bisa jadi alasan keberhasilannya. Klien Gnutella benar-benar bisa dibuat
Menurut saya banyak proyek P2P modern melewatkan hal ini. Proyek favorit saya, Secure Scuttlebutt, misalnya, tampak berusaha membuat sesuatu yang nyaris sempurna dengan mempertimbangkan berbagai kegagalan dan skenario penyalahgunaan, tetapi akhirnya menjadi ekosistem yang hanya punya satu klien yang benar-benar berfungsi, yaitu buatan penulis spesifikasinya
Contoh yang sama juga berlaku untuk
gemini://. Ini bukan P2P melainkan protokol federatif, tetapi meski spesifikasinya penuh masalah dan celah, orang-orang tetap benar-benar membuat klien, dan terlepas dari masalah itu, ekosistemnya punya implementasi yang cukup beragamGnutella bisa meledak pada saat itu juga sangat dipengaruhi peran Gene Kan dan Spencer Kimball, yang merupakan anggota Berkeley XCF
Spencer kemudian melakukan banyak pekerjaan rekayasa yang hebat di Google, dan sekarang menjadi CEO perusahaan basis data Cockroach Labs
Gene meraih kesuksesan awal dengan menjual perusahaan pencariannya ke Sun, tetapi sayangnya meninggal secara tragis pada 2002 di usia yang terlalu muda