Ping “localhost” ile ping “local IP address” arasında neden bir fark var?


32

Windows kullanarak cmdve pingüzerinde bana aşağıdaki sonuçları verdi:

  • "Localhost" sayfasına ping atmak:

Resim tanımını buraya girin

  • "192.168.0.10" (yerel IP adresi):

Resim tanımını buraya girin

Her iki durum da tamamen aynı değil mi?

Yani, aynı arayüze, aynı makineye ve aynı adrese ping atıyorum. Neden bu kadar farklı sonuçlar alıyorum?

EDIT: İşte ekranım ipconfig /all:

Resim tanımını buraya girin


18
Aynı arayüze ping atmıyorsunuz , hatta herhangi bir fiziksel arayüz olmadan bile “yerel bir ana makineye” sahipsiniz.
Tamara Wijsman

"Aynı arayüz" derken, geri döngü arayüzünü kastediyorsanız, haklısınız demektir. Ethernet arayüzünü kastediyorsanız, birkaç nedenden dolayı yanılıyorsunuz. (Mesela, :: 1 Ethernet arayüzü ile nasıl ilişkilendirilir? Ve neden işi telde Ethernet paketleri göndermek ve telden almak olan Ethernet arayüzü neden hiçbir zaman içermeyen bir işlemde yer alır? Ethernet paketi veya bir tel?)
David Schwartz

Bu sorunun daha önce Stackoverflow'ta sorulduğundan eminim, eğer bulabilirsem ...
Chris S

Bunun kalbi SO tarafından cevaplanır, inanıyorum: stackoverflow.com/questions/6938039/…
Dawson Toth

Bence ilginç olan şey: neden uzak bir ana bilgisayara ping yaparken bir miktar bayt aktarıyorsunuz ve TTL alıyorsunuz, peki ya yerel ana makineye ping yaparken? IP adres formatının biraz kapalı olduğunu kimse umursamıyor.
dhasenan

Yanıtlar:


46

Aynı arayüze ping atmıyorsunuz, fiziksel arayüzler olmadan hala “yerel bir ana makineniz” var.

Bilgisayarınıza localhost, bilgisayarınızın herhangi bir "harici" IP'sinden değil, "dahili" IP'sinden bahsetmek için kullanılır. Dolayısıyla, ping paketleri herhangi bir fiziksel ağ arayüzünden geçmez; yalnızca paketleri doğrudan herhangi bir fiziksel atlama olmadan doğrudan bağlantı noktasından bağlantı noktasına gönderen sanal bir döngü geri arabirimi aracılığıyla.

Hala sebebini merak edebilirler localhostçözümlendiğinden ::1geleneksel olarak biz IPv4 adresine gidermek için beklenen süre 127.0.0.1. Not .localhostgeleneksel TLD (bakınız, RFC 2606 puan döngü geri IP adresine geri) (IPv4 için, bakınız RFC 3330 , özellikle 127.0.0.0/8).

localhostKullanarak ararken nslookupbize verir:

nslookup localhost

...
Name:    localhost
Addresses:  ::1
          127.0.0.1

Bu nedenle, Windows IPv6 döngüsünü IP adresini geri kullanmayı tercih eder ::1(bkz. RFC 2373 ).

Tamam, nereden geliyor? Lütfen ana bilgisayar dosyasına bakalım.

type %WINDIR%\System32\Drivers\Etc\Hosts

...
# localhost name resolution is handled within DNS itself.
#       127.0.0.1       localhost
#       ::1             localhost
...

Hmm, Windows'un DNS ayarlarına bakmalıyız.

