マシンの通信状態を確認するnetstatコマンド

TCPプロトコルで送信したデータは、送り先に確実に届いたかを判断する仕組みを含んでいます。
例えば次のような、javaのプログラムでbrが繋がっている相手へ文字列を送信する命令を実行したとします。

br.write("送信データ");
System.out.println("送信が終わりました");

もちろんこの場合、受信側では受信用プログラムが実行していなければなりません。
受信側では、『送信データ』を正しく受け取ったかどうかのやり取りが行われます。

この正しく受け取ったかのやり取りで、エラーがあった場合は、内部で再度送り直す規則になっています。
送り直す場合も、内部的にその回数や経過時間などを記憶し、何回送っても応答が戻らないようなら通信不能と判断し、 実行エラーとします。

トランスポート層(TCPやUDP)送受信は、ポート番号で相手側が実行しているプログラムを識別します。
つまりサーバに限らず、情報の送信にポート番号を利用しているのです。
そのため通信中の一つのソケットでは、送信元と宛先の2つポート番号があります。
送信元のポートをローカルポート、宛先のポートをリモートポートと呼びます。

マシンの中で、使われているソケットの状態を表示するツール『netstatコマンド』があるので、 以下に実行例を示します。 (TCP状態の参考)
これは、前のページで紹介したServer2.javaとCleent2.javaを動かして、 それぞれを接続中の状態(文字列が送受信できている)にして、 アクセサリのコマンドプロンプトで、『netstat -no』と実行させた例です。
1532番のServer2.javaと1288番Cleent2.javaの通信中で、 Cleent2.javaのポートが、4699になってと分かります。

C:\work>netstat -no

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    192.168.0.3:80         192.168.0.3:4699       ESTABLISHED     1532
  TCP    192.168.0.3:4699       192.168.0.3:80         ESTABLISHED     1288

上記で指定しているオプションで、 nがIPアドレスとポートをコロンで区切って表示させる指定で、 oがプログラムの識別番号表示指定でです。

他にaを指定すると、接続待機状態も表示することもできます。
以下は、Server2.javaだけを実行させて、『netstat -ano』と実行させた例です。

C:\work>netstat -ano

Active Connections

  Proto  Local Address          Foreign Address        State           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       2100
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       756
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    127.0.0.1:1025         0.0.0.0:0              LISTENING       1952
  TCP    127.0.0.1:10110        0.0.0.0:0              LISTENING       1168
  TCP    192.168.0.3:139        0.0.0.0:0              LISTENING       4
  UDP    0.0.0.0:445            *:*                                    4
  UDP    0.0.0.0:500            *:*                                    544
  UDP    0.0.0.0:1038           *:*                                    840
  UDP    0.0.0.0:1039           *:*                                    840
  UDP    0.0.0.0:1056           *:*                                    840
  UDP    0.0.0.0:4500           *:*                                    544
  UDP    127.0.0.1:123          *:*                                    796
  UDP    127.0.0.1:1521         *:*                                    2460
  UDP    127.0.0.1:1900         *:*                                    936
  UDP    192.168.0.3:123        *:*                                    796
  UDP    192.168.0.3:137        *:*                                    4
  UDP    192.168.0.3:138        *:*                                    4
  UDP    192.168.0.3:1900       *:*                                    936

コンピュータの中では、さまざまなものが動いているので、たくさん表示されます。 接続待機状態のソケットのStateは『LISTENING』(これがServer2の待機状態)の表示になり、 アドレスの表示は、『0.0.0.0』になります。 なお、『ESTABLISHED』は接続が確立している状態を示しています。