基礎 Foundations
Packet Parser
Bytes、offset、bit mask — wire 上の何かを読む出発点。
Protocol in Code · Learning Paths
Protocol in Code は 23 トラック / 151 セッションあります。誰も公開順に全部読む必要はありません。 このページはトラックをジャンルで束ね、さらに「初心者」「Web エンジニア」「インフラ」「セキュリティ」「SRE」の 5 つの目的別ルートを示します。 入門コース Protocol Lab(手を動かす hands-on コース)との対応表も最後に置いています。
English: The course has 23 tracks / 151 sessions. Nobody should read them in publication order. This page groups tracks by genre, then gives 5 goal-based roadmaps, plus a cross-reference table to Protocol Lab, the hands-on beginner sibling course.
Genres
どのジャンルから読んでも、最後は総括トラック Same Shape(コース全体で繰り返された 5 つの構造のまとめ)で締めるのが推奨です。
Packet Parser
Bytes、offset、bit mask — wire 上の何かを読む出発点。
BGP → OSPF → RIP → RPKI
router がどう経路を決めるか: policy、link state、distance vector、origin trust。
ARP → STP → IGMP
IP の手前で起きること: resolution、loop、そして 1 本の wire 上の multicast。
TCP → TCP2 → QoS
信頼性のある配送、それを運用するコスト、トラフィックの pacing。
DNS → DNSSEC → TLS
名前で見つけること、そしてその答えを信じてよいかを決めること。
HTTP/QUIC → LB
parse された request から multiplex された stream、backend 選択まで。
DHCP → NAT → ICE → ICMP
address を得ること、共有すること、NAT を越えること、エラーを読むこと。
NTP → HA (VRRP+BFD)
今何時かを合わせること、そして沈黙から死を推論すること。
Same Shape
コース全体で密かに繰り返されていた 5 つの code 構造。
Roadmaps by goal
この講座からではなく、まず Protocol Lab から始めます。Protocol Lab は hands-on-first — 2 台の router を動かし、パケットを capture し、protocol が code として読まれる前にまず挙動を見ます。
日々 API を呼んでいる人向け。fetch() とサーバーの間で起きているすべてを説明できるようになるルートです。
DNS (8) → TCP (11) → TLS (9) → HTTP/QUIC (10) → LB (6) → TCP2 (6) → Same Shape (5) — 合計 55 sessions。
このルートを終えると、遅い request を resolution、handshake、HoL blocking、LB の選択、TIME_WAIT の滞留まで end-to-end で説明できます。
ルーター室のルート。
Packet Parser (5) → ARP (4) → DHCP (6) → ICMP (5) → BGP (15) → OSPF (12) → RIP (6) → RPKI (5) → STP (5) → HA (4) → Same Shape (5) — 合計 72 sessions。
Protocol Lab の各プロトコルの containerlab 演習と自然に組み合わせられます。
信頼の連鎖と、それが壊れる場所を辿るルート。
Packet Parser (5) → TLS (9) → DNSSEC (5) → RPKI (5) → ARP(4、認証のない cache)→ NAT (6) → ICE (5) → Same Shape (5) — 合計 44 sessions。
繰り返し出てくるテーマ: 何が署名されていて、何が単に信じられているだけで、どの第 3 の状態(NOT_FOUND / INSECURE / STALE)がシステムを正直に保っているか。
本番環境がなぜそう振る舞うのかを説明するルート。
TCP (11) → TCP2 (6) → LB (6) → QoS (5) → NTP (4) → HA (4) → ICMP (5) → NAT (6) → IGMP (4) → Same Shape (5) — 合計 56 sessions。
繰り返し出てくるテーマ: あらゆる時間スケールでの timeout、budget、そして「沈黙は失敗を意味する」という前提。
Protocol Lab ↔ Protocol in Code
Lab で動かして面白かったプロトコルは、対応するトラックでコードとして読めます。逆にトラックを読んだ後に Lab を動かすと、理解を実パケットで裏取りできます。
| Theme | Protocol Lab (hands-on) | Protocol in Code (read the logic) |
|---|---|---|
| BGP | Labs 01–03, 31 (anycast) | bgp (15) |
| RPKI | Lab 04 | rpki (5) |
| DNS | Labs 05–06, 13–14, 41–42 | dns (8), dnssec (5) |
| TCP | Labs 07–08, 30 (congestion), 37 (MSS) | tcp (11), tcp2 (6) |
| TLS | Labs 09, 15 (mTLS), 17 (DANE) | tls (9) |
| HTTP / QUIC | Labs 10–11, 27 | http-quic (10) |
| DHCP | Lab 22 | dhcp (6) |
| ARP / ND | Labs 23–24 | arp (4) |
| NAT | Labs 20, 40 | nat (6), ice (5) |
| OSPF | Lab 34 | ospf (12) |
| BFD / failover | Lab 35 | ha (4) |
| Load balancing | Labs 32–33, 41 | lb (6) |
| QoS | Lab 28 | qos (5) |
| Multicast | Lab 29 | igmp (4) |
| Traceroute / ICMP | Labs 19, 25 (PMTUD) | icmp (5) |
| Packet reading | (tcpdump throughout) | parser (5) |
| Spanning tree | — (course gap: no Lab yet) | stp (5) |
| Time sync | — (course gap: no Lab yet) | ntp (4) |
| Distance vector | — (contrast track) | rip (6) |
表の中で Lab が未整備なテーマ(STP、NTP)は、今後の Protocol Lab 追加候補です。
How to read any single track
PYTHONPATH=src python3 examples/<track>/session_NN_walkthrough.py