Bu KB makalesi , Windows'un tercih ettiklerini etkileyen, kalın harflerle vurgulanan bir ayarı anlatıyor:

  1. Kayıt Defteri Düzenleyicisi'nde, aşağıdaki kayıt defteri alt anahtarını bulup tıklatın:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters
    
  2. DisabledComponents girişini değiştirmek için DisabledComponents'i çift tıklatın.

    Not: DisabledComponents girişi kullanılamıyorsa, onu oluşturmalısınız. Bunu yapmak için şu adımları izleyin:

    1. Düzen menüsünde Yeni'nin üzerine gelin ve sonra DWORD (32-bit) Değeri'ni tıklatın.

    2. DisabledComponents yazın ve ENTER tuşuna basın.

    3. DisabledComponents'ı çift tıklatın.

  3. IPv6 protokolünü istenen duruma yapılandırmak için Değer verisi: alanına aşağıdaki değerlerden birini yazın ve ardından Tamam'ı tıklatın:

    • Tip 0hepsi IPv6 bileşenlerini etkinleştirmek için. (Windows varsayılan ayarı)
    • Tip 0xffffffffIPv6 geri döngü arayüzüne hariç tüm IPv6 bileşenlerini devre dışı bırakmak için. Bu değer ayrıca, Windows'u, önek ilke tablosundaki girişleri değiştirerek IPv6 üzerinden Internet Protokolü sürüm 4'ü (IPv4) kullanmayı tercih edecek şekilde yapılandırır. Daha fazla bilgi için, bkz. Kaynak ve Hedef Adres Seçimi.
    • Tür 0x20önek ilke tablosunda girdileri değiştirerek IPv6 üzerinden IPv4 tercih.
    • Tip 0x10(LAN ve Noktadan Noktaya Protokolü [PPP] arabirimleri her ikisi birden) tüm nontunnel arayüzleri üzerinde devre dışı IPv6'ya.
    • Tip 0x01hepsi tünel arayüzleri IPv6'yı devre dışı bırakmak için. Bunlara, Site İçi Otomatik Tünel Adresleme Protokolü (ISATAP), 6'ya 4 ve Teredo dahildir.
    • Tip 0x11IPv6 geri döngü arabirimi için dışındaki tüm IPv6 arabirimleri devre dışı bırakmak için.
  4. Bu ayarın etkili olması için bilgisayarı yeniden başlatın.

Bu önek politikası tablosu nedir?

netsh interface ipv6 show prefixpolicies(veya prefixpolicyönceki sürümlerde)

Precedence  Label  Prefix
----------  -----  --------------------------------
        50      0  ::1/128
        45     13  fc00::/7
        40      1  ::/0
        10      4  ::ffff:0:0/96
         7     14  2002::/16
         5      5  2001::/32
         1     11  fec0::/10
         1     12  3ffe::/16
         1     10  ::/96

Bu tablo, DNS çözümlemeleri sırasında hangi öneklerin diğer öneklerden öncelikli olduğuna karar verir.

Ah, bu yüzden bu KB'yi kullanarak buraya IPv4'ün IPv6'dan daha yüksek önceliğe sahip olduğunu gösteren girdiler ekleyebiliriz.

Not: Uyumlu bir şekilde sorunla karşılaşmazsanız, bu davranışı geçersiz kılmak için hiçbir neden yoktur. Bu ayarı Windows Sunucumuzda değiştirmek posta sunucumuzu kırdı, bu yüzden dikkatli kullanılmalı ...


Aslında 'localhost' üst düzey bir etki alanı değil, bir ana bilgisayar adıdır. Bu ayrım son derece incedir, ancak temel olarak her alan adı bir ana bilgisayar adıdır, ancak tüm ana bilgisayar adları alan adı değildir. Kurallara göre, ful durağında biten ana bilgisayar adları FQDN olmalıdır ve tam durakta bitmeyen ana bilgisayar adları, ana etki alanı eklenerek FQDN'ye dönüştürülebilir ve gerekirse kök eklemeye geri dönülebilir. Ancak, bunlar sadece sözleşmelerdir. 'localhost' RFC 2606'ya aittir, doğru çalışmaması muhtemeldir ve hatta sorunlara neden olabilir.
Kevin Cathcart

