連載:アニメーションで見るパケット君が住む町(10)
TCP課長は几帳面でしっかりもの!


綱野衛二
Roads to Node
2010/7/26


10-2 荷物が届くか事前に確認

 では、TCP課長の仕事を確認していきましょう。

 先にも述べたとおり、TCP課長のお仕事は「しっかり正確」がうたい文句ですね。これには理由があります。先ほどTCP課長がおっしゃったように、パケット君やイーサ配送君の仕事は「荷物を運ぶだけ」です。それ以上のことは何もしません。

TCP課長「そうです、正しく届いているか、届かなかった荷物はないのか、分割して届けた荷物は順番に届いているのか、これらの事項を考え、またもしダメだった場合を考えて……」

パケット君「ともかく、いろいろ考えてるんだよ。ウチの課長は」

 ふむふむ。TCP課長は「しっかり正確」な仕事をするため、いろいろ多岐にわたって考え、手配しているようです。具体的には……

  • 届け先に届くこと、届け先の荷物受け取り状態ができることを確認
  • 荷物を届けやすいように分割して、それぞれに番号を付ける
  • 荷物が届いたかどうかの確認を取る
  • 届いていなかった場合に送り直す
  • 相手の荷物受け取り状態に応じて荷物を送る量を調整する
  • 届いた荷物を並べ直す

などを行います。うん、なるほど、「しっかり正確」ですね。

 TCP課長はこれらの仕事を進めるために、2つの道具を用意して使っています。1つは「送付票」です。TCP課長はこれに荷物のことを書き込んで、荷物と一緒に送ります。もう1つが「配送箱」「受取箱」です。これはどんなものなのでしょう?

TCP課長「荷物を届け先別にまとめて置いておく場所が『配送箱』で、相手から送ってきた荷物を一時的に置いておく場所が『受取箱』です。これらを使うことにより……」

 うーん、お話が長くなりそうなので、2つの箱についてはまた後で説明しましょう。まず先に、TCP課長が愛用している送付票を見てみましょう。

  • 荷物のあて先のサービス事業部
  • 荷物の送り元のサービス事業部
  • 送る荷物のケース番号
  • 次に受け取る荷物のケース番号
  • 荷物を受け取ることができる個数
  • 荷物の状態

 ふむー、いろいろなことが書かれていますね。送付票のそれぞれの内容がどのような役割を持つかは、後ほど順番に説明していきます。

 まず、TCP課長の仕事のうち最初の1つで、しかもとても重要な仕事をまず説明しましょう。それは、「届け先と荷物のやりとりが可能であることの確認」です。

 先ほども説明したように、3Fまでのパケット君たちの仕事のおかげで、荷物はビルまでは届きます。ですが、TCP課長から見ればそれは届く「かもしれない」でしかありません。TCP課長は、何事も確実じゃないと気が済まない人なのです。

 そのため、TCP課長は確認を取ります。こちらから届け先に仮の荷物を送り、届け先からそれに対する返答をもらいます。そして念のため、こちらからもう一度送ります。

図10-3 事前に荷物をやりとりして確認する

 いったい何のためにこんなことをするんでしょうか。

TCP課長「まず、応答があれば、相手までちゃんと荷物が届くことが確認できる。さらにこのときやりとりした荷物に基づいて、これから先の荷物のやりとりで使う番号を決め、やりとりする箱のサイズを教える。またこれを行うことで……」

 はい、ありがとうございました。つまり、

  • 相手との荷物がやりとりできることの確認
  • これから実際の荷物をやりとりするための取り決め

を行う、ということですね。


 まず、レイヤ4の2つのプロトコルのうち、TCPを説明します。TCP/IPプロトコル群という名前から分かるとおり、TCPはTCP/IPの中でも重要な役割を果たすプロトコルです。

 TCPの役割として、大きく以下の3つを挙げることができます。

  • コネクション管理
  • 再送制御
  • フロー制御

この3つの制御により、TCPは「確実なデータ転送」を担います。レイヤ4の2つのプロトコルのうちTCPを使うことで、上位プロトコルに対し、確実にデータを届けることができるようになります。

 3つの制御を確実に行うため、TCPはヘッダに次の項目を持ちます。

図10-4 TCPヘッダの構成

 TCPヘッダの大きさは20バイトです。TCPは上位プロトコルが作成したメッセージを、MSS(Max Segment Size)と呼ばれる値で分割します。分割したメッセージそれぞれにTCPヘッダを付け、これをTCPセグメントと呼びます。

 TCPの動作の基本となるのがコネクション管理です。「コネクション」とはTCPが設定する「仮想的な通信路」です。

 以前から説明しているとおり、レイヤ3以下のプロトコルではデータをコンピュータまでは転送します。しかしそれは「転送することができる」だけで、確実に「転送が行われる保証」はありません。そこでTCPでは「確実に転送が行われることの確認」を行います。つまり2台のコンピュータ間で、実際のデータ転送はどのように行われるにせよ、データをやりとりできる「道」があることを確認するわけです。これが「仮想的な通信路」である、「コネクション」となります。

 コネクションを作る(コネクションの確立)には、「3ウェイハンドシェイク(3way handshake)」と呼ばれる動作を行います。

図10-5 3ウェイハンドシェイク

 ここではTCPヘッダに含まれるフラグ項目のうち、ACKとSYNという値のビットで、TCPセグメントの役割を決めています。SYNは「データ転送要求」であることを示し、これにより相手側は受信の準備を整えます。ACKは「確認応答」であることを示し、相手のデータ転送に対し、それを正しく受信したことを伝えます。

 3ウェイハンドシェイクでは、最初にデータ送信を希望する側が「SYN」を送ります。これに対し相手は、SYNに対する応答である「ACK」に加え、こちらからもデータを送信できるように「SYN」を送ります。その「SYN」に対して「ACK」を送ることで3ウェイハンドシェイクは完了し、コネクションが確立します。双方が「SYN」を送ることにより、どちらからもデータを送信できることが確認できます。つまり、コネクションは双方向のデータ転送路ということになります。

 なお、TCPの通信では「SYN」は3ウェイハンドシェイク以外では使われません。また、最初のSYN以降の通信はすべて「ACK」扱いになります。


10 TCP課長は几帳面でしっかりもの!
  データ通信を確実に行うために必要な仕事
10-1 2人の上司
  10-2 荷物が届くか事前に確認
  10-3 正しい順番で荷物をやりとり
10-4 相手の状態を確認しつつ送る
10-5 おさらいとまとめ


関連記事
  ネットワーク・コマンド/ツール群の活用法を大紹介
連載 ネット・コマンドでトラブル解決
あなたのLANは健康ですか? 現状改善から一歩進んだ構築術まで
特集:基礎から学ぶネットワーク構築

レスポンスの悪いネットワークシステム どう検証し、解決していくか?
特集:ネットワークトラブルを解決する
運用管理に必須のツール/コマンド群
連載:24×365の運用管理

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


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

注目のテーマ

Master of IP Network 記事ランキング

本日 月間