TCP/IP 概論(BNS 補助資料
タイミング編3)
役割分担
タイミングチャートで各層のプロトコルの働きを眺める
- まずはタイミングチャートの見方を確認。
- 1対1の通信の場合、関与する要素はクライアント(C)とサーバ(S)の2つ。
- 時間が下向きに流れるのがタイミングチャートのお約束事になっている。
- その要素間で通信がどういうふうに行われるかを図示している。
- こうした図法でシステムの動作を記述・分析する例は多い(たとえば「tcp
ack syn」というような画像検索をしてみるとわかる)。
1. HTTP(アプリケーション層)

- Webが始まった頃のHTTPでは、1つのTCPコネクション上で1つのHTTPセッションを実現していた(上図左)。
- 今のHTTPでは1つのTCPコネクションで複数のHTTPセッションを実現したり(持続接続)、同時並行で複数のセッションを動かしたり(HTTPパイプライン、ストリーム多重化)する技術が使われている(図右)。
- が、それらは性能向上のための工夫であり、HTTPの機能を理解するためには旧来のモデルで考えて差し支えない。
- いずれにせよこれらのアプリケーション層での通信は、トランスポート層(TCP)によるセッションの確立が完了した後に、TCPの機能を前提に通信が行われる。

- そのセッションはどのように確立されるか、TCPの動作を次々節で眺めてみる。
2. IP層
- TCPを一つとばしてさらに下の層について一つだけ言及しておく。
- IP層では、CからSへ(または逆にSからCへ)パケット(データグラムと呼ぶこともある)を次々に送信することが主要な動作。送達確認や順序制御などこの層では一切行わない。
3. TCP(トランスポート層)
- TCPでは、右図のように3片道ぶんの通信のやり取りをすることで「セッション」が確立される。
- その結果、両端のTCP要素(通信を担当するソフトウェアドライバーのTCP層を担当する部分)が、
セッションの両端の状態(アドレスやポート等)を認識する。
- その状態を表示させるコマンドが(前に紹介した)netstat
であった。
- この開設時のやりとりを「3ウェイハンドシェイク」と呼ぶ。
- SYN(Synchronize)、ACK(Acknowledgement)を使うやり方は、昔から通信で使われている送達確認の「手順」を踏襲したもの([こういう検索](http://www.google.co.jp/search?q=SYN+ACK+語源)もしてみて下さい)。
- セッションが形成されている状態の時は、アプリケーション間で全二重の通信を行うことができる(双方向の通信文が同時並行的にやりとりできる)。
- アプリケーションに対して、TCPが「コネクションサービス」を提供している、とされる。
- TCPでは複数のパケットを連続して(最初のパケットに対する確認応答が返ってくるのを待たずに)送信する。
- それに対して受信側が適切なタイミングで(切り刻まれたデータのうちどのパーツまでを健全に受信できているか、という情報=Acknowledgement
Numberの入った)ACKパケットを返す。
- ACKが返ってきていないパーツについては、送信エラーが発生したとみなして、送信側がその部分以降を再送信する。
- このやりかたで、切り刻まれたデータが健全にすべて受信側に到達できるよう制御を行うのがTCP(をはじめとする、あらゆるプロトコルスイートでのトランスポート層)の最も重要な役割である。
- 他にTCP層では、以下のようなことも行っている。
- データを次々に送ったときに受信側のバッファ容量や処理速度の能力を超えてしまわないよう、適切なペース配分を行う。
- ヘッダの「ウィンドウサイズ」情報が活用される(このウィンドウはGUIにおけるWindowではなく受信側が提供できる受信バッファのサイズを意味する)。
- また、エラー検出(受信側で)も行っていて、送信時のエラー(データの中のいずれかのビットが誤って転送されるなど)を「チェックサム」を用いて検出し、エラーがあればそのパケットに関するACKを返さないことで再送信を求める仕組みになっている。