パケットの遅延とか損失の話
Uber、モバイルアプリの通信をHTTP/2からQUICに変更して表示速度改善。TCPとUDPの違いによるQUICのメリットは大きい。 / “Employing QUIC Protocol to Optimize Uber's App Performance | Uber Engineering Blog” https://t.co/3gOzL3x1wP
— アロハのmatsuu🐧 (@matsuu) June 2, 2019
のニュース中身読んでみた
QUICの話まで理解できなかったけど、パケットの遅延とかRTTが気になってしまった。
ワイヤレス上のTCPパフォーマンス
TCPはもともと有線ネットワーク用に設計されていました。
有線ネットワークには、予測可能なリンクがあります。
ただし、ワイヤレスネットワークには独自の特性と課題があります。
第1に、無線ネットワークは干渉および信号減衰による損失を受けやすい。
たとえば、WiFiネットワークは、マイクロ波、ブルートゥース、および
その他の種類の電波からの干渉を受けやすいです。
セルラネットワークは、建物などの環境内のものによる反射/吸収、および
近隣の基地局からの干渉による信号損失(または経路損失)の影響を受ける。
これらの結果、有線のものよりもはるかに長く(例:4~10倍)
可変ラウンドトリップタイム(RTT)
およびパケット損失が発生します。
携帯とかは有線の4~10倍の
- ラウンドトリップタイム(RTT)
- パケット損失
らしい。
RTTについては、説明省略(https://jehupc.exblog.jp/15349359/の図がわかりやすかった。)
さらに
高いRTT値と、中央値のほぼ6倍のテールエンド値があり、平均分散は1秒を超えています。
さらに、ほとんどの接続は損失が多く、TCPは総パケット数の3.5%を再送していました。
駅や空港などの混雑した場所では、ネットワークによってパケットが廃棄されるのは最大7%でした。
これらの結果は、セルラーネットワークの高度な再送信方式がトランスポート層での損失を
大幅に減らすという共通の概念に挑戦しています。
以下に、モックアプリケーションでテストを実行した結果の概要を示します。
以下の表もニュースの中にあったが
ネットワークメトリクス |
値 |
ミリ秒単位のRTT [50%、75%、95%、99%] |
[350、425、725、2300] |
RTT差異(秒) |
平均〜1.2秒
|
損失の多い接続でのパケット損失率 |
平均約3.5%(渋滞地域では7%) |
50%が350ミリ秒
75%425ミリ秒(パケットの25%が425ミリ秒のRTT)
95%725ミリ秒(パケットの20%が725ミリ秒のRTT)
99%2300ミリ秒(パケットの4%が2300ミリ秒のRTT)
つまり、有線は
- 350÷4=87.5ミリ秒のRTT
- 総パケット数の7%÷4=1.75% or 7%÷10=0.7%パケット損失(有線の損失率が1%前後ってことらしい。)
前雑誌の付録でついていたRTTはスゴイ小さい値だったけど理想の値ってこと?
普通にPINGしてみたら、30ミリ秒ぐらいだった。
yahoo.co.jp [183.79.135.206]に ping を送信しています 32 バイトのデータ:
183.79.135.206 からの応答: バイト数 =32 時間 =29ms TTL=51
183.79.135.206 からの応答: バイト数 =32 時間 =20ms TTL=51
183.79.135.206 からの応答: バイト数 =32 時間 =37ms TTL=51
183.79.135.206 からの応答: バイト数 =32 時間 =26ms TTL=51183.79.135.206 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 20ms、最大 = 37ms、平均 = 28ms
ニュースの中のリンクで面白いのがあって*1
なぜオーバーバッファリングが問題なのか
バッファが大きすぎると、いっぱいになり遅延が発生し、インターネットの多くの用途が破壊されます。
株式トレーダーやゲーマーは、競合相手に1msの優位性さえも持たせたくありません。
音楽を再生するには、ジッタ(遅延の変動)とレイテンシを制御し、100ミリ秒未満に保つ必要があります。
何かを手に「感じる」ようにするために(完璧なラバーバンディング)、レイテンシは30ミリ秒の範囲を下回る必要があります。
キーボードエコーが知覚できないほど50ms
長距離ネットワークではVoIP(Voice over IP)が光速度による遅延を支配しているため、エンドツーエンドの遅延を150ミリ秒(長距離電話のメトリック)未満に抑えるには、アクセスの遅延が重要になります。
bufferbloatによる過度のパケット損失は、DNS(Domain Name System)検索に失敗する可能性があります。
ARP、DHCP、RA、NDなどの重要なネットワークプロトコルはすべてタイムリーな応答を想定しており、それなしでは失敗する可能
あります。
遅延は数百ミリ秒から数秒に及ぶため、Webブラウジングは困難になります。
とか遅延の許容の話が書いてあった。
まとめ
無線(QUICなし)
- 350ミリ秒のRTT
- 損失率が平均約3.5%
有線
- 87.5ミリ秒のRTT(実測30ミリ秒くらい)
- 損失率が1%前後
回線が遅いなと思ったときの判断の基準にできるかもしれない。