連載第1回
TCP/IPアレルギー撲滅ドリル【下位レイヤ編】

TCPの迷宮を
さまよってみませんか?

福永勇二
インタラクティブリサーチ
2004/1/7


素朴な疑問
プロトコルの迷宮をさまよい歩く楽しみ
  1. インディー某も初心者だった
  2. 下位レイヤってどういう意味ですか?
  3. もうちょっとプロトコルっぽい例で説明してください
  4. 7つに分けるという話も聞いたことがあるんですが
まずは相手を知ることから。TCPって一体ナンダ?
  1. ズバリ、このTCPってのは何ですか?
  2. ネットワークで起こる問題とは
  3. じゃあ、どうすれば正確に通信できる?

TCPをよく知るための道具を用意しよう!

  1. 見えないTCPをどうやって見るの
  2. そのTCPシミュレータはどうやって手に入れるのですか?
  3. 矢印がたくさん出ましたが……

TCPのキホンのキホン

  1. TCPの通信を簡単な例で説明して

 TCPをよく知るための
 道具を用意しよう!

●見えないTCPをどうやって見るのですか?

 上位プロトコル編では、メッセージのやりとりを見て、自分の手で試してみるのにtelnetを利用しました。こういったことができたのは、上位プロトコルの多くが、文字を使ったコマンドを使っているからです。

 しかしTCPは、上位プロトコルの情報、例えば文字を伝えるための仕組みですから、それ自体の様子をtelnetで見ることはできません。また、その働きが複雑なので、簡単に手動で試してみるのもなかなか大変です。これは例えば、年賀状は自分で書いてみることもできるけれど、郵便物の収集や配達は自分では試してみることが難しいのと似ているかもしれません。

 そんなちょっと扱いにくいTCPですが、その動く様子を目で見てスンナリ理解できそうな方法がありました。それはTCPシミュレータというものを使う方法です。

 TCPシミュレータは、TCPの通信の様子を模擬的に実行する、つまりまねっこして、人間が見やすい形に表示してくれるプログラムです。まねっことはいうものの、その動きはホンモノと同じですから、その様子を見れば、ホンモノのTCPの動作をちゃんと見ることができます。

 まねっこですから、気になるところがあれば、思うままに動きを止めて、じっくり観察することもできます。必要なら、録画されたビデオのように、自由自在に前に戻ったり、先に進んだりすることもできます。どうでしょう? 自分が納得するまで、じっくり通信の様子を眺めることができれば、TCPの理解も進みそうでしょう?

●そのTCPシミュレータはどうやって手に入れるのですか?

 この記事で利用するTCPシミュレータは、英国STIRLING大学で開発された「Jasper」と呼ばれるプロトコルシミュレータです。このプログラムはJavaで書かれていて、Windowsはもちろん、MacやLinuxなど大部分のOSで動作するようになっています。なかなかのスグレモノなのに利用料はかかりません。ありがたい限りです。

 利用には、http://www.cs.stir.ac.uk/~kjt/software/comms/comms.htmlから「Jasper」のソースファイル(執筆時はjasper-1.3.tar.gz)をダウンロードします。Winzipなどを使ってアーカイブを展開したら、jasperフォルダの中のhtmlフォルダにあるindex.htmlをダブルクリックしてみてください。

 「Protocol Simulators」というページが現れましたか。そうしたら、この中の「Transmission Control Protocol (TCP) Client-Server Simulator 」をクリックします。するとTCPシミュレータの画面が現れるはずです(Java Scriptが動作する環境であることを確認してください。コラム「Windows XPをご利用でJasperがうまく動作しない方へ」も参考にしてください) 。

 では「Run」ボタンをクリックしてみましょう。画面の下の方にあるはずです。どうですか? 画面に矢印でメッセージのやりとりをする画面が現れましたか? (画面1)そう、これがTCPのまねっこ画面です。

