・IPによる通信は
・TCPは、不確実なIP網で、 な通信を実現するための機能を持ち、様々な制御を行う
・TCPの機能
・ 機能(トランスポート層に共通の機能)
・ 機能
・ 機能
---------------------------------------------------------------------------------
・ 確認
・ 制御 を実現するための制御
・ 制御
---------------------------------------------------------------------------------
・ 制御
・ 制御 を実現するための制御
・ 制御
---------------------------------------------------------------------------------
TCPのコネクション管理機能
・
・アプリケーションが使う ( )な通信路
.png?202411262353)
①
・TCP通信の開始から終了まで
.png?202411262353)
①
②
・コネクションの確立(作成)
・ で、双方向の通信路を作る
.png?202411262353)
①
②
TCPヘッダ
・SYN,ACKの正体はヘッダ内の
.png?202411262353)
TCPのコネクション管理機能
・コネクションの切断(解放)
・コネクションの切断は、 に行われる
.png?202411262353)
①
②
③
送達確認
・送信データが届いたかどうか、逐一確認
.png?202411262353)
①
②
・データセグメントが失われた場合
.png?202411262353)
① ( )
②
確認応答がなければ再送
・確認応答が失われた場合
.png?202411262353)
①
・RTOが経過した後、確認応答が帰ってきた
.png?202411262353)
①
②
再送タイムアウトはどうやって決める?
・再送タイムアウト(RTO:Retransmission Time Out)
・セグメントの往復時間(① : )の平均と、その (変動)を考慮して決定
・ゆらぎが大きいとき、① は大きく変化する → が必要
・決定方法はOSにより異なり、現在も改良が続けられている
.png?202411262353)
送達確認の仕組み
・ 番号と で確認
・ 番号 ・・・ セグメントのデータ位置
・送信側が更新
・初期値はコネクション確立時にランダムに決定
・確認応答番号 ・・・ セグメントのデータ位置
・受信側が更新
・受信セグメントのシーケンス番号 +
.png?202411262353)
①
②
・データセグメント送受信時
.png?202411262353)
・コネクションの確立と切断時
.png?202411262353)
・シーケンス番号と確認応答番号で確認
・シーケンス番号 ・・・ 送信するセグメントのデータ位置
・ が更新
・初期値はコネクション確立時にランダムに決定
・確認応答番号 ・・・ 次に受信すべきセグメントのデータ位置
・ が更新
・受信セグメントのシーケンス番号+受信データサイズ
.png?202411262353)
①
②
③
④
再送制御とシーケンス番号
・確認応答が返ってこない場合
.png?202411262353)
①
・受信セグメントが壊れていた場合
.png?202411262353)
TCPのエラーチェック
・TCPのエラーチェックは、 も含める
.png?202411262353)
TCP通信の効率化
・送達確認、再送制御が確実な通信を実現
but. これは効率が悪い
.png?202411262353)
① ~
② ~
③
・セグメントを連続受信するには が必要
.png?202411262353)
①
.png?202411262353)
①
・スライディング・ウィンドウ制御( )
.png?202411262353)
①
②
③
④
⑤
ウィンドウ制御と再送制御
・確認応答が失われた場合
・ウィンドウサイズがある程度以上あれば、確認応答が多少失われても、再送処理は
.png?202411262353)
・送信セグメントが失われた場合
この現象は「 」と呼ばれる
(失われたセグメントの再送が完了するまで、後続セグメントの送信ができない)
.png?202411262353)
①
②
・送信セグメントが失われた場合( の利用)
.png?202411262353)
①
②
③
④
⑤
・送信セグメントが失われた場合( )
.png?202411262353)
①
②
通信状態に合わせた速度調節
・相手の処理速度に合わせる
・ウィンドウ制御では、 側の都合でセグメントを送信
・このとき、受信側が高負荷になっていると...
・セグメントの取りこぼし → セグメント再送 → 効率低下
・ に応じて通信量を制御( )
・ネットワークの状態に合わせる
・混雑している状態で、大量のセグメント送信
・混雑増長 → セグメント喪失増加 → 再送増加 → 効率低下
・ に応じて通信量を制御( )
流量制御(フロー制御)
・流量制御は 側が主導
・ を変化させることで速度を制御
・受信可能なウィンドウサイズを送信側に通知
・ウィンドウ更新通知
・速度を落としたい
・ウィンドウサイズを
・速度を上げたい
・ウィンドウサイズを
・送信を止めたい
・ウィンドウサイズを にする( )
・ウィンドウ更新通知が失われると問題も...
.png?202411262353)
.png?202411262353)
①
②
.png?202411262353)
①
②
遅延確認応答
・受信直後はウィンドウサイズが ことがある
・すぐに確認応答すると効率が (RTTが大きいとき顕著)
.png?202411262353)
・セグメント1つ1つに確認応答する
・多くの実装では、 セグメントごとに確認応答
.png?202411262353)
輻輳制御
・輻輳とは
・ネットワークが混雑し、 が起きる状態
・
・セグメントの喪失や破棄が増加 → 再送も増加
・再送増加が混雑に拍車 → セグメント喪失・再送の悪循環
・ついにネットワーク帯域の許容量を超えてダウン
・この事態は絶対に避けたい(通信を止めない限り回復は困難)
・輻輳制御の目的
・ネットワークの
・混雑したら速度を 、空いていれば速度を
・輻輳が生じない限界近くの速度を
輻輳制御は難しい
・TCPからはネットワークの状態把握が困難
・ネットワークは階層構造
・IPが下位層を抽象化
・通信媒体の性質が、上位層からは
・TCP/IPには 的な制御機構がない
・混雑状況に応じて、ユーザの振る舞いを制御できない
・インターネットは巨大で複雑
・現実的なシミュレーションができない
・通信媒体やネットワーク機器類が多種多様で、常に変化
・新しいアプリケーションが次々に登場
・昨日のインターネットは
TCPの輻輳制御の考え方
・ネットワーク状態は不明であることが前提
・処理はできるだけ単純に
・セグメントが喪失しないとき
・ネットワークは → 速度を上げる(上げ続ける)
・セグメントが喪失するとき
・ネットワークは → 速度を下げる
・ が主導して制御(中央制御は不可能)
・速度調節は、 で制御
・輻輳ウィンドウ
確認応答なしで送信するセグメント量を決めるパラメータ
・基本は2つのアルゴリズム
・
・
TCPの輻輳制御アルゴリズム
・スロースタートアルゴリズム
・混雑状態への大量セグメント送信
・ を招く恐れが大きい → 周囲は迷惑
・ネットワークの状態を探りながら 速度を上げる
・輻輳ウィンドウサイズの初期値は、1MSS
・確認応答の数だけ輻輳ウィンドウのサイズを増やす
・送信セグメントの数は、 に増加
・輻輳回避アルゴリズム
・輻輳を回避しながら、一定範囲の速度を維持する
・輻輳ウィンドウサイズを1づつ増やし、 速度を上げる
・送信セグメントの数は、 に増加
スロースタートアルゴリズム
.png?202411262353)
輻輳回避アルゴリズム
.png?202411262353)
セグメント喪失で限界速度を判断
・2つのアルゴリズムは速度を のが基本
・再送発生時点が
・再送発生=セグメント喪失=輻輳状態
・これ以上の速度上昇は輻輳崩壊を招く → 速度を落とす
・限界点に達したときの処理
・再送発生の状況により2種類
・再送タイムアウトの発生 → 混雑状況は深刻
・スロースタート を設定
設定値は、その時の輻輳ウィンドウサイズの
・輻輳ウィンドウを1MSSにし、 を再開
・重複確認応答の受信 → 混雑状況は
・スロースタート閾値まで減速し、 を再開
アルゴリズムは状況に応じて働く
.png?202411262353)
①
TCPの限界
・TCPの目的は、
・but, そのままでは回線の能力を生かしきれない
・なぜか?
・効率(速度)向上の肝は
・ウィンドウサイズには がある
・ウィンドウサイズは16bit長
・上限は2^16 = 65535byte=64Kbyte
・つまり、
・ できるセグメントの数に上限がある
TCPの限界
・効率を で定量化してみる
・スループット= 当たりの伝送量([bit/s])
・TCPの最大スループット
・ と ( )で決まる
①
②
.png?202411262353)
.png?202411262353)
スループットを向上させるには
・
・ オプションを使用
・ウィンドウサイズを最大2^14倍(1Gbyte)まで拡張可能
・but... でサポートしていなければ使えない
同じ容量の受信バッファが必要
→1Gbyteものメモリをスループット向上に使うのは、
・1つの通信で同時に使う を増やす
・Webの場合
・4~16コネクションで、文字や画像など種類別に同時並行送信
・
・ を使う
・必要な通信制御はアプリケーションで