Alamat IPv4 adalah lebar 32 bit, dan dengan demikian ukuran ruang alamat adalah 2 32 , atau 4.294.967.296. Namun, ini hanya batas atas teoretis. Ini bukan representasi akurat dari semua alamat yang sebenarnya dapat digunakan di internet publik.
Untuk keperluan tantangan ini, diasumsikan bahwa semua pengalamatan bersifat classful . Pada kenyataannya, pembagian ruang alamat kelas telah digantikan oleh CIDR (Classless Inter-Domain Routing dan VLSM (Variable Length Subnet Masking) , tetapi ini diabaikan untuk tantangan ini.
Menurut skema alamat classful, ada 3 kelas:
- Kelas A -
0.0.0.0
untuk127.255.255.255
dengan/8
panjang netmask - Kelas B -
128.0.0.0
untuk191.255.255.255
dengan/16
panjang netmask - Kelas C -
192.0.0.0
ke223.255.255.255
dengan/24
panjang netmask
Kelas D (multicast) dan E (dicadangkan) juga ditentukan, tetapi ini tidak digunakan untuk alamat unicast publik.
Setiap kelas dibagi menjadi jaringan sesuai dengan netmask untuk kelas itu.
Dengan demikian 3.0.0.0
adalah contoh dari jaringan Kelas A. Panjang netmask untuk Kelas A adalah 8, jadi ruang alamat lengkap untuk jaringan ini adalah 3.0.0.0
untuk 3.255.255.255
. Namun, alamat pertama ( 3.0.0.0
) dicadangkan sebagai alamat jaringan dan alamat terakhir ( 3.255.255.255
) dicadangkan sebagai alamat siaran untuk jaringan itu. Dengan demikian rentang sebenarnya dari alamat yang dapat digunakan adalah 3.0.0.1
ke 3.255.255.254
2 24 - 2 (= 16.777.214) total alamat.
Demikian pula, 200.20.30.0
adalah contoh dari jaringan Kelas C. Panjang netmask untuk Kelas C adalah 24, jadi ruang alamat lengkap untuk jaringan ini adalah 200.20.30.0
untuk 200.20.30.255
. Menghapus jaringan dan menyiarkan alamat meninggalkan kisaran sebenarnya dari alamat yang dapat digunakan adalah 200.20.30.1
ke 200.20.30.254
2 8 - 2 (= 254) alamat total.
Ada batasan lebih lanjut pada rentang alamat yang dapat digunakan untuk unicast publik. Menurut RFC 6890 , rentang yang tidak diizinkan adalah:
0.0.0.0/8
- Jaringan lokal10.0.0.0/8
- Penggunaan Pribadi100.64.0.0/10
- Ruang Alamat Bersama127.0.0.0/8
- Loopback169.254.0.0/16
- Tautan Lokal172.16.0.0/12
- Penggunaan Pribadi192.0.0.0/24
- Penugasan Protokol IETF192.0.2.0/24
- Dicadangkan untuk digunakan dalam dokumentasi192.88.99.0/24
- 6to4 Relay Anycast192.168.0.0/16
- Penggunaan Pribadi198.18.0.0/15
- Pembandingan198.51.100.0/24
- Dicadangkan untuk digunakan dalam dokumentasi203.0.113.0/24
- Dicadangkan untuk digunakan dalam dokumentasi
Perhatikan bahwa daftar di atas menggunakan netmask VLSR untuk menentukan rentang secara efisien. Dalam semua kecuali satu kasus, panjang topeng yang diberikan memiliki spesifisitas kurang dari atau sama dengan panjang topeng berkelas normal untuk awal kisaran. Dengan demikian masing-masing rentang VLSR ini setara dengan satu atau lebih jaringan classful. Misalnya 172.16.0.0/12
setara dengan jaringan Kelas B 172.16.0.0
untuk 172.31.0.0
atau kisaran alamat 172.16.0.0
untuk 172.31.255.255
.
Pengecualian untuk aturan ini adalah 100.64.0.0/10
rentang VLSR, yang lebih spesifik daripada kisaran 100.0.0.0
Kelas A yang mengandung . Dengan demikian 100.0.0.0
akan ditangani seperti rentang Kelas A lainnya dengan pengecualian memiliki lubang alamat 4.194.304 di tengah. Alamat yang valid dalam kisaran Kelas A ini adalah 100.0.0.0
untuk 100.63.255.255
dan 100.128.0.0
untuk 100.255.255.254
, total 2 24 - 2 22 - 2 (= 12.582.910) total alamat.
Tujuan dari tantangan ini adalah untuk mengeluarkan semua alamat IPv4 Kelas A, B, dan C unicast yang dapat ditetapkan secara sah ke host internet publik (yaitu tidak termasuk yang dirinci di atas).
Tidak ada input yang akan diberikan dan seharusnya tidak diharapkan.
Output mungkin dalam bentuk apa pun nyaman untuk bahasa Anda, misalnya array, daftar, string yang dibatasi. Alamat harus berupa output dalam format desimal bertitik standar.
Urutan output tidak masalah.
Dibangun secara khusus yang memberikan rentang alamat yang diperlukan tidak diizinkan. Demikian pula, setiap metode untuk memeriksa tabel routing BGP (atau protokol lainnya) secara dinamis untuk internet publik dilarang.
Alamat yang paling rendah secara numerik adalah 1.0.0.1
dan yang paling tinggi secara numerik 223.255.255.254
.
Tantangan ini mirip dengan Mencetak semua alamat IPv6 , tetapi karena pembatasan harus memerlukan implementasi yang berbeda-beda.
sumber
@echo off
juga.