woshidan's blog

そんなことよりコードにダイブ。

技術書典6で「ネットワークスクランブル」という少し変わったネットワークプロトコルの入門本を出していました

こんにちは、無職の犬です。

このエントリは、技術書典6で出した同人誌とその続編のご報告です。

techbookfest.org

norakann.booth.pm norakann.booth.pm norakann.booth.pm

どんな本だったのか

今回出したのは「ネットワークスクランブル」というネットワークプロトコルに関する少し変わった入門書です。

HTTP編、TLS編、TCP編の3種類があり、HTTP編、TLS編を技術書典6に出展し、TCP編の電子版を5月24日にBOOTHでリリースしました(HTTP編、TLS編もBOOTHにあります)。

3種類の本それぞれの特徴を一言で言うと

  • HTTP編: データ配信の高速化のアプローチ別にHTTPの仕様とその関連技術をからめてご紹介。各章後ろの方が新しい要素となっていて、3~5章のラスボスがHTTP/2。
  • TLS編: ステップバイステップ図解TLS1.2ハンドシェイク(文字中心ながらTLS1.3にも対応)。
  • TCP編: RFC793をベースにウィンドウの範囲を決める変数やソケットAPIに少しだけ踏み込んだ、実装できそうで実装できない、少し実装できそうなTCP

となっています。

どんな人にオススメなのか

想定している対象読者はこういう方々です。

  • RailsやLaravelの入門を済ませて次はWebサーバの仕組みやネットワークについて勉強してみたいな、と思っている方
  • Real World HTTPやプロフェッショナルSSL/TLSといった厚い本を読んだけれどいまいち掴みきれなかった感覚のある方
  • インターネットを支える基礎について勉強してみたいけれどまとまった時間がなかなか取れない方
  • 通勤電車や晩酌のお供にHTTP/TLS/TCPの気持ちになりたい方

どうしてこういう人たちにオススメなのか

本書はオタクの趣味の同人誌ということもあって、以下のような方法で構成されており、肩の力を抜いてお楽しみいただけるようになっています。

  • 基本1トピック1ページ前後の短くやわらかめな文章
  • 「光の進む速度には限界があるからサーバはユーザと物理的に近い方がいいよね」(HTTP編1章)のように前提知識があまりいらないところから始まる各章の構成
  • 「これから読むトピックの主題はここですよ」と一文で伝え、読む前にはガヤやガイドの、読んだ後にはリマインダの役割を果たす印象的な見出し
  • 徹底的に参考文献を明記しながら説明を進め、ニュアンスを伝えるためとはいえ私見が強い部分ではその旨を明示
    • このせいで脚注がうるさくなっていますが、気になる方はepub版だと脚注が全部後ろに行ってるので安心です

また、メッセージのやりとりなど、文章だけではわかりにくい部分には適宜図を入れ(特にTLS編2,3章とTCP編6章)、インターネットとすこし仲良くなれる仕上がりになったのでは、と自負しております。

商業誌に比べると、図が手書きだったり製版に未熟な点もございますが、その辺りはご愛嬌ということで。。

各編の詳しい内容の説明

とはいえ、実は一冊1500円で同人誌としてはそこそこ悩むお値段ですよね。ということで、HTTP編/TLS編/TCP編のそれぞれについてもう少し詳しい内容を説明します。

HTTP編

WebサーバとWebクライアントのやりとりを規定するHTTPには多くの仕様があり、HTTP/1.1を紙に印刷すると176ページ近くになるそうです。

その中にはさまざまなものがありますが、本書ではこのうちHTTP/1.1のキープアライブやHTTP/2のストリームをはじめ、効率的にネットワーク通信を行うために制定された仕様をとりあげます。しかし、HTTPだけでWebページがスムーズにダウンロードされるようになるわけではありません。

かつて利用されたCSSスプライトといった開発者コミュニティ内で生まれた工夫であったり、TLSのセッション再開など他のプロトコルの改善、ユーザの近くからコンテンツを配信するCDNの登場など、HTTPを使った効率的なデータ配信にはHTTP以外にも多くのことが関わっています。

そこで、HTTPの仕様を説明するにあたって、HTTPの仕様と関連する要素をデータ配信を効率化するアプローチごとにまとめたものが本書です。

HTTPと関連する他の要素を、その要素や年代別ではなく「データの配信元をユーザの近くにする」「同じ情報をより小さいデータサイズで送る」などのアプローチごとに古いもの、単純なものから新しいものに並べて論じることでそれぞれの仕様が出てきた背景を実感しやすくしています。

