IP 0.0.0.0에 연결했습니다. 어떻게? 왜? 포트를 제공하고 있으며

우리는 localhost에서 포트를 제공하고 있으며 포트가 사용 가능한 경우 다른 프로세스를 체크인하려고합니다. 코드의 버그로 인해 실제로 IP 연결을 시도 0.0.0.0:<port>하고 있으며 어떤 이유로 strace가 증명하는 것처럼 성공합니다.

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

무슨 뜻인가요? 왜 작동합니까?



답변

대상 주소 인 0.0.0.0은 라우팅 할 수없는 호스트 또는 “이 호스트” 를 다양하게 나타냅니다 . 실제로 0.0.0.0에 연결하는 것은 localhost에 연결하는 것과 같습니다. 엄밀히 말하면 대상 주소로는 유효하지 않으며 소스 주소로만 유효하지만 실습은 이론과 일치하지 않습니다.

바인딩 할 때 “이 호스트”는 “이 호스트의 모든 주소”로 확장됩니다. 따라서 응용 프로그램은 일반적으로 0.0.0.0에 바인딩하여 연결을 수락하므로 시스템의 모든 IPv4 주소로 주소가 지정된 패킷을받습니다.