Zeroconf

**Zeroconf**, atau ***Zero Configuration Networking*** adalah sekumpulan teknik yang secara otomatis membuat sebuah alamat IP yang bisa digunakan tanpa harus melakukan konfigurasi terlebih dahulu atau membutuhkan *[[server]]* khusus. Teknik ini mengizinkan para pengguna yang tidak ahli untuk menghubungkan komputer, printer yang memiliki kemampuan jaringan, dan beberapa perangkat lainnya ke dalam sebuah jaringan komputer dan bekerja secara otomatis untuk mereka. Tanpa adanya teknik ini, atau beberapa teknik lainnya yang sama, seorang yang ahli dibutuhkan untuk mengeset beberapa layanan khusus, seperti *[[Dynamic Configuration Host Protocol]]* (DHCP), *[[Domain Name System]]* (DNS) atau mengeset semua konfigurasi tersebut secara manual dengan tangan, yang tentu saja merupakan sebuah tugas yang rumit bagi para pengguna non-teknis.

Zeroconf dapat menyelesaikan tiga masalah sebagai berikut:
* Bisa memilihkan alamat-alamat numerik jaringan untuk perangkat-perangkat jaringan
* Mencaritahu alamat komputer dengan namanya (*resolusi nama*)
* Mencaritahu di mana harus mendapatkan sebuah layanan tertentu, seperti halnya pencetakan (*[[service discovery]]*)
## Cara mencari alamat
Standar IPv4 dan IPv6 memiliki beberapa cara yang umum digunakan untuk memilih alamat IP tanpa bantuan apapun secara otomatis. Dengan merujuk ke dokumen RFC 3927, IPv4 menggunakan alamat `169.254.*.*` (*link-local address*). Sementara itu untuk IPv6, bisa dilihat pada dokumen RFC 2462. Di dalam RFC 3927, IPv4 menyebut teknik tersebut dengan nama ***IPv4 Link-Local*** (IPv4LL), tetapi Microsoft menyebut teknik ini sebagai ***Automatic Private IP Addressing*** (APIPA) atau ***Internet Protocol Automatic Configuration*** (IPAC).
## Resolusi nama
Paper yang menjelaskan mengenai hal ini dipublikasikan oleh Bill Manning dan Bill Woodcock pada tahun 2000 sebagai Multicast Domain Name Service, yang kemudian diimplementasikan dengan beberapa pekerjaan yang diselesaikan oleh Apple Computer dan Microsoft.

Ada dua cara yang sangat mirip tentang bagaimana cara komputer melakukan resolusi nama. Apple menggunakan **Multicast DNS** (mDNS), yang dipublikasikan secara bebas. Sementara Microsoft menggunakan ***Link-Local Multicast Name Resolution*** (LLMNR), yang jarang digunakan dan juga tidak berada di atas jalur standar yang ditetapkan oleh Internet Engineering Task Force (IETF). LLMNR ini dipublikasikan sebagai RFC 4795 dengan derajat "informational".

Kedua protokol tersebut memiliki perbedaan yang tipis dalam pendekatan mereka melakukan resolusi nama jaringan. mDNS mengizinkan sebuah perangkat jaringan untuk memilih sebuah nama domain di dalam ruang nama "`.local`" lalu mengumumkannya dengan menggunakan alamat IP *multicast* khusus. Hal ini memperkenalkan beberapa semantik khusus untuk ruang nama `.local`, yang dianggap sebagai sebuah masalah oleh beberapa orang anggota IETF. mDNS juga kompatibel dengan DNS-SD seperti yang akan dijelaskan pada bagian berikutnya, sementara LLMNR tidak mendukungnya.
## Service Discovery
### Protokol Apple: mDNS/DNS-SD
Multicast DNS (mDNS) merupakan sebuah protokol yang menggunakan antarmuka pemrograman aplikasi yang mirip dengan sistem DNS unicast tetapi diimplementasikan secara berbeda. Setiap komputer dalam jaringan menyimpan daftar catatan DNS-nya masing-masing (sebagai contoh: *A record*, *MX record*, *PTR record*, *SRV record* dan lain sebagainya) dan saat klien mDNS hendak mengetahui alamat IP dari sebuah PC dengan menggunakan namanya, PC yang memiliki catatan A yang bersangkutan akan menjawabnya dengan menggunakan alamat IP-nya sendiri. Alamat multicast yang digunakan oleh protokol mDNS ini adalah `224.0.0.251`.

