TCP/IP 概要


  1. TCP/IP 概要
  2. TCP ソケットの正常時の状態遷移
  3. 状態値の説明
  4. クライアント・サーバ・モデル

TCP/IP 概要

TCP(Transmission Control Protocol) は、 全二重のバイトストリームを提供するコネクション指向のプロトコルで、 ほとんどの Internet アプリケーションで用いられている。 TCP が IP を使っているので、プロトコル全体を TCP/IP と呼ぶ。

IP(Internel Protocol) は、TCP、UDP、ICMP に対して、 パケット配送の機能を提供する下位のプロトコルです。

















TCP ソケットの正常時の状態遷移

TCP ソケットの正常時の状態遷移図

サーバ クライアント
関     数 ステータス    ステータス 関     数
   CLOSED    CLOSED   
socket()/bind()/listen() →           
   LISTEN         
            ← socket()/connect()
        SYN_SENT   
   SYN_RECV        
   ESTABLISHED    ESTABLISHED   
accept() →         
   :   :    
        ← read()/write()
read()/write() →        
   :   :    
        ← close()
   CLOSE_WAIT    FIN_WAIT_1   
     (CLOSING)   
close() → LAST_ACK    FIN_WAIT_2   
        TIME_WAIT   
   CLOSED    CLOSED   

ソケットのクローズは、サーバ、クライアントどちらからでも可能です。
通常クライアントが先にクローズしますが、 サーバが先にクローズした場合は、CLOSE_WAIT/FIN_WAIT_2 のステータスは、上記の図とは逆になります。




状態値の説明

状態値 説                明
CLOSED クローズ中です。ソケットは未使用です
LISTEN 着信する接続を待っている状態です
SYN_SENT 接続を確立中です *1
SYN_RECV 接続の最初の同期をとっています *2
ESTABLISHED 接続が確立しました
CLOSE_WAIT 遠隔でシャットダウンし、 自分側のソケットがクローズするのを待っている状態です *3
FIN_WAIT_1 ソケットをクローズします。接続をシャットダウンします *1
CLOSING ソケットをクローズし、遠隔シャットダウンします。 その後、肯定応答をまちます *1
LAST_ACK 遠隔シャットダウンし、クローズします。 その後、肯定応答をまちます *1
FIN_WAIT_2 ソケットをクローズし、遠隔シャットダウンをまちます *1
TIME_WAIT クローズ後、遠隔シャットダウン再送信を待っています *4

*1 通常この状態にあるのは短時間で見ることはできません
*2 通常この状態にあるのは短時間で見ることはできませんが、 SYN flood 攻撃されたとき現れます。
*3 通常この状態にあるのは短時間で見ることはできません。 詳細は、CLOSE_WAIT とはを参照してください。
*4 この状態のセッションが多数ある場合は、 tcp_time_wait_interval をチューニングする必要があります。
詳細は、TIME_WAIT とはを参照してください。




クライアント・サーバ・モデル

以下がソケットを使ったクライアント・サーバのプログラム・モデルです。