Neden localhost IP 127.0.0.1?


85

localhostIP adresini verme kararının kökeninin ne olduğunu merak ettim 127.0.0.1. Bunun anlamı nedir 127? "anlamı" 0.0.1nedir?


2
Ben de bunu merak ediyorum. IPv6 geridöngü 0: 0: 0: 0: 0: 0: 0: 1'dir, bu bana mantıklı geliyor.
hiperslug

1
Evet, IPv6'nın yerel ana bilgisayarı çok fazla soru
sormuyor

21
Henüz "0: 0: 0: 0: 0: 0: 0: 1" gibi bir yer paspası görmedim!
William Hilsum

9
@Wil ":: 1 gibi bir yer yok" a sıkıştırın ve biraz daha iş kazanın.
new123456

6
@WilliamHilsum "0000: 0000: 0000: 0000: 0000: 0000: 0000: 0001 gibi bir yer yok" olarak genişletti ve daha fazla şarj edin.
Nick T,

Yanıtlar:


87

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


14
Onları keyfi bir şekilde 127 seçerken görmemizin tek nedeni, hatırlanması kolay bir numara (01111111) ve belki de 16 milyon ana bilgisayar adresinin kendisiyle ve kendisiyle iletişim kurabilmesi için izin veriyorlardı (belki de bazı programlar ve Windows bileşenlerinin nasıl kullandığı gibi) günümüzde limanları). RFC'ler sadece geri döngü için kullanılması 127.0.0.1/32 için standart uygulamasından bahsetti. Bloğun geri kalan kısmı için, ana bilgisayara geri dönmesi ve ağa asla vurmaması gibi bir durum söz konusu olduğunda, bu benim yukarıdaki spekülasyonum.
RoyalKnight

2
Tüm blok adreslerinin 127.0.0.1'e dönmesi, uygulamaya bağlıdır ve belki de sadece bir Linux yığın özelliği olabilir. Solaris, ping testinizin başarılı olması için en azından hedef adrese bağlı bir arayüz gerektirir.
jlliagre

56

127'nin geri döngü ile ilgili olarak bulabildiğim en eski söz , Reynolds ve Postel tarafından yazılan Kasım 1986 RFC 990'dı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 ana bilgisayar 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, ana bilgisayar içinde geri dönmelidir. Bir ağa 127 adresinin "gönderildiği" hiçbir veri hiçbir yerde herhangi bir yerde görünmemelidir.

Eylül 1981 gibi erken bir zamanda bile, RFC 790 , 0 ve 127 çoktan 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 kazabileceğim kadar 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.


23

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

0, 127 ve 255 değerleri 8 bit montaj 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 taşmalara neden olur. Benzer şekilde, 255 artış, işaretsiz taşmalara neden olur. 0 değerini yalnızca bir register'a yüklemek genellikle çip üzerine sıfır bayrak 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.


1
Eski makinelerin o zamanlar sıradışı kelime boyutlarına sahip olduklarından "kelimeler" kullandığımı unutmayın, ancak yine de 8 bit aritmetik kullandılar. 8088 için "bayt" diyecektim.
Joseph Bui

5

Bir yerel ana bilgisayar veya geridöngü IP adresinin ne anlama geldiğini düşünüyorsanız, o adresi veya bu adresin ait olduğu ağı bir ana bilgisayarın dışında asla görmek istemediğinizi fark edersiniz. (Bir ev sahibinin 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ı. Aslında 127.xxx 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.


4

İlk olarak, 127.xxx'in tamamı yerel ana makinenize işaret eder.
İkili olarak 127, "01111111" dir. "11111111" = 255 ve 0 aittir, yani seçim açıktır :)


25
Neden yine belli oluyor?
Roee Adler

İnanıyorum ki sadece basit bir şey seçtiler. Yine, tüm "1" ler saklı, bu yüzden bir sıfır eklendi :)
kolypto

öyleyse neden 10111111? :) veya 11011111 veya 11101111 veya 11110111 veya 11111011 veya 11111101 veya benzeri bir şey mi?
Mushex Antaranian

1
Hayır! Tekrar deneyin.
Ardee Aram,

3

Çü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) 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ılmış" 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 deha var.


Mükemmel cevap. Bu gerçekten en açık ve en mantıklı açıklama.
not2qubit

Aslında, IP tasarlandığında ve bunun için bazı temel gerekçeler ortaya konduğunda, 8 bitlik tamsayılarda veriyle çalışmak bir şey verilmezdi. O zamanlar birçok mimaride örneğin 12 veya 18 bit'in katlarında kayıtlar ve kelime büyüklükleri vardı. Bu, o sırada octal'ın bu kadar popüler olmasının bir nedenidir; 18 bit, kayıp ve israf olmadan tam olarak 6 sekizlik basamak olarak gösterilebilir; 12 bit, 4 sekizlik basamaktır. Mikrobilgisayarlar genellikle 8 bitlik miktarlarda çalıştı, ancak çok daha sonra mikrobilgisayarlar düzenli olarak İnternete (özellikle doğrudan) bağlanmaya başladı.
CVn 18
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.