ソース表示: internal24-242-TCPプロトコルスタック #24204

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:TCPプロトコルスタック
}}}

 

= TCPプロトコルスタック = #SECTION05800000000000000000

TCPプロトコルは、コネクション指向で信頼性のある通信を保証する。
TCPプロトコルは以下のような特徴を持つ。

  1.  UDPはアプリケーションからもパケットを意識しなければなならいが、
	TCPではアプリケーションからは通信データは単なる
	バイトストリームとして扱うことができる。
	send,recv入出力インターフェイス部で吸収している。

  1.  UDPでは、受信側が受け取ったパケットの順序は、
	送信側のパケットの送出した順序であるとは限らないが、
	TCPでは保証する。TCPプロトコル内部で正しい順に並びかえる。

  1.  UDPはパケットロストが発生するが、TCPではパケットのロストは
	発生しない。UDPプロトコルレベルでは送信側からは相手に
	パケットが届いたかどうかを確認する手段を持っていない。
	しかし、TCPプロトコルではパケットを受信した場合、
	それに対する応答パケットを送り返すメカニズムになっている。
	これにより送信側では一定時間以上待っても応答パケットが
	返信されて来ない場合、ネットワーク上の何処かでパケットが
	ロストしたと判断し、同じパケットの再送信を行う。

  1.  TCPはプロトコルレベルでのフロー制御メカニズムを備えている。
	受信側は(自マシンの能力に見合った)受信許容データ量(windowと呼ぶ)
	を送信側に通知し、送信側はその値を越えて一度に送信しないように
	制御する。また、送信側が自主的に転送量を抑制するメカニズムも
	実装されている。

下図は大雑把な流れを示す。

 [[Embed(internal24-images:img99.gif)]]
 

----

{{{ html
<A NAME="CHILD_LINKS">&#160;</A>
}}}

  *  [internal24-243-TCPヘッダ形式#SECTION05810000000000000000 TCPヘッダ形式]

  *  [internal24-244-シーケンス番号とACK#SECTION05820000000000000000 シーケンス番号とACK]

  *  [internal24-245-送受信ウィンドウ#SECTION05830000000000000000 送受信ウィンドウ]

  *  [internal24-246-送信処理#SECTION05840000000000000000 送信処理]

    *  [internal24-247-送信キューデータ構造#SECTION05841000000000000000 送信キューデータ構造]

    *  [internal24-248-送信処理アルゴリズム#SECTION05842000000000000000 送信処理アルゴリズム]

    *  [internal24-249-応答(ACK)受信と送信再開#SECTION05843000000000000000 応答(ACK)受信と送信再開]

    *  [internal24-250-再送処理#SECTION05844000000000000000 再送処理]

    *  [internal24-251-輻輳回避とスロースタート#SECTION05845000000000000000 輻輳回避とスロースタート]

 

  *  [internal24-252-受信処理#SECTION05850000000000000000 受信処理]

    *  [internal24-253-受信キューデータ構造#SECTION05851000000000000000 受信キューデータ構造]

    *  [internal24-254-受信処理アルゴリズム#SECTION05852000000000000000 受信処理アルゴリズム]

 

  *  [internal24-255-コネクション状態遷移#SECTION05860000000000000000 コネクション状態遷移]

  *  [internal24-256-コネクションの確立#SECTION05870000000000000000 コネクションの確立]

    *  [internal24-257-クライアント側処理#SECTION05871000000000000000 クライアント側処理]

    *  [internal24-258-サーバ側処理前半#SECTION05872000000000000000 サーバ側処理前半]

    *  [internal24-259-サーバ側処理後半#SECTION05873000000000000000 サーバ側処理後半]

    *  [internal24-260-サーバ側 accept処理#SECTION05874000000000000000 サーバ側 accept処理]

 

  *  [internal24-261-コネクションの切断#SECTION05880000000000000000 コネクションの切断]

    *  [internal24-262-切断処理第一段階#SECTION05881000000000000000 切断処理第一段階]

    *  [internal24-263-切断処理第二段階#SECTION05882000000000000000 切断処理第二段階]

    *  [internal24-264-LISTEN状態のソケットの解放#SECTION05883000000000000000 LISTEN状態のソケットの解放]

    *  [internal24-265-コネクションのshutdown#SECTION05884000000000000000 コネクションのshutdown]

 

  *  [internal24-266-TCPタイマ#SECTION05890000000000000000 TCPタイマ]

    *  [internal24-267-再送タイマ#SECTION05891000000000000000 再送タイマ]

    *  [internal24-268-KEEPALIVEタイマ#SECTION05892000000000000000 KEEPALIVEタイマ]

    *  [internal24-269-TIME_WAITタイマ#SECTION05893000000000000000 TIME_WAITタイマ]

----

''(NIS)HirokazuTakahashi [[BR]]
2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]