ネットワークの基礎的な知識
- ネットワークの基礎的な知識
- Server
- 2進数と10進数の関係
- TCP/IP(TransmissionControlProtocol/InternetProtocol)
- IPアドレス
- IPアドレス(IPv4とIPv6)
- 名前解決
- IPアドレスとビット
- パブリックアドレスとプライベートアドレス
- ネットワークアドレスとホストアドレス-ビット長-
- IPアドレスとサブネットマスク表記 / CIDR表記
- ネットワークとは?
- ネットワークアドレス変換(NAT:Network Address Translation)
- 【名前解決の流れ と キャッシュDNSサーバー】
- 【名前解決をコマンドで】
- DNSのキャッシュ
Server
コンピューターネットワークにおいて、クライアントからの命令を受けて特定の機能やデータを提供する側のコンピューター。Linux や Windows などのサーバ用のOSをインストールしたコンピューター。
通常、インストールするソフトウエアによって機能・用途が変わります。 メールサーバー・ウェブサーバー・ファイルサーバー・動画配信サーバー・プリンターサーバー。Apache なら Webサーバ、MySQL ならデータベースサーバといった感じです。
コンピュータは限られた数の明確で単純な命令しか持っていませんが、曖昧さは全くありません。多くのコンピュータで使われている命令の典型的な例としては、「5番地のメモリの中身をコピーしてそのコピーを10番地に書け」とか「7番地の中身を13番地の中身に加算して結果を20番地に書け」とか「999番地の中身が0なら次の命令は30番地にある」といったものです。
コンピュータの内部では命令は二進数コードで表現されます。例えば、インテル系のマイクロプロセッサで使われるあるコピー命令のコードは10110000です。
2進数と10進数の関係
2進数では一桁を0〜1で表現します。10進数では一桁を0〜9で表現します。
これを「(ひと)桁の重み」と表現します。2進数は桁の重みが「0」と「1」の「2個」だから2進数なのです。
10進数は「0〜9」の「10個」だから10進数、16進数は0〜9・A〜Fの計16個で一桁を表現するので16進数。
実際の計算
2進数での【1111】を視覚的に簡単に10進数に置き換えるには一桁目を10進数の1とし、二桁目を2とします。以降一桁増える毎に値を2倍していけばいいのです。三桁目は「4」、四桁目は「8」、五桁目は「16」、六桁目は「32」となり、n桁数 = 2の(n-1)乗の関係です
【2進数】= [10進数]
【0000】= [0]
【0001】= [1]
【0010】= [2]
【0011】= [3]
【0100】= [4]
【0111】 = [7]
【1000】= [8]
【1001】= [9]
ーーーーーーー
【1111】=[15]
※2進数「11111111」は10進数「255」
・20 は2のゼロ乗の意味
【27+26+25+24+23+22+21+20 = 128+64+32+16+8+4+2+1 = 255】
TCP/IP(TransmissionControlProtocol/InternetProtocol)
インターネットで使われている「TCP/IP(TransmissionControlProtocol/InternetProtocol)」というプロトコルでは、通信先を特定するのに「IPアドレス」を用います。 「IPアドレス」は重複することは有ってはなりません。ネットワーク上での通信先の住所のようなものなので、重複すると正常な通信はできなくなります。
「IPアドレス」はドメイン名→(https://twitter.com/yoshitaro_yoyo)からDNSの仕組みを用いIPアドレス→(192.168.0.1)を調べることで得られます(名前解決と呼びます)
TCP (Transmission ControlProtocol)とIP (Internet Protocol)は、インターネットの基盤を構成する重要なネットワークプロトコル。
階層型プロトコル
層 | 名称 | 規格(プロトコル) | 主な利用例 | コンピュータ上の処理 |
---|---|---|---|---|
4層 | アプリケーション層 |
HTTP,HTTPS,SMTP,POP3, IMAP4,DHCP,DNS SSH,SMTP など |
Webサイト閲覧、メール、ファイル転送、名前解決 など | 通信アプリケーションプログラム |
3層 | トランスポート層 | TCP,UDP,NetWare/IP など |
TCP/UDPで通信方法選択 (データを適切なアプリケーションへ振り分け) |
OS |
2層 | インターネット層 | IP,ARP,RARP,ICMPなど |
ルーティング、エンドツーエンド通信 IPv4 か IPv6 で接続 |
OS |
1層 | ネットワーク インターフェイス層 |
Ethernet |
LAN MACアドレスとEthernetなどの 物理的なケーブルなどの通信方法 |
デバイス、ドライバ、NIC |
階層型プロトコル
インターネットのネットワークプロトコルは階層型で1層ごとに抽象化して実装すれば、物理的なケーブルがメタルなのか光なのかといった下位層の具体的なことに左右されることなく、上位層を実装できます。
ネットワークインタフェース層
同一のネットワーク内でデータを転送する
一番下のネットワークインタフェース層は、物理的なケーブルやネット
ワークアダプタに相当する部分です。
インターネット層
複数のネットワーク間のデータ転送を行う
多数のネットワーク同士を接続してデータ転送を行っているのはルータに相当する部分です。
この層が担当するのは、ネットワークでデータを実際にやりとりする部分 です。 TCP/IP ではIPが相当します。IPではデータの基本的な通信単位を「パケット」 (Packet) と呼びます。 指定したIPアドレスを送り先として、パケット単位でデータをやりとりしてIでは、自分のネットワークインタフェースでデータを送りだすことだけを保証しています。 送り出したデータが、多数のルータを経由して最終的な送り先まで届くかどうかは保証しません。
トランスポート層
データを適切なアプリケーションに振り分ける
最下層からトランスポート層まで正しく機能すると、送信元と宛先のアプリケーション間でデータの送受信ができるようになります。主なプロトコルはTCPとUDPに分けられます。
TCPは送信中にデータが破損してしまったり損失してしまっても、これらを検出してデータの再送を行い確実に通信をしてくれます。
IPが保証しなかったデータの転送を保証します。接続先の相手に対してコネクションを張り、データの抜け漏れをチェックし、データの到達を保証する仕組みです。例を上げるとWebサイトのWebページを閲覧したりメールの送受信を行うなどインターネットで実行する通信方法の殆どがTCPを利用しています。
TCPで接続したコネクションで転送するデータが、どのアプリケーションに渡るかを決定するのがポート番号です。ポート番号は1~65535の数値です。サーバ側のよく使われるポート番号にはデフォルトの番号が割り当てられており、 HTTPはデフォルトで80番ポートを使用します。
UDPは身近な機能を用いて相手にデータを送信する方法です。正確性は無いのですが、素早くデータを送信する際に適した方法です。例を上げると、Web会議や動画サイトの映像と音声の通信方法で、リアルタイムに通信をする方法です。従ってデータ通信にエラーが生じた際は、繰り返し再生するのではなく、映像の乱れや音声が途切れたりすることが生じ、リアルタイムに映像と音声が流れる仕組みです。
TCP | UDP | |
---|---|---|
通信方法 | コネクション型 | データダイヤグラム型 |
特徴 | 確実性重視 | 即時性重視 |
信頼性 | 髙い | 低い |
利用速度 | 低速 | 高速 |
利用例 | Webサイト閲覧、メールなど 一般的にインターネットを利用する方法 |
IP電話、映像配信、Web会議など リアルタイム性を重視する方法 |
アプリケーション層
アプリケーションで扱うデータのフォーマットや手順を決める
アプリケーション層は具体的なインターネットアプリケーション、たとえばメールやDNS、そしてHTTPを実現する層です。TCPでプログラムを作るときは、ソケット (Socket) と呼ばれるライブラリを使うのが一般的です。 ソケットはネットワークでのデータのやりとりを抽象化したAPIで、 送信、受信切断などの基本的な機能を備えています。 HTTPサーバやブラウザはソケットを用いて実装します。アプリケーションは基本的には人間が扱うため、文字や画像など人間が認識できるようにデータを表現します。主なプロトコルは「HTTP」「SMTP」「POP3」「IMAP4」「DHCP」「DNS」など
HTTPはWebブラウザで利用し、SMTP、POP3は電子メールソフトで利用します。DHCP、DNSはアプリケーション通信を行うための準備のプロトコルとして補うことを担います。ほとんどのプログラミング言語にはHTTP を実装したライブラリが標準で付いているため、ソケットを使って HTTPを独自に実装することはほとんどないようです。しかしWebサービスやWeb APIを開発するにあたっては、 フレームワークの細かな挙動や設定パラメータなどがプロトコルレベル でどのように動作するかを把握しておく必要がある。
IPアドレス
IPアドレスとは「アドレス」(address)の名が示す通り、TCP/IPネットワークに接続している各ホスト※の場所を示す(識別する)「住所・番地」です。IPアドレスにはバージョンがあり、現在の主流はIPv4というバージョンです。次のバージョンであるIPv6が、試験的に導入され始めています。
※TCP/IPネットワークではIPアドレスを持つ機器全般を「ホスト」とよびます。
IPアドレス(IPv4とIPv6)
IPアドレスには、「IPv4」と「IPv6」の2種類があり、IPアドレスの書式が異なります。 IPv4は32ビットのアドレスを持ち、通常「123.45.67.89」のように、8ビットごとに区切った四つの数字により表記します。 IPアドレスは2進数表記で表し、1ビット一桁とします。32ビットですので、全てを数字で表現しようとすると32桁の数字になります。
IPアドレスはある意味資源であり限りがあります。約43億個ありますが現行のIPv4アドレスは2011年4月11日に枯渇しました。 IPv6は128ビットのアドレスを持っています。アドレス数はおよそ3.4×10の38乗という天文学的な数字になります。 これは 43億×43億×43億×43億 の計算になります。とんでもない数字になりそうですね…
IPv4アドレス枯渇に対する長期的な対応策として期待され、現在IPv6への移行が進められている最中ですが様々な問題が発生しています。 後述する技術の NAT がこの問題の解決に一役買っているようです。
名前解決
TCP/IPはIPアドレスにより通信先を特定する。IPアドレスはコンピュータには解りやすいが人間にとっては数字の羅列のため名前を付け解りやすくする(ドメイン名と呼ぶ)。ドメイン名とIPアドレスは相補性があり、片方が特定できればもう片方も特定できます(Domain Name System)
ドメイン名の通信で統一するとインターネット内に流れるデータ量が莫大になる。IPアドレスは4バイト(32ビット)、ドメイン名は最高で255バイト(2040ビット)の情報量です。後述のビットの解説で詳細は説明しますが、32ビットの確率は 約1/4,295,000,000(43億) の、2040ビットは確率として 1/2の2040乗 の情報量に相当します。 そのためネットワーク上ではIPアドレスによって機器を管理し情報量を抑える必要があります。
名前解決の流れを簡略化して書くと以下の流れになります。
・ブラウザ→Socketライブラリ内のリゾルバ(名前解決するためのプログラム)→OS内部プロトコルスタック→LANアダプタ→DNSサーバ(階層構造で複数を経由する)→プロトコルスタック→リゾルバ→ブラウザ
の流れで名前解決が行われます。
ブラウザはドメイン名に対応するIPアドレスをDNSサーバに問い合わせるカスケードの始点ですが、実際にはリゾルバが問い合わせの為のデータを作り、データの発信はOS内部プロトコルスタックが担います。プロトコルスタックはOS内部にあるネットワーク制御用ソフトウェアのことです。
この様な流れでドメイン名からIPアドレスを特定し、アプリケーションやブラウザは通信先のサーバのネットワーク上での位置が特定出来るようになっていて、メッセージを届ける相手はIPアドレスで指定・特定します。
※おまけ※
DNSの構造
下の図はDNSの構造を表したもので、ドメイン名空間と呼ばれます。 これは、木をさかさまにした形となっており、 一番上の「ルート(root)」と呼ばれる部分(「“ ”」で表現される)を頂点にして、 下の階層へと空間が広がっていきます。 ルートの下には「com」「net」「jp」などのトップレベルドメインが配置され、 そのさらに下に第2レベルドメイン、 第3レベルドメイン……と続きます。
ドメイン名空間の最上位にあるネームサーバーは「ルートサーバー」と呼ばれます。 このルートサーバーが管理している「ルートゾーン」には、 「jp」や「com」といったトップレベルドメインのネームサーバー(のホスト名とIPアドレス)が記述されており、 ルートサーバーはそれらのネームサーバーがどこに位置しているのかを把握しているというわけです。
IPアドレスとビット
IPアドレスは2進数表記で表します。
『ビット(bit)』とは、1つを2つの要素で表現する構成で、コンピュータが理解する最小処理単位の[0]と[1]では1桁をこの2つの数値で判別します。
これを『1ビット』といい、[Yes/No][True/False][ON/OFF][電流あり/電流なし][閾値を超える/閾値を超えない]などの二者択一、いわゆるブーリアン型は、この『1ビット』に当たります。コンピュータCPU処理容量を表すのに用いられたりもします。
『4ビット』、『8ビット』、『16ビット』、『32ビット』、『64ビット』、『128ビット』などを目にする事があると思います。これは、1ビットの並びが4つあるものを4ビット、8つあるものを8ビットと呼びます(8bit = 1byte)
このように複数ビットから成る組み合わせをビットパターンと呼びます。
※ 何故、「8ビット = 256通り」 になるのでしょうか?
8ビットは2の八乗を意味するからです。
1ビットとは「1つを2つの要素で表現する」ことが出来る情報の在り方・存在、情報量のことです。
ある状態を二通りの状態で表現できるようにしているのです。
つまり「8ビット = 256通り」とは、確率の問題で、1ビットとは2通りの状態を指します。
確率が小さければ小さいほど、情報量は多くなります。
片方の状態が存在する「ふたつにひとつ」、 すなわち確率 0.5 の事柄の情報量は 1 bit で、 「万に一つ」 の場合は 13.28771237 bit です。
確率 1、つまり必ず起こることは、結果が分かりきっているので情報量は 0 bit です。 bit は情報量の単位なのです。 確率 1/256 の事柄があるとします。この場合の情報量は 8 bit です。 逆に言えば 8 bit の情報は、 256 種類の事柄のうちのどれか、 ということを表すことができます。 8ビット表現は、よく使われ、例えばIPアドレス(IPv4の場合)は、この8ビットをドット[.]でつないだものが4つ並んだ32ビット表現です。 (8 + 8 + 8 + 8 = 32bit)
8ビットの組み合わせ数は、256通り、つまり0から数えると[0]~[255]となり、一つのオクテットで設定できる数字の最大数は 256個 になります。 IPアドレスは8ビットを1オクテットとし、計4つのオクテットを扱いアドレスを表現します。
IPv4は32ビットのアドレスを持ち、通常「123.45.67.89」のように、8ビットごとに区切った四つの数字により表記します。 IPアドレスは2進数表記で表し、1ビット一桁とします。32ビットですので、全てを数字で表現しようとすると32桁の数字になります。 長すぎるので上記の図のように値を10進数に変換して表現知ることで短くしているのです。
パブリックアドレスとプライベートアドレス
IPアドレスは、「パブリックアドレス」と「プライベートアドレス」の2つに分類されます。ローカルエリアネットワーク内(LAN)で自由に使えるIPアドレスを「プライベートアドレス」といい、プライベートアドレスを除いたWAN(インターネット)で割り当てられるIPアドレスを「パブリックアドレス」といいます。
パブリックアドレスはNIC(日本ではJPNIC)によって割り当てるIPアドレスが重複しないように管理されています。
プライベートIPアドレスはインターネット接続に使用できません。
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
この範囲がプライベートIPv4アドレス範囲となります。
IPアドレス範囲の区切り方には決まりがあります。
「2 の n 乗個で区切る」という決まりです。
2.4.8.16.32.64.128. 「256」. 512.1024.2048.4096.8192.16384.32768. 「65536」
引用(Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 Kindle版)】(一部に本記事作成者の加筆のみあり)
一般に、よく使われる区切りが、「256個」と「65536個」です。「256個の区切り」は最後から8ビット分(=2の8乗)に相当し、ちょうど、IPアドレスの「ピリオドで区切った先頭から3つまで」を境に、左側の数字をホストに割り当てます。たとえば、
「192.168.1.0~192.168.1.255」
は、256個で区切ったときの一例です。
同様に、「65536個の区切り」は最後から16ビット分(=2の16乗)に相当し、IPアドレスの「ピリオドで区切った先頭から2つまで」を境に、左側の数字をホストに割り当てます。たとえば、「192.168.0.0~192.168.255.255」
は、65536個で区切ったときの一例です。
IPアドレスは、前半の部分を「ネットワーク部」、後半の部分を「ホスト部」と言います。* AmazonVPCの仕様では、VPC領域を作成するときに、IPアドレスとして表記すると、「10.0.0.0/16」
は、10.0.0.0~10.0.255.255
の範囲です。
ネットワークアドレスとホストアドレス-ビット長-
IPアドレスは「ネットワークアドレス」と「ホストアドレス」から成り立ちます。
IPアドレスの中で、個々の組織が管理するネットワークを識別する部分を「ネットワークアドレス」といい、ホストを識別する部分を「ホストアドレス」といいます。
ホスト(host)とは、コンピュータやルーターなどのネットワーク機器など、IPアドレスをもつ通信機器の総称。
ネットワーク部とは、所属するネットワークを示します。同じネットワークに所属するホストは、全部ネットワーク部が同じになります。
ホスト部とは、ネットワーク部に所属する個々のホストのことです。
この図のIPアドレスの後にある「/24」ですが、これはネットワーク部のビット長を表しています(/ビット長)
ビット長に関してはCIDRについての欄で後述しますが、ビット長のことをプレフィックス(prefix)といいます。
図では第一オクテットから第三オクテットがネットワーク部を示しています。
オクテット1単位は8ビットを表します。
このネットワーク部は三オクテット単位ですのでビットの長さは 24 になるのです。
ネットワーク部が第二オクテット迄であればビット長は 16 になりますので表記としては /16 としてビット長を表現します。
実際のIPアドレスから、どうやってビット長を判別すればいいでしょうか?
IPアドレス範囲の区切り方には決まりがあります。
上記の「パブリックアドレスとプライベートアドレス」にある引用部分では、
「256個」と「65536個」が区切りとしてよく使われると書いてあります。
256 = 8ビット、65536 = 16ビットでなので、つまりは 8ビットか16ビットで区切るということです。
8ビット(256個)区切りの場合は
「192.168.1.0~192.168.1.255」
の様に第四オクテットのみに数字の変動があります。IPアドレス範囲の変動部分がホスト部でをあることを意味しています。
「ネットワーク部のビット長は/24」であり「ホスト部のビット長は/8」となります。16ビット(65536個)区切りの場合は
「192.168.0.0~192.168.255.255」
と表したりします。 第三オクテットと第四オクテットの数字が変動しています。
「ネットワーク部のビット長は/16」であり「ホスト部のビット長は/16」となります。
IPアドレスとサブネットマスク表記 / CIDR表記
「192.168.1.0~192.168.1.255」
や「192.168.0.0~192.168.255.255」
といった表現は長いため、通常、IPアドレスの範囲を示すときには、「サブネットマスク表記」もしくは「CIDR表記(サイダー:ClasslessInterDomainRouting)」の、いずれかの表記を用います。
①サブネットマスク表記
IPアドレスを2進数で表記したとき、ビット長のことを「プレフィックス(prefix)」と言います。
サブネットマスクはIPアドレスのネットワークアドレスとホストアドレスの切り分けに使用します。
・IPアドレスと同様に32ビット(2進数を使った32桁)構成
・ネットワークアドレスを示すビットを「1」、ホストアドレスを示すビットを「0」で示す
・表記はIPアドレスと同様に、32桁の数列を8桁(8ビット)ずつ4つに区切り
・10進数に変換して「.」(ドット)でつなげて表記
つまりプレフィックスのビット数だけ2進数の「1」を並べ、残りは「0」を記述した表記です
「192.168.1.0~192.168.1.255」
ではビット長は/24ですね。
2進数で表すため、「1」を24桁、「0」を8桁並べます
11111111 11111111 11111111 0000000
これを8ビット(桁)区切りの10進数に変換します
255.255.255.000
これがサブネットマスク表記です。IPアドレスの数字が何であろうと、ネットワーク部とホスト部のビット長のみで判断し、範囲を表現します。変換イメージは以下のようになります。
<IPアドレス範囲> => <プレフィックス> => <サブネットマスク(8桁区切り2進数表記)> => <サブネットマスク(8桁区切りの10進数表記)>
192.168.1.0~192.168.1.255
=> /24 => 11111111 11111111 11111111 0000000
=> 255.255.255.000
192.168.1.0~192.168.255.255
=> /16 => 11111111 11111111 00000000 0000000
=> 255.255.000.000
②CIDR表記
IPアドレスを2進数で表記したとき、「ネットワーク部のビット長」を「/ビット長」で示す方法です。
このビット長のことを「プレフィックス(prefix)」と言います。
このプレフィックスのみでIPアドレス範囲を表現します。
変換イメージは以下です。
192.168.1.0~192.168.1.255
=> /24 => 192.168.1.0/24
192.168.1.0~192.168.255.255
=> /16 => 192.168.1.0/16
簡単ですね。
192.168.1.0/24
であればホスト用のIPアドレスは256個
192.168.1.0/16
であればホスト用のIPアドレスは65536個(256×256)になります(理論上)。
8ビットが4つの32ビットのIPアドレスではネットワーク部とホスト部合わせて約43億個のIPアドレス(IPv4であれば)が存在しますが(256×256×256×256)、2011年に枯渇しています。現在はIPv4アドレスに以降中ですが書式が異なるためスームズには進んでいません。そこで NAT が活躍しています。
NAT については後述しますが、NAT はIPアドレスを別のIPアドレスに変換する技術です。この技術がIPv4アドレスからIPv6アドレスへの移行に適用されているのです。
ここでIPアドレとビットについて今一度抑えておきましょう。
- 1ビットは二者択一、2通りの状態を示す情報量、確率50%
- 8ビットは確率の考え方では 0.5の8乗 となり 1/256
- 256通りの情報量を示すのが8ビット
- コンピュータの挙動の本質は「0」か「1」
- つまりは電流の「有無」である。
- ビットは「二者択一」の情報量、コンピュータに理解しやすい
- この計算は桁の重みが2である2進数、2の乗数計算で簡単に求められる
- そのためコンピュータは2進数と相性がいいが、人間には直感的に理解しづらい
- 人間に解りやすいように、2進数と10進数との変換が行われる
- また2進数表記では長すぎる
CIDR表記とサブネットマスク表記はここではIPアドレス範囲の表記法として紹介しています。
ここにおいては以下の表記が全て同じIPアドレス範囲を示している事が分かれば問題有りません。
①192.168.1.0~192.168.1.255
②192.168.1.0/24
③192.168.1.0/255.255.255.0
【引用:Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂3版 Kindle 版.】
ネットワーク関係の多くのコマンドや設定では、②や③の表記しか受け付けません。そのため②や③の表記が出てきたときに、①の範囲を示すのだとわかるかどうかが、ネットワークを理解するポイントになります。
※本来、CIDR表記はクラスレスにIPアドレスを振り分ける技術のことですがこの記事においては割愛します。 詳細を知りたい方は以下のページを御覧ください。
参考:インターネット用語1分解説~CIDRとは~ - JPNIC
ネットワークとは?
ネットワークとは、グローバルなインターネットやLANとかWANで、情報通信ネットワークのこと。 ネットワークは、パソコン、スマホなどの通信端末や各種サーバーの間を有線や無線でつなぎ、情報の伝送を行うための通信設備のことであり、通信回線と通信機器から構成される。世界をつないでいるネットワークがインターネットであり、クモの巣のように地球を取り巻いていることからWeb(=クモの巣)ともいわれる。
ネットワークアドレス変換(NAT:Network Address Translation)
内部だけで通用するアドレスを外部とも通信できるアドレスに変換する為に使用する技術で、技術の本質としてはIPアドレスを別のIPアドレスに変換することです。
プライベートIPアドレス(ローカルIPアドレス)を割り当てられたコンピュータに対し、プライベートIPアドレスとパブリックIPアドレスを変換して、インターネットにアクセス可能にする際に使われることの多い技術です。
ルータが NAT 機能を搭載しています。ルータがプライベートネットワークとインターネットの2つのネットワークを繋いでいるのです。
ネットワークアドレス変換(NAT:Network Address Translation)の仕組み
プライベートIPアドレスを割り当てられたコンピュータがインターネット上にあるWebサーバにアクセスしようとしたとします。
ブロードバンドルータは、コンピュータに割り当てられたプライベートIPアドレス(下図では192.168.0.15)を、ブロードバンドルータが保持しているグローバルIPアドレス(下図では198.51.100.20)に変換してリクエストを送信します。
Webサーバはブロードバンドルータの持つグローバルIPアドレスに対してレスポンスを送信します。
レスポンスデータを受け取ったブロードバンドルータは、宛先をコンピュータのプライベートIPアドレスに変換して送信します。
これによって、プライベートネットワーク上のコンピュータとインターネット上のWebサーバとの通信が成立します。
【名前解決の流れ と キャッシュDNSサーバー】
クライアントは「キャッシュDNSサーバー」に名前解決を依頼すると、キャッシュDNSサーバーがルートから順に「権威DNSサーバー」に問い合わせを行って、最後に結果をクライアントに返してくれます。
キャッシュ dns サーバーと権威 dns サーバーというのは役割が全く違う。世の中でDNSサーバーとはこの両方を合わせたものになる
例えば pc でMAC とか os から名前解決をしたいという場合この os の中に dns の設定をされているかと思います dhcp で ip アドレスが 自動で振られるような状態ですとその中に dns の設定も入っているかと思い ます
名前解決をしたい場合は登録された dns サーバに問い合わせがいき その問い合わせを受け付けるのがキャッシュ dns サーバー、別名フルサービスリゾルバーというものです
URIを入力してWebサイトが表示されるまでの一瞬、あるいはメールアドレスを入力して相手先にメールが届くまでの一瞬のあいだに、このような応答が行われています。実際には、問い合わせをするキャッシュDNSサーバが、過去に問い合わせられたドメイン名とIPアドレスの組み合わせを一定時間保存(キャッシュ)しているため、毎回、このような応答が行われるわけではありません。
よくあるのはご家庭の場合はブローバッドバンドルーターがそのdns として登録されていることが多いですしオフィスなどでも同様 でこちらのキャッシュ dns サーバーは例えばクライアントから
example.jp の A record
を名前解決してくれと依頼された問い合わせを受けた場合は次のような流れになります
IPv4アドレスを返す。例えば www.example.jp のドメインをIPv4のアドレスに変換するのが Aレコード
IPv6アドレスの場合をAAAA(読み方:クワッドエー)レコードという。
こういったレコードがたくさんゾーンの中に追加していきたいときに権威DNSサーバーにレコードを追加すれば ok ということになる
まず上から順番にルートサーバに対して example.jp の A レコード 知っているか問い合わせてルートサーバーはこのゾーンから該当するものをこちらでは知らないので、その答えは知らないと .jp のドメインを管理している jp dns に聞いてくれと言うような応答が返ってきます
でキャッシュ dns サーバは次に jp dns に対し example.jp の A レコードは知ってますかとこう問い合わせをします。そうするとまた管理対象のなかに含まれませんので
example.jp の権威 dns サーバに聴いてくださいと回答します 最後、example . jp の権威 dns サーバーが分かりましたのでそこに問い合わせをして a レコードを教えてくれと
そうするとこれは example . jp の権威 dns サーバーですので当然これの a レコードも知ってますので応答を返しますというふうにまあ順番にたらい回しされるような形ですね
【名前解決をコマンドで】
dig
コマンドが名前解決をするためのコマンド!
ns lookup
というコマンドもあるがこちらの方が高機能
クライアントに登録してあるDNSサーバもしくは指定したDNSサーバーに問い合わせ応答をうける
dig jprs.jp.
【自分がクライアントとして、IPv4アドレス(Aレコード)を問い合わせる】
このような形でサーバーから応答が返ってきました
問い合わせをしたサーバーがこの ipv 6のアドレス。 DNSサーバとしてこのマックに登録しているサーバ
question これが問い合わせをしたドメインですね Aレコードについて問い合わせをしています ipv 4アドレスを教えてくれと
そうするとアンサーが帰ってきてます jprs . jp .のドメインについては Aレコードは117.104.133.164という IPアドレスですよという答えが返ってきています
公開キャッシュDNSサーバー(1.1.1.1)に、jprs.jpのIPv4アドレスを問い合わせ
dig jprs.jp. @1.1.1.1
1.1.1.1というDNSサーバーから応答が返ってきています
こちらの回答については同じですがこの数字が減ってます。 こちら ttl というもので有効期間が秒数で書かれています。 数字が減っているというのはキャッシュが残っているということですね、クライアントもしくは dns サーバーの方に。
試しに、digコマンドを利用して、yahoo.co.jpに名前解決
digコマンド結果の確認方法
digコマンドにおいて、DNSサーバーの指定は必須ではありません。そして、digコマンドを実行した環境により利用されるDNSサーバーは異なるので、「あっちとこっちで、結果が違うやん」という場合、大抵はこのクエリに利用したDNSサーバーが異なっていたというパターンが多いです。
ちなみに、サーバー名の後ろ「#53」は、DNSクエリに利用したポート番号53を表しています。Route 53の名前の由来ですね。
DNSのキャッシュ
DNSの名前解決動作は毎回同じく繰り返されるわけではない。
検索の起点となるルートサーバには、検索のたびに問い合わせがされることになるが、そうするとDNSの名前解決を行う世界中のクライアントPCから、ルートサーバへ大量のクエリ(問い合わせ)が発生。また、クライアントPCから見た場合、名前解決のたびに多数のサーバに対して問い合わせを行い、その回答を待つことになり時間がかかる。
そうしたことを軽減するため、DNSではキャッシュによって、手順を簡略化することができるよう。
例えば、クライアントPCがすでにwww.example.jp
のIPアドレス情報を得ている場合、それを再利用することで名前解決をせず、すぐにIPアドレスを利用することができる
キャッシュサーバもその名前の通り、名前解決で行った問い合わせの結果を保存しておき、同様の問い合わせの際に再利用することができる
キャッシュと生存期間(TTL)
キャッシュとして保存されたデータは、そのままずっと使われるわけではない。なぜなら、DNSは分散データベースであり、そのデータは任意のタイミングで変更される可能性があるから。
データが書き換わったにもかかわらず、クライアントPCやキャッシュサーバが手元に残したキャッシュをずっと使用していると、実際の状態と不整合が起きる。
- 定期的にキャッシュが更新し、キャッシュサーバに残っているキャッシュと実際の状態の不整合を防ぐために設定される
- Time To Liveの略称。パケットの有効期間を表す値となり、数値が小さいほどレコードの保持時間が短くなる。
たとえば、以下のようなリソースレコード
www.example.jp. 3600 IN A 192.0.2.1
2番目の「3600」がTTL、このリソースレコードを受信した側では最大で3600秒(1時間)キャッシュしてよいということを示す。TTLはキャッシュに保持されたのち減少していき、ゼロになると当該リソースレコードがキャッシュから削除される。