0

10.172.12.13 と 58.53.12.15 の 2 つの IP アドレスを持つクライアント システムがあります。

サーバーは、10.172.12.18 と 58.53.12.17 の 2 つの IP アドレスを持つようにも構成されています。

ここで、クライアント側で、最初にローカル アドレスとポート (ポートは 0) にバインドしてから、TCP 非ブロッキング接続を実行します。

奇妙な動作は、バインドするローカル アドレスとして 10.172.12.13 を指定し、サーバーで 58.53.12.17 に接続すると、接続に失敗して「ホストに到達できません」というエラーが表示されることです。

しかし、クライアントでローカル アドレスを 58.53.12.15 として指定し、サーバーで 58.53.12.17 に接続しようとすると、接続されます。

最も興味深い & 驚くべき側面は、上記の実行後、バインドして 58.53.12.15 に接続するローカル アドレスとして 10.172.12.13 を再度指定すると、正常に接続されることです。しかし、これはほんの数分間しか起こりません。しばらくすると、ローカル アドレスとして 10.172.12.13 の接続が再び失敗します。

誰かに何が起こっているのか説明してもらいますか? バインドは TCP 接続にどのように影響しますか?

4

1 に答える 1

2

通常、クライアント側のソケットを特定のインターフェイスにバインドすることはありません。ローカル エリア ネットワーク インターフェイスである 10.172.12.18 にバインドすることにより、プライベート ネットワークの可視性により、ローカル エリア接続とのみ通信できるようになります。

インターネット経由でサーバーに接続するには、ソケットを作成し、すぐに外部 IP (この場合は 58.53.12.17) に接続する必要があります。

ローカル IP へのバインドは、クライアントがインターネット経由ではなくローカルに表示されるサーバーに接続することを確認したい場合に役立ちます。

同様に、これら 2 つの IP アドレスは同じではありません。プライベートおよびパブリック IP アドレスと、それらが存在する理由に関する情報をお読みください。http://www.vicomsoft.com/glossary/ip-addresses/

クライアント ソケットがバインドされたままの状態で外部 IP にアクセスできるのは、一部のルートをキャッチするルーターの最適化の結果である可能性があり、大きな変更を加えずにそれらをキャッチから使用します。数分後、ルーティング データがわずかに異なることがわかり、キャッシュがクリアされます。(あくまでも想像ですので、完全に間違っているかもしれません)

于 2012-04-23T16:16:09.160 に答える