ハイパフォーマンス ブラウザネットワーキング

―ネットワークアプリケーションのためのパフォーマンス最適化

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
380
ISBN
978-4-87311-676-1
原書
High Performance Browser Networking
FORMAT
Print PDF EPUB
Ebook
4,400円
Ebookを購入する
Print
4,400円

現代のアプリケーションエンジニアは、UIやデータ処理、開発言語、プラットフォームの仕様や癖だけでなく、サーバやネットワークについても、上から下まで、表から裏まで広く知ることを求められます。本書は「ブラウザ」に関連し、インターネットで使用されるさまざまなネットワーク技術をまとめたものです。HTTP/2.0やWebRTCなどの最新技術、WebSocketやXMLHttpRequestなどのブラウザAPI、そしてそれらの土台となるTCPやUDPやトランスポート層についてまでを幅広くカバーします。本書はカバーする技術範囲の広さを「パフォーマンス」という軸に沿って説明します。また改善前後の性能・速さを可能な限り具体化し、それぞれの場面においてのパフォーマンス改善幅を示します。ネットワークのデータリンク層からアプリケーション層、そして過去から近い将来までをまとめた本書は、インターネットにかかわるすべてのエンジニア必携の一冊です。
本書のTwitterハッシュタグは #HPBNjです。

目次

まえがき
訳者まえがき
はじめに

I部 ネットワークの基礎

1章 レイテンシ・帯域幅入門
    1.1 スピードは機能
    1.2 レイテンシを構成する多数の構成要素
    1.3 光の速さと伝播遅延
    1.4 ラストマイルのレイテンシ
    1.5 基幹ネットワークの帯域幅
    1.6 ネットワークエッジの帯域幅
    1.7 より大きな帯域幅とより低いレイテンシを提供

2章 TCPの構成要素
    2.1 3ウェイハンドシェイク
    2.2 輻輳回避と輻輳制御
        2.2.1 フロー制御
        2.2.2 スロースタート
        2.2.3 輻輳回避
    2.3 帯域幅遅延積
    2.4 HoLブロッキング
    2.5 TCPの最適化
        2.5.1 サーバ設定のチューニング
        2.5.2 アプリケーションの動作のチューニング
        2.5.3 パフォーマンスチェックリスト

3章 UDPの構成要素
    3.1 ヌルプロトコルサービス
    3.2 UDPとネットワークアドレス変換(NAT)
        3.2.1 接続状態タイムアウト
        3.2.2 NATトラバーサル
        3.2.3 STUN、TURN、そしてICE
    3.3 UDPの最適化

4章 TLS
    4.1 暗号化、認証、データ整合性
    4.2 TLSハンドシェイク
        4.2.1 RSA、Diffie-Hellman鍵交換と前方秘匿性
        4.2.2 ALPN(Application Layer Protocol Negotiation)
        4.2.3 SNI(Server Name Indication)
    4.3 TLSセッション再開(TLS Session Resumption)
        4.3.1 セッションID
        4.3.2 セッションチケット
    4.4 信頼チェーンと認証局
    4.5 証明書の失効
        4.5.1 証明書失効リスト(CRL)
        4.5.2 オンライン証明書状態プロトコル(OCSP)
    4.6 TLSレコードプロトコル
    4.7 TLSの最適化
        4.7.1 計算コスト
        4.7.2 Early Termination
        4.7.3 TLSセッションキャッシュとステートレスセッション再開
        4.7.4 TLS False Start
        4.7.5 TLSレコードサイズ
        4.7.6 TLS圧縮
        4.7.7 証明書チェーンの長さ
        4.7.8 OCSP Stapling
        4.7.9 HTTP Strict Transport Security(HSTS)
    4.8 パフォーマンスチェックリスト
    4.9 テストと検証

II部 ワイヤレスネットワークのパフォーマンス

5章 ワイヤレスネットワーク入門
    5.1 ユビキタスコネクティビティ
    5.2 ワイヤレスネットワークの種類
    5.3 ワイヤレスネットワークにおけるパフォーマンスの基礎
        5.3.1 帯域幅
        5.3.2 信号強度
        5.3.3 変調
    5.4 実世界のワイヤレスパフォーマンスを測定

