三局、これをゼロから本当に作るとなると、難所は「リピーターを書くだけ」じゃなくて、「山ほどある汚くてしんどい作業を全部受け止める」ところにある。
だいたいこんな塊がある:
-
プロトコル設計
ハンドシェイクをどうするか
認証をどうするか
多重化をやるかどうか
UDP、TCP、DNS をどう統一して扱うか
最初は手抜きすると、結局あとで拡張性のせいでほぼ確実に書き直す -
クロスプラットフォームのネットワークスタック
Windows / Linux / macOS / Android / iOS で挙動が全部違う
TUN/TAP、システムプロキシ、ルーティング、DNS の乗っ取り方(フック)が全部違う
本当にキツいのはプラットフォーム互換であって、socket の数行コードじゃない -
性能
接続数が増えると問題が露呈する
buffer、copy、ロック競合、コルーチンのスケジューリング、メモリ断片化、syscall のオーバーヘッド
単一接続で走るからといって実戦で戦えるとは限らない -
安定性
切断後の再接続
ネットワーク切り替え
スリープ復帰
NAT / IPv6 / MTU / フラグメンテーション
異常現場が増えるほど、ログを見るだけで PTSD になれる -
暗号化とセキュリティ
鍵交換
リプレイ防止
前方秘匿性(Forward Secrecy)
セッション復元
設定配布のセキュリティ
ここで一番怖いのは「自分で暗号を発明する」ことで、それは自分に難易度を盛る行為 -
トラフィックとカプセル化戦略
パケットをどう切るか
header をどう隠すか
特徴量が固定化しすぎないようにどう避けるか
これは「通信できれば終わり」じゃなくて、「長期的に爆発しない」ことが目的 -
DNS 処理
ローカル解決かリモート解決か
DoH / DoT / 生 UDP
汚染、キャッシュ、一貫性、リーク
「つながってるのに何か変」問題の犯人は DNS が多い -
ルーティングと分流
グローバル、ルール、ドメイン別、IP 別、プロセス別
GeoIP / GeoSite / カスタムルール
ルールシステムは書けば書くほど半分インタプリタみたいになる -
可観測性(Observability)
ログ
tracing
接続状態
統計ダッシュボード
これがないとデバッグは玄学(オカルト)と「信じれば通じる」頼みになる -
設定システム
ホットアップデート
設定互換
バージョン移行
schema 検証
ユーザーは設定をクソみたいに書いておいて、コアが不安定だと文句を言うのが大好き -
クライアントのエコシステム
GUI
サブスクリプション
設定のインポート/エクスポート
システム統合
製品として作る段になると、コアのコード量が最大とは限らず、周辺が本体になる -
AI 支援プログラミング自体の落とし穴
AI は「正しそうに見える」ネットワークコードを書くのが得意
でも並行性、境界条件、プロトコルの状態機械では特に地雷を埋めやすい
骨組み作り、ボイラープレート補完、テスト作成は手伝える
プロトコルの正しさの検証は代わりにできない
最後はたいてい:AI が 5 分でコードを出し、あなたが 5 時間パケットキャプチャで犯人探し
もし簡易コアだけを作るなら、工学的にいちばん現実的な難所は実はこれ:
まず最小目標を定義する
最初からクロスプラットフォームにしない
最初から自作プロトコルにしない
最初からルールエンジンを作らない
最初から「万能・高性能アーキテクチャ」をやらない
そうしないと簡単にこうなる:
第一週:次世代コアを作るぞ
第二週:まず TCP 転送を通す
第三週:DNS がまた爆発した
第四週:やっぱ既存プロジェクトを魔改造するか
一言で辛口評:
ゼロから「動くもの」を書くのはそこまで難しくない。難しいのは「長期で保守できて、クロスプラットフォームで、安定していて、拡張できて、性能が腐ってない」ものを書くこと。
もしあなたが評価したいのが「AI 支援ありで、ゼロから使える MVP までの難易度」なら、この観点でさらに分解して:
2 週間プロトタイプ
1 か月で自分用に使える
3 か月で牢屋みたいな保守にならない
みたいなバージョンで出せる。