バインドと接続の違いとは?

このQ&Aのポイント
  • バインドと接続(BindExceptionとConnectException)の違いについて説明します。
  • バインド(BindException)はソケットをローカルアドレスおよびポートに結びつけようとした際にエラーが発生することを示します。
  • 接続(ConnectException)はソケットをリモートアドレスおよびポートに接続しようとした際にエラーが発生することを示します。
回答を見る
  • ベストアンサー

バインドと接続(BindExceptionとConnectException)の違い

BindExceptionとConnectExceptionの違いがわからず悩んでいます。 Socketを使って通信する際、すでに接続が確立しているポート番号を 使うことはできないのはわかります。 ここで、「すでに接続が確立している」とは たとえばnetstatコマンド(netstat -n)でstatusがESTABLISHED になっていることかなあと思っています。 ところが、同じESTABLISHEDとなっているポートでも、 ある番号ではBindExceptionが、別の番号ではConnectExceptionが出ます。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/net/class-use/SocketException.html を見てみると、 BindException: ソケットをローカルアドレスおよびポートにバインドしようとしているときエラーが発生したことを示します。 ConnectException : ソケットをリモートアドレスおよびポートに接続しようとしたときエラーが発生したことを示します。 のようにありますが、「バインド」と「接続」の違いがわかりません。 どなかた教えて頂ける方、いらっしゃいませんでしょうか。

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

