全てはQUICから
本家の資料によると、92%がworksと書いてある。
当然、自分も無意識に使っているはず。どんなものか見てみたい。
そこで、Wireshark。すると…

確かに出ているが、一瞬だけ。その後は、見慣れたSSL/TLSが、どばーっと。
いきなり8%にご当選か。不幸だー。
Google様のテクノロジーの恩恵を受けたいじゃないの。
環境
我が家にはNOC(A)とNOC(B)があり、NOC(A)=v4/v6デュアルスタックのISP、NOC(B)=v4シングルスタックのISP。
NOC(A)-NOC(B)間は、IPIP(v6)でトンネルしており、NOC(B)のv6は、NOC(A)のISP経由になる。
よって、NOC(A)-NOC(B)のPath MTUは、1500-40=1460だ。
これなら、1350+8+40=1398のQUICのClient Helloは、通りそうじゃない。
でも、実際に見ると、TCPにFallbackしている。また、Chromeを動かすホストをv4シングルにすると、ちゃんとQUICになる。
UDPなQUICはMSS Clampingも効かないので、MTUが1460になるように、Path MTU discoveryの挙動を確認してみよう。(フラグ)
MTUにまつわる罠たち
調べる過程で目撃してしまった、MTUの味わい深い世界を、お楽しみ下さい。
UDPなQUICに無関係なものも含む。
SEILの経路MTU探索抑制機能
NOC(B)のルーターはSEIL/x86。
マニュアルによると、v6+トンネルの場合、PMTUDを抑止する機能があるらしい。
しかも、デフォルトでon。
条件も合っていそうだし、踏んでしまったか。
RTX1200のip tunnel mtu
NOC(A)のルーターはRTX1200。
ip tunnel mtu 1460を設定しているのに、挙動を見ると、1280固定で動作しているように見える。
機種と条件が違うが、こちらのリリースノートだと、「1280固定のはずがip tunnel mtuの値で動作」というバグがあったらしい。
マニュアルをよく見ると、ip tunnnel mtuはあるが、ipv6 tunnel mtuは無い。
over v6のトンネルは、1280固定が、仕様? (詳細未確認)
この時点で、QUIC over UDP over IPv6 over IPv6は、ギブアップか。
大きいICMPを不正と扱うICMP
ping -sなどでMTUを測定していると発生。IDSなどで不正と検知し、落とされてしまう。
YAMAHAの場合は1025バイト以上が条件の模様。
こちらも大変詳しい。
しかし、MTUを通知するICMPに載せる元パケットのサイズが実装依存とは…大きいパケットを送ろうとして、大きすぎることを通知するデータが大きすぎると、ブラックホール。
TCP Segmentation Offload (TSO)
QUICとは関係の無いTCPについてだが、ICMPのport unreachable(MTU=1460)を受けた後のセッッションでも、1460-40-20=1400を超えるTCPセグメントを投げるホストがいる。
しかも、受けた方は、MSS Clampingのように、TCPレベルでMTUに合わせたセグメントを受信している。
さらに、netstat -4 -nrCで、ルーティングキャッシュに乗らないように見える。
なにこれ、こわい…。
これは、TSOによるものだった。こちらに詳しい。
VMwareでの詳細はこちら。
TSOをOffにできないドライバ
上記記事では、ethtool -K eth0 tso offで無効にならないドライバがある模様。
I350 + VMware + open-vm-toolsでも、無効にならないように見える(詳細未確認)。
ICMPで通知されるMTUよりも小さなMTUを使うホスト
iPhoneが、ICMP destination unreachableを受けると、1280で出してくるように見えるログをチラ見した気がする(詳細未確認)。
PLPMTUDに関連か? RFC2923?
MSS Clampingを手動でMTUに設定
ただの自分のちょんぼです。
特にv6は、MTUなら1280でMSS Clampingしないと通らないところに、結構ぶつかる気がする。
そこで、autoでなく手動設定して、はまる。
MSSは、MTUからIPとTCPのヘッダ分減らさないと。v6なら、1280-40-20=1220。
(おまけ)Chromeの挙動
QUIC v6 > TLS v6 > QUIC v4 > TLS v4 という優先順位のようだ。
PMTUが1280な経路はもはや少数派、というご判断なのだろうか…。
QUIC v4優先設定とかないかな(要調査)。
宿題
QUIC関連
- Internet draftによると、Path MTU discoveryはwork in progress
- QUICのお勉強…こちらが参考になりそう
MTU関連
- 世界のMTU/MSS状況、特にv6
- NICとドライバーのTSO対応状況
- ICMPを受けた後のTCPの挙動
- PLPMTUDと
tcp_mtu_probingとtcp_base_mssの関係