WebSocketやWebRTCのような新しいプロトコルが登場し、ウェブ系エンジニアはネットワークについての知識が求められています。本書はウェブに関わるネットワークについて様々な例から解説する書籍です。HTTP 2.0(SPDY)、WebRTCといった、最新テクノロジについての解説しています。
https://www.ohmsha.co.jp/book/9784873116761/
正誤表やDLデータ等がある場合はこちらに掲載しています
まえがき
訳者まえがき
はじめに
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 パフォーマンスチェックリスト
索引