ネットワーク (3) PC 起動後、どうやってネットワークに参加しているのか? DHCP と DNS
前回の更新から間が空きました。
ちょっとやるコトが多いとこうなっちゃいますね。時間の作り方は本当に難しいです😅
PCやスマホなど起動した後、どのようにネットワークに参加しているのでしょうか?
実際にはまずは LAN (Local Area Network) に参加します。LAN の中で、他と自分の識別をする必要があります。そのために IP Address で、自分と他人を識別するわけです。IP Address については、前回触れましたね。
さて、ここでは、以下の図を例に動きをみていきます。
この図では、4 つのネットワーク に注目します。
(1) 192 . 168 . 0 / 24 のネットワーク
これは、自分がこれから参加するところです。いろいろ表示されていますが、細かいことはこれから解説しますね。
(2) 192 . 168 . 1 / 24 のネットワーク
これは、自分の隣のネットワークですね。
(3) IP Address も書いてない、 DNS Root のネットワーク
DNS の説明も後回しで。
(4) contoso.com のネットワーク
これだけ、よく見る xxx.com のネットワークですね。
IP の設定を取得 - DHCP
PCの電源を入れましょう。
この PC は自分自身の IP の設定を特にもっていません。ちょっと言葉に語弊があります。DHCP という仕組みで具体的な設定を取得してこようとしています。DHCP は Dynamic Host Configuration Protocol の略です。PC、ここでは Host ですね、の IP などの設定を、動的に、つまり、Dynamic に設定するための仕組みです。
PC起動後に、実は DHCP Server を探します。そのために、LANの中で「DHCP Serverは誰? 返事頂戴!」という情報を、LANの中に盛大に発行します。ブロードキャストといい、そのLANの中で直接接続できる人の全員に問い合わせています。
結構乱暴ですよね。
で、DHCP Server が「はい、私ですよー」と返答します。
その際に、DHCP Server から、以下の情報を使ってね、と IP Address などの設定情報を Host に返します。この場合の Host は PC、スマホなどであり、この場合は DHCP Client でもあります。役割が複数あるんです。
IP Address - 192 . 168 . 0 . 10から99 の中の使われていない番号。例えば 192 . 168 . 0 . 10
Subnet - 255 . 255 . 255 . 0
これで、自分の IP Address が決まりますね!
IP Address と Subnet mask は前回説明しましたね。自分がどのネットワークにいて、自分の IP Address が何なのか? という事でしたね。同じネットワークにいる Host とは直接通信が出来ます。
自分のPCのどこで DHCP の設定がされているのでしょうか?
Windows の場合は [ネットワークとインターネット] の中にあります。[IP 割り当て] と [DNS サーバーの割り当て] に (DHCP) の文字が見えますよね!
iPhone も実は同様なんです。スマホであっても、Raspi みたいなデバイスであっても、全て一緒。
前回、私の PC の ipconfig の結果を再掲します。
だんだん、言葉の意味がわかってきましたね!
DHCP Server からは、追加で以下も貰っています。
DNS Server - 192 . 168 . 0 . 1
Default Gateway - 192 . 168 . 0 . 2
これらは何に使うのでしょうか?
Default Gateway - 他のLANへの橋渡し役。出口
順番が逆ですが、Default Gateway から説明しますね。
Default Gateway とは、自分たちのネットワークから外部に出る際に必要な処理をしてくれる Host の事です。
よくルーターと呼ばれる Computer がこの役割を担います。他のネットワーク上にある Host と通信をする際に、その通信パケットがルーターに送られて、必要な処理を代理実行してくれます。Hostからみたら委任ですね。
ルーターは別のルーターに、その処理を委任することもあります。この様に、数珠つなぎで処理を委任していくので、ルーターは比較的軽量な処理を行います。ですが、各々の通信元に確実に通信パケットを返す必要がありますから、各々の処理を記録しておく必要があります。
DHCP Serverの設定をよくみてください。
192 . 168 . 0 . 2 の Host は、ルーターの絵をしたコンピューターですよね。このルーターのIP Address などは固定にします。同じネットワーク内で、他と重複することの無いようにしないといけません。重複したらネットワーク内に Default Gatwayの役割を持つコンピューターが複数台存在しますので、通信に失敗が多発します。
DNS Server - IP Address じゃなく、名前で Host と通信できるように
DNS Server とは、いわゆる www.contoso.com など皆さん見慣れたであろうインターネットでのアドレスとして指定する名前を管理しているサーバーです。ドメイン名 (Domain Name)と言います。DNS とは Domain Name System の略です。Domain Name は、特定の Host つまり Computer にマッピングします。
ドメイン名を省略なく指定したものを FQDN (Fully Qualified Domain Name) と言います。
FQDN と Domain Name の違いは、殆どの場合、最後に「.」(ドット) をつけるかどうかです。
整理すると以下の様になります。いずれも、同じ Computer を表します。
IP Address = 192 . 168 . 0 . xxx
Host Name = www
Domain Name = www.contoso.com
Full Qualified Domain Name = www.contoso.com.
通常のアプリケーションの通信などでは、Domain Name で十分です。
さて、実際には Domain Name では通信は出来ません! これとっても大事です。通信をするためには IP Address に変換をする必要があります。
そのため、Domain Nameと IP Address の変換表を誰かがもって管理をする必要があります。それを行うのが DNS Server の役割です。
実はインターネットにおけるDNS Serverは、認定された管理業者で管理されています。ここを間違えると、それこそインターネットが大混乱です。
日本では JPNIC がその大本です。
日本ネットワークインフォメーションセンター - JPNIC
このDNSを、LANの中に限って利用するのが DNS Server というわけです。
実は、皆さんの PC / Mac には Hosts ファイルという、最小限の DNS の仕組みがあります。
PCの場合は管理者権限で以下のフォルダを開いてみてください。
C:\Windows\System32\drivers\etc
hosts ファイルがありますね!
私のコンピューターの場合は、内容は以下のようになっています。
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
# Added by Docker Desktop
192.168.3.12 host.docker.internal
192.168.3.12 gateway.docker.internal
# To allow the same kube context to work on the host and the container:
127.0.0.1 kubernetes.docker.internal
# End of section
# For example や、その下の #localhost name resolution is xxx を 参照してください。
<IP Address> <Host Name もしくは hostname>
の書式で記載します。スペースで区切っているだけです。
localhost で、よく自分のPCで動いている Web Serverや、Database Serverを参照することがあります。それは実は、hosts ファイルでは、コメントアウトされて無効化されています。ですが、host ファイルに記載しているのと同じ処理が TCP/IP の中で行われることによります。
DNS Server のIP Address も DHCP Server から取得することがわかりますね。
そして、DHCP Serverと DNS Server は実は連携して動く場合が殆どです。
DHCP Server は、DHCP Client からの通信情報をもとに Host と 配布した IP Address を DNS Server に登録を行います。
これによって下図のようにDNS Server に DNS Record として MyComputer-01 が登録されています。同じLANの中であれば、MyComputer-01 のHostと通信しようとDNS Serverに問い合わせれば、192 . 168 . 0 . 10 が取得できますね!
結果として、IP Address を知らなくても、Host 名さえわかれば、通信ができるようになります。
hostname はそのままコマンドでもあります。
以下に、私の Windows 11 での hostname コマンドの実行結果を提示しますね。実際には、OSのインストール時に指定したコンピューター名と一致します。
まとめ
今回は、DHCPとDNSについて取り上げました。殆どの Computer は DHCP Server から情報を取得して、毎回動的にネットワーク上の設定を行います。
なぜでしょうか?
そのHostは、ネットワーク上に24 x 365で存在していないこともあります。IP Address はネットワークの中で有限の資源、リソースです。この効率活用という側面があります。
また、Domain Name を維持したまま、IP Address の変更が出来ます。つまり、 www.contoso.com に IP Address の追加もできます。DNS Server に以下の様な DNS Recordの追加もできるわけです。
192 . 168 . 0 . 0 A www.contoso.com
192 . 168 . 0 . 1 A www.contoso.com
サービスとしての可用性があがりますよね。追加もできれば、複数台のうち1台が動いていれば対応できるわけですから。
IP Address に加えて、DNSの世界があります。
ちょっと面倒だな、と思うかもしれませんが。変更のしやすさと、リソースの有効活用という価値が得られるわけですね。
この記事が気に入ったらサポートをしてみませんか?