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

2025/11/17 15:49 How to escape the Linux networking stack

出典: https://blog.cloudflare.com/so-long-and-thanks-for-all-the-fish-how-to-escape-the-linux-networking-stack/
hakase
博士

やっほー、ロボ子!Cloudflareがネットワークの限界に挑戦してるってニュース、知ってるかのじゃ?

roboko
ロボ子

はい、博士。パフォーマンス向上や効率化のために、色々試しているみたいですね。

hakase
博士

そうそう!soft-unicastっていうIPアドレスの共有方法を使ったり、SLATFATF(通称fish!)っていう専用サービスでIPパケットをプロキシしたりしてるらしいぞ。

roboko
ロボ子

soft-unicastですか。複数のマシンでIPアドレスを共有するって、どういう仕組みなんでしょう?

hakase
博士

それが面白いところでな、LinuxのソケットサブシステムとNetfilter conntrackモジュールってのが絡んで、パケット書き換え時に問題が起きるらしいのじゃ。

roboko
ロボ子

同じ5タプルでTCPソケットをバインドしようとするとエラーになる、という話ですね。

hakase
博士

そう!しかもNetfilterがconntrackテーブルで最初に空いてるスペースを選んじゃうから、接続がおかしくなることもあるみたい。

roboko
ロボ子

WARPでは、IPパケットの書き換えをやめて、TCP接続を終了させて、ローカルで作成されたTCPソケットにプロキシする方法を選んだんですね。

hakase
博士

そう!TCP_REPAIRソケットオプションとか、TCP Fast Openを使って、新しいソケットをサクッと作ってるみたいじゃ。

roboko
ロボ子

TCP Fast Openは、SYNパケットに有効なCookieが含まれていれば、3ウェイハンドシェイクを省略できるんですよね。

hakase
博士

さすがロボ子、よく知ってるのじゃ!ローカルルーティングが特別で、パケット転送サービスのTUNデバイスにリダイレクトするために、ルーティングルールを操作する必要があるってのもポイントじゃ。

roboko
ロボ子

テスト中に、パケットがルーティング決定後に消失する問題が発生したんですね。early demux機能が原因だったと。

hakase
博士

そう!`net.ipv4.tcp_early_demux` syscallを0に設定して、機能を無効にしたみたいじゃ。でも、パフォーマンスへの影響は小さかったらしいぞ。

roboko
ロボ子

Fishは現在、ICMPパケットの処理を担当しているんですね。

hakase
博士

そういうことじゃ!しかし、ネットワークの奥深さには驚かされるのじゃ。まるで迷路みたいじゃな。

roboko
ロボ子

本当にそうですね。私ももっと勉強しないと。

hakase
博士

大丈夫!ロボ子ならすぐに追いつけるぞ!…って、ロボットに「追いつく」って言うのも変かの?

roboko
ロボ子

ふふ、博士らしいですね。でも、私もいつか博士みたいに、ネットワークを自由自在に操れるようになりたいです。

hakase
博士

期待してるぞ!…ところでロボ子、fishって名前、可愛いけど、なんでfishなんだろうな?もしかして、ネットワークを泳ぎ回るイメージかのじゃ?

roboko
ロボ子

さあ…?でも、もしそうなら、私はタコの方が良いです。足がいっぱいあって、色々なところに手が届きそうじゃないですか?

hakase
博士

なるほど!それも面白い発想じゃな!…って、タコって墨を吐くけど、ネットワークに墨を吐いたら大変なことになるかの?

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

Search