6章 WiFi
    6.1 Ethernetから無線LANへ
    6.2 WiFi標準とその機能
    6.3 WiFiパフォーマンスの計測と最適化
        6.3.1 WiFiネットワークのパケットロス
    6.4 WiFiネットワークの最適化
        6.4.1 使い放題の帯域幅の利用
        6.4.2 変化する帯域幅に適応
        6.4.3 変動するレイテンシに適応

7章 モバイルネットワーク
    7.1 モバイルネットワーク世代の歴史の概要
        7.1.1 2Gによる最初のデータサービス
        7.1.2 3GPPと3GPP2のパートナーシップ
        7.1.3 3G技術の進化
        7.1.4 IMT-Advanced 4G規格
        7.1.5 LTE(Long Term Evolution)
        7.1.6 HSPA+がワールドワイドの4Gを牽引
        7.1.7 世代が混在する将来に向けて
    7.2 デバイスの機能と性能
        7.2.1 UEカテゴリ
    7.3 RRC(Radio Resource Controller)
        7.3.1 3G、4G、そしてWiFiの電源要件
        7.3.2 LTE RRCステートマシン
        7.3.3 HSPAとHSPA+(UMTS)RRCステートマシン
        7.3.4 EV-DO(CDMA)RRCステートマシン
        7.3.5 定期的通信の非効率性
    7.4 エンドツーエンドの移動体通信事業者ネットワークアーキテクチャ
        7.4.1 RAN(Radio Access Network)
        7.4.2 基幹ネットワーク(CN)
        7.4.3 バックホール回線の容量とレイテンシ
    7.5 モバイルネットワーク内のパケットフロー
        7.5.1 リクエスト開始
        7.5.2 インバウンドデータフロー
    7.6 ヘテロジニアスネットワーク(HetNet)
    7.7 実世界の3G、4G、そしてWiFiパフォーマンス

8章 モバイルネットワークの最適化
    8.1 バッテリー消1量を抑える
    8.2 非効率な定期的データ送受信を排除
        8.2.1 不要なアプリケーションのキープアライブを排除
    8.3 ネットワークレイテンシのオーバーヘッドを予想
        8.3.1 RRC状態遷移を説明
        8.3.2 ネットワークコミュニケーションからユーザインタラクションを切り離す
    8.4 変化するネットワークインターフェイス状態に対応するデザイン
    8.5 バースト的に送受信し、アイドル状態に戻る
    8.6 WiFiネットワークへオフロード
    8.7 プロトコルとアプリケーションのベストプラクティスを適用

III部 HTTP

9章 HTTPの歴史
    9.1 HTTP 0.9:ワンラインプロトコル
    9.2 HTTP 1.0:急速な成長とInformational RFC
    9.3 HTTP 1.1:インターネット標準
    9.4 HTTP 2.0:トランスポートのパフォーマンス向上

10章 Webパフォーマンス入門
    10.1 ハイパーテキスト、Webページ、Webアプリケーション
    10.2 モダンWebアプリケーションの解剖学
        10.2.1 スピード、パフォーマンス、そして人間の知覚
        10.2.2 リソースのウォーターフォールチャートを分析する
    10.3 パフォーマンスの柱:演算、レンダリング、ネットワーク
        10.3.1 より大きい帯域幅は(あまり)効果なし
        10.3.2 パフォーマンスのボトルネックとしてのレイテンシ
    10.4 人工的テストとリアルユーザでのパフォーマンス計測
    10.5 ブラウザ最適化

11章 HTTP 1.x
    11.1 キープアライブ接続の利点
    11.2 HTTPパイプライン
    11.3 複数のTCP接続を使用する
    11.4 ドメインシャーディング
    11.5 プロトコルオーバーヘッドの計測と制御
    11.6 ファイル結合とスプライト
    11.7 リソースインライン化

12章 HTTP 2.0
    12.1 HTTP 2.0の歴史、そしてSPDYとの関係
    12.2 HTTP 2.0への道
    12.3 設計と技術的目標
        12.3.1 バイナリフレーミングレイヤー
        12.3.2 ストリーム、メッセージ、フレーム
        12.3.3 リクエストとレスポンスの多重化
        12.3.4 リクエスト優先度付け
        12.3.5 1オリジンに1接続
        12.3.6 フロー制御
        12.3.7 サーバプッシュ
        12.3.8 ヘッダ圧縮
        12.3.9 効率的なHTTP 2.0アップグレードと発見
    12.4 バイナリフレーム入門
        12.4.1 新規ストリームの開始
        12.4.2 データ送信
        12.4.3 HTTP 2.0フレームのデータフローを解析