***DNS-based Service Directory*** (DNS-SD) merupakan salah satu solusi lainnya yang ditawarkan oleh Apple, yang dibuat di atas protokol Domain Name System. Protokol ini digunakan di dalam beberapa produk Apple, beberapa printer jaringan dan beberapa produk pihak ketiga dan juga aplikasi yang berjalan di atas berbagai macam sistem operasi. Jika dibandingkan dengan teknologi yang ditawarkan oleh Microsoft, SSDP, teknologi ini menggunakan DNS, ketimbang menggunakan protokol HTTP. DNS-SD menggunakan *DNS SRV record* (RFC 2782), *TXT record* dan *PTR record* untuk mengumumkan *Service Instance Names*. Host-host yang menawarkan beberapa layanan berbeda akan memublikasikan informasi detail layanan yang tersedia, seperti halnya nama instance, tipe layanan, nama domain dan juga beberapa konfigurasi parameter opsional lainnya. Tipe-tipe layanan diberikan secara informal dalam skema *[[first-come-first-served]]*. Pendaftaran tipe layanan ini diatur dan dipublikasikan oleh www.dns-sd.org.

Banyak klien jaringan Mac OS X, seperti halnya browser Safari dan juga iChat (perangkat lunak *[[instant messaging]]*) menggunakan DNS-SD untuk menemukan *server* yang berdekatan dengan klien tersebut. Dalam sistem operasi Windows, beberapa aplikasi klien *instant messaging* dan juga klien VoIP seperti Gizmo juga mendukung DNS-SD. Beberapa distribusi GNU/Linux juga memasukkan dukungan fungsionalitas DNS-SD.

mDNS/DNS-SD dikembangkan oleh seorang pekerja di Apple Computer, Stuart Cheshire, saat Apple berpindah dari AppleTalk menuju protokol TCP/IP.
### Protokol Microsoft: Universal Plug and Play (UPnP) SSDP
Protokol *[[Simple Service Discovery Protocol]]* (SSDP) merupakan sebuah protokol Universal Plug and Play, yang digunakan di dalam sistem operasi Windows XP dan beberapa merek perangkat jaringan. SSDP menggunakan notifikasi pengumuman yang ditawarkan oleh protokol *[[Hypertext Transfer Protocol]]* (HTTP) yang memberikan *[[Universal Resource Identifier]]* (URI) untuk tipe layanan dan juga *Unique Service Name* (USN). Tipe-tipe layanan diatur oleh *Universal Plug and Play Steering Committee*.

SSDP didukung oleh banyak perangkat *[[firewall]]* Small Office Home Office (SOHO), di mana *host* komputer yang berada di belakangnya bisa membukakan lubang untuk beberapa aplikasi. SSDP juga terdapat di dalam sistem-sistem pusat media digital (*digital media center*), di mana pertukaran media antara komputer dan media center difasilitasi dengan menggunakan SSDP.
### Usaha yang sedang dilakukan dan Protokol standar IETF
Protokol *[[Service Location Protocol]]* (SLP), satu-satunya protokol yang telah mencapai status "*Proposed Standard*" oleh IETF untuk kategori *service discovery*, didukung oleh printer-printer jaringan milik Hewlett-Packard, Novell, Sun Microsystems, dan Apple. Meskipun demikian, SLP diabaikan oleh beberapa vendor besar lainnya. SLP digambarkan dalam RFC 2608 dan RFC 3224, dan implementasinya bisa diperoleh dalam Solaris dan Linux.
## Standardisasi
Standar untuk memilih alamat untuk perangkat-perangkat yang dihubungkan ke dalam jaringan komputer, RFC 3927, telah dipublikasikan pada bulan Maret 2005 oleh kelompok kerja *Zeroconf IETF Working Group*, yang mencakup di dalamnya orang-orang yang bekerja di Microsoft, Apple, dan Sun Microsystems.

