Saya menulis ini tahun lalu sebagai dokumen referensi internal ketika beberapa insinyur kami menjadi bingung ketika diminta untuk memasukkan alamat IPv6 ke DNS. Saya tidak membahas DNS secara khusus, tetapi sebagian besar kekhawatiran tampaknya berada di sekitar format alamat dan tidak "memahami" cara kerjanya. Mungkin itu akan bermanfaat bagi orang lain juga:
Jadi, hal pertama yang harus diketahui adalah bahwa add-add IPv6 terlihat jelek. Mereka melakukannya.
Tapi saya pikir itu hanya karena kita tidak terbiasa berurusan dengan mereka dan kita tidak mengerti apa artinya pada tingkat yang sangat rendah seperti yang kita lakukan dengan alamat IPv4. Saya pikir perlu waktu untuk merasa nyaman dengan mereka, tetapi kita harus mulai dari suatu tempat.
Satu hal penting untuk diingat adalah bahwa alamat IPv4 adalah angka 32 bit dan alamat IPv6 adalah angka 128 bit. Ketika router merutekan atau firewall menyaring, mereka melakukannya berdasarkan nomor itu. Bagaimana seorang manusia memilih untuk menampilkan angka itu benar-benar sewenang-wenang dan sebagian besar hanyalah tradisi. Jadi seluruh email ini menjelaskan bagaimana manusia memilih untuk mewakili angka-angka ini - mesin tidak peduli, itu semua bagi mereka.
Alamat IPv4 adalah 32 bit, atau empat byte. Apa yang kita anggap sebagai alamat IP "nyata" hanyalah metode yang telah menjadi standar untuk mewakili string bit itu, memisahkan bit menjadi 4 kelompok 8-bit, mewakili masing-masing 8 bit sebagai angka desimal, dan memisahkan angka desimal ini suatu periode. Jadi, ambil alamat IP acak 172.30.154.249. Ketika router "berpikir" tentang alamat IP ini, itu benar-benar memikirkannya seperti ini:
10101100000111101001101011111001
Yang bisa kita terjemahkan ke dalam bentuk kita sendiri:
10101100 = 172
00011110 = 30
10011010 = 154
11111001 = 249
Terkadang Anda mungkin juga melihat ini ditulis sebagai angka desimal murni:
10101100000111101001101011111001 = 2,887,686,905
Hampir tidak ada yang menggunakan formulir ini dengan sengaja (*), tetapi ini adalah cara yang valid secara historis untuk menulis alamat IPv4. Bahkan, formulir ini digunakan dalam RFC821 yang mendefinisikan SMTP pada tahun 1982. Jika Anda ingin merutekan email secara manual ke mesin tertentu alih-alih menggunakan DNS, Anda bisa menggunakan dua jenis literal yang berbeda. Yang pertama adalah bentuk "titik bertitik" yang dikenal dalam tanda kurung ("user @ [172.30.154.249]"). Yang kedua menggunakan bentuk desimal dari IP yang diawali dengan tanda pound ("user @ # 2887686905").
Semua hal di atas hanya untuk menyediakan kerangka kerja untuk menerjemahkan pengetahuan Anda tentang cara kerja alamat IPv4 ke alamat IPv6. Sama seperti IPv4 adalah angka 32 bit, alamat IPv6 adalah angka 128 bit. ARIN menetapkan MY AWESOME COMPANY (**) kisaran IP 2311: FD67 / 32. Demi memiliki contoh untuk bekerja dengan saya akan menggunakan IP 2311: FD67 :: AC1E: 9AF9.
Jadi, inilah bit string yang mewakili ip6 itu:
00100011000100011111110101100111000000000000000000000000000000000000000000000000000000000000000010101100000111101001101011111001
Jika kita merepresentasikan string bit ini dengan cara kita melakukan string bit IPv4 (konversi setiap chunk 1-byte menjadi desimal, pisahkan masing-masing dengan sebuah periode), kita akan mendapatkan yang berikut:
35.17.253.103.0.0.0.0.0.0.0.0.172.30.154.249
Itu memiliki beberapa masalah. Yang pertama adalah bahwa itu terlihat seperti nomor IPv4 yang funky, yang tidak baik, Anda ingin cara yang solid untuk membedakannya. Yang lainnya adalah banyak informasi, banyak jumlah, dan banyak ruang kosong. Jadi, kedua masalah diselesaikan dengan menggunakan seperator berbeda (titik dua (:) bukan titik (.)) Dan dengan merepresentasikan byte dalam heksadesimal bukan desimal. Di mana IPv4 memisahkan 8-bit, diwakili dalam desimal, dengan titik, IPv6 memisahkan 16-bit, dipisahkan dengan titik dua. Jadi, inilah uraian IP IP6 contoh kami:
0010001100010001 = 2311
1111110101100111 = FD67
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
1010110000011110 = AC1E
1001101011111001 = 9AF9
2311:FD67:0:0:0:0:AC1E:9AF9
Ini masih memiliki banyak ruang putih di dalamnya, jadi ada kelonggaran bahwa string nol terbesar dapat diabaikan dan diwakili dengan usus besar ganda. Jadi, IP di atas dapat ditulis:
2311:FD67::AC1E:9AF9
Saya belum pernah melihat ini banyak, tetapi seperti yang saya pahami ada juga konvensi yang rapi untuk memungkinkan 32-bit terakhir ditulis sebagai dotted-quad awalan, memungkinkan untuk pengenalan alamat warisan yang mudah saat Anda bermigrasi dari IPv4 ke IPv6 . Jadi, karena Anda mungkin memperhatikan alamat contoh IPv6 saya berakhir dengan 32 bit yang sama yang seluruhnya terdiri dari contoh IPv4 saya. Itu sangat berguna ketika Anda menulis dengan gaya ini. Dalam hal ini, addr IPv6 saya akan terlihat seperti:
2311:FD67::172.30.145.249
Untuk kembali ke tempat saya mulai dengan IPv6, saya menyebutkan bahwa kami telah ditugaskan 2311: FD67 / 32. / 32 adalah topeng bit seperti di alamat IPv4. Ini berarti bahwa pada dasarnya kita telah diberi secara statis 32 bit pertama dari 128 bit dalam alamat IPv4 yang dapat kita buat. Karena 2311: FD67 adalah 32 bit, itu berarti setiap alamat IP yang kami buat dari rentang itu akan mulai dengan itu.
Dengan kata lain, sama seperti 172.17 / 16 dapat dianggap sebagai "setiap IP antara 172.17.0.0 dan 172.17.255.255", 2311: FD67 / 32 dapat dianggap sebagai "setiap IP antara 2311: FD67: 0: 0: 0: 0: 0: 0 dan 2311: FD67: FFFF: FFFF: FFFF: FFFF: FFFF: FFFF ".
Saya pikir itu akan lama sebelum kita mulai bermigrasi ke IPv6 tetapi saya harap penjelasan ini akan membantu Anda merasa lebih nyaman menggunakannya dan merujuknya.
Sekali lagi, sangat penting untuk memahami satu-satunya hal yang saya bicarakan di sini adalah cara menuliskan alamat IPv6. Sepertinya ada banyak kecerdasan yang dibangun ke dalam skema penomoran untuk perutean, dll, yang saya belum benar-benar pahami, jadi yang bisa saya bahas sekarang adalah seperti apa kelihatannya =).
(*) Saya telah melihat representasi IPv4 desimal di beberapa perangkat lunak debug sebelumnya, tapi saya hampir yakin itu kesalahan atau kemalasan, saya pikir itu jauh lebih esier dalam kode C untuk mencetak integer 32bit dengan cepat daripada untuk format quad putus-putus untuk dicetak.
(**) Saya mencantumkan nama perusahaan dan awalannya