qlog/qvizでQUICの可視化


qlogとは

qlogはQUICのログのフォーマットです。

現在qlogでは3つのドラフトが提案されています。

一つ目が、プロトコルに依存しないハイレベルのスキーマを定義する、「Main logging schema for qlog draft-ietf-quic-qlog-main-schema-00」です。

QUICに関連する定義は「QUIC event definitions for qlog draft-ietf-quic-qlog-quic-events-00」、HTTP/3とQPACKに関連する定義は「HTTP/3 and QPACK event definitions for qlog draft-ietf-quic-qlog-h3-events-00」にそれぞれかかてれいます。

qvizとは

qlogを可視化するためのツールです。ソースは https://github.com/quiclog/qvis で公開されています。

また、オンラインで使える環境として、https://qvis.edm.uhasselt.be/#/files が用意されています。

qvizでできること

qvizには、Manage Files、Sequence、Congestion、Multiplexing、qlog statsの5個のメニューが用意されています。

Manager Filesでは、可視化するファイルを読み込みます。

Sequenceでは、QUICのシーケンスを可視化します。イベントや、QUICパケットの中身などを確認することができます。

Congestionでは、送信中のデータなどの情報と、輻輳制御に関する情報を見ることができます。

Multiplexingでは、並列化されたストリームの状態を可視化できます。

qlog statsでは、統計情報を見ることができます。

Manage Files

Manager Files では、qvizで可視化するqlogファイルを読み込みます。

Option 1 Load a file by URL

このオプションでは .qlog.pcap.pcapng をURLからロードして使うことができます。.json も使えるようです。

quantaioquic はqlogのサンプルファイルを提供しているので、それらを読み込ませてみることもできます。

Option 2 Upload a file

手元にある.qlog をアップロードして使うことができます。

Option 3 Load some premade demo files

用意されているいくつかのサンプルを使うことができます。

Option 4 Load a massive demo file

100MBのファイルをダウンロードしたときのサンプルも提供されています。

Option 5 Load a file by URL parameter

URLパラメータを使ってファイルを与えることができます。以下のフォーマットが適用できます。

Sequence

SequenceではQUICのクライアントーサーバー間のシーケンスを見ることができます

クライアントーサーバ間でやり取りされているQUICパケット毎にQUICパケットとそこに含まれるQUICフレームの情報を見ることができます。

例えば以下のように最初にクライアントからサーバーに送信されるパケットをクリックすると、以下のような情報を見ることができます。

[
  "0",
  "transport",
  "packet_sent",
  "line",
  {
    "packet_type": "initial",
    "header": {
      "version": "0xff000016",
      "scid": "7e37e4dcc6682da8",
      "dcid": "36ce104eee50101c",
      "scil": "8",
      "dcil": "8",
      "payload_length": 1224,
      "packet_number": "0",
      "packet_size": 1251
    },
    "frames": [
      {
        "frame_type": "crypto",
        "offset": "0",
        "length": "284"
      },
      {
        "frame_type": "padding"
      }
    ],
    "type": "initial"
  }
]

他にも、クライアント、サーバーそれぞれのイベントのログも表示することができます。下記のようにconnection_started をクリックするとそのログを見ることができます。

[
  "0",
  "connectivity",
  "connection_started",
  "line",
  {
    "ip_version": "4",
    "src_ip": "130.104.228.79",
    "dst_ip": "52.58.13.57",
    "transport_protocol": "UDP",
    "src_port": "40618",
    "dst_port": "4433",
    "quic_version": "0xff000016",
    "src_cid": "7e37e4dcc6682da8",
    "dst_cid": "36ce104eee50101c"
  }
]

クライアントとサーバーの両方のログを使った可視化も可能です。

Congestion

Congestionでは、送信中のデータなどの情報と、輻輳制御に関する情報を見ることができます。報

前者は、Data sent (includes retransmits)、Data acknowledged、Data lost、Connection flow control limit、Sum of stream flow control limits を表示することができます。

後者は、Congestion window、Bytes in flightを表示することができます。

他には、Min RTT、Latest RTT、Smoothed RTTを見ることができます。

Multiplexing

Multiplexingでは、並列化されたストリームの状態を可視化できます。上部のwaterfallではそれぞれのストリームの生存期間が表示されます。

下部のMultiplexed data flowでは、ストリームフレームの受信を時系列に表示しているようです。

Byterange per STREAM frameでは、Multiplexed data flowで選択したストリームのストリームフレームのbyte rangeを見ることができます。

qlog stats

qlog stats ではqlogファイルの情報や統計情報を見ることができます。