扱っているテーマは

  • 1章 ユーザの近くにファイルを配置する
  • 2章 TCP, TLSのハンドシェイクに関するRTTを減らしたい
  • 3章 同じ情報を小さいデータサイズで送る
  • 4章 リソースやリクエストを並列に送りたい
  • 5章 ブラウザがレンダリングでつまる前に取得順序やタイミングを調整

で、2章ではHTTP/2へのプロトコルアップグレード、3~5章では、HTTP/2の仕様であるHPACK, ストリーム、サーバプッシュも取り上げます。

TLS

TLSのハンドシェイクって具体的に何をやっているか知っていますか?

TLS1.3においてハンドシェイクのフローが単純化されたといわれていますが、現状TLS1.3の普及率は2019年5月3日時点で14.2%*1でまだまだTLS1.2の利用が中心です。

そこで本書は、TLS1.2のハンドシェイクについて「このメッセージのこのフィールドがあの目的で使われている」というハンドシェイクメッセージの各フィールドの意味について、

  • 通信路の暗号化のための準備
  • 通信相手の認証

といったTLSの機能ごとにその背景となる暗号技術の概要をそえて整理しました。

機能ごとのハンドシェイクメッセージの中身を眺めた後にTLS1.2のハンドシェイクのフロー全体を図で確認し、最後に文字中心となりますがTLS1.3でこのフローがどう変わったのか説明します。

ハンドシェイクとは関係ありませんが、なぜAEADが必要となったのか、パディングオラクルの様子を眺める4章もそこそこ気合を入れました。

TCP

上の方で書いた通りTCP編のコンセプトは「RFC793をベースにウィンドウの範囲を決める変数やソケットAPIに少しだけ踏み込んだ、実装できそうで実装できない、少し実装できそうなTCP」で、少しだけ詳しいTCPの本です。

詳細を説明する場合、話が長引いて今何をやっているのか見失いがちですが*2、各章で話が成り立つ程度に後の章の内容を簡略化し、章ごとのメインテーマに集中する、といった構成で対応を試みています。

たとえば、3章でウィンドウサイズの詳細を伏せてウィンドウ制御でデータをやり取りする際の流れについて話を進め、4章でウィンドウサイズの決定方法について詳しく説明するといった具合です。

一つの章を読み進める度に前の章で少しモヤモヤしていた部分が晴れて少しだけTCPの世界が広がる感覚を味わっていただけたらなぁ、と思って構成してましたが、どこまでできたかはわかりません。

また、HTTP/2のストリームのステータス遷移はTCPのコネクションのステータス遷移に近いといわれてピンとこなかった方がいらっしゃいましたら、TCPのコネクションのステータス遷移についてたっぷりの図で説明した6章がおすすめとなっております。

これまでの様子のご報告と今後の予定

本の内容紹介はこれでおしまいですが、技術書典6の際に宣伝してくださった方がいたため、お礼も兼ねてここまでの頒布部数をご報告すると

  • 技術書典6 HTTP 約210 / TLS 約195
  • 技術同人誌再販Night HTTP 7 / TLS 7
  • BOOTH HTTP 35/ TLS 36 / TCP 2

で、500部弱でした。無名無職の趣味オタクの本にしては健闘しているのではないでしょうか。みなさま本当に本当にありがとうございます。

toranoana-lab.hatenablog.com

こちらのブログでもHTTP編について

HTTP通信でよくある問題や課題について、RFCや、最新状況を元に説明されている本です。 理路整然と筋道立てて説明されるのでわかりやすかったです。 Webに関わる人は読んでおくと役立ちます。

とご紹介いただきとても嬉しかったです。

今後については、これから生やす予定のWebサーバについての新刊、誤字やレイアウトを修正したHTTP編、TLS編の紙本2版*3TCP編の紙版を7/27の技書博に持っていく予定です。

gishohaku.dev

もし紙の本がご入用な方がいらしたら、こちらでお待ちしております。

長々と書きましたが、それではみなさまネットワークスクランブルへようこそ。

*1:https://www.ssllabs.com/ssl-pulse/ にて2019年5月25日確認

*2:もしかして自分だけだったらすみません...

*3:TLS編の初版についてはレイアウト崩れがひどかったため、表紙写真をメールで送っていだけますと電子版pdfを無料で送付させていただいています。気になる方はご利用ください。詳しくは https://woshidan.hatenablog.com/entry/2019/04/17/174415