相手のアプリケーションに正確なデータを確実かつ効率よく届けるために,TCPの役割は「接続と切断」,「通信制御」,「アプリケーションとの仲介」という三つの機能に分かれている。Part2では,これら三つの機能を順番に探っていくことにしよう。
TCPの役割は,相手のアプリケーションに正確なデータを確実かつ効率よく届けることだ。もう少し細かく見ると,「接続と切断」,「通信制御」,「アプリケーションとの仲介」という三つの機能に分かれている(図1)。
「接続と切断」とは,通信相手を呼び出して相手と1対1で通信できる仮想的な通信路を確保すること。通信路は「コネクション」と呼ばれ,ほかの通信にじゃまされずに相手との間で,データを確実にキャッチボールできるようにする。このコネクションを確立する手順が「3WAY(スリーウェイ)ハンドシェーク」である。通信相手を呼び出して,これからキャッチボールを始めるという“あいさつ”を交わすイメージだ。
「通信制御」とは,通信相手とあいさつを交わしたあとのキャッチボールを確実かつ効率よくできるようにするしくみである。具体的には,送受信するデータ量や送出スピードをコントロールして相手が確実に受信できるようにしたり,通信途中で紛失したデータを再送したりする。
TCPのもう一つの役割が,「アプリケーションとの仲介」である。「ポート番号」という識別番号や「ソケット」と呼ぶしくみを使って,適切なアプリケーションに受信データを受け渡す。
では,これら三つの機能を順番に探っていくことにしよう。
役割1 接続と切断
データ転送に先立って3回“あいさつ”を交わす
TCPに限らず,どんな通信プロトコルでも,データをどういう単位でやりとりし,その制御にどんな情報を使うのかという「プロトコル・フォーマット」を理解することは重要だ。役割1では,TCPのプロトコル・フォーマットを確認するところから始めよう。
IPパケットに収まるTCPセグメント
まずは,自分のコンピュータからインターネットにあるサーバーへTCPを使ってアクセスするときのことを考えよう(図2)。
インターネットなどでは,「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の方は,このあとでしばしば登場するので覚えておこう。
IPの上位はTCPとUDPだけじゃない