TCP
アプリケーション間で、順序を保った信頼性のあるデータ転送を提供するトランスポート層のプロトコルである。通信前に接続を確立するコネクション型で、受信確認や再送によってデータの欠落に対処する。
イマシルちゃんの解説
ファイルを送るとき、途中のデータが抜けたり順番が入れ替わったりすると、元の内容を使えなくなるよ。
TCPは、こうした問題に対処してアプリケーション間のデータ転送を支えるプロトコルなんだ。
まず相手と接続を確立し、送るデータには位置を表すシーケンス番号を付けるよ。
受信側はどこまで届いたかを確認応答で知らせ、送り手は届いていないと判断した部分を再送するんだ。
受信側で順序も整えるから、アプリケーションは届く順番を自分で並べ直さずに済むよ。
ただし通信路が途切れたままなら送信は失敗するから、どんな状況でも必ず届くという意味ではないんだ。
この解説はわかりやすかったですか?
より深い解説
定義
TCP(Transmission Control Protocol)は、RFC 9293(元はRFC 793)で定められたトランスポート層のプロトコルである。IPヘッダーのプロトコル番号は6。コネクション型で、通信の前に相手との間に論理的な接続(コネクション)を確立する。
確実に届けるための仕組み
| 仕組み | 内容 |
|---|---|
| コネクションの確立 | 通信の前に3ウェイハンドシェイクで互いの準備を確かめる |
| シーケンス番号 | 送るデータの各バイトに通し番号を付け、受信側で順序を並べ直す |
| 確認応答(ACK) | 受信側が「ここまで受け取った」と知らせる |
| 再送 | 一定時間内にACKが返らなければ、送り直す |
| フロー制御 | 受信側が受け取れる量(ウィンドウサイズ)を知らせ、送り過ぎを防ぐ |
| 輻輳制御 | ネットワークの混雑を推測し、スロースタートなどで送る量を調整する |
コントロールフラグ
TCPヘッダーには、セグメントの役割を示す1ビットずつのフラグがある。
| フラグ | 意味 |
|---|---|
| SYN | コネクションの確立を要求する |
| ACK | 確認応答番号が有効であることを示す |
| FIN | 送るデータがもうないことを示し、コネクションの終了を要求する |
| RST | コネクションを強制的に切断する |
| PSH | 受け取ったデータをすぐにアプリケーションへ渡すよう求める |
| URG | 緊急データが含まれていることを示す |
ヘッダーの主なフィールド
送信元ポート番号、宛先ポート番号(各2バイト)、シーケンス番号、確認応答番号(各4バイト)、データオフセット、コントロールフラグ、ウィンドウサイズ、チェックサムなどからなり、オプションを除いた長さは20バイトである。
TCPを使う主なプロトコル
コネクションの終了
終了は、双方がFINを送り合い、それぞれにACKを返す4回のやり取りで行うのが基本である。先にFINを送った側は、最後のACKを送った後、遅れて届くセグメントに備えてしばらくTIME-WAITの状態で待つ。
実際の試験ではここに出る!全24問
ネットワークスペシャリスト
- 午前Ⅱ
- 午後Ⅰ
- 午後Ⅱ