相手のアプリケーションに正確なデータを確実かつ効率よく届けるために,TCPの役割は「接続と切断」,「通信制御」,「アプリケーションとの仲介」という三つの機能に分かれている。Part2では,これら三つの機能を順番に探っていくことにしよう。

 TCPの役割は,相手のアプリケーションに正確なデータを確実かつ効率よく届けることだ。もう少し細かく見ると,「接続と切断」,「通信制御」,「アプリケーションとの仲介」という三つの機能に分かれている(図1)。

図1●TCPによる通信を三つの役割に分けて考えよう
図1●TCPによる通信を三つの役割に分けて考えよう
[画像のクリックで拡大表示]

 「接続と切断」とは,通信相手を呼び出して相手と1対1で通信できる仮想的な通信路を確保すること。通信路は「コネクション」と呼ばれ,ほかの通信にじゃまされずに相手との間で,データを確実にキャッチボールできるようにする。このコネクションを確立する手順が「3WAY(スリーウェイ)ハンドシェーク」である。通信相手を呼び出して,これからキャッチボールを始めるという“あいさつ”を交わすイメージだ。

 「通信制御」とは,通信相手とあいさつを交わしたあとのキャッチボールを確実かつ効率よくできるようにするしくみである。具体的には,送受信するデータ量や送出スピードをコントロールして相手が確実に受信できるようにしたり,通信途中で紛失したデータを再送したりする。

 TCPのもう一つの役割が,「アプリケーションとの仲介」である。「ポート番号」という識別番号や「ソケット」と呼ぶしくみを使って,適切なアプリケーションに受信データを受け渡す。

 では,これら三つの機能を順番に探っていくことにしよう。

役割1 接続と切断
データ転送に先立って3回“あいさつ”を交わす

 TCPに限らず,どんな通信プロトコルでも,データをどういう単位でやりとりし,その制御にどんな情報を使うのかという「プロトコル・フォーマット」を理解することは重要だ。役割1では,TCPのプロトコル・フォーマットを確認するところから始めよう。

IPパケットに収まるTCPセグメント

 まずは,自分のコンピュータからインターネットにあるサーバーへTCPを使ってアクセスするときのことを考えよう(図2)。

図2●TCPはIPパケットのデータ部分に格納される
図2●TCPはIPパケットのデータ部分に格納される
[画像のクリックで拡大表示]

 インターネットなどでは,「IPパケット」を基本単位としてやりとりする。しかし,コンピュータはIPパケットをそのまま送り出すわけではない。イーサネットなどとつながっているからだ。この場合IPパケットは,イーサネットで使うMAC(マック)フレームのデータ部分に入る。これと同様に,TCPは,IPパケットのデータ部分に収められる。さらに,このTCPのデータ部分には,Webブラウザなどのアプリケーションが作成したメッセージなどが入る。つまり,アプリケーションが作成したデータは,さまざまなプロトコルによって何重にもくるまれて運ばれる。

 各プロトコルで扱うデータの固まりの呼び方も確認しておこう。イーサネットでは「MACフレーム」,IPでは「IPパケット」(あるいはIPデータグラム),TCPでは「TCPセグメント」と呼ぶ

最大データ量には制限がある

 TCP/IPの階層構造に関してもう一つ覚えておきたいのは,上位プロトコルのデータ・サイズは,下位プロトコルのデータ・サイズに制限されるという点だ。

 例えば,下がイーサネットなら,中に入るIPパケットの最大サイズはMACフレームのデータ部分の最大サイズ(1500バイト)になる。同様に,そのIPパケットの中に入るTCPセグメントの最大サイズは,IPパケットのヘッダー分(最小で20バイト)を除いたサイズになる。

 TCP/IPの専門用語では,この1回に運べるIPパケットの最大サイズのことをMTU,TCPセグメントのデータ部分の最大サイズのことをMSSと呼ぶ。特にMSSの方は,このあとでしばしば登場するので覚えておこう。

ミニ解説1
IPの上位はTCPとUDPだけじゃない
 TCPとUDPは,IPの上位プロトコルとしてあまりにも有名だが,実はIPの上位プロトコルはほかにもある。上位プロトコルはIPヘッダーの「プロトコル・フィールド」で指定するが,このフィールドは8ビット分用意されているので,256種類まで登録できる。もちろん,実際にはそんなにないが,ほとんど無名なものまで含めると,ほぼ100番までが予約されている。比較的有名なプロトコルとしては,ルーター同士が経路情報を交換するために使うOSPF(open shortest path first)がある。