Wir bedienen einen Port auf localhost und möchten einen anderen Prozess einchecken, ob der Port verfügbar ist. Aufgrund eines Fehlers in unserem Code wird tatsächlich versucht, eine Verbindung zur IP 0.0.0.0:<port>
herzustellen, und aus irgendeinem Grund gelingt dies - wie strace beweist:
[...]
connect(3, {sa_family=AF_INET, sin_port=htons(10002), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
[...]
Was heißt das? Warum funktioniert es?
networking
tcp
strace
erikbwork
quelle
quelle
Antworten:
0.0.0.0 als Zieladresse bezieht sich auf einen nicht routbaren Host oder auf „diesen Host“ . In der Praxis entspricht das Herstellen einer Verbindung mit 0.0.0.0 dem Herstellen einer Verbindung mit localhost. (Genau genommen ist es nicht als Zieladresse gültig, sondern nur als Quelladresse, aber die Praxis stimmt nicht mit der Theorie überein.)
Beim Binden wird „dieser Host“ zu „einer beliebigen Adresse auf diesem Host“ erweitert. Daher akzeptieren Anwendungen Verbindungen in der Regel durch Binden an 0.0.0.0. Dies bedeutet, dass sie Pakete erhalten, die an eine beliebige IPv4-Adresse im System gerichtet sind.
quelle