家の中の番号は、家の中だけで通じる番号。外へ出るときは家の出口で、外でも通じるグローバル IP に書き換わる。だから隣の家と同じ 192.168.1.10 を使っていても、外ではぶつからない隣の家と同じ 192.168.1.10 でも、ぶつからない家の中の番号は、家の中だけで通じる。外へ出るとき、家の出口で外でも通じる番号に書き換わる家 Aスマホ192.168.1.10家の中だけの番号(プライベート IP)出口で書き換える家の出口203.0.113.5外でも通じる番号(グローバル IP)家 BPC192.168.1.10家の中だけの番号(プライベート IP)出口で書き換える家の出口203.0.113.9外でも通じる番号(グローバル IP)外の道では、出口の番号だけが通る家の中の番号は、家の中だけで通じる番号。外へ出るときは家の出口で、外でも通じるグローバル IP に書き換わる。だから隣の家と同じ 192.168.1.10 を使っていても、外ではぶつからない
43 億では、世界中の機器に配りきれなかった
IP アドレスは、ネットワーク上の機器を 1 つに特定するための番号です。手紙の宛先と同じで、これがないとデータの届け先を書けません。
いま主流の IPv4 は 32 ビットの番号で、192.0.2.15 のように 8 ビットずつ 4 つに区切って書きます。取りうる値は 2 の 32 乗、およそ 43 億通りです。設計された 1980 年代には十分すぎる数でしたが、1 人が何台も持ち歩き、家電まで通信する時代には足りません。
そこで用意されたのが IPv6 です。128 ビットあるので、総数は 10 の 38 乗という桁になります。2001:db8::1 のように 16 進数を並べて書き、連続する 0 は省略できます。
足りないまま、なぜ今日も IPv4 で暮らせているのか
IPv6 は 1998 年に規格が固まりましたが、置き換えは今も途中です。IPv4 のまま何とかする方法が先に見つかってしまったからです。
世界中で一意である必要があるのは、外に出ていく分だけです。家や会社の中だけで通じればよい番号は、他所と重複していてもかまいません。そこで内部専用として次の範囲が予約されました。
- 10.0.0.0 から 10.255.255.255
- 172.16.0.0 から 172.31.255.255
- 192.168.0.0 から 192.168.255.255
家の機器が 192.168 で始まる番号を持っているのは、この取り決めのためです。この番号のままでは外へ出られないので、家の出口で外でも通じる番号に書き換えられてから送り出されます。世界で一意な番号をグローバル IP、内部専用の番号をプライベート IP と呼びます。
では、いつ IPv6 に切り替わるのでしょうか。実際には「切り替わる」というより、両方を同時に持つ機器が増えていく形で進んでいます。いまのスマホは多くの場合、IPv4 と IPv6 の両方の番号を持っていて、相手が対応していれば IPv6 で、していなければ IPv4 で話します。だから利用者は移行に気づきません。作る側として注意が要るのは、設定ファイルに IP アドレスを直接書くときです。片方しか想定していない書き方をすると、片側の経路だけが静かに落ちます。
開発で毎日打つ 2 つの番号
0.0.0.0 は、つなぐ先に使う番号ではなく、待ち受けの指定。127.0.0.1 で待ち受けると、自分の中の口しか開かない。0.0.0.0 にすると Wi-Fi の口も開いて、スマホから届く127.0.0.1 は自分の中の口、0.0.0.0 はすべての口手元の PC でサーバーを起動し、手元のブラウザと、同じ Wi-Fi のスマホからつなぐ127.0.0.1 で待ち受け自分の中のループバックの口だけ手元の PCサーバー127.0.0.1 の口待ち受け中Wi-Fi の口閉じているブラウザ同じ Wi-Fi のスマホ届かない自分の PC の中からしか、つながらない0.0.0.0 で待ち受け持っているすべての口手元の PCサーバー127.0.0.1 の口待ち受け中Wi-Fi の口待ち受け中ブラウザ同じ Wi-Fi のスマホつなぐ先は、PC の Wi-Fi 側のIP アドレス(ポート番号も付ける)同じネットワークの他の機器からも届く2 つの番号の読み方番号意味127.0.0.1自分自身を指す番号。localhost と同じ場所0.0.0.0すべての口で待ち受ける指定。つなぐ先には使わない (環境で動きが違う)0.0.0.0 は、つなぐ先に使う番号ではなく、待ち受けの指定。127.0.0.1 で待ち受けると、自分の中の口しか開かない。0.0.0.0 にすると Wi-Fi の口も開いて、スマホから届く
0.0.0.0 は、つなぐ先に使う番号ではなく、待ち受けの指定。127.0.0.1 で待ち受けると、自分の中の口しか開かない。0.0.0.0 にすると Wi-Fi の口も開いて、スマホから届く127.0.0.1 は自分の中の口、0.0.0.0 はすべての口手元の PC でサーバーを起動し、手元のブラウザと、同じ Wi-Fi のスマホからつなぐ127.0.0.1 で待ち受け自分の中のループバックの口だけ手元の PCサーバー127.0.0.1 の口待ち受け中Wi-Fi の口閉じているブラウザ同じ Wi-Fi のスマホ届かない自分の PC の中からしか、つながらない0.0.0.0 で待ち受け持っているすべての口手元の PCサーバー127.0.0.1 の口待ち受け中Wi-Fi の口待ち受け中ブラウザ同じ Wi-Fi のスマホつなぐ先は、PC の Wi-Fi 側のIP アドレス (ポート番号も付ける)同じネットワークの他の機器からも届く2 つの番号の読み方番号意味127.0.0.1自分自身を指す番号。localhost と同じ場所0.0.0.0すべての口で待ち受ける指定。つなぐ先には使わない(環境で動きが違う)0.0.0.0 は、つなぐ先に使う番号ではなく、待ち受けの指定。127.0.0.1 で待ち受けると、自分の中の口しか開かない。0.0.0.0 にすると Wi-Fi の口も開いて、スマホから届く
手元の開発で一番よく打つのは 127.0.0.1 です。これは「自分自身」を指す特別な番号で、localhost という名前でも同じ場所を指します。手元で起動したサーバーに手元のブラウザからつなぐとき、通信は外へ出ずに自分の中で折り返します。
もう 1 つ、サーバーの起動設定で 0.0.0.0 を見かけます。こちらは「自分が持っているすべての口で待ち受ける」という意味です。127.0.0.1 で待ち受けると自分からしかつながらず、0.0.0.0 にすると同じネットワークの他の機器からも届くようになります。「手元では動くのにスマホから見えない」という詰まり方の定番の原因なので、違いを押さえておいてください。
なお、家のスマホや PC の番号は固定ではありません。Wi-Fi につなぎ直すたびに自動で割り当て直されるのが普通です。サーバーのように常に同じ番号でいてほしい機器だけ、明示的に固定します。