画面1 Jasperの全体画面(Transmission Control Protocol Client-Server) (図をクリックすると拡大表示します

 「Stop」をクリックしてみてください。動きが止まるはずです。ここで「Undo」をクリックしてみてください。ビデオテープを巻き戻すように、メッセージが時間の流れとは反対に巻き戻されていくはずです。また「Redo」をクリックすると、今度はメッセージが早送りされていくことを確認してください。

 動作を再開するときは、あらためて「Run」をクリックします。また最初からやり直すときは「Clear」をクリックしてから「Run」をクリックすればOKです。

 どうですか、面白いでしょう?

●矢印がたくさん出ましたが、どう理解すればいいんでしょう?

 Jasperの画面は、左から、上位レイヤ、下位レイヤ、媒体、下位レイヤ、上位レイヤの順になっています。今回からは下位レイヤ編ですから、この中でも「Protocol A」「Protocol B」と書かれた、下位レイヤの部分に主に注目していくことになります。

 もう少し詳しく見てみましょう。Jasperの画面は「Medium」という部分を挟んで、左右が対称になっています。この「Medium」は「媒体」という意味です。具体的には、実際にネットワークをつないでいるLANケーブルなどを表していると考えてください。

 一番外側にある「Client」と「Server」は、人間の行動に沿って動作する「上位レイヤ」に相当する部分です。そして「Protocol A」「Protocol B」が「下位レイヤ」、ここではTCPを表しています。

 年賀状の例でいえば、「Client」から「Protocol A」への矢印は、「年賀状をポストに投かんする」ことに相当します。「Protocol A」にやって来た年賀状というはがきは、郵便サービスの中で仕分けなどが行われて、「Medium」というトラックであて先郵便局に運ばれます。こうしてあて先郵便局である「Protocol B」に到着した年賀状は、最後に「Protocol B」から「Server」という配達先に届けられるわけです。

 TCPのキホンのキホン

TCPの通信を簡単な例で説明してください

 ではJasperの画面を使って具体的に説明してみましょう。ここで説明するのは、TCPのキホン中のキホン、通信を開始するときの様子です。

 TCPでは、通信を始めるときに、「通信を始めますよ」というメッセージを送り、それを受け取ったPCは、「はい分かりました」というメッセージを送り返すことになっています。また同時に、最初に「はい分かりました」を送ったPCは、反対に相手に対して「通信を始めますよ」というメッセージを送り、それを受け取った相手は「はい分かりました」というメッセージを送り返すことになっています。

 この様子をJasperの画面で見てみましょう(画面2)。画面中では、「通信を始めますよ」を表すメッセージには「SYN」、「はい分かりました」を表すメッセージには「ACK」と書いてあります。また、2つの方向で行うメッセージのやりとりは、それぞれ青枠と赤枠に分けてあります。

 図では、最初に「Server」が「通信開始を待つ」という動作を始めます。「Passive Open」がそれです。次に「Client」が実際に通信を開始します。これは「Active Open」と書かれている部分です。

画面2 TCPの最初の部分をJasperで見ると……(図をクリックすると拡大表示します

 上位レイヤでこういうことが起こると、TCPは、(1)まず相手コンピュータに「SYN」(通信を始めますよ)メッセージを送信します。この「SYN」を受け取ったコンピュータは、(2)すかさず「ACK」(はい分かりました)を送り返します。

 このとき、同じメッセージの中に、自分からの「SYN」を入れておきます。こうすることで、2回行う「通信を始めますよ」「はい分かりました」のやりとりを、ちょっとだけ効率化できますね。それを受け取ったコンピュータは、自分が送った「SYN」に対する「ACK」はそのまま受け取り、さらに(3)相手からやって来た「SYN」に対する「ACK」を送り返します。

 この3つのメッセージを使って、お互いに「通信を始めますよ」「はい分かりました」を確認し合う。これがTCPで通信を始めるときのルールになっています。

 Jasperを使うと、いろんな通信開始のパターンを見ることができます。「Clear」をクリックしてから「Run」をクリックすると、パターンがさまざまに変化します。ぜひ手元のJasperを動かしてみて、このように3つのメッセージで通信を開始しているかどうか、皆さんも確認してみてください。

コラム:Windows XPをご利用でJasperがうまく動作しない方へ

 Windows XPをお使いの方の中には、Japserがうまく動作しない方がいらっしゃると思います。これは、Jasperを動作させるために必要な「Java仮想マシン」と呼ばれるプログラムが組み込まれていないXPで発生する問題です。

・Javaについての知識をお持ちの方は、まず、ご利用中のPCの利用環境に合ったJava実行環境をインストールした後に、ここで紹介するJasperをご利用ください。

・Javaについての知識をお持ちでない方は、以下の方法でJava仮想マシンをインストールすることができます。ただし、ご利用中のアプリケーションと一緒に自動的に何らかのJava仮想マシンがインストールされている場合、以下の組み込みがそのアプリケーションの動作に影響を与えることがあり得ます。その点をご了承の上、ご自身の責任でインストールを行ってください。

1.すでにインストール済みのJava仮想マシンがないか確認します。通常は次の方法で判断できるはずですが、場合によってはこの方法で正しく判断できないケースも有り得ます。

(1)「コントロールパネル」の「プログラムの追加と削除」を開き、「Java Runtime Environment」「Java実行環境」といったプログラムが組み込まれていないことを確認します

(2)「スタート」→「すべてのプログラム」→「アクセサリ」でコマンドプロンプトを開きます。「jview」と入力してエンターキーを押し、「'jview' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません」と表示されることを確認します。また同様に「java」と入力して、同じメッセージが表示されることを確認します

2.Java実行環境をインストールします。

(1)http://java.sun.com/j2se/1.4.2/ja/download.htmlに接続して、「J2SE v 1.4.2_03 のダウンロード」を探します。そこにある「Windows/Linux/Solaris SPARC 32 ビット/64 ビット Solaris x86 32 ビット」と書かれた項目のうち、「JRE」列にある「DOWNLOAD」をクリックします

(2)英語の「LICENSE AGREEMENT」を確認し、下の「Accept」を選択して「Continue」をクリックします

(3)「Windows Offline Installation, Multi-language」をクリックするとダウンロードが始まります。適当な保存フォルダを指定してください

(4)ダウンロードが終了したら「j2re-1_4_2_03-windows-i586-p.exe」を実行します。利用許諾契約の内容を確認したら、「使用許諾契約の条項に同意します」を選択して「次へ」をクリックします。次のページで「標準」を選択して「次へ」をクリックします。あとは自動的にインストールが進み終了します。

以上でJasperが正常に動作するようになります。


さて、今回は下位レイヤ編スタートに当たって、下位レイヤって何? という話から、一番簡単なTCPの話までたどり着きました。さて、手応えはいかがでしょうか? 次回からは、もう少しTCPらしい部分を掘り下げていってみようと思います。

(上記コラム「Windows XPをご利用でJasperがうまく動作しない方へ」は
著者により2004年3月12日追記されました)

TCPって一体ナンダ?へ

TCP/IPアレルギー撲滅ドリル【下位レイヤ編】(1)目次
1  プロトコルの迷宮をさまよい歩く楽しみ
2  まずは相手を知ることから。TCPって一体ナンダ?
3  TCPをよく知るための道具を用意しよう!

関連リンク
  連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編)
連載:インターネット・プロトコル詳説

連載:ルータの仕組みを学ぼう
ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜

「Master of IP Network総合インデックス」


Master of IP Network フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Master of IP Network 記事ランキング

本日 月間