TCP/IP の話となりますが、 TCP/IP では、ネットワーク通信の際に、クライアントとサーバ間にて、通信を 行う事になります。 クライアントとは、サーバへ接続を要求して、通信を処理する者です。 サーバとは、クライアントからの接続を受け付け、通信を処理する者です。 通信の流れとしては、 サーバが接続受付用のアドレスとポートを待ち受け用ポートとして、関連付けし、 使用します。この処理をバインドと呼んでいます。 次に、クライアントから、サーバが待ち受けしているアドレスとポートへ接続 を要求します。正しくサーバへ接続されると、クライアント/サーバ間にて、 通信が出来る事でしょう。 この接続を接続と呼んでいます。(#この説明は蛇足か。) ですから、 > BindException: > ソケットをローカルアドレスおよびポートにバインドしようとしているときエラーが発生したことを示します。 は、サーバ側で、待ち受け用ポートを準備している時に失敗。 ConnectException : ソケットをリモートアドレスおよびポートに接続しようとしたときエラーが発生したことを示します。 は、クライアント側で、サーバへの接続に失敗。 と言う解釈だと思います。 TCP/IPや、クライアント/サーバに付いては、必要に応じて、別途調べてみてください。

higedansya
質問者

お礼

ありがとうございます。とてもよくわかりました。 プログラムでも挙動確認できました。

関連するQ&A

  • netstat と netstat-anoの表示結果の関係(理解の方法)

    netstatとnetstat-anoコマンドとの関係について教えて下さい。例えば、自分のPCでnetstatコマンド実行後にESTABLISHEDが確認されたAと言うホストと、そのすぐ後にnetstat-anoコマンドを実行してESTABLISHEDが確認された111.222.333.444というIPアドレスとの関係はどのように理解したら良いのでしょうか?(ポートは同じです) 111.222.333.444というIPアドレスはホストAのアドレスということなのでしょうか、それとも111.222.333.444というIPアドレスのPCがホストAと接続が確立され、そのホストAとnetstatコマンドを実行した自分のPCが接続確立している(つまり、111.222.333.444のIPアドレスのPCと自分のPCがホストAで接続されている)という意味なのでしょうか? netstatコマンドを実行した自分のPCと接続がESTABLISHEDになっていたホストAと、netstst-anoコマンドを実行した時にESTABLISHEDが確認された111.222.333.444というIPアドレス、この3つの関係の理解のしかたを教えて下さい。宜しくお願いします。

  • :80 ESTABLISHED からの接続が頻繁に

    netstat を行ってみたところ、不特定のIPがポート80番を使って接続しているようです。 例えば、 Proto Local Address Foreign Address State TCP 自分のIP:1337 2**.***.***.***:80 ESTABLISHED という表示が頻繁に表示されます。 Local Addressのポートは1000番台以上のポートが多いです。 Foreign Addressの表示はIPは常にかわりますが、ポートはいつも80番 です。 これは、攻撃されているのでしょうか? 古いルータに繋いでいまして、インターネットセキュリティも入れています。 シマンテックのオンラインスキャンでもポートは閉じていましたが、すべてのポートについての表示ではありませんでした。 今までは何も不都合なくPCを使っていましたが、netstatを最近知ってから不安です。 どういう状況が考えられますか? もし攻撃されていたとしたらどうしたらいいですか? OSは XP home sp3 です。 どうか助けてください。 回答、宜しくお願い致します。

  • netstat、netstat -a のState

    netstat オプションなしと、netstat -a の表示されるStateの種類の違いについて教えてください(Linux) # netstat # netstat -a を実行したときに表示されるStateの種類の違いは、オプションなしは下記StateのLISTEN以外が表示対象で、-a オプション指定時は下記Stateの全てが表示対象である認識で間違っていないでしょうか。 State ESTABLISHED ソケットは確立した接続状態にある。 SYN_SENT ソケットは接続を確立しようと試みている。 SYN_RECV 接続要求をネットワークから受信している。 FIN_WAIT1 ソケットはクローズされており、接続は切断中である。 FIN_WAIT2 接続はクローズされ、ソケットはリモート側からの切断を待っている。 TIME_WAIT ソケットは、クローズ後にリモートからの切断が再送されるのを待っている。 CLOSED ソケットは使用されていない。 CLOSE_WAIT リモート側は既に切断され、ソケットがクローズされるのを待っている。 LAST_ACK リモート側は既に切断され、ソケットもクローズされている。 確認 (acknowledgement) を待っている。 LISTEN ソケットは接続待ち (listen) である。 このようなソケットは、 --listening (-l) または --all (-a) オプションを指定しない限り、出力には含まれない。 CLOSING 両方のソケットが切断されているが、まだ全てのデータが送られていない。 UNKNOWN ソケットの状態は不明である。

  • リカバリ後のPCに謎の接続

    Windows10をメーカーのリカバリディスクでリカバリした後に、ネットに接続する前に「netstat -an」を一応見たところ、次の接続が確立されていました。 TCP [: : 1]:49456 自分のPC名:49458 ESTABLISHED TCP [: : 1]:49458 自分のPC名:49456 ESTABLISHED これは、どういうことですか?

  • オプションなしnetstatのStateについて

    netstat オプションなしと、netstat -a の表示されるStateの種類の違いについて教えてください。 # netstat # netstat -a を実行したときに表示されるStateの種類の違いは、オプションなしは下記StateのLISTEN以外が表示対象で、-a オプション指定時は下記Stateの全てが表示対象である認識でいます。 では、netstat オプションなしで実行した場合、LISTEN以外が表示であることを裏付けるには、ソースを追うしかないでしょうか? netstat オプションなしで実行した場合、LISTEN以外が表示であることを裏付ける方法について教えてください。 State ESTABLISHED ソケットは確立した接続状態にある。 SYN_SENT ソケットは接続を確立しようと試みている。 SYN_RECV 接続要求をネットワークから受信している。 FIN_WAIT1 ソケットはクローズされており、接続は切断中である。 FIN_WAIT2 接続はクローズされ、ソケットはリモート側からの切断を待っている。 TIME_WAIT ソケットは、クローズ後にリモートからの切断が再送されるのを待っている。 CLOSED ソケットは使用されていない。 CLOSE_WAIT リモート側は既に切断され、ソケットがクローズされるのを待っている。 LAST_ACK リモート側は既に切断され、ソケットもクローズされている。 確認 (acknowledgement) を待っている。 LISTEN ソケットは接続待ち (listen) である。 このようなソケットは、 --listening (-l) または --all (-a) オプションを指定しない限り、出力には含まれない。 CLOSING 両方のソケットが切断されているが、まだ全てのデータが送られていない。 UNKNOWN ソケットの状態は不明である。

  • netstatコマンド

    Windowsでnetstatコマンドを入力したら、 Local Addressに自分のコンピュータ名とポート番号が表示されました。 Foreign Addressには”localhost”とポート番号が表示されて、Stateが ESTABLISHEDになっていました。 自分のパソコン内のポートとポートが通信しているという認識で正しいですか? (アプリとアプリの通信?) 無知でごめんなさい、教えてください。

  • 接続を切っても・・・?

    いつもお世話になっています。 OSはXPなので、ISDNを無線でつないでいます。 コマンドプロントで“netstat”を入力したら“crl.verisign.com”が“ESTABLISHED”と接続の状態でした。 Outpostのログには アプリケーション→CCAPP.EXE リモートホスト→crl.verisign.com リモートポート→HTTP 方向→不明 プロトコル→TCP アプリケーション→SVCHOST.EXE ※リモートホスト→time.windows ※リモートポート 方向→送信 ※プロトコル (すみません!※の項目は、私のミスで確認があやふやなもの、できなかったものです・・・) と表示されていました。 その後、ネットの接続を切り(パソコンの電源は入ったままでした)、もう1度netstatを入力してみたのですが接続を切ったあとも“ESTABLISHED”の状態でした・・・。 以前にここで質問させて頂いた時“crl.verisign.com ”の接続の意味について教えて頂いたのですが、接続を切っても“ESTABLISHED”だったのはなぜなのでしょうか・・・? “crl.verisign.com”を装った不正アクセス・・・ということは考えられるのでしょうか? もし、何かご存知の方がいらしたらぜひ教えて下さい・・・!

  • コマンドプロンプト、LISTENの意味は?

     ネットワーク初心者です、宜しくお願いします。  net view とか netstatをコマンドプロンプトから打ち込み表示される番号は、多分ポート番号だと 思うのですが、「ESTABLISHED」は開いている ポートだと思うのですが、「LISTEN」とはどのような意味でしょうか。  宜しくお願いします。

  • ソケット切断後のステータスについて

    LinuxのKernel2.6.18-92で以下のような現象が発生し困っています。 回避策等、ご存知でしたら教えてください。 -現象- ソケットによるコネクションが確立している状態において、 パッシブオープン(accept)側のプロセスを異常終了させ、 コネクションを強制的に切断させた場合、 アクティブオープン(connect)側のマシンで、 netstat -a でコネクションの状態を確認すると、 たまに、ESTABLISHEDのステータスとなっていることがあり、 ソケット(コネクション)の切断が検知できません。 ソケットの切断を検知するための回避策等、ご存知でしたら教えてください。

  • ソケット通信での再接続

    ソケット通信での再接続 ソケット通信でサーバ側は立ち上げたまま、 クライアント側を同じポート番号で 何度も再接続できるようにしたいと考えております。 http://blog.livedoor.jp/akf0/archives/51585502.html を参考にマルチスレッドを利用してプログラムを作成してみましたが 最初の起動に関してはうまくいくのですが、 クライアント側を一度終了してもう一度再接続すると、 バインドエラーが出ます。 いろいろ試してみたのですが、 どうしてもうまくいきません。 どうすればいいのでしょうか。 ご存じの方がいらっしゃればお答えいただきたいと思っております。 よろしくお願いいたします。 環境 OS:Windows XP 開発環境:Visual Studio 2008 Express Edition ソケット通信:winsock2 マルチスレッド:win32api

専門家に質問してみよう