web-dev-qa-db-ja.com

localhost以外のアドレスにソケットをbind()するとはどういう意味ですか?

127.0.0.1(または:: 1:など)以外のアドレスへのソケットをbindする手段とはどういうことかわかりません。
私はそうではありません-定義により-ソケットをポートのポートにバインドします自分自身 machine ..これはローカルホストですか?
anotherマシンまたはIPアドレスのポートをバインドまたはリッスンする意味は何ですか?
概念的には、私には意味がありません!

(これはGoogleにとって意外に難しいことが証明されています...おそらく、私が正しい用語をグーグル検索していないためです。)

24
user541686

ソケットのバインドは、このソケットでデータを受信するため(ほとんどの場合)、またはこのアドレス/ポートをデータの送信元として使用するためにアドレスとポートに対して行われます(たとえば、FTPサーバーのデータ接続で使用されます)。

通常、特定のマシンにはいくつかのインターフェイスがあります。つまり、マシンが自分自身に到達できる擬似インターフェイスループバック、イーサネット、WLAN、VPNなどです。これらの各インターフェースには、複数のIPアドレスを割り当てることができます。たとえば、ループバックには通常127.0.0.1があり、IPv6でも:: 1ですが、他にも割り当てることができます。イーサネットまたはWLANには、ローカルネットワーク上のIPアドレス(172.16.0.34など)があります。

データを受信するためのソケットを特定のアドレスにバインドすると、この特定のIPアドレスに送信されたデータのみを受信できます。たとえば、127.0.0.1にバインドすると、ローカルネットワーク上の他のシステムからはデータを受信できますが、your 127.0.0.1にデータを送信できないためです。 1つの場合、127.0.0.1へのデータはtheir own 127.0.0.1に送信され、2番目に127.0.0.1は内部ループバックインターフェイス上のアドレスであり、外部からは到達できません。

ソケットを0.0.0.0(Ipv4)や::(Ipv6)などのキャッチオールアドレスにバインドすることもできます。この場合、特定のIPアドレスにバインドされていませんが、マシンの任意のIPアドレスに送信されたデータを受信できます。

37
Steffen Ullrich