it-swarm.asia

Neden localhost IP 127.0.0.1?

localhost 'ın IP adresini 127.0.0.1 yapma kararının Kökeninin ne olduğunu merak ettim. 127 dosyasının "anlamı" nedir? 0.0.1 dosyasının "anlamı" nedir?

85
Roee Adler

127, A sınıfı bir ağda, 255.0.0.0 alt ağ maskesine sahip son ağ numarasıdır. 127.0.0.1, alt ağdaki ilk atanabilir adrestir. 127.0.0.0 kullanılamaz çünkü bu tel numarasıdır. Ancak Host kısmı için başka herhangi bir sayı kullanmak, iyi çalışmalı ve 127.0.0.1 öğesini kullanmaya geri dönmelidir. İsterseniz 127.1.1.1 pingleyerek kendiniz deneyebilirsiniz. Bunu uygulamak için neden en son ağ numarasına kadar beklediler? Belgelendiğini sanmıyorum.

87
John T

127'nin geri döngü ile ilgili olarak bulabildiğim en eski söz, Kasım 1986'dır RFC 99 Reynolds ve Postel tarafından yazılmıştır:

Sıfır adresi, "bu ağ" da olduğu gibi "bu" olarak yorumlanmalıdır.

Örneğin, 0.0.0.37 adresi bu ağdaki Host 37 olarak yorumlanabilir.

...

A sınıfı (127) ağ numarasına "geridöngü" işlevi atanır, yani daha yüksek düzeyde bir protokol tarafından bir ağ (127) adresine gönderilen bir datagram, Host içinde geri dönmelidir. Bir ağa 127 "gönderilen" hiçbir datagram, hiçbir yerde herhangi bir ağda görünmemelidir.

Eylül 1981 gibi erken olsa bile RFC 79 , 0 ve 127 zaten rezerve edildi:

 000.rrr.rrr.rrr Ayrılmış [JBP] 
 ... 
 127.rrr.rrr.rrr Ayrılmış [JBP] 

0 ve 127, 1981 yılına kadar yalnızca ayrılmış A Sınıfı ağlardı. 0, belirli bir Ana Bilgisayarı işaret etmek için kullanıldı, böylece geri döngü için 127 kaldı.

Bunun soruyu cevaplamadığını biliyorum, ama bu kazabildiğim kadarıyla geri döndü. Geridönüş için 1.0.0.0'ı seçmek daha mantıklı olabilirdi ama bu zaten BBN Paket Radyo Ağı'na verildi.

56
hyperslug

İnternet tasarımcıları donanımın nasıl çalıştığını gerçekten biliyorlardı ve düşük seviyeli uygulamalar düşünülerek tasarlandılar.

0, 127 ve 255 değerleri 8 bit Assembly ve makine dili programlamasında özeldir, çünkü bu değerleri test etmek için kullanabileceğiniz "hileler" vardır ve diğer tamsayılardan daha hızlı çalışan daha küçük komutlar kullanarak farklı kodlara dallanırlar. 127, işaretli en yüksek 8 bit tam sayıdır, bu nedenle 1 değerine yükseltmek, işaretli bir taşma neden olur. Benzer şekilde, 255 değerinin artması imzalanmamış taşmalara neden olur. 0 değerini yalnızca bir register'a yüklemek genellikle yonga üzerine sıfır bayrağı koyacaktır. Ağ programının sözde kodda böyle göründüğünü hayal edin:

if (value == 0) doLocal();
if (value == 127) doLoopback();
if (value == 255) doNetwork();

Her ne kadar çipe bağlı olsa da, o günlerde çoğu cips bu testleri sırasıyla 2 kelime, 3 kelime ve 3 kelime (toplam 8 kelime) ile kodlayabiliyordu ve bu testlerin hepsinin her birinin 1 saat döngüsünde yürütülmesi muhtemeldi. Başka herhangi bir değerin kullanılması muhtemelen her biri 4 kelime (toplam 12 kelime), kod boyutunda% 50 ve uygulama süresinde de% 50 artış gerektirecektir.

23
Joseph Bui

Bir yerel ana bilgisayar veya geridöngü IP adresinin ne anlama geldiğini düşünüyorsanız, bu adresi veya bu adresin ait olduğu ağı bir Ana Bilgisayarın dışında asla görmek istemediğinizi fark edersiniz. (Bir Host cihazının içinde onu görmek çok karanlık. Mark Twain için özür dilerim.)

Bu yüzden, biri bu yerel ana bilgisayar adresini temsil etmek için bir IP ağı seçmek zorunda kaldı. İlk kimin seçtiğini hatırlamıyorum, ancak periyodik olarak "Ana Bilgisayar Gereklilikleri" olarak yayınlanan IETF Yorumlar İsteğinde belirtildi.

Çok uzun zaman önce, A sınıfı bir adresin tamamını "israf etme" fikri o zaman kimsenin aklına girmedi.

Localhost'un yararı, kodlanmış bir IP adresi kullanarak kendinizle konuşabilmenizdir. Etki Alanı Adı Sistemi çok uzun zaman önce kullanıldı. 127.x.x.x geçerli adreslerinden herhangi birini kullanabilirsiniz, ancak hiç kimse kullanmaz. “Yönlendirici Gereksinimleri” RFC bu ağı herhangi bir internet üzerinden yönlendirmesine izin vermediğinden 127'yi gizlice kullanamaz ve gerçek bir ağ olarak kullanamazsınız.

5
kwe

Öncelikle, 127.x.x.x serisinin tamamı localhost'a işaret ediyor.
127, ikili olarak "01111111" dir. "11111111" = 255 ve 0 aittir, yani seçim açıktır :)

4
kolypto

Çünkü bu standartlar oluşturulduğunda, bilgisayarlar yavaştı ve genellikle 8 bitlik kayıtlarla sınırlıydı. Sayıların sayılarla karşılaştırılması çok yavaştı, özellikle de bu sayıların arkadan alınması gerekiyorsa GERÇEKTEN yavaş bellek. Kayıtlar, yani "on board CPU" depolaması çok daha hızlıydı.

Üstelik bu eski bilgisayarlarda "sıfıra eşit", "sıfırdan farklı", "negatif/pozitif tamsayı" nın tespit edilmesi için özel, daha hızlı talimatlar vardı (burda işaret vardı ... tahmin et ne oldu, en soldaki bit, şimdi 127 ile bir bağlantı gördü). , bu, en soldaki = işareti hariç tüm "1" sayılarına sahip sayıdır.).

Bu nedenle bunlar özel numaralardı, çünkü sık yapılan işlemlerde programlama işleminin bir çok CPU çevrimi kaydetmesini sağladılar.

Asla "IF CallerIP =" 0 "ama" IF NotZero (CallerIP) "komutunu görmezsiniz.

Daha uzun açıklamalar için "BEQ, BNE" (6502 CPU'lar) gibi eski Montaj talimatlarını kontrol edebilirsiniz. Ayrıca bu sayfayı kontrol edin .

Sonunda:

0, 255 ve 127 tek ve en hızlı talimatlarla kontrol edilebilir. C gibi daha yüksek seviyeli diller bile, derleyicinin dahili olarak tek bir komutta optimize edebileceği karşılaştırma işlevlerine "kısaltıcı" sahiptir.

70 ve 80 yıllarında programcılar gerçekten kıt kaynaklara sahip muhteşem mimariler ürettiler, IP numaralandırma gibi standartların arkasında çok fazla düşünce ve dahi var.

3
Dario Fumagalli