連載第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ってのは何ですか?

 あちこちで名前をよく聞くのに、どんなシロモノなのかよく分からない。こういう言葉は結構ありますよね。例えば「デリバティブ」とかも、そんな単語かもしれません。「天候デリバティブ」とかいわれると、筆者の場合、クエスチョンマークが頭の上にたくさん並びます。もちろん金融商品らしいことまでは分かるのですが、その中身がどうなっているのか、イマイチぴんと来ない感じです。「TCP」という言葉も、これと似たような分かりにくさを持っているような気がします。

 TCPの働きを一言でいえば、下位レイヤ、つまり共通で利用する機能の中でも、「正確で確実な通信をするための仕組み」ということができます。

 コンピュータネットワークと聞くと、それ自体がとても正確に機能する印象がありますが、実際は「たまに問題が起こるけど、それをうまくカバーして、正確な通信ができるようにしている」のに近いといえます。

 例えば、コネクタではときどき接触不良が起こるかもしれません。もし近所に雷が落ちたら、そこからの大きな雑音で、通信中のデータが書き換わってしまうかもしれません。このほかにも、その時々の状況によって、いろんな問題が発生します。そんなときでも、できる限り悪い影響を取り除いて、正確で確実な通信ができるよういろんな手を尽くす。TCPはそんなことをしています。

●ネットワークで起こる問題にはどんなものがありますか?

 ネットワークでどんな問題が起こるのか、ここでは伝言ゲームに例えてみたいと思います。伝言ゲームはご存じですよね? ある決められた言葉を、何人もの人が伝言として伝えていき、最後の人がその言葉を大声でいって、最初の言葉と合っていればOKというゲームです(図3)。

図3 伝言ゲームではちょっとした間違いが起こることも

 伝言ゲームをしてみると、大部分の言葉は正しく伝わりますが、ときどき、なぜか違った言葉になることがあります。これは伝言中に言葉が間違って伝わった例です。特に周囲がうるさい場合には間違えやすいでしょう。また、何度も速いスピードで繰り返していると、たくさんある伝言の中の1つを伝え忘れる人が出てきたり、反対に同じ言葉を2度伝えてしまう人も出てくるでしょう。あるいは、2つを入れ違えてしまったり、モタモタして次の人に伝えるのが遅れてしまうかもしれません。

 話を伝える人、伝えられた話を聞く人、さらにはその周りの状況によって、伝言ゲームの情報ネットワークは、ときどきデータを誤ったり、スムーズな通信をすることができない場合もあるわけです。実は、コンピュータ同士のネットワークも、これと似たような状況が起こるんです。

●じゃあ、どうすれば正確に通信できるんでしょう?

 TCPは難しいというけれど、この伝言ゲームに例えて考えれば、問題を解決するアイデアは結構すんなり理解できると思います。

 このアイデアを大ざっぱにいえば「データに番号を付ける」「お互いに受け取り確認をする」「忙しいときは、ちょっと待ってと伝える」「ゆっくり始める」です(図4)。コンピュータ同士の通信といっても、何だか人間的でしょう?

「データに番号を付ける」 1.2.3.4.・・・・
「お互いに受け取り確認をする」OK? Yes!
「忙しいときは、ちょっと待ってと伝える」WAIT
「ゆっくり始める」 Restart slowly
図4 TCPの基になっているアイデア

 データに番号を付けると何ができるでしょうか。まずデータが順番どおりに来ているのかが分かります。そしてさらに、データに抜けや重複がないかも分かります。もし順番が入れ違っていたら、それは単に番号どおりに並べ替えればいいですね。データの抜けがあったら、もう1回送ってくれるようにリクエストすればいいですし、重複があったら1つ捨てればOKです。番号があるだけで、かなり信頼感が生まれるんですね。

 お互いの受け取り確認も大切です。データの番号を使って「○番受け取ったよ」と知らせてあげれば、送信したデータをちゃんと受け取ってもらったことが分かります。また、ちょっと忙しくて受け取れなさそうなら、「ちょっと待って」と伝えます。お互いに声を掛け合うことで、1つの仕事を着実に進めていく。この辺も、何だか人間の行動とよく似ていますね。

 もう1つ面白いのは「ゆっくり始める」です。いきなりドーンと最高スピードで走り始めたら、ほかの人がついて行けなかった。そんなことがないよう、様子を見ながら、だんだんスピードを上げていくんです。こうすれば総崩れにならずに済みますね。さらにこの方法は、ゆっくり始めて少しずつスピード上げていくことで、そのときの状況に応じた、最も速い速度を見つけて通信することにもなります。

 こうして見ると、TCPといっても、普通の人間の理解を超えた、超ムズカシイことをやっているわけではなさそうでしょう? もちろん、実物の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 記事ランキング

本日 月間