it-swarm.asia

Mengapa localhost IP 127.0.0.1?

Saya bertanya-tanya apa asal dari keputusan untuk membuat localhost's IP address 127.0.0.1. Apa "arti" dari 127? apa "arti" dari 0.0.1?

85
Roee Adler

127 adalah nomor jaringan terakhir dalam jaringan kelas A dengan subnet mask dari 255.0.0.0. 127.0.0.1 adalah alamat yang dapat ditentukan pertama di subnet. 127.0.0.0 tidak dapat digunakan karena itu akan menjadi nomor kawat. Tetapi menggunakan nomor lain untuk bagian Host harus berfungsi dengan baik dan kembali menggunakan 127.0.0.1. Anda dapat mencobanya sendiri dengan mem-ping 127.1.1.1 jika mau. Mengapa mereka menunggu hingga nomor jaringan terakhir untuk mengimplementasikan ini? Saya tidak berpikir itu didokumentasikan.

87
John T

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".

Misalnya, alamat 0.0.0.37 dapat diartikan sebagai makna Host 37 di 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 pun 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, tapi sejauh ini saya bisa Dig. Mungkin lebih masuk akal untuk memilih 1.0.0.0 untuk loopback tapi itu sudah diberikan kepada Jaringan Radio Paket BBN.

56
hyperslug

Para perancang Internet benar-benar tahu cara kerja perangkat keras, dan mereka merancang dengan implementasi tingkat rendah dalam pikiran.

Nilai 0, 127 dan 255 adalah khusus dalam 8 bit perakitan 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 memuat nilai 0 ke dalam register biasanya akan menetapkan bendera nol pada chip. Bayangkan program networking 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 50% dalam waktu eksekusi juga.

23
Joseph Bui

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 Host, 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 sekali, bahwa gagasan "membuang-buang" seluruh kelas alamat tidak masuk dalam pikiran siapa pun pada saat itu.

Kegunaan localhost adalah Anda dapat berbicara dengan diri sendiri menggunakan alamat IP yang dikodekan. Itu digunakan jauh sebelum ada Sistem Nama Domain. Anda sebenarnya dapat menggunakan salah satu dari 127.x.x.x alamat 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.

5
kwe

Pertama, seluruh rentang 127.x.x.x menunjuk ke localhost Anda.
127 dalam biner adalah "01111111". "11111111" = 255 dan 0 dicadangkan, jadi pilihannya jelas :)

4
kolypto

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 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 Majelis kuno seperti "BEQ, BNE" (6502 CPU) untuk penjelasan yang lebih panjang. Juga periksa 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.

3
Dario Fumagalli