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
も使えるようです。
quant や aioquic はqlogのサンプルファイルを提供しているので、それらを読み込ませてみることもできます。
Option 2 Upload a file
手元にある.qlog
をアップロードして使うことができます。
Option 3 Load some premade demo files
用意されているいくつかのサンプルを使うことができます。
Option 4 Load a massive demo file
100MBのファイルをダウンロードしたときのサンプルも提供されています。
![option4.PNG]
(https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/302126/cc795465-a17f-7a7a-c35b-8e1b87e7daab.png)
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ファイルの情報や統計情報を見ることができます。