LLMNR telah diserahkan untuk diadopsi secara resmi pada kelompok kerja DNSEXT IETF working group, tetapi gagal memperoleh konsensus, lalu dijadikan RFC yang memiliki status "*informational*" saja: RFC 4795. Setelah itu, Apple pun diminta oleh IETF untuk menyerahkan spesifikasi mDNS/DNS-SD, akan tetapi Apple pun masih gagal, dan protokol tersebut juga dikategorikan dalam status "*informational*", meskipun mDNS/DNS-SD jauh lebih banyak digunakan secara luas ketimbang LLMNR.

Sementara itu, RFC 2608, yang merupakan dokumen mengenai standar SLP untuk mengetahui di mana untuk mendapatkan layanan, dipublikasikan oleh kelompok kerja *SVRLOC IETF working group*.
## Implementasi
### Apple Bonjour
Solusi Zeroconf yang paling banyak diadopsi adalah **Bonjour** (yang sebelumnya dikenal dengan *Rendezvous*) yang dipublikasikan oleh Apple, yang menggunakan protokol mDNS/DNS-SD. Apple mengubah teknologi dari SLP ke mDNS/DNS-SD saat mereka merilis Mac OS X 10.1 dan Mac OS X 10.2, meskipun SLP tetap didukung oleh Mac OS.

Aplikasi mDNSResponder milik Apple juga memiliki antarmuka untuk bahasa pemrograman C dan Java, dan tersedia untuk beberapa sistem operasi, seperti BSD, Mac OS X, Linux, dan beberapa sistem operasi yang berbasiskan POSIX, serta tentu saja untuk Microsoft Windows, yang bisa diunduh dari situs web Apple.
### Avahi
Avahi adalah implementasi Zeroconf untuk sistem operasi Linux dan BSD. Avahi mengimplementasikan IPv4LL, mDNS, dan DNS-SD. Teknologi ini telah menjadi bagian dalam banyak distribusi Linux, dan sering diinstalasikan secara default oleh beberapa distribusi. Jika dijalankan secara bersamaan dengan modul `nss-mdns`, Avahi juga bisa menawarkan fitur resolusi nama host.

Avahi juga mengimplementasikan pustaka kompatibilitas biner yang melakukan emulasi terhadap Bonjour dan Howl (implementasi mDNS yang pernah populer tetapi telah tidak digunakan lagi), sehingga perangkat lunak yang menggunakan implementasi-implementasi tersebut juga dapat menggunakan Avahi menggunakan antarmuka emulasi.
### [[Windows CE]] 5.0
Microsoft mencangkokkan LLMNR di dalam sistem operasi Microsoft Windows CE versi 5.0 miliknya.
### Alamat-alamat Link-local IPv4
Ada beberapa implementasi:
* Windows dan Mac OS telah mendukung teknologi ini sejak tahun 1998. Apple bahkan merilis kode sumber implementasi fitur ini di dalam paket `bootp` dalam sistem operasi Darwin.
* `Avahi` mengandung sebuah implementasi IPv4LL dalam perangkat bantu `avahi-autoipd`.
* `zcip` (Zero-Conf IP)
* `BusyBox`, memasukkan sebuah implementasi IPv4LL.
* `Stablebox`, sebuah implementasi turunan `Busybox`, menawarkan implementasi IPv4LL yang dimodifikasi sedikit saja, dengan nama `llad`.
* `zeroconf`, sebuah paket yang dibuat berbasiskan IPvLL, merupakan implementasi yang lebih ringkas yang dibuat oleh Arthur van Hoff.

Implementasi-implementasi yang disebutkan di atas merupakan *[[daemon|daemon-daemon]]* yang berdiri sendiri, atau hanya *plugin* untuk klien DHCP yang hanya berurusan dengan alamat IP *link-local* saja. Pendekatan lain yang digunakan adalah dengan memodifikasi klien DHCP, seperti:
* Elvis Pfützenreuter yang telah menulis sebuah *[[patch]]* untuk *uDHCP client/server*.

Kedua jenis implementasi tersebut di atas tidak dapat menangani beberapa masalah yang bersumber dari kernel seperti halnya melakukan *[[broadcast]]* terhadap *[[Address Resolution Protocol|ARP reply]]* atau menutup koneksi jaringan yang sedang terbuka.