Saya bertanya-tanya apa asal dari keputusan untuk membuat localhost
alamat IP 127.0.0.1
. Apa "arti" dari 127
? apa "arti" dari 0.0.1
?
Saya bertanya-tanya apa asal dari keputusan untuk membuat localhost
alamat IP 127.0.0.1
. Apa "arti" dari 127
? apa "arti" dari 0.0.1
?
Jawaban:
127 adalah nomor jaringan terakhir di jaringan kelas A dengan subnet mask dari 255.0.0.0
. 127.0.0.1
adalah alamat penugasan pertama di subnet. 127.0.0.0
tidak dapat digunakan karena itu akan menjadi nomor kawat. Tetapi menggunakan nomor lain untuk porsi host harus berfungsi dengan baik dan kembali menggunakan 127.0.0.1
. Anda dapat mencobanya sendiri dengan melakukan ping 127.1.1.1
jika mau. Mengapa mereka menunggu hingga nomor jaringan terakhir untuk mengimplementasikan ini? Saya tidak berpikir itu didokumentasikan.
Penyebutan paling awal yang dapat saya temukan mengenai tugas 127 sebagai loopback adalah November 1986 RFC 990 yang ditulis oleh Reynolds dan Postel:
Alamat nol harus ditafsirkan sebagai makna "ini", seperti dalam "jaringan ini".
Sebagai contoh, alamat 0.0.0.37 dapat diartikan sebagai host makna pada jaringan ini.
...
Kelas A nomor jaringan 127 ditugaskan fungsi "loopback", yaitu, datagram yang dikirim oleh protokol tingkat yang lebih tinggi ke alamat jaringan 127 harus loop kembali ke dalam host. Tidak ada datagram "dikirim" ke alamat jaringan 127 yang akan pernah muncul di jaringan mana saja di mana saja.
Bahkan sejak September 1981 RFC 790 , 0 dan 127 sudah dicadangkan:
000.rrr.rrr.rrr Dilindungi [JBP] ... 127.rrr.rrr.rrr Dilindungi [JBP]
0 dan 127 adalah satu-satunya jaringan Kelas A yang dicadangkan pada tahun 1981. 0 digunakan untuk menunjuk ke host tertentu, sehingga tersisa 127 untuk loopback.
Saya tahu ini tidak menjawab pertanyaan, tetapi sejauh ini saya bisa menggali. Mungkin lebih masuk akal untuk memilih 1.0.0.0 untuk loopback tapi itu sudah diberikan kepada BBN Packet Radio Network.
Para perancang Internet benar-benar tahu bagaimana perangkat keras itu bekerja, dan mereka merancang dengan implementasi tingkat rendah dalam pikiran.
Nilai 0, 127 dan 255 adalah khusus dalam perakitan 8 bit dan pemrograman bahasa mesin karena ada "trik" yang dapat Anda gunakan untuk menguji nilai-nilai ini dan bercabang ke kode yang berbeda menggunakan instruksi yang lebih kecil yang mengeksekusi lebih cepat daripada integer lainnya. 127 adalah integer 8 bit bertanda tertinggi, jadi menambahkannya dengan 1 akan menyebabkan overflow yang ditandatangani. Demikian pula, penambahan 255 akan menyebabkan overflow tanpa tanda tangan. Hanya dengan memuat nilai 0 ke dalam register biasanya akan menetapkan flag nol pada chip. Bayangkan program jaringan terlihat seperti ini di pseudocode:
if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();
Meskipun itu tergantung pada chip, pada masa itu kebanyakan chip dapat meng-encode tes ini dengan 2 kata, 3 kata dan 3 kata masing-masing (total 8 kata) dan selanjutnya tes-tes khusus itu semua cenderung dieksekusi dalam siklus 1 jam masing-masing. Menggunakan nilai lain mungkin akan membutuhkan 4 kata masing-masing (total 12 kata), peningkatan 50% dalam ukuran kode dan kemungkinan peningkatan waktu eksekusi 50% juga.
Jika Anda berpikir tentang apa arti alamat IP localhost atau loopback, Anda menyadari bahwa Anda tidak pernah ingin melihat alamat itu, atau jaringan tempat alamat itu berada, di luar host. (Di dalam tuan rumah, terlalu gelap untuk melihatnya. Permintaan maaf kepada Mark Twain.)
Jadi, seseorang harus memilih jaringan IP untuk mewakili alamat host lokal ini. Saya tidak ingat siapa yang pertama kali memilihnya, tetapi itu ditentukan dalam Permintaan IETF untuk Komentar yang secara berkala dikeluarkan sebagai "Persyaratan Host".
Sudah lama terjadi, bahwa gagasan "membuang-buang" seluruh kelas alamat tidak masuk dalam pikiran siapa pun pada saat itu.
Kegunaan localhost adalah Anda dapat berbicara sendiri menggunakan alamat IP yang dikodekan keras. Itu digunakan jauh sebelum ada Sistem Nama Domain. Anda sebenarnya dapat menggunakan salah satu dari alamat 127.xxx yang valid, tetapi tidak ada yang pernah melakukannya. Anda tidak dapat menyelinap dan menggunakan 127 sebagai jaringan nyata karena "Kebutuhan Router" RFC melarang pernah merutekan jaringan itu di internet apa pun.
Pertama, seluruh rentang 127.xxx menunjuk ke localhost Anda.
127 dalam biner adalah "01111111". "11111111" = 255 dan 0 dicadangkan, jadi pilihannya jelas :)
Karena ketika standar itu dibuat, komputer lambat dan biasanya terbatas pada register 8 bit. Membandingkan angka dengan angka sangat lambat, terutama jika angka-angka itu harus diambil dari belakang maka memori benar-benar lambat. Register, yaitu penyimpanan "CPU on board" jauh lebih cepat.
Terlebih lagi komputer-komputer lama memiliki instruksi khusus, lebih cepat untuk mendeteksi "sama dengan nol", "berbeda dari nol", "bilangan bulat negatif / positif" (di mana tandanya ... tebak, bit paling kiri, sekarang lihat koneksi dengan 127). , yaitu angka dengan semua biner "1" kecuali tanda = paling kiri?).
Oleh karena itu angka-angka khusus, karena mereka memungkinkan tipuan pemrograman untuk menyimpan banyak siklus CPU pada operasi yang sering dilakukan.
Anda tidak akan pernah melihat instruksi "IF CallerIP =" 0 "tetapi" IF NotZero (CallerIP) ".
Anda dapat memeriksa petunjuk perakitan kuno seperti "BEQ, BNE" (6502 CPU) untuk penjelasan yang lebih panjang. Periksa juga halaman ini .
Pada akhirnya:
0, 255 dan 127 semuanya bisa diperiksa dengan satu, tercepat, instruksi. Bahkan lebih banyak bahasa tingkat tinggi seperti C memiliki fungsi perbandingan "shortuct" yang secara internal dapat dioptimalkan oleh kompiler menjadi satu instruksi.
Tahun 70 dan 80 programmer benar-benar menghasilkan arsitektur yang luar biasa dengan sumber daya yang sangat langka, di belakang standar seperti penomoran IP ada banyak pemikiran dan kejeniusan.