Mengapa localhost IP 127.0.0.1?

85

Saya bertanya-tanya apa asal dari keputusan untuk membuat localhostalamat IP 127.0.0.1. Apa "arti" dari 127? apa "arti" dari 0.0.1?

Roee Adler
sumber
2
Saya ingin tahu tentang ini juga. Loopback IPv6 adalah 0: 0: 0: 0: 0: 0: 0: 0: 1, yang masuk akal bagi saya.
hyperslug
1
Ya, localhost IPv6 ini tidak menaikkan terlalu banyak pertanyaan :)
Roee Adler
21
Saya belum pernah melihat "Tidak ada tempat seperti 0: 0: 0: 0: 0: 0: 0: 0: 1" keset pintu!
William Hilsum
9
@Apakah Kompres ke "tidak ada tempat seperti :: 1" dan Anda akan mendapatkan sedikit lebih banyak bisnis.
new123456
6
@WilliamHilsum memperluas ke "Tidak ada tempat seperti 0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001" dan mengenakan biaya lebih banyak.
Nick T

Jawaban:

87

127 adalah nomor jaringan terakhir di jaringan kelas A dengan subnet mask dari 255.0.0.0. 127.0.0.1adalah alamat penugasan pertama di subnet. 127.0.0.0tidak 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.1jika mau. Mengapa mereka menunggu hingga nomor jaringan terakhir untuk mengimplementasikan ini? Saya tidak berpikir itu didokumentasikan.

John T
sumber
14
Satu-satunya alasan saya akan melihat mereka secara acak memilih 127 adalah nomor yang mudah diingat (01111111), dan mungkin mereka mengizinkan 16 juta alamat host untuk dapat berkomunikasi dengan dirinya sendiri dan hanya dengan dirinya sendiri (seperti bagaimana beberapa program dan komponen Windows menggunakan port saat ini). RFC hanya benar-benar menyebutkan bahwa itu praktik standar untuk 127.0.0.1/32 yang akan digunakan untuk loopback. Ini agak samar-samar tentang apa yang mereka maksudkan untuk sisa blok selain dari itu kembali ke tuan rumah dan tidak pernah mengenai jaringan, karenanya spekulasi saya di atas.
RoyalKnight
2
Memiliki semua alamat blok yang dikembalikan ke 127.0.0.1 tergantung implementasi dan mungkin hanya kekhasan tumpukan Linux. Solaris setidaknya memerlukan antarmuka untuk terikat ke alamat tujuan agar tes ping Anda berhasil.
jlliagre
56

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.

hyperslug
sumber
23

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.

Joseph Bui
sumber
1
Perhatikan bahwa saya menggunakan "kata-kata" karena mesin lama saat itu memiliki ukuran kata yang tidak biasa, tetapi mereka sering masih menggunakan aritmatika 8 bit. Untuk 8088, saya akan mengatakan "byte."
Joseph Bui
5

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.

kwe
sumber
4

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

kolypto
sumber
25
Kenapa itu jelas lagi?
Roee Adler
Saya percaya mereka hanya memilih sesuatu yang sederhana. Sekali lagi, semua "1" dicadangkan, jadi satu nol ditambahkan :)
31980 kolypto
jadi mengapa tidak 10111111? :) atau 11011111 atau 11101111 atau 11110111 atau 11111011 atau 11111101 atau semacamnya?
Mushex Antaranian
1
Nggak. Coba lagi.
Ardee Aram
4

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.

Dario Fumagalli
sumber
Jawaban yang bagus Ini benar-benar penjelasan yang paling jelas dan paling masuk akal.
not2qubit
Sebenarnya, ketika IP dirancang dan beberapa landasan awal untuk itu diletakkan, bekerja dengan data dalam kelipatan bilangan bulat 8 bit tidak diberikan. Banyak arsitektur pada waktu itu memiliki ukuran register dan kata dalam kelipatan 12 atau 18 bit, misalnya. Ini adalah salah satu alasan mengapa oktal sangat populer saat itu; 18 bit dapat direpresentasikan sebagai tepat 6 digit oktal tanpa kehilangan dan tanpa limbah; 12 bit adalah 4 digit oktal. Mikrokomputer biasanya bekerja dalam jumlah 8-bit, tapi itu hanya banyak kemudian bahwa mikrokomputer mulai yang teratur terhubung (terutama langsung) ke Internet.
CVn