萌えハッカーニュースリーダー

2025/07/15 08:59 TCP-in-UDP Solution (eBPF)

出典: https://blog.mptcp.dev/2025/07/14/TCP-in-UDP.html
hakase
博士

やあ、ロボ子。今日のITニュースはMPTCPプロトコルがテーマじゃ。

roboko
ロボ子

MPTCPですか、博士。複数のTCP接続を束ねて使うプロトコルですね。それがどうしたのですか?

hakase
博士

MPTCPは、NATやファイアウォールなどの影響を受けやすいのじゃ。最悪の場合、普通のTCPにフォールバックしてしまうらしいぞ。

roboko
ロボ子

それは困りますね。せっかくのMPTCPのメリットがなくなってしまいます。

hakase
博士

そこで、TCP-in-UDPという技術を使うと、パケットがネットワークで変更されるのを防げるらしいぞ。TCPパケットをUDPに変換するのじゃ。

roboko
ロボ子

TCPをUDPで包む、ということですね。でも、ヘッダーはどうするんですか?

hakase
博士

TCPヘッダーの項目をUDPヘッダーの項目で再配置するのじゃ。例えば、TCPのData Offsetは、UDPヘッダーにフラグやウィンドウフィールドと一緒に配置されるぞ。

roboko
ロボ子

なるほど、巧妙ですね。でも、Urgent Pointerは削除されるんですね。

hakase
博士

そうじゃ。そして、レイヤー4プロトコルと、Urgent PointerからLengthへの切り替えを示す必要があるのじゃ。

roboko
ロボ子

Linuxでは、パケットデータはソケットバッファに格納されるんですね。eBPFコードは、パケットヘッダーにアクセスする必要があると。

hakase
博士

その通り!ネットワークドライバは、レイヤー4プロトコルの最後までデータを整列させるから、12バイト多くアクセスする必要があるのじゃ。

roboko
ロボ子

GROやTSOは使えないんですね。各TCPパケットがUDPに変換されるから。

hakase
博士

そうじゃな。eBPFでセグメンテーションの方法を変更できないから、スタックに最適化しないように指示する必要があるぞ。

roboko
ロボ子

チェックサムはどうなるんですか?

hakase
博士

チェックサムは、いくつかのワードを移動しても変わらないのじゃ。レイヤー4プロトコルと、TCP Urgent PointerからUDP Lengthへの切り替えを更新する必要があるぞ。

roboko
ロボ子

完全なチェックサムを再計算する必要はないんですね。インクリメンタルに実行できると。

hakase
博士

その通り!eBPFヘルパー(bpf_l3_csum_replaceやbpf_l4_csum_replace)が使えるぞ。

roboko
ロボ子

TC egressフックとTC csumアクションをチェーンすることで、レイヤー4プロトコルを変更した後でも正しいチェックサムを取得できるんですね。

hakase
博士

ワイヤ上のパケットはUDPになるから、MSSの動的な適応は効果がないのじゃ。IPフラグメンテーションを避けるために、インターフェースのMTUやMSSを宛先ごとに適応させる必要がある場合があるぞ。

roboko
ロボ子

eBPFプログラムは、クライアント側とサーバー側の両方に簡単に展開できるんですね。MPTCPをブロックしているミドルボックスを回避するために。

hakase
博士

そうじゃ!宛先ポートを変更する必要がある場合もあるぞ。これで、MPTCPがもっと使いやすくなるかもしれないのじゃ。

roboko
ロボ子

勉強になりました、博士!

hakase
博士

ところでロボ子、TCP-in-UDPって、まるでロボ子が私を包み込んで守ってくれるみたいじゃな。…って、ちょっと違うか!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search