Show page source of internal22-270-TCPプロトコルスタック #25343

[[PageNavi(internal22-navi)]]

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

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

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

  1.  UDPはアプリケーションからもパケットを意識しなければなならいが、	TCPではアプリケーションからは通信データは単なる	バイトストリームとして扱うことができる。	send,recv入出力インターフェイス部で吸収している。
  1.  UDPでは、受信側が受け取ったパケットの順序は、	送信側のパケットの送出した順序であるとは限らないが、	TCPでは保証する。TCPプロトコル内部で正しい順に並びかえる。
  1.  UDPはパケットロストが発生するが、TCPではパケットのロストは	発生しない。UDPプロトコルレベルでは送信側からは相手に	パケットが届いたかどうかを確認する手段を持っていない。	しかし、TCPプロトコルではパケットを受信した場合、	それに対する応答パケットを送り返すメカニズムになっている。	これにより送信側では一定時間以上待っても応答パケットが	返信されて来ない場合、ネットワーク上の何処かでパケットが	ロストしたと判断し、同じパケットの再送信を行う。
  1.  TCPはプロトコルレベルでのフロー制御メカニズムを備えている。	受信側は(自マシンの能力に見合った)受信許容データ量(windowと呼ぶ)	を送信側に通知し、送信側はその値を越えて一度に送信しないように	制御する。また、送信側が自主的に転送量を抑制するメカニズムも	実装されている。

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

 [[Embed(internal22-images:img95.gif)]]
 

----

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

  *  [internal22-271-TCPヘッダ形式#SECTION07810000000000000000 TCPヘッダ形式]
  *  [internal22-272-シーケンス番号とACK#SECTION07820000000000000000 シーケンス番号とACK]
  *  [internal22-273-送受信ウィンドウ#SECTION07830000000000000000 送受信ウィンドウ]
  *  [internal22-274-送信処理#SECTION07840000000000000000 送信処理]
    *  [internal22-275-送信キューデータ構造#SECTION07841000000000000000 送信キューデータ構造]
    *  [internal22-276-送信処理アルゴリズム#SECTION07842000000000000000 送信処理アルゴリズム]
    *  [internal22-277-応答(ACK)受信と送信再開#SECTION07843000000000000000 応答(ACK)受信と送信再開]
    *  [internal22-278-再送処理#SECTION07844000000000000000 再送処理]
    *  [internal22-279-輻輳回避とスロースタート#SECTION07845000000000000000 輻輳回避とスロースタート] 
  *  [internal22-280-受信処理#SECTION07850000000000000000 受信処理]
    *  [internal22-281-受信キューデータ構造#SECTION07851000000000000000 受信キューデータ構造]
    *  [internal22-282-受信処理アルゴリズム#SECTION07852000000000000000 受信処理アルゴリズム] 
  *  [internal22-283-コネクション状態遷移#SECTION07860000000000000000 コネクション状態遷移]
  *  [internal22-284-コネクションの確立#SECTION07870000000000000000 コネクションの確立]
    *  [internal22-285-クライアント側処理#SECTION07871000000000000000 クライアント側処理]
    *  [internal22-286-サーバ側処理前半#SECTION07872000000000000000 サーバ側処理前半]
    *  [internal22-287-サーバ側処理後半#SECTION07873000000000000000 サーバ側処理後半]
    *  [internal22-288-サーバ側accept処理#SECTION07874000000000000000 サーバ側 accept処理] 
  *  [internal22-289-コネクションの切断#SECTION07880000000000000000 コネクションの切断]
    *  [internal22-290-切断処理第一段階#SECTION07881000000000000000 切断処理第一段階]
    *  [internal22-291-切断処理第二段階#SECTION07882000000000000000 切断処理第二段階]
    *  [internal22-292-LISTEN状態のソケットの解放#SECTION07883000000000000000 LISTEN状態のソケットの解放]
    *  [internal22-293-コネクションのshutdown#SECTION07884000000000000000 コネクションのshutdown] 
  *  [internal22-294-TCPタイマ#SECTION07890000000000000000 TCPタイマ]
    *  [internal22-295-再送タイマ#SECTION07891000000000000000 再送タイマ]
    *  [internal22-296-TCPスロータイマ#SECTION07892000000000000000 TCPスロータイマ]
    *  [internal22-297-終了処理タイマ#SECTION07893000000000000000 終了処理タイマ]

----

''(NIS)HirokazuTakahashi [[BR]]2000年06月11日 (日) 22時29分57秒 JST''1

[[PageNavi(internal22-navi)]]