Blog 入門

【新卒向け】ネットワーク基礎 - IPアドレスからDNSまで

ブラウザがサーバーに繋がらない場面を入り口に、IPアドレスやポート番号、そして名前を住所へ変換するDNSの仕組みを、身近な例えとすぐ試せるコマンドで新卒エンジニア向けに丁寧に解説します。

8 min read [AI生成]

ブラウザの「このサイトにアクセスできません」から始める

配属初日、社内ツールのURLをブラウザに入力したら、真っ白な画面に「このサイトにアクセスできません」と表示された経験はないでしょうか。同じWi-Fiにつないでいる先輩のPCでは開くのに、自分だけ開けない。こういうとき、原因を切り分けられる人とそうでない人の差は、才能ではなく「通信が裏側でどう動いているか」を知っているかどうかです。

ブラウザにURLを入れてからページが表示されるまでの間に、コンピュータは静かに複数の作業をこなしています。この記事では、その中でも土台になる「IPアドレス」「ポート番号」「DNS」の三つを、身近なものに例えながら順番にほどいていきます。手元で試せるコマンドも紹介しますが、まずは「それが何で、なぜ必要なのか」から始めます。

IPアドレス — インターネット上の「住所」

手紙を届けるには宛先の住所が要ります。同じように、ネットワーク上のコンピュータ同士がデータをやり取りするにも、相手を一意に指し示す番号が必要です。これが IPアドレス(Internet Protocol address)です。IPとは、データをどう送り届けるかを決めた世界共通の取り決め(プロトコル)の名前で、その取り決めの中で使う住所がIPアドレスにあたります。

いま最も広く使われているIPv4では、192.168.1.10 のように0〜255の数字を4つ、ドットで区切って表します。0〜255というのは、コンピュータが扱う8桁の2進数(1バイト)で表せる範囲がちょうどその値だからで、深く覚える必要はありません。「4つの数字の組が一台分の住所」とだけ押さえてください。

自分のPCに割り当てられた住所は、コマンドで確認できます。macOSやLinuxのターミナル、あるいはWindowsのコマンドプロンプトを開いて実行します。

# macOS / Linux
ip addr        # shows all network interfaces and their IP addresses
# older macOS may need:
ifconfig
# Windows (Command Prompt / PowerShell)
ipconfig

出力の中に inet 192.168.x.xIPv4 アドレス といった行が見つかります。ここに表示される数字が、いまあなたのPCがネットワーク上で名乗っている住所です。複数出てくるのは、Wi-Fi・有線・仮想ネットワークなど「接続の口」ごとに住所が割り当てられているためで、いま使っている接続の行を見れば十分です。

つまずきポイント:IPアドレスは固定ではない

新人がよく戸惑うのが、「昨日メモしたIPアドレスで今日つながらない」という現象です。多くの環境ではIPアドレスは接続のたびに自動で貸し出される仕組み(DHCP)になっていて、再起動やWi-Fi切り替えで変わることがあります。「一度調べた住所がずっと有効とは限らない」と覚えておくと、無駄に悩まずに済みます。

プライベートIPとグローバルIP — 「社内の内線」と「代表電話」

先ほどの 192.168.x.x を、実はインターネット上の他人のPCはそのまま見ることができません。この帯域は プライベートIP と呼ばれ、家庭や社内といった閉じたネットワークの中だけで通用する住所だからです。会社の内線番号が社内でしか使えないのと同じ発想です。

対して、インターネット全体で一意に通用する住所を グローバルIP と呼びます。社内の各PCがインターネットに出るときは、ルーターがこのグローバルIP(会社の代表電話番号のようなもの)を使って外部とやり取りし、返ってきたデータを内線にあたる各PCへ振り分けます。だから「自分のPCのIP」と「外から見えるIP」は違うのが普通で、これは異常ではありません。

ポート番号 — 一つの住所にある「部屋番号」

住所だけでは、実はまだ足りません。一台のサーバーはWebサイトも配信すればメールもさばく、というように複数の役割を同時にこなします。届いたデータをどの役割へ渡すかを決めるのが ポート番号 です。住所が建物なら、ポート番号はその中の部屋番号にあたります。

役割ごとに使う番号は慣習でおおよそ決まっています。たとえばHTTP(暗号化なしのWeb通信)は80番、HTTPS(暗号化ありのWeb通信)は443番です。普段URLにポート番号を書かないのは、ブラウザが「httpsなら443番」と補って接続してくれているからです。開発中のツールが http://localhost:3000 のように番号付きで案内されるのは、通常とは違う部屋を明示的に指定しているためです。

つまり通信の宛先は、正確には「IPアドレス(建物)+ポート番号(部屋)」の組で決まります。ここまでを一度整理しておきます。

  • IPアドレス:どのコンピュータかを示す住所
  • ポート番号:そのコンピュータのどの役割につなぐかを示す部屋番号
  • プライベート/グローバル:内線か、外から見える代表番号か

DNS — 名前を住所に変換する「電話帳」

ここで最初の疑問に戻ります。私たちは普段 192.0.2.10 のような数字ではなく、example.com という名前でアクセスします。人間には数字より名前のほうが覚えやすいからです。しかしコンピュータ同士は結局IPアドレスでしか通信できません。この「名前」と「住所」の橋渡しをするのが DNS(Domain Name System)です。

DNSは、名前から住所を引ける巨大な電話帳のような仕組みだと考えてください。ブラウザは example.com を表示する前に、まずDNSへ「この名前の住所は?」と問い合わせ、返ってきたIPアドレスへ接続しにいきます。この問い合わせを 名前解決 と呼びます。冒頭の「アクセスできません」の一因が、実はこの名前解決の失敗であることは珍しくありません。

名前解決は手元でも確認できます。次のコマンドはmacOS・Linux・Windowsのいずれのターミナルでも使えます。

# Ask DNS which IP address a name points to
nslookup example.com

より詳しく見たいときは、macOSやLinuxで使える dig が便利です。

# Query DNS and show the answer section only
dig example.com +short

dig ... +short を実行すると、その名前に対応するIPアドレスが数字で返ってきます。これがまさに、ブラウザが裏で受け取っている「住所」です。名前を入れて住所が返ってくる様子を一度自分の目で見ておくと、DNSが何をしているのかが腑に落ちます。

つまずきポイント:切り分けの順番を持つ

「サイトが開けない」ときにやみくもにリロードするのではなく、プロは切り分けの順番を持っています。まず ping 8.8.8.8 のようにIPアドレス直接で疎通を確認し、通るのに名前でつながらなければ、原因はDNS側だと絞り込めます。

# Step 1: can we reach the internet at all (by IP)?
ping 8.8.8.8
# Step 2: does name resolution work?
nslookup example.com

8.8.8.8 はGoogleが公開しているDNSサーバーの住所で、疎通確認の目印としてよく使われます。手順1が通って手順2が失敗するなら「ネットワークは生きているがDNSが引けていない」、両方失敗するなら「そもそもネットワークにつながっていない」と、原因の場所が変わります。この「IPで確認してから名前で確認する」という順番が、闇雲な再起動より何倍も早く原因にたどり着かせてくれます。なお ping は相手に負荷をかけない軽い確認ですが、他社のサーバーへ大量に繰り返すのは避け、疎通確認は数回で止めるのが礼儀です。

まとめ

今日つかんでほしい地図を、もう一度並べます。

  • IPアドレスは、ネットワーク上のコンピュータを指す「住所」。多くは自動で貸し出され、固定ではない
  • プライベートIPは社内の内線、グローバルIPは外から見える代表番号。両者が違うのは正常
  • ポート番号は住所の中の「部屋番号」。宛先は「IP+ポート」の組で決まる
  • DNSは名前を住所へ変換する「電話帳」。ブラウザは接続前に名前解決をしている

次の一歩:いま使っているPCで ip addr(またはWindowsなら ipconfig)で自分の住所を確かめ、続けて nslookup example.com を実行してみてください。自分の住所と、名前から返ってきた住所を実際に目で見ることが、ネットワークを「暗記する対象」から「観察できる対象」に変える最初の一歩になります。

※ この記事はAIが自動生成したものです。本記事の内容は執筆時点の情報であり、正確性を保証するものではありません。ご利用の際は免責事項をご確認ください。

Share

Related / 関連記事

関連記事

Comments / コメント

コメント