「ポートとソケットがわかればインターネットがわかる」を書きました

2016/11/10-1

11月21日に拙著「ポートとソケットがわかればインターネットがわかる」が発売予定です。 これまで私が書いてきた本よりもさらに踏み込んだ「わかりやすさ」を目指して、インターネットに関連する通信技術などを紹介しています。

本書が想定している読者は、「これまでさまざまな形でインターネットを使ってきたけど、通信技術を詳しく調べたことがない」とか、「これまでさまざまな形でインターネットを使ってきたけど、インターネットを使った通信を行うプログラムを書いたことがない」とか、「いろいろな形でネットを使った情報発信をしてきたけど、サーバ運用まではやったことがなく、漠然とやってみたいと思っている」といった方々です。

コンピュータやネットワークに限らず、何かに関して最初の一歩を踏み出すのはたいへんなものです。まったく何もわからない状態だと、「プログラミング」「通信技術」「TCP/IP」といった単語を見ただけで「難しそうだ。無理!」といった感想を持ちがちです。そもそも、どこで何をすることで勉強を開始して良いのかもわからないという状態にもおちいりがちです。

しかし、最初の一歩から二歩目に行くのは、比較的容易であることが多いのです。なにごとも、最もハードルが高いのは最初の一歩ではないでしょうか。

そこで、本書では、まず最初の一歩としてインターネットを使ったプログラミングを行う際の概観を感じていただくことを目指してみました。たとえば、山を登ろうとするときに目指す先がどこにあるのかがまったく見えない状態よりも、おぼろげながらであったとしても全体像が見えたほうが登りやすくなります。

では、どうやって読者の方々に最初の一歩を踏み出していただくかですが、まずは本書に対して興味を持っていただかないと意味がありません。そこで技術評論社の池本さんが思いついたのが、「小悪魔女子大生のサーバエンジニア日記」のaicoさんとのコラボ企画です。

aicoさんは、「小悪魔女子大生のサーバエンジニア日記」という本を書かれていることもあり、通信技術などのイラストを描かれるための引き出しを多く持たれています。しかも、絵が「かわいい」のです。「かわいいは正義」という言葉がありますが、「かわいい」というのは強いのです。たとえ、筆者がアラフォーのオッサンだとしても、そこに掲載されている挿絵が楽しげであれば許される場合もあるかもしれません。

内容が多少ディープになる部分があったとしても、「かわいい」からこそ読んでいただける、そんなこともあるかもしれません。そのうえで、その「aicoさんの個性」を崩さないように噛み砕いた読みやすい文章をどこまで書けるのかというのが、今回の筆者の大きな挑戦でした。かわいい、読みやすい、多少マニアックな部分を含む、という3つの要素をどこまで入れることができているのかは、読んでくれた読者の方々の判断に委ねる形になりますが、本書が、「自分でもインターネットを利用する何かを作ってみたいけど最初の一歩を踏み出す方向性がわからない」という方々の助けになれば幸いです。

イラストサンプル

こんな感じのイラストが入ってます!




目次

目次は、次のようになっています。拙著、よろしくお願いいたします!!!

はじめに
謝辞
第0章 インターネットの仕組みをわかりたいあなたへ
0.1 なぜインターネットが普及したのか?
0.2 ソケットとポートで説明する理由
0.3 「ソケット」や「ポート」という概念は「インターネット」よりも古い
0.4 UNIX的な視点
0.5 ネットワークという視点
0.6 読んでほしい読者像
第1章 Webを見ているときに起きていること
1.1 スマホでWebサイトを見るとき、何が起きているのか?
1.2 Webの住所、URL
1.3 URLを指定されたWebブラウザの動作
1.4 IPアドレス
1.5 TCPの80番ポートに接続する
1.6 HTTPのリクエストメッセージを送信する
1.7 HTTPメッセージを受け取り、表示する
1.8 www.example.comからコンテンツを取得してみる
1.9 Webサーバからデータを取得するプログラムはこう書ける
1.10 「HTTPだから簡単にできる」という側面も
第2章 インターネットとUNIXとソケット
2.1 ソケットとは何か?-その仕組みを探る
2.2 パソコンの中の執事、「カーネル」
2.3 さまざまな作業を並行して実行!
2.4 プロセス間通信
2.5 UNIXにおける抽象化
2.6 通信の「入り口」となるソケット、何と通信するかを指定する「ポート」
2.7 次はインターネットそのものの話です
第3章 インターネットの仕組み
3.1 データがどうやって届くのか?
3.2 パケット交換方式の仕組み
3.3 パケットを転送するルータ
3.4 ルーティングテーブルに掲載される「ネットワーク」
3.5 小規模なネットワークでの静的なルーティングテーブル生成例
3.6 デフォルトゲートウェイ
3.7 小規模ネットワークでの動的なルーティングテーブル生成
3.8 ネットワーク内のルーティングとネットワーク間のルーティング
3.9 AS(Autonomous System)とルーティング
3.10 BGP(Border Gateway Protocol)
3.11 IPv4パケットの形
3.12 層に分かれるネットワーク
第4章 TCPとUDPとポート番号
4.1 パケットが届く、その裏側では何が起きているのか?
4.2 複雑な処理は末端に任せる
4.3 到達性を保証するTCP
4.4 セッションの識別と「ポート番号」─ 複数の通信を同時にできる仕組み
4.5 TCPパケットを扱うカーネル
4.6 TCPによる接続の確立
4.7 TCPによる輻輳制御機構
4.8 UDP(User Datagram Protocol)
4.9 投げっぱなしジャーマンスープレックス!
4.10 分身の術!
4.11 UDPパケットのフォーマット
第5章 DNSと「名前」
5.1 名前解決とは何か?
5.2 DNSの仕組み
5.3 キャッシュDNSサーバによる反復検索
5.4 ルートサーバ
5.5 リソースレコード
5.6 キャッシュの有効時間
5.7 ネガティブキャッシュ
5.8 名前空間とも関連があるインターネットガバナンス
第6章 インターネットのガバナンス
6.1 誰がルールを決めているのか、ご存じですか?
6.2 インターネットの通信プロトコルを作るIETF
6.3 IETFによる標準化とは何か?
6.4 RFCには何が書かれているのか?
6.5 番号や名前などの資源を管理するIANA
6.6 IPアドレスやAS番号の割り振り
6.7 インターネットのプロトコルを作るIETFと番号資源を管理するIANA
6.8 ルートゾーンとIANAとICANN
6.9 レジストリ/レジストラ
6.10 ccTLDのレジストリ
6.11 次はプログラミングです
第7章 ネットワークプログラムを書いてみよう!
7.1 C言語でネットワークプログラミング
7.2 C言語を使える環境を用意しよう
7.3 ソケットを利用したTCPプログラミング例
7.4 TCPの送信元ポート番号を設定する
7.5 UDPのプログラミング例
7.6 UDPでの返信の例
7.7 getaddrinfo
7.8 IPv6とIPv4のどちらを使うべきか-Happy Eyeballs
7.9 TCPやUDP以外のソケット
第8章 ネットワークコマンドの使い方
8.1 pingとtracerouteを使ってみよう!
8.2 ping/ping6
8.3 traceroute/tracert/traceroute6
8.4 tracerouteの仕組み
8.5 最後の1ホップ
8.6 digコマンドを使ってみよう
8.7 Wireshark
8.8 TCPストリームの追跡
8.9 次はIPv6の紹介
第9章 IPv4とIPv6の違いとは何か?
9.1 IPv4とIPv6のデュアルスタック
9.2 IPv4とIPv6の両方を使う場合のソケットとポート
9.3 IPv4とIPv6による「2つのインターネット」
9.4 IPv4とIPv6はまったく別のプロトコル
9.5 そのほかにもいろいろと違いが
9.6 名前空間は共有している
9.7 IPv4とIPv6とDNS
9.8 IPv4とIPv6のどちらを使うのか判断するのはユーザ側
9.9 次はNATの話です
第10章 NATはどのようにアドレス変換しているのか?
10.1 とても重要なNAT
10.2 一般的な家庭内LAN
10.3 NATが使われるようになった理由
10.4 プライベードIPアドレス
10.5 IPアドレスとポート番号を変換するNAT
10.6 NATの動作例
10.7 NATテーブルに含まれるエントリの削除
10.8 TCP以外のプロトコルも
10.9 増える大規模NAT
10.10 IPv6とNAT
10.11 次はサーバの仕組みです
第11章 インターネットとサーバの関係
11.1 インターネット上でサーバを運用する話
11.2 TCP接続を受け付けるWebサーバ
11.3 Webサーバの限界と対処
11.4 スケールアウト
11.5 Webサイトの裏側をスケールアウト
11.6 Web 3層構成
11.7 Webサイトの受付口をスケールアウト
11.8 ロードバランサ
11.9 大規模な配信を手伝うCDN
11.10 物理サーバ、仮想サーバ、仮想ネットワーク、クラウド
11.11 日進月歩の世界です
索引
おわりに

最近のエントリ

過去記事

過去記事一覧

IPv6基礎検定

YouTubeチャンネルやってます!