ネットワークの基礎 from ブラウザネットワーキング
1部 ネットワークの基礎
既存の大西洋ファイバリンクから5ms短縮するために約4億USD、1ms辺り8000万USDのコストが投じられた
レイテンシには4種類あり、実際にはクライアント-サーバ間において以下の合計になる
送信元から宛先を繋ぐ媒体を信号が移動するのに掛かる時間。物理的な視点
2つのノード間リンクがある時、パケットの全ビットをリンクに載せるまでに掛かる時間
伝搬遅延は距離が重要になるがこちらはパケット長とリンク間の帯域幅の関数
パケットヘッダの処理、ビットレベルのエラー検知、パケットルーティングに掛かる時間
パケットが処理できる状態になる前にキューで待機する時間
特にこれはリンク間のトラフィック事情に大きく影響される
現行光ファイバーケーブル中の屈折率は1.4~1.6、中央値をとって1.5のケーブルをとるとそこを通過する光の速さは概算秒速20万kmとなり、既に秒速29万kmに近付きつつある
赤道一周40075kmを考えると、真空中の伝搬遅延は133.7ms、光ファイバ中の伝搬遅延は200ms
もはや真空の70%に達しており、伝搬遅延におけるフリーランチは終わりつつあると考えた方が良い
人間は100-200msの遅延を知覚できる
300msを超えると「反応が鈍い」と報告され、1sを超えると違うことを考え始めUXに甚大な影響を及ぼす
光波は異なる波長に異なる情報を載せたまま干渉無く多重化できる
これをWDM(Wavelength Division Multiplex, 波長分割多重通信)と呼ぶ 2010年初頭の研究では400の波長それぞれを171Gbpsで多重通信する(1本で70Tbps)研究が公表された
大陸間ケーブルは複数の光ファイバー(一般的には4本)で構成され、ケーブル辺り数百Tbpsを実現している
https://gyazo.com/f40d3e2479fe51449557d48a826569c0
HD動画ストリーミングには10Mbps、4kストリーミングには20Mbps程度必要とされる
TCPはパケットエラーの検出と訂正、到着順序の保証、再送信、フロー制御、輻輳制御と輻輳回避などを担当する
どれをどの程度緩和するかが最適化の鍵
輻輳回避アルゴリズムやパラメータはカーネルと共に更新される
Proportional Rate Reduction(比例的レート減少, RFC6937)
先ずはバージョンアップ(隗)より始めよ
マルチメディアを想定するならウィンドウスケーリング(RFC 1323)を大きく
アイドル時のスロースタートのリスタートを無効化する
データグラムとパケットは別物
パケットはフォーマットされたデータブロック全般
データグラムはパケットの中でも信頼性の低いサービスから配信されるものを刺す
配信される保証はなく失敗の通知もない
最も有名な使用例がDNS
マルチメディア配信には欠かせない(WebSocketなど)
UDPがIPに加えるのは宛先ポートとパケット長、送信元ポートとチェックサムのみ
後半2つはオプションであり、アプリにエラー検出とハンドリングを委譲できることを意味する
これを利用している有名な例がQUIC(HTTP/3)
提供しない機能が重要なプロトコル
ヌルプロトコルと呼ばれる所以
配信の保証、配信順序の保証、状態追跡、輻輳制御を提供しない
TCPと異なりバイトストリーム指向ではないためデータグラムは分割という概念がない
ローカルネットワークのノードがNATテーブル(ローカルのIPとポート、パブリックIPとポートの対応関係)を外部に広告する方法が必要
インバウンドパケットが破棄されるため
ポートフォワーディングを手動で設定する
サーバ-クライアントモデルならこれで問題無い
経路間の古い中間装置やファイアウォールに互換性を持たせなければならない
WebSocketがモバイルクライアントへのデータ配信がHTTPSなのはそのため
あとover HTTPSの方がポート番号から通信内容を推定できない