LoginSignup
14
9

More than 1 year has passed since last update.

qlog/qvizでQUICの可視化

Last updated at Posted at 2020-03-14

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のサンプルファイルを提供しているので、それらを読み込ませてみることもできます。

option1.PNG

Option 2 Upload a file

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

option2.PNG

Option 3 Load some premade demo files

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

option3.png

Option 4 Load a massive demo file

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

option4.PNG

Option 5 Load a file by URL parameter

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

option5.PNG

Sequence

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

sequence.PNG

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

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

quic_packet.PNG

[
  "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 をクリックするとそのログを見ることができます。

connection_start.PNG

[
  "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"
  }
]

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

client-server-log.PNG

Congestion

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

congestion1.PNG

前者は、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を見ることができます。

congestion2.PNG

Multiplexing

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

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

multiplexing.PNG

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

byterange_per_stream_frame.PNG

qlog stats

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

stats1.PNG

stats2.PNG

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9