2
Yanlış, RFC 2606'da belirtildiği gibi: Geleneksel olarak tanımlanan notun ve notun The ".localhost" TLD has traditionally been statically defined in host DNS implementations as having an A record pointing to the loop back IP address and is reserved for such use.kullanıldığına TLDdikkat edin . Aslında, bunun en azından bu soru bağlamında doğru olduğunu onaylayan çalışmalar. Senin çok son cümle RFC çünkü ne diyor tarafından planın "TLD'yi olmasını engelleyecek," yok alıntı lütfen eğer, demedi öyle geleneksel bir TLD. Başka türlü söylemezlerdiping localhost.the .localhost TLD
Tamara Wijsman

Biraz fazla güçlüydüm. localhostGerçek bir DNS sunucusu buna yanıt verirse bir TLD olabilir, ancak genellikle localhost genellikle / etc / hosts dosyasında bir ana bilgisayar adı olarak tanımlanır; Gibi dig localhostgenellikle 127.0.0.1 için bir "A" kaydı veya :: 1 için bir AAAA kaydı döndürmez. Bu, RFC'nin söylediğinde yanlış olduğu anlamına gelir; bunun traditionally been statically defined in host DNS implementationsyerine, her zaman DNS'yi kullanmayan, sistemin ad arama hizmeti tarafından iade edilir.
Kevin Cathcart

@KevinCathcart: Burada bir Windows sorusuyuz ve Windows sürümleri bunun DNS tarafından yapıldığından bahsediyor. nslookupkayıtları döndürür. Yani, YMMV ...
Tamara Wijsman

1
@KevinCathcart digiadelerim A, AAAA ve NS kayıtları için localhostbir otorite kaydı da dahil olmak üzere:localhost. IN NS localhost.
KutuluMike

20

Geri döngü arayüzü , Ethernet arayüzünüzden bağımsız olarak mevcuttur.

IPv6'nın karmaşıklığı olmasa bile , iki farklı adresiniz olur.

Geridöngü IPv4 adresi: 127.0.0.1
Ethernet arabiriminin IPv4 adresi: 192.168.0.10

Geridöngü arayüzü, gerçek donanımdan daha uzak, farklı bir yazılım katmanında olabilir. Örneğin, kendi Ethernet arayüz sürücünüze herhangi bir şekilde bağlı olduğundan şüpheliyim.


11

Localhost ve IP adresiniz aynı şey değil.

Localhost, sisteminize bağlı sadece IP adresi olan özel bir yazılımdır. Localhost veya 127.0.0.1, bir geri döngü adresidir. Her zaman sisteminize işaret eder ve yalnızca bilgisayarınızdan erişilebilir. Bu yönlendirme işletim sistemi düzeyinde gerçekleşir ve kesinlikle NIC'den asla ayrılmaz ... Dolayısıyla, ağa çarpması için hiçbir şans yoktur.

Kendi IP adresinizi pinglemek benzerdir ancak potansiyel olarak tüm ağ yığınını içerir, çünkü IP adresiniz olduğunu tespit etmesi ve doğru şekilde yönlendirmesi gerekir ...

Etkisi aynı olmalı, ancak farklılıklar olabilir.

Örneğin, ağ kablonuzu çıkarın. Statik IP adresinizi pingleyin. Barındırmak için bir yol veya başka hatalar elde edemezsiniz. Şimdi ping localhost veya 127.0.0.1 ve işe yarayacak.


Yani, ping localhost tamamen yararsız mı? Arayüzümü test etmek istersem ....
Diogo

4
@ DiogoRocha doğru, ping localhost hiç donanıma dokunmuyor. Heck ping 192.168.0.10, ağ kartının sürücüsü kendisine verilen istekleri yerine getirirse size güvenilir bir bilgi vermeyebilir.
Scott Chamberlain

@DiogoRocha Terminolojiniz kapalı. 127.0.0.1 bir arayüzdür, fakat sanaldır.
barlop

