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 まとめ
参考文献
索引