Alamat IP adalah nomor rumah yang kita singgung di Chapter Networking Basics — kini saatnya membedah isinya. Alamat ini menentukan ke jaringan mana sebuah mesin masuk dan mesin mana yang boleh dihubungi langsung, sehingga kesalahan satu digit bisa membuat server tak terjangkau. Pada Chapter ini kita pelajari struktur IPv4, notasi CIDR, perhitungan jumlah host dengan bantuan bash, dan rentang alamat privat yang dipakai di jaringan lokal.
Anatomi Alamat IPv4 #
IPv4 adalah alamat sepanjang 32 bit, ditulis sebagai empat angka 0-255 yang dipisah titik — misalnya 192.168.1.130. Tiap angka disebut oktet karena memuat 8 bit; angka 192 adalah 11000000 dalam biner, 168 adalah 10101000, dan seterusnya. Total kombinasi yang mungkin sekitar 4,3 miliar.
Sebuah alamat sebenarnya memuat dua informasi sekaligus: bagian network yang menyatakan jaringan tempat mesin berada, dan bagian host yang menyatakan mesin mana di dalam jaringan itu. Pembatas kedua bagian inilah pekerjaan subnet mask.
Subnet Mask dan Notasi CIDR #
Subnet mask adalah deretan bit 1 diikuti bit 0 yang menandai berapa bit awal alamat menjadi bagian network. Mask 255.255.255.0 berarti 24 bit pertama adalah network dan 8 bit terakhir adalah host. Notasi CIDR meringkasnya menjadi angka: /24 sama persis dengan mask 255.255.255.0, dan alamat lengkap ditulis 192.168.1.130/24.
Berapa banyak mesin yang muat dalam satu subnet? Rumusnya 2^(bit host) - 2 — dua alamat dikorbankan karena alamat pertama menjadi alamat network dan alamat terakhir menjadi alamat broadcast. Bash bisa menghitung ini tanpa kalkulator:
for prefix in 24 25 26 30; do
echo "/$prefix: $((2 ** (32 - prefix) - 2)) host"
doneOutput yang Dihasilkan:
/24: 254 host
/25: 126 host
/26: 62 host
/30: 2 hostMari kita bedah blok tersebut:
- Baris 1 (
for prefix in 24 25 26 30): empat panjang prefix diuji satu per satu, dari subnet besar ke kecil. - Baris 2 (
2 ** (32 - prefix)): operator**adalah pangkat;32 - prefixmenyisakan jumlah bit host, lalu2dipangkatkan dengan nilai itu. - 2: pengurangan dua alamat korban — alamat network dan broadcast yang tidak boleh dipakai host.
Hasilnya: setiap bit network tambahan memangkas jumlah host hampir setengahnya, dan /30 menyisakan tepat 2 host untuk link point-to-point.
Menghitung Network dan Broadcast #
Mengetahui network address sebuah subnet dari satu alamat contoh adalah latihan klasik. Caranya: AND-kan tiap oktet alamat dengan oktet mask untuk network, lalu OR-kan bagian host dengan semua bit 1 untuk broadcast:
IFS=. read a b c d <<< "192.168.1.130"
IFS=. read m1 m2 m3 m4 <<< "255.255.255.0"
echo "network : $((a & m1)).$((b & m2)).$((c & m3)).$((d & m4))"
echo "broadcast : $((a & m1)).$((b & m2)).$((c & m3)).$((d | (255 - m4)))"Output yang Dihasilkan:
network : 192.168.1.0
broadcast : 192.168.1.255Bedah baris demi baris:
- Baris 1-2 (
IFS=. read ...): variabelIFSdiubah ke titik agarreadmemecah alamat berbentuk192.168.1.130menjadi empat variabel —aberisi192,dberisi130, dan seterusnya; string<<<mengumpan alamat itu sebagai masukanread. - Baris 3: tiap oktet alamat di-AND-kan dengan oktet mask. Karena oktet keempat mask adalah
0, hasil130 & 0pasti0— itulah alamat network192.168.1.0. - Baris 4: untuk broadcast, bagian host di-OR-kan dengan
255 - m4. Oktet keempat menjadi130 | 255 = 255, sehingga hasilnya192.168.1.255.
Rentang Privat RFC1918 dan Loopback #
Tidak semua alamat boleh dipakai bebas di internet. Dokumen RFC1918 menyisakan tiga blok khusus untuk jaringan internal — alamatnya tidak dirutekan ke internet publik, sehingga dipakai berulang di rumah, kantor, dan pusat data:
| Blok | CIDR | Rentang oktet awal | Kegunaan umum |
|---|---|---|---|
10.0.0.0/8 | 16 juta host | 10.x.x.x | jaringan besar, pusat data |
172.16.0.0/12 | 1 juta host | 172.16-172.31 | jaringan menengah |
192.168.0.0/16 | 65 ribu host | 192.168.x.x | rumah dan kantor kecil |
Pola case bash bisa menguji alamat mana yang masuk blok privat:
for ip in 192.168.1.10 8.8.8.8 172.20.5.9 203.0.113.7 10.1.2.3; do
case $ip in
10.*|192.168.*|172.1[6-9].*|172.2[0-9].*|172.3[01].*)
echo "$ip: privat (RFC1918)" ;;
*)
echo "$ip: publik" ;;
esac
doneOutput yang Dihasilkan:
192.168.1.10: privat (RFC1918)
8.8.8.8: publik
172.20.5.9: privat (RFC1918)
203.0.113.7: publik
10.1.2.3: privat (RFC1918)Pola 172.1[6-9].* dan kawan-kawannya membidik oktet kedua 16-31, batas tepat blok 172.16.0.0/12. Contoh 203.0.113.7 berasal dari blok dokumentasi RFC5737, sedangkan 8.8.8.8 adalah DNS publik Google.
Satu blok lagi yang wajib dikenal: 127.0.0.0/8 adalah loopback — seluruh rentangnya menunjuk ke mesin sendiri, dan 127.0.0.1 adalah pintunya yang paling sering dipakai.
Sekilas IPv6 #
Keterbatasan 32 bit IPv4 dijawab IPv6 dengan 128 bit — delapan kelompok heksadesimal seperti 2001:db8:0:0:0:0:0:1. Deretan nol dipadatkan jadi ::, sehingga alamat tadi berbunyi 2001:db8::1; blok 2001:db8::/32 disisakan khusus untuk dokumentasi. Mesin modern memiliki alamat IPv6 dan IPv4 sekaligus, seperti yang sudah kita lihat pada interface lo dengan ::1/128.
Alamat dan subnet kini bisa kita baca dan hitung. Berikutnya: bagaimana kernel memakai informasi itu untuk memutuskan ke mana paket dikirim — pekerjaan perintah ip dan routing table, materi Chapter ip dan Routing
.
Referensi lanjut: wiki Arch tentang IPv6 untuk migrasi dual-stack, dan dokumentasi jaringan Debian untuk praktik pengalamatan di Debian.