TCP/IP通信

TCP/IPプロトコルスタックとコネクション管理の仕組み

OSI参照モデル

Name日本語名プロトコル例
7Applicationアプリケーション層HTTP, HTTPS, FTP, SMTP, DNS
6Presentationプレゼンテーション層SSL/TLS, JPEG, MPEG
5Sessionセッション層NetBIOS, RPC
4Transportトランスポート層TCP, UDP
3Networkネットワーク層IP, ICMP, ARP
2Data Linkデータリンク層Ethernet, PPP
1Physical物理層Ethernet cable, Wi-Fi

HTTPは第7層(アプリケーション層)で動作し、TCPは第4層(トランスポート層)で信頼性のある通信を提供します。

TCP 3ウェイハンドシェイク

TCP接続を確立するための3段階のプロセスです。両端が通信可能であることを確認し、初期シーケンス番号を交換します。

Client
SYNSeq=1000
SYN+ACKSeq=5000, Ack=1001
ACKAck=5001
Server

ハンドシェイクの各ステップ

Step方向フラグ説明
1Client → ServerSYNクライアントが接続要求。初期シーケンス番号(ISN)を送信
2Server → ClientSYN + ACKサーバーが接続承認。自身のISNを送信し、クライアントのISN+1を確認
3Client → ServerACKクライアントがサーバーのISN+1を確認。接続確立

TCPフラグ

フラグ正式名称説明
SYNSynchronize接続開始要求。3ウェイハンドシェイクの開始
ACKAcknowledgment受信確認。データ受信を送信者に通知
FINFinish接続終了要求。データ送信完了を通知
RSTReset接続強制切断。異常時に使用
PSHPushバッファリングせず即座にデータを渡す
URGUrgent緊急データの存在を示す

シーケンス番号とACK番号

Seq(シーケンス番号)

送信するデータの最初のバイトの位置を示します。 初期値(ISN: Initial Sequence Number)はランダムに生成され、データ送信ごとにバイト数分増加します。

Ack(確認応答番号)

次に受信を期待するバイトの位置を示します。 「ここまで受け取った」という確認であり、相手のSeq番号 + 受信バイト数 となります。

計算例

Client ISN: 1000
Server ISN: 5000

1. Client → Server: SYN, Seq=1000
2. Server → Client: SYN+ACK, Seq=5000, Ack=1001 (1000+1)
3. Client → Server: ACK, Seq=1001, Ack=5001 (5000+1)

データ送信時:
Client sends 100 bytes: Seq=1001
Server responds: Ack=1101 (1001+100)

TCP 4ウェイクローズ

TCP接続を終了するための4段階のプロセスです。双方向の通信を個別に終了します。

Step方向フラグ説明
1Client → ServerFIN + ACKクライアントが接続終了を要求
2Server → ClientACKサーバーがFINを確認
3Server → ClientFIN + ACKサーバーも接続終了を要求
4Client → ServerACKクライアントがFINを確認。接続終了

TIME_WAIT状態

接続終了後、クライアントは約2分間(2MSL)TIME_WAIT状態を維持します。 これは遅延パケットの処理と、相手のFINの再送に対応するためです。

関連用語