[ネット技] 26.TCP

zikusasu 公式アカウント

TCPだよ!TCP!TCP/IPのTCPだよ!だからなんだって話なんだけどね!
ログインすると、チェック機能を利用できるようになります。
TCP(Transmission Control Protocol)
・IPによる通信は
 ・TCPは、不確実なIP網で、 な通信を実現するための機能を持ち、様々な制御を行う
・TCPの機能
 ・ 機能(トランスポート層に共通の機能)
 ・ 機能
 ・ 機能
---------------------------------------------------------------------------------
確認
制御      を実現するための制御
制御
---------------------------------------------------------------------------------
制御
制御      を実現するための制御
制御
---------------------------------------------------------------------------------

TCPのコネクション管理機能

 ・アプリケーションが使う )な通信路



・TCP通信の開始から終了まで




・コネクションの確立(作成)
 ・ で、双方向の通信路を作る




TCPヘッダ
・SYN,ACKの正体はヘッダ内の


TCPのコネクション管理機能
・コネクションの切断(解放)
 ・コネクションの切断は、 に行われる





送達確認
・送信データが届いたかどうか、逐一確認





・データセグメントが失われた場合

( )


確認応答がなければ再送
・確認応答が失われた場合



・RTOが経過した後、確認応答が帰ってきた




再送タイムアウトはどうやって決める?
・再送タイムアウト(RTO:Retransmission Time Out)
・セグメントの往復時間(① )の平均と、その (変動)を考慮して決定
 ・ゆらぎが大きいとき、① は大きく変化する →  が必要
 ・決定方法はOSにより異なり、現在も改良が続けられている


送達確認の仕組み
番号と で確認
 ・ 番号 ・・・  セグメントのデータ位置
  ・送信側が更新
  ・初期値はコネクション確立時にランダムに決定
 ・確認応答番号 ・・・  セグメントのデータ位置
  ・受信側が更新
  ・受信セグメントのシーケンス番号 +




・データセグメント送受信時


・コネクションの確立と切断時


・シーケンス番号と確認応答番号で確認
 ・シーケンス番号 ・・・ 送信するセグメントのデータ位置
  ・ が更新
  ・初期値はコネクション確立時にランダムに決定
 ・確認応答番号 ・・・ 次に受信すべきセグメントのデータ位置
  ・ が更新
  ・受信セグメントのシーケンス番号+受信データサイズ






再送制御とシーケンス番号
・確認応答が返ってこない場合



・受信セグメントが壊れていた場合


TCPのエラーチェック
・TCPのエラーチェックは、 も含める


TCP通信の効率化
・送達確認、再送制御が確実な通信を実現
 but. これは効率が悪い





・セグメントを連続受信するには が必要






・スライディング・ウィンドウ制御(







ウィンドウ制御と再送制御
・確認応答が失われた場合
 ・ウィンドウサイズがある程度以上あれば、確認応答が多少失われても、再送処理は


・送信セグメントが失われた場合
この現象は「 」と呼ばれる
(失われたセグメントの再送が完了するまで、後続セグメントの送信ができない)




・送信セグメントが失われた場合( の利用)







・送信セグメントが失われた場合(




通信状態に合わせた速度調節
・相手の処理速度に合わせる
 ・ウィンドウ制御では、 側の都合でセグメントを送信
 ・このとき、受信側が高負荷になっていると...
  ・セグメントの取りこぼし → セグメント再送 → 効率低下
 ・ に応じて通信量を制御(
・ネットワークの状態に合わせる
 ・混雑している状態で、大量のセグメント送信
  ・混雑増長 → セグメント喪失増加 → 再送増加 → 効率低下
 ・ に応じて通信量を制御(

流量制御(フロー制御)
・流量制御は 側が主導
を変化させることで速度を制御
 ・受信可能なウィンドウサイズを送信側に通知
  ・ウィンドウ更新通知
 ・速度を落としたい
  ・ウィンドウサイズを
 ・速度を上げたい
  ・ウィンドウサイズを
 ・送信を止めたい
  ・ウィンドウサイズを にする(
   ・ウィンドウ更新通知が失われると問題も...











遅延確認応答
・受信直後はウィンドウサイズが ことがある
 ・すぐに確認応答すると効率が (RTTが大きいとき顕著)


・セグメント1つ1つに確認応答する
 ・多くの実装では、 セグメントごとに確認応答


輻輳制御
・輻輳とは
 ・ネットワークが混雑し、 が起きる状態
 ・
  ・セグメントの喪失や破棄が増加 → 再送も増加
  ・再送増加が混雑に拍車 → セグメント喪失・再送の悪循環
  ・ついにネットワーク帯域の許容量を超えてダウン
   ・この事態は絶対に避けたい(通信を止めない限り回復は困難)
・輻輳制御の目的
 ・ネットワークの
  ・混雑したら速度を 、空いていれば速度を
 ・輻輳が生じない限界近くの速度を

輻輳制御は難しい
・TCPからはネットワークの状態把握が困難
 ・ネットワークは階層構造
  ・IPが下位層を抽象化
   ・通信媒体の性質が、上位層からは
・TCP/IPには 的な制御機構がない
 ・混雑状況に応じて、ユーザの振る舞いを制御できない
・インターネットは巨大で複雑
 ・現実的なシミュレーションができない
  ・通信媒体やネットワーク機器類が多種多様で、常に変化
  ・新しいアプリケーションが次々に登場
 ・昨日のインターネットは

TCPの輻輳制御の考え方
・ネットワーク状態は不明であることが前提
 ・処理はできるだけ単純に
  ・セグメントが喪失しないとき
   ・ネットワークは → 速度を上げる(上げ続ける)
  ・セグメントが喪失するとき
   ・ネットワークは → 速度を下げる
 ・ が主導して制御(中央制御は不可能)
  ・速度調節は、 で制御
   ・輻輳ウィンドウ
       確認応答なしで送信するセグメント量を決めるパラメータ
 ・基本は2つのアルゴリズム
  ・
  ・

TCPの輻輳制御アルゴリズム
・スロースタートアルゴリズム
 ・混雑状態への大量セグメント送信
  ・ を招く恐れが大きい → 周囲は迷惑
 ・ネットワークの状態を探りながら 速度を上げる
  ・輻輳ウィンドウサイズの初期値は、1MSS
  ・確認応答の数だけ輻輳ウィンドウのサイズを増やす
   ・送信セグメントの数は、 に増加
・輻輳回避アルゴリズム
 ・輻輳を回避しながら、一定範囲の速度を維持する
  ・輻輳ウィンドウサイズを1づつ増やし、 速度を上げる
   ・送信セグメントの数は、 に増加

スロースタートアルゴリズム


輻輳回避アルゴリズム


セグメント喪失で限界速度を判断
・2つのアルゴリズムは速度を のが基本
・再送発生時点が
 ・再送発生=セグメント喪失=輻輳状態
  ・これ以上の速度上昇は輻輳崩壊を招く → 速度を落とす
・限界点に達したときの処理
 ・再送発生の状況により2種類
  ・再送タイムアウトの発生 → 混雑状況は深刻
   ・スロースタート を設定
     設定値は、その時の輻輳ウィンドウサイズの
   ・輻輳ウィンドウを1MSSにし、 を再開
  ・重複確認応答の受信 → 混雑状況は
   ・スロースタート閾値まで減速し、 を再開

アルゴリズムは状況に応じて働く



TCPの限界
・TCPの目的は、
 ・but, そのままでは回線の能力を生かしきれない
・なぜか?
 ・効率(速度)向上の肝は
 ・ウィンドウサイズには がある
  ・ウィンドウサイズは16bit長
  ・上限は2^16 = 65535byte=64Kbyte
 ・つまり、
  ・ できるセグメントの数に上限がある

TCPの限界
・効率を で定量化してみる
 ・スループット= 当たりの伝送量([bit/s])
・TCPの最大スループット
 ・ )で決まる







スループットを向上させるには

 ・ オプションを使用
  ・ウィンドウサイズを最大2^14倍(1Gbyte)まで拡張可能
  ・but...  でサポートしていなければ使えない
      同じ容量の受信バッファが必要
      →1Gbyteものメモリをスループット向上に使うのは、
・1つの通信で同時に使う を増やす
 ・Webの場合
  ・4~16コネクションで、文字や画像など種類別に同時並行送信

 ・ を使う
  ・必要な通信制御はアプリケーションで