IP 0.0.0.0'a bağlanma başarılı. Nasıl? Neden?


41

Localhost'ta bir port hizmet veriyoruz ve port mevcutsa başka bir prosesi kontrol etmek istiyoruz. Kodumuzdaki bir hata nedeniyle, aslında IP’ye bağlanmaya çalışıyor 0.0.0.0:<port>ve bazı sebeplerden dolayı başarılı - strace’in kanıtladığı gibi:

[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]

Bunun anlamı ne? Neden çalışıyor


Yanıtlar:


68

Hedef adres olarak 0.0.0.0, yönlendirilemeyen bir ana bilgisayarı veya “bu ana bilgisayarı” farklı şekillerde ifade eder . Uygulamada 0.0.0.0'a bağlanmak localhost'a bağlanmakla eşdeğerdir. (Açıkça söylemek gerekirse, bir adres olarak geçerli değil, sadece bir kaynak adres olarak geçerli, ancak pratik teoriyle uyuşmuyor.)

“Bu ana bilgisayar” ciltleme yaparken, “bu ana bilgisayardaki herhangi bir adrese” genişler - bu nedenle uygulamalar genellikle 0.0.0.0'a bağlanarak bağlantıları kabul eder;


7
Bu cevabı biraz uzatmak - bu, "dinleme süreci başladıktan sonra eklenmiş IP'ler de dahil olmak üzere bu sistemdeki herhangi bir IP adresi" anlamına gelir
Criggie

5
localhost tek bir adrestir, çoğunlukla 127.0.0.1, 0.0.0.0 ise bu ana bilgisayardaki tüm adresleri ifade eder.
rexkogitans

@rexkogitans localhost tek bir adres değil, 127.0.0.0/8 aralığındaki herhangi bir adres - yani 127.0.0.0 - 127.255.255.255
Dezza

6
@ Dezza Hayır, yerel ev sahibi 127.0.0.1. 127.0.0.0/8 (dediğiniz gibi, diğer adıyla 127.0.0.0 - 127.255.255.255), örneğin, RFC 5735 sayfa 4'te belgelenen, çoğu ekipmanla geridönüşümdür . (İlginç bir şekilde, bazı Cisco ekipmanı herhangi bir adrese geri döngü atayabilir, ancak varsayılan olarak geri döngü desteklememeyi varsayılan olarak ayarlayabilir. Bunun ağdaki diğer donanımları etkilemesi muhtemel değildir.) Ancak, localhost genellikle yalnızca bir kişiye işaret eden bir addır. 127.0.0.1 olan ve genellikle "ana bilgisayar" dosyası kullanılarak uygulanan adres. Bu yüzden düzeltmeye çalıştığınız girişime katılmıyorum.
TOOGAM

"Hedef adres olarak, sadece kaynak adres olarak geçerli değil" derken neyi kastettiğinizi açıklayabilir misiniz? MySQL sunucusu 0.0.0.0'da dinlerse adres veya kaynak mı? MySQL istemcisinden gönderilen bir isteğin hedefi değil mi?
Tim
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.