TCPコネクション管理
724 肇史
牧之内研究室「UNIX とネットワーク基礎勉強会」Webページ
http://www.db.is.kyushu-u.ac.jp/rinkou/unixnet/
TCPの制御機能
信頼性のある通信を提供するため
制御機能
再送制御
シーケンス番
コネクション管
ウィンドウ制御
フロー制御
輻輳制御
データの喪失、重複、順序の乱れに対応しなければならない
再送制御
TCP通信では、データを送信後、受信側か
らの確認応答を待つ
確認応答が一定時間内にこなければもう
一度同じパケットを再送
送信したデータの喪失、確認応答のパケットの喪失
何度送信しても確認応答が届かなければ、通信を異常終了
シーケンス番号、ACK番号
再送制御、確認応答処理ではすべてシー
ケンス番号、ACK(確認応答)番号によって
処理
受信側はシーケンス番号を調べ、この値にオクテット単位
で値を加算してそれをACK番号として返す
これを繰り返し信頼性のある通信を提供
コネクション管理
コネクション型通信
TCPでは、データ転送に先立ち、ホスト間で通信の
開始を相互に確認し合い、双方向のコネクションを
確立(コネクション確立)
データ転送
コネクション終了処理
3ウェイハンドシェイク
フラグを用いた状態制御
SYNSynchronize Flag
ACK(Acknowledgement Flag)
FIN(Fin Flag)
コネクション確立要
確認応答番号が有効
コネクション終了を要求
3ウェイハンドシェイク
TCP Aは最初のシーケンス番号(10とする)を選び、TCPパケットを
Bへ送り、コネクション確立要求
TCP Bは受け取ったパケットに対する確認応答ACK番号=シーケ
ンス番号+1)を返すとともに、シーケンス番号100とする)を選び、
コネクション確立要求
TCP Aは受け取ったパケットに対する確認応答(ACK号=シーケ
ンス番号+1)を返す。
SYN=1 ACK=0 シーケンス番号10
SYN1 ACK=1 シーケンス番号=100 ACK番号=11
TCP A
TCP A
TCP A
TCP B
TCP B
TCP B
SYN0 ACK=1 シーケンス番号=11 ACK番号=101
データ転送
ACK番号はシーケンス番号+データ長
TCP A TCP B
シーケンス番号11 ACK番号=101 ータ長50
シーケンス番号101 ACK番号=141
シーケンス番号61 ACK番号=101 ータ長80
シーケンス番号101 ACK番号=61
重複パケットの破棄
TCP A TCP B
シーケンス番号11 ACK番号=101 ータ長50
シーケンス番号101 ACK番号=61
シーケンス番号11 ACK番号=101 ータ長50
シーケンス番号=101 ACK番号=61
破棄
破棄
コネクション終了処理
双方でフラグFINを設定したパケットを送付し合う
FIN=1 ACK=
TCP A TCP B
ACK=
FIN=1 ACK=
TCP A TCP B
ACK=
単方向コネクション
TCP B
TCP B
TCP A
TCP A
TCPの状態遷移
コネクションの管理を行うためTCPは状態を保持
LISTEN(聴取)
SYN RECV(SYN受信済)
ESTABLISHED(確立済)
コネクション要求待ち
SYNを受信
SYN,ACKを返信
ACK待ち
ACKを受
FIN WAIT1
FIN WAIT2
TIME WAIT
FIN送信
ACK待ち
ACKを受
相手からの
FIN待ち
FINを受信
ACKを返
CLOSED(閉鎖)
データ転送が行える状態
時間待機
再送制御とフラグの関係
データを送信したときに,それに対応する
ACKフラグが立ったデータが送られてこな
ければ再送する
シーケンス番号とフラグの関係
最初のコネクション確立要求のとき,つまり
SYNフラグが立っているときシーケンス番
号は初期化され,その後の通信ではそれに
対応した値が使用される
コネクション管理とフラグの関係
コネクション確立すると
SYNフラグを立てる
データを受け取ったことを知らせるとき
ACKフラグを立て
コネクションを終了するとき
FINフラグを立てる