@ Diogo, Tam değil. Localhost, bir uygulamanın ağ davranışını test etmenizi veya ağ yığınının çalıştığını doğrulamanızı sağlar .... Ancak sürücüyü test etmez. Örneğin, eğer kötü bir NIC Sürücünüz varsa, localhost bunun iyi bir sürücü olduğunu kanıtlamaya yardımcı olabilir. Kilometreniz kesinlikle değişecek olsa !!
Benjamin Schollnick

6

Ekranlardan bu sorunun Linux ile ilgili olmadığını anladım, ancak belki de yararlı bir "noktayı" ortaya koyuyor.

Bu işletim sisteminde, yerel adaptör adreslerinden birine ping yaparsanız, geridöngü cihaza çevrilir (özel durum kesmesi). Bu, paketlerin gerçekte geridöngü aygıtına gittiği anlamına gelir (bu, düşünebileceğiniz tüm etkilere sahiptir: örneğin, güvenlik duvarı açısından, bu paketler geridöngü arabirimine giriyor ve bu arabirim için kurallara uyuyor).

IP atanan cihaz paketleri asla görmez. (Bu iyidir çünkü bu paketlerde doğru olanı yapmaz: emicileri göndermek isterdi.)

Bununla birlikte, bu IP'yi tutan arabirimin düşmesi gerekiyorsa, bu bağlantıyı kaybettiniz. Geridöngü ile eşleme çalışmayı durdurur.

Başka bir deyişle, bu yerel adresleri geridöngü aygıtı için takma ad olarak kabul etmek uygulanabilir bir tasarımdır.

Kod referansları:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2623

Fonksiyona bir göz atın ip_route_output_slow. Bu çağırır fib_lookupve eğer bu işlev kodu döndürürseRTN_LOCAL , dev_outgeri döngü için yeniden yazılırsa:

http://lxr.linux.no/#linux+v3.3.2/net/ipv4/route.c#L2769


4

Görünen o ki, "Localhost" takma adı IPv6 geridönüşümünü çözüyor ve açıkça bir IPv4 adresi kullandığınızda açıkça görmüyor.


6
İşletim sistemi size katılmıyor gibi görünüyor.
EBGreen

6
Önemli değil, görünüşe göre bilgisayar için ayarlanmış, localhost ipv6 geridönüşünü vuruyor.
Rob,

1
@DiogoRocha IPV4 dünyasında böyle bir adres :: 1 yoktur. 127.0.0.1 orada geridöngü için ayrılmış IP'dir. :: 1 ancak IPV6 için DOES vardır ve 127.0.0.1 gibi IPV6 geridönüşümü için ayrılmıştır.
Andy

4
Bu soruya nasıl cevap veriyor? Sadece açık olanı söylüyorsun.
Tamara Wijsman

4
Lütfen cevabınızı ayrıntılandırın, bu gerçekten hiçbir şeyi açıklamıyor
Ivo Flipse

1

@beyaz, ne konusunda haklıdır.

Şimdi, neden Teredo'yu kurduğunuz olabilir (ekran görüntüsünden anlayamıyorum, bir metin dosyasına aktarıyor ve tüm çıktısını yapıştırmak daha iyi oluyor) - IPv6 olan localhost davranışı benim sistemim ile tutarlı. IPv4 yalnızca teredo yüklü ağ, ancak sistemler olmadan 127.0.0.1ping yaparken alacağınız gibi davranır localhost. Bunu Windows XP ile test ettim ve Windows 7 sistemlerimin ne yaptığını ve soruyu güncellediğimi görmem gerekiyor.

Genellikle, eğer IPv6 varsa sistem varsayılan olarak IPv6'ya ayarlanır, sisteminiz .


Byte'ların aktarılmasını ya da TTL, ekran görüntülerinden biriyle IPv6 değil mi? niye ya?
barlop

ayrıca Windows 7'de gördüklerim konusunda da kararlıyım - sanırım gidiş dönüş süresi ihmal edilebilir
Journeyman Geek
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.