13章 アプリケーション配信最適化
    13.1 定番のパフォーマンスベストプラクティス
        13.1.1 リソースをクライアントにキャッシュ
        13.1.2 転送中リソースの圧縮
        13.1.3 リクエストから不要なデータを排除
        13.1.4 リクエストとレスポンス処理の並列化
    13.2 HTTP 1.xの最適化
    13.3 HTTP 2.0の最適化
        13.3.1 HTTP 1.xの最適化の削除
        13.3.2 デュアルプロトコルアプリケーション戦略
        13.3.3 HTTP 1.x-2.0変換レイヤー
        13.3.4 サーバの質とパフォーマンスを評価
        13.3.5 TLSを利用して/利用せずにHTTP 2.0を使用する
        13.3.6 ロードバランサ、プロキシ、そしてアプリケーションサーバ

IV部 ブラウザAPIとプロトコル

14章 ブラウザネットワーク入門
    14.1 接続管理と最適化
    14.2 ネットワークセキュリティとサンドボックス化
    14.3 リソースとクライアント状態キャッシュ
    14.4 アプリケーションAPIとプロトコル

15章 XMLHttpRequest
    15.1 XHRの歴史
    15.2 Cross-Origin Resource Sharing(CORS)
    15.3 XHRでデータをダウンロード
    15.4 XHRでデータをアップロード
    15.5 ダウンロードとアップロードの進行状況を監視
    15.6 XHRでデータストリーミング
    15.7 リアルタイム通知と配信
        15.7.1 XHRポーリング
        15.7.2 XHRを使ったロングポーリング
    15.8 XHRのユースケースとパフォーマンス

16章 Server-Sent Events
    16.1 EventSource API
    16.2 イベントストリームフォーマット
    16.3 SSEのユースケースとパフォーマンス

17章 WebSocket
    17.1 WebSocket API
        17.1.1 WSとWSS URLスキーム
        17.1.2 テキストデータとバイナリデータを受信
        17.1.3 テキストデータとバイナリデータを送信
        17.1.4 サブプロトコルネゴシエーション
    17.2 WebSocketプロトコル
        17.2.1 バイナリフレーミングレイヤー
        17.2.2 プロトコル拡張
        17.2.3 HTTPアップグレードネゴシエーション
    17.3 WebSocketのユースケースとパフォーマンス
        17.3.1 リクエストとレスポンスのストリーミング
        17.3.2 WebSocketメッセージのオーバーヘッド
        17.3.3 データ効率と圧縮
        17.3.4 カスタムアプリケーションプロトコル
        17.3.5 WebSocketインフラのデプロイメント
    17.4 パフォーマンスチェックリスト

18章 WebRTC
    18.1 WebRTCの標準と開発
    18.2 音声・動画処理エンジン
        18.2.1 getUserMediaで音声と動画を取得
    18.3 リアルタイムネットワークトランスポート
        18.3.1 RTCPeerConnection API入門
    18.4 P2P接続を確立
        18.4.1 シグナリングとセッションネゴシエーション
        18.4.2 Session Description Protocol(SDP)
        18.4.3 Interactive Connectivity Establishment(ICE)
        18.4.4 インクリメンタルプロビジョニング(Trickle ICE)
        18.4.5 ICE候補収集と接続性ステータスの追跡
        18.4.6 P2P接続開始プロセスの全体像
    18.5 メディアとアプリケーションデータを配信
        18.5.1 DTLSを使ったセキュアな通信
        18.5.2 SRTPやSRTCPを使ってメディアを配信
        18.5.3 SCTPを使ってアプリケーションデータを送信
    18.6 DataChannel
        18.6.1 セットアップとネゴシエーション
        18.6.2 メッセージの順序と信頼性を設定
        18.6.3 部分的信頼性のある配信とメッセージサイズ
    18.7 WebRTCのユースケースとパフォーマンス
        18.7.1 音声、動画、そしてデータストリーミング
        18.7.2 多者間通信アーキテクチャ
        18.7.3 インフラと容量のプランニング
        18.7.4 データの効率性と圧縮
    18.8 パフォーマンスチェックリスト

索引