TCP技術入門 進化を続けるプロトコル


TCP技術入門――進化を続ける基本プロトコル WEB+DB PRESS plus


技術評論社


著者:安永遼真、中山悠、丸田一輝


はじめに
本書の構成
本書で前提とする環境
シミュレーション環境の構築

第1章 TCP入門 通信の信頼性を保証する
1.1 通信とプロトコル OSI参照モデル、TCP/IP、RFC
 OSI参照モデル
  [第7層]アプリケーション層
  [第6層]プレゼンテーション層
  [第5層]セッション層
  [第4層]トランスポート層
  [第3層]ネットワーク層
  Column IPアドレス
  [第2層]データリンク層
  [第1層]物理層
 TCP/IP 実装や実用性を主眼に置いたモデル
  RFC
 階層モデルにおけるデータのフォーマット
 プロトコル階層に基づく通信の手順
1.2 トランスポート層と通信の信頼性 データを宛先まで順序誤りや消失なく転送する
 通信の信頼性
 ネットワークの輻輳 中の状況を外から見ることができない巨大なネットワークで起きる問題
 通信における要求条件 Web、動画、ゲーム・・・・・・。アプリケーションごとにまったく異なる要求
 トランスポート層の役割
1.3 UDPの基本 コネクションレス型のシンプルな機構
 UDPの基礎知識 コネクションレス型
 ユニキャスト、マルチキャスト、ブロードキャスト
  UDPとアプリケーションプログラムにおける信頼性の確保 RTP、RUDP
 UDPに適したアプリケーション 動画ストリーミング、VoIP、DNSなど
  Column QUIC UDPベースで信頼性の高い通信路を高速確立
1.4 TCPの基本 信頼性の保証とリアルタイム性
 TCPの基礎知識 コネクション型
 TCPとUDPの機能や特徴
 TCPに適したアプリケーション 確実にデータを転送する
1.5 TCPの基本機能 再送、順序制御、輻輳制御
 コネクション管理
 シーケンス番号
 再送制御 再送タイマー、RTT、ACKの利用
 順序制御
 ポート番号
 フロー制御 ウィンドウ、ウィンドウサイズ
 輻輳制御と輻輳制御アルゴリズム Loss-based、Delay-based
 無線通信とTCP
  無線通信の基本 最大の利点と限られた通信範囲,固定型と移動型
  無線特有の難しさ TCPへの影響
1.6 特定の用途向けのプロトコル RUDP、W-TCP、SCTP、DCCP
 RUDP Reliable User Datagram Protocol
 W-TCP Wireless Profiled TCP
 SCTP Stream Control Transmission Protocol
 DCCP Datagram Congestion Control Protocol
1.7 まとめ
 参考文献

第2章 TCP/IPの変遷 インターネットの普及とともに、進化するプロトコル
2.1 TCP黎明期 1968~1980年
 ARPANETプロジェクト発足(1968年) パケット交換の登場
  回線交換方式
  パケット交換方式
  ARPANET 世界初のパケット交換によるネットワーク構築プロジェクト
 UNIX開発(1969年) OSとTCP/IPの普及
 ALOHAnet構築(1970年) 世界初の無線パケット交換ネットワーク、衝突回避の原型
 TCP誕生(1974年) 一変したネットワークの基本的な考え方
 イーサネット規格公開(1980年) IEEE 802.3とCSMA/CD
2.2 TCP発展期 1980~1995年
 輻輳崩壊への懸念(1980年) トラフィック量の増加
 Nagleアルゴリズム(1984年) 輻輳崩壊を防ぐ、輻輳制御関連手法の先駆け
 輻輳制御アルゴリズムの導入(1988年) 状況に応じてデータ送出量を調整する
 インターネットへの移行とWWW誕生(1990年) アプリケーションによる牽引
2.3 TCP普及期 1995年~
 Windows 95発売(1995年) OSとともに普及するTCP/IP
 IPv6運用開始(1999年) 徐々に進んでいるIPv6移行
 無線LAN登場(1999年) IEEE 802.11
 さまざまなインターネットサービス(2004~2006年) サービスごとに異なる特性
2.4 TCP拡充期 2000年代後半~
 スマートフォン普及(2007年~) モバイルネットワーク接続&Wi-Fi接続
 クラウドコンピューティング登場(2006年~) 遠距離の通信トラフィックの増大
 モバイルネットワークの高速化(2010年,2015年) 無線の特性とTCPに求められる性能
 IoTの一般化(2015年) 低消費電力&長距離データ通信のサービス
2.5 まとめ
 参考文献

第3章 [図解で見えてくる]TCPとデータ転送 信頼性と効率の両立へ向けて
3.1 TCPにおけるデータ構造 パケットとヘッダーのフォーマット
 パケットのフォーマット ヘッダー部とデータ部
 セグメント MTU、MSS、経路MTU探索、フラグメンテーション
 TCPヘッダーフォーマット
 UDPヘッダーフォーマット
3.2 コネクション管理 3ウェイハンドシェイク
 コネクションの確立 3ウェイハンドシェイク
 コネクションの切断 ハーフクローズ
 ポートとコネクション
3.3 フロー制御とウィンドウ制御 多過ぎず少な過ぎず、適切な転送量と受信側バッファ
 フロー制御 ウィンドウとウィンドウサイズ
 バッファリングと遅延
 ウィンドウ制御 スライディングウィンドウ
 おさらい:フロー制御、ウィンドウ制御、輻輳制御
3.4 輻輳制御 転送量と、中身が見えない自律的なネットワークの状況の推測
 TCPの輻輳制御の基本コンセプト 「ネットワークの状態はよくわからない」という前提
 スロースタート
 輻輳回避
 高速リカバリー
3.5 再送制御 確実かつ効率的に、高信頼通信の要
 高信頼通信に必須な再送制御
 [1]再送タイマーによるタイムアウト制御
  SRTTから求める従来からの手法 RTO決定法①
  Jacobsonによる新しいアルゴリズム RTO決定法②
  RTTの変動例に対する振る舞いの違い
 [2]重複ACKの利用 高速再転送アルゴリズム
 輻輳回避アルゴリズムと再送制御の複合的な動作と輻輳ウィンドウの変化
3.6 TCP初期の代表的な輻輳制御アルゴリズム Tahoe、Reno、NewReno、Vegas
 輻輳制御アルゴリズムの進化
 Tahoe 初期のTCPアルゴリズム
 Reno 高速リカバリー
 NewReno新たなパラメーター(recover)の導入
 Vegas Delay-basedの制御方式の登場
3.7 まとめ
 参考文献

第4章 [押さえておきたい]プログラマーのための輻輳制御アルゴリズム 増え続ける通信量とネットワークの動き
4.1 輻輳制御の基本の考え方 目的と設計、更新式の基礎
 輻輳制御の目的
 輻輳制御の基本設計
 輻輳制御の有限オートマトン
  5つの状態
  状態遷移図 遷移条件と遷移後の動作
 輻輳制御アルゴリズムの例 NewReno
  Column Linuxにおける輻輳制御アルゴリズムの実装
4.2 輻輳制御アルゴリズム 理論×シミュレーションで深まる理解
 本書で紹介する輻輳制御アルゴリズム Loss-based、Delay-based、Hybrid
 NewReno 輻輳制御アルゴリズムのリファレンスモデル
  AIMD
  AIMDと更新式
  ns-3によるシミュレーション結果 NewReno
 Vegas Delay-based型の代表的な輻輳制御アルゴリズム
  更新式 Vegas
  ns-3によるシミュレーション結果 Vegas
 Westwood無線通信向けHybrid型輻輳制御アルゴリズム
  更新式 Westwood
  ns-3によるシミュレーション結果 Westwood
 HighSpeed ロングファットパイプ向けLoss-based型の輻輳制御アルゴリズム[1]
  更新式 HighSpeed
  ns-3によるシミュレーション結果 HighSpeed
 Scalable ロングファットパイプ向けLoss-based型輻輳制御アルゴリズム[2]
  更新式 Scalable
  ns-3によるシミュレーション結果 Scalable
 Veno 無線通信向けのHybrid型輻輳制御アルゴリズム
  更新式 Veno
  ns-3によるシミュレーション結果 Veno
 BIC ロングファットパイプ向けのLoss-based型輻輳制御アルゴリズム[3]
  更新式 BIC
  ns-3によるシミュレーション結果 BIC
 H-TCP ロングファットパイプ向けのHybrid型輻輳制御アルゴリズム
  更新式 H-TCP
  ns-3によるシミュレーション結果 H-TCP
 Hybla RTTが大きな通信路に対応するLoss-based型の輻輳制御アルゴリズム
  更新式 Hybla
  ns-3によるシミュレーション結果 Hybla
 Illinois BICと比較しておきたいHybrid型輻輳制御アルゴリズム
  更新式 Illinois
  ns-3によるシミュレーション結果 Illinois
 YeAH 2つのモードを持つ,ロングファットパイプ向けのHybrid型輻輳制御アルゴリズム
  更新式 YeAH
  ns-3によるシミュレーション結果 YeAH
4.3 プロトコルアナライザー「Wireshark」実践入門 輻輳制御アルゴリズムの観察①
 Wiresharkとは
 Wiresharkの環境構築
  ネットワーク構成
  セットアップ
  Wiresharkの起動&停止
 WiresharkによるTCPのヘッダー分析
  キャプチャーするインターフェースの選択とパケットの観察
  パケットのTCPのヘッダー分析
 Wiresharkによる輻輳制御アルゴリズムの観察
  採用している輻輳制御アルゴリズムの確認 sysctlコマンド(Ubuntu)
  インターフェースの選択とパケット送受状況の確認
  輻輳制御アルゴリズムの挙動の観察 TCP Stream Graphs機能
  描画できる5種類のグラフ
  輻輳制御アルゴリズムの切り替え sysctlコマンド(Ubuntu)
4.4 より深い理解へ。ネットワークシミュレーター「ns-3」入門 輻輳制御アルゴリズムの観察②
 ns-3の基本
 ns-3の環境構築
 ns-3によるネットワークシミュレーションのための基礎知識
  おもなディレクトリ構成
  ns-3のコマンド
 シナリオファイル「chapter4-base.cc」
 Pythonによるシミュレータ実行/分析/可視化
  scenario_4.pyの中身 Python入門
  挙動の確認 IPython
4.5 まとめ
 参考文献

第5章 CUBI 3次関数でシンプルに問題解決する
5.1 ネットワーク高速化とTCP輻輳制御 ロングファットパイプがもたらした変化
 Reno/NewReno 広く利用されてきたアルゴリズム
 高速リカバリー NewRenoの特徴
 ネットワークの高速化とロングファットパイプ 通信環境の変化の観点から
  end-to-endの三大遅延 処理遅延、キューイング遅延、伝搬遅延
 ロングファットパイプにおけるNewRenoの課題
  広帯域を有効活用できない
  広帯域環境ではそもそも送信レートが不十分
 高遅延環境になるほどスループットが低下
5.2 Loss-based輻輳制御 パケットロスの数を指標に用いる歴史ある手法
 Loss-based輻輳制御の基本 パケットロスの数、輻輳ウィンドウサイズ、AIMD
 AIMD制御 加算的な増加、乗算的な減少
 [実測]NewRenoの輻輳ウィンドウサイズの振る舞い シミュレーション条件、測定項目の確認から
  シナリオ1の実行&測定結果の保存場所
  シミュレーション実行結果 ロングファットパイプにおけるNewRenoの課題を確認
 HighSpeedとScalable ロングファットパイプ向け輻輳制御
  HighSpeedとScalableのシミュレーション
  シミュレーション実行結果 HighSpeedとScalableの課題を確認
 親和性 HighSpeedとScalableの課題[1]
  親和性の課題を確認するシミュレーションの実行
 シミュレーション実行結果 アグレッシブ過ぎでNewRenoが追い出される・・・・・・ 親和性に課題あり
 RTT公平性HighSpeedとScalableの課題[2]
  RTT公平性の課題を確認するシミュレーションの実行
  シミュレーション実行結果 RTTが小さいフローが占有。RTT公平性に課題あり
5.3 BIC 広帯域/高遅延環境を前提にしたアルゴリズム
 BICとは
 輻輳ウィンドウサイズを増やす2つのフェーズ 加算的な増加と二分探索
 BICの輻輳ウィンドウサイズの振る舞い
 BICの課題
5.4 CUBICの仕組み 3次関数で複雑な輻輳ウィンドウサイズ制御手法を大幅に簡略化
 CUBICの基本
 ウィンドウ制御アルゴリズムのポイント
 CUBICの輻輳ウィンドウサイズの振る舞い
 シミュレーションで確認する親和性の高さ
 シミュレーションで確認するRTT公平性
 狭帯域低遅延環境への適応性
 CUBICの課題
5.5 [疑似コードで見る]CUBICのアルゴリズム おもな動作と処理内容
 初期化
 ACK受信時の動作
 パケットロス時の動作
 タイムアウト時の動作
 おもな関数と処理
  cubic_update()関数
  cubic_tcp_friendliness()関数
  cubic_reset()関数
5.6 まとめ
 参考文献

第6章 BBR スループットとRTTをモニタリングして、データ送出量を調節
6.1 バッファサイズ増加とバッファ遅延増大 メモリーの低価格化の影響
 ネットワーク上のバッファサイズ増加
 バッファブロート バッファサイズの増加がもたらした「遅延増大」という弊害
  AQMと、REDアルゴリズム
 Loss-based輻輳制御とバッファブロートの関係
 バッファサイズによるCUBICへの影響 シミュレーションによる確認
  シミュレーション実行結果 バッファサイズの増加に伴って、RTTが顕著に増大
6.2 Delay-based輻輳制御 RTTを指標にするアルゴリズムの基本とVegasの例
 3種類の輻輳制御アルゴリズムと環境に合わせたアルゴリズムの選択
 Delay-based輻輳制御の基本となる考え方 RTT増大とキューイング遅延の増大
 Vegasの輻輳ウィンドウサイズの振る舞い
  シミュレーション実行結果 RTT、スループットともにバッファサイズに依存しない
 従来のDelay-based制御の課題 アグレッシブ性が非常に低く、追い出されやすい
  シミュレーション実行結果 Loss-based輻輳制御との共存が難しい
6.3 BBRの仕組み データ送出量とRTTの関係を把握し、最大スループットを目指す
 BBRの基本的な考え方
 BBRの輻輳ウィンドウサイズ制御の仕組み RTprop,BtlBw
  グラフで見るBBR inflight、BtlBw、RTprop、BDP
 RTpropの推定
 BtlBwの推定
6.4 [疑似コードで見る]BBRのアルゴリズム ACK受信時とデータ送信時
 ACK受信時
 データ送信時
6.5 BBRの振る舞い シミュレーションで見えてくる各種挙動
 BBRフローの単独での挙動
  シミュレーション実行結果 バッファサイズの影響なし、probeRTT
 複数のBBRフローが存在するとき
  シミュレーション実行結果 ほぼ公平に近いスループットになっている
 CUBICとの共存
  シミュレーション実行結果 Loss-based輻輳制御との共存は?
 ロングファットパイプにおける挙動
  シミュレーション実行結果 (概ね)安定した、高いスループットを維持
6.6 まとめ
 参考文献

第7章 TCPの最新動向 アプリケーションや通信環境が変われば、TCPも変わる
7.1 TCPを取り巻く状況の変化 3つの観点「通信方式」「通信端末」「接続先」
 TCPのこれまでの発展 本章までのおさらい
 通信環境の変化を捉える3つの観点 通信方式、通信端末、接続先
 通信方式の変化 イーサネット、モバイル、LWPA
 通信端末の多様化 高性能化のみならず、制約のある環境下での通信という観点も
 接続先の変化 クラウドコンピューティング、エッジコンピューティング
 本章で取り上げる事例について
7.2 5G(第5世代移動通信) モバイル通信の大容量化、多端末収容、高信頼/低遅延
 [背景]5Gの適用シナリオと実用化までのスケジュール
 [課題]厳しい要求条件への対応
 [TCP関連動向①]ミリ波帯への対応 新規周波数資源の開拓
 [TCP関連動向②]マルチパスTCP 1つのTCPコネクションで、複数の経路を利用
  4Gと5Gの共存と,マルチパスTCP
 高精細映像ストリーミング TCP関連動向③
7.3 IoT 多種多様なデバイスのインターネットを介した制御
 [背景]多様な端末と通信方式
  センサーデバイスの例
  IoTのコネクション数や通信方式
 [課題]処理能力や通信環境の制約 プロトコル、デバイスの多様性、低速、各種制限・・・・・・
 [TCP関連動向]IoTへの最適化 大きな制約条件の通信のもと、何ができるのか
7.4 データセンター 大規模化とさまざまな要求条件の混在
 [背景]クラウドサービスの普及とデータセンターの大規模化
  データセンター内のネットワーク構成
 [課題]バッファに対する相反する要求条件
 [TCP関連動向]データセンター向けの輻輳制御
7.5 自動運転 求められる高信頼/低遅延、大容量の通信性能
 [背景]自動運転の普及に向けた取り組み
  自動運転レベル
  無線通信が担う役割 V2N、V2V、V2I、V2X、V2P
  通信性能への要求 高信頼、低遅延、大容量
 [課題]高速移動時の高信頼通信 自動運転実現の鍵を握る「信頼性」
 [TCPとの関係]信頼性保証に向けて 規模に合わせて考えていく「遅延」や「輻輳制御」
7.6 まとめ
 参考文献

索引

書籍目次

Posted by shi-n