ネットワーク基礎③

IPアドレス枯渇問題

従来のIPv4アドレスは32ビットで、理論上の割り当て可能なホスト数は43億ほどである。これでは近年の世界の総人口(80億)にも及ばず、インターネットの普及によってホスト数も増えたことから既に新規割り当て可能なIPv4アドレスが枯渇している状態である。

この問題への対応で主なものは以下の3つである。

ネットワークアドレスのクラスレス化
当初使用されていたクラスフルの考えではIPv4アドレスの割り当てにそもそも無駄が生じていたことから、無駄をなくすために考案されたのがクラスレスという考え方であった。ホスト数43億のみという根本的なところの解決はできないが、現在では普及している考え方である。
アドレス変換技術
IPアドレスの枯渇問題への対処として考案された技術である。アドレス変換はグローバルIPアドレスとプライベートIPアドレスを分けることによって、IPアドレスを節約する。これも根本解決には至らないが、割り当てるホスト数を削減することは可能であり、現在一般的となっている技術である。
IPv6アドレス
IPアドレス枯渇問題の根本解決を目指す技術で、別のIPアドレスを開発しなおすものである。IPv4アドレスが32ビットであったのに対し、IPv6は128ビットあり、理論上割り当て可能なホスト数は340澗という天文学的な数字で、今の想像上では枯渇することはないとされている。クラスレス化とアドレス変換技術が比較的うまくいっているためIPv4アドレスは使用され続けているが、IPv6アドレスに移行するための準備が並行して進められている。

ネットワークアドレスのクラスレス化はネットワーク基礎①で解説しているため、ここではアドレス変換技術とIPv6アドレスについて解説する。

アドレス変換技術

グローバルIPアドレスとプライベートIPアドレス

グローバルIPアドレスはインターネット接続に必要となる世界中で一意なIPアドレスであり、IANAによって管理されている。IPアドレス枯渇問題としてはこのネットワークの発達に伴うPCなどの端末の増加に伴いグローバルIPアドレスが一意で付与できなくなった問題である。

そこで考えられたのがプライベートIPアドレスで、組織内や家庭などのLANといった小さなネットワーク内で使用されるIPアドレスである。例えばグローバルIPアドレスが1つであっても、複数の端末にIPアドレスを割り当てるための仕組みを構築するために使われる。プライベートIPアドレスはあるネットワーク内では一意ではないといけないが、別のネットワークの番号との重複は気にしなくてもよい。

例えば下図では5.0.0.1、6.0.0.1がグローバルIPアドレス、192.168で始まるIPアドレスがプライベートIPアドレスである。6.0.0.1は世界中で一つでないといけないが、192.168.0.100世界中にいくつ存在していてもよい。

グローバルIPアドレスとプライベートIPアドレスの図

B社を例にとると、プライベートIPアドレスである192.168.0.100を6.0.0.1に変換してインターネットに接続できるようにした仕組みをアドレス変換という。

NAT

NATはアドレス変換技術のうち最も基本的なもので、プライベートIPアドレスとグローバルIPアドレスを1対1で変換するものである。以下のように、ルータのようにアドレスの対応表を持つイメージである。

しかしこれではインターネットに接続したい端末の分だけグローバルIPアドレスを持つ必要があり、IPアドレス枯渇問題への根本的な解決にはならない。

IPマスカレード

IPマスカレードはNATにポート番号を組み合わせることによって、グローバルIPアドレス一つに対して複数のプライベートIPアドレスを持てるようにした技術である。例えば以下のようなイメージである。

この仕組みはプライベートネットワークからインターネットへ向けたデータ送信とその返信のみ機能する。しかし、インターネットではプライベートネットワークを起点としたインターネット接続が多いためこの機能で事足りることが多く、現状では多くの場合でこの機能を利用している。

IPv6アドレス

IPアドレス枯渇問題に対応したIPv4アドレスの後継技術として設計されたIPアドレスで、RFC1883で規約化され、既に実装製品も市場に出回っている。

膨大なアドレス空間

IPv6アドレスは128ビットで、理論上340澗個のアドレス空間を利用できる。

表記方法

①まず、128ビットの2進数を16ビットごとにコロンで区切って16進数で表記する。コロンで区切られた16進数の単位をフィールドといい、8フィールドできる(16×8=128)。例えば、次のようなものになる。

2001:3481:0ABC:0000:0000:0FFF:9FFF:1616

②各フィールドの先頭の0は省略可能。

2001:3481:ABC:0:0:FFF:9FFF:1616

③0000のフィールドが続いている場合は、1回だけ::に省略可能。

2001:3481:ABC::FFF:9FFF:1616

ただし、これはあくまで1回だけであることに注意。

試験対策的にはひとまず、IPv6アドレスが8フィールドの16進数で、コロンで区切られて表記されることを覚えて、この見た目がIPv6アドレスであることが分かるとよい。

構造

IPv6アドレスはサブネットプレフィックスとインターフェイスIDに分かれる。

サブネットプレフィックス
ネットワークを表す。IPv4アドレスでネットワークアドレス部だった部分。
インターフェイスID
ホストを表す。IPv4アドレスでホストアドレス部だった部分。

それぞれ64ビットずつが通常であるが、サブネット化することも可能でその場合は/80のように表記する。

アドレスの種類

IPv6アドレスでは以下の3種類のアドレスで送信を行う。

ユニキャストアドレス
1対1の通信に使用するアドレス
マルチキャストアドレス
特定のグループに対して送信するために使用する。
エニーキャストアドレス
IPv6で新たに採用された技術で、複数の機器に同じIPアドレスを付与し、共有して使う技術のことである。ネットワーク的に最も近い機器と1つの通信することとなる。構文的にはユニキャストアドレスと区別はつかない。

ブロードキャストアドレスはネットワーク負荷が高いため廃止され、マルチキャストアドレスに統合されている。

アプリケーション層のプロトコル

HTTP

Webサーバとブラウザ(クライアント)間でHTMLなどのファイルを送受信するために作られたプロトコル。クライアントサーバ型の代表的なプロトコルで、HTTPリクエストとその応答であるレスポンスによって情報をやり取りする。

HTTP

リクエスト

リクエスト(リクエストメッセージ)はブラウザからWebサーバに送るメッセージで、以下の3つのメッセージからなる。

リクエストライン

リクエストメッセージの1行目で、メソッド、リクエストURI、HTTPバージョンを以下のように指定する。

GET /index.html HTTP/1.1

メソッドは「何をしたいか」を指定するもので、リクエストメッセージにおいて最も重要な部分である。以下の8種類のメソッドが定義されている。

GET データを取得する。
HEAD メッセージのヘッダを取得する。
POST データを送信する。
PUT データを保存する。
DELETE データを削除する
CONNECT プロキシにトンネリングを要求する。
OPTIONS オプション情報の通知用
TRACE 診断用

リクエストURIはHTTPでやり取りされる情報の場所を指定するものである。HTTPバージョンは現在の最新はHTTP/3であるが、HTTP/2やHTTP/1.1が使用されることもある。

リクエストヘッダ

パラメータの形で追加される情報。

Accept 受入れ可能なメディアタイプ。
Authorization 認証情報。
Referer 直前に閲覧していたURI。
Cookie クッキー情報。
User-Agent Webブラウザの情報。
リクエストボディ

リクエストに関する補足的な情報が書かれる。POST通信の場合はパラメータの情報が書かれているが、GETの場合は必要がないため使われない。

レスポンス

レスポンス(レスポンスメッセージ)は、リクエストに対してWebサーバからクライアントに返答する情報。以下の3つからなる。

ステータスライン

ステータスメッセージの1行目で、HTTPバージョン、ステータスコード、説明句が書かれる。説明句はステータスコードの説明であり、この二つはセットである。

コード 説明句 内容
100 Continue 暫定的なレスポンスであることを示す。
200 OK リクエストが成功したことを示す。
304 Not Modified エラーの一つ。データが更新されていないことを示す。
401 Unauthorized エラーの一つ。ユーザ認証が必要であることを示す。
404 Not Found エラーの一つ。情報が見つからなかったことを示す。
500 Internet Server Error エラーの一つ。サーバエラーであることを示す。
レスポンスヘッダ

パラメータの形で追加される情報。

Location リダイレクトする。
Set-Cookie クッキーを発行する。
Content-Type コンテンツの形式や文字コードを示す。
X-Content-Type-Options Content-Typeに合致しないコンテンツの動作を決定する。
Content Security Policy セキュリティ対策を行う機能を有効化する。
X-Frame-Options フレーム表示を有効化するかを設定する。
Strict-Transport-Security HSTSの機能を有効化する。
X-XSS-Protection クロスサイトスクリプティング対策を行う機能を有効化する。
メッセージボディ

レスポンスとして送られるHTML、画像などが入る。

DHCP

PCなどの機器にIPアドレスを自動的に割り振る仕組み。企業などで端末が多くなると一つ一つを主導で設定するのは手間で、設定変更や機器の追加の際に重複して不具合が発生する恐れがある。その対策のための技術がDHCPである。

DHCPの動作

DHCPはDHCPサーバ(UDP 67番ポート)、DHCPクライアント(UDP 68番ポート)の二つからなる。DHCPクライアントはPCなどのネットワークに接続したい機器で、DHCPサーバがDHCPクライアントのIPアドレスを一元管理する。

DHCP DISCOVER
DHCPクライアントがDHCPサーバにアドレス取得要求を行う。
DHCP OFFER
アドレス取得要求に対して、DHCPサーバが使われていないIPアドレスを選び、DHCPクラアントに対してその情報を送る。
DHCP REQUEST
DHCPサーバから送られてきたIPアドレスで問題なければ、そのIPアドレスの割り当て依頼を送る。
DHCP ACK
DHCPサーバがIPアドレスの割り当ての承認を行う。

DHCP ACKで承認されたIPアドレスをDHCPクライアントは設定する。

グローバルIPアドレスとプライベートIPアドレスの図

DHCPリレーエージェント

DHCPクライアントからDHCPサーバにDHCP DISCOVERを送信する際に、DHCPクライアント自身はDHCPサーバのIPアドレスが分からないためブロードキャストアドレス宛に送る必要がある。この時、ブロードキャストドメインを超えられないため、基本的にはブロードキャストドメインごとにDHCPサーバを設置する必要がある。DHCPリレーエージェントを設置することによって、その対策をすることができる。

DNS

TCP/IPでは各機器にIPアドレスが割り振られ通信を行うが、IPアドレスは32ビットの数値であるため人間には覚えにくい。そこで、使われている技術がDNSである。DNSは現在私たちが通常インターネットのホームページにアクセスするために使う文字列(例:www.google.com)とIPアドレスの対応関係を持っており、それにより相互変換が可能になっている。

尚、google.comはIPアドレス172.217.25.206でもアクセス可能である。

ドメイン名

ドメイン名はIPアドレスに対応したgoogle.comのような名前である。ドメイン名は階層構造になっており右からトップレベルドメイン、第2レベルドメイン、第3レベルドメイン、第4レベルドメインと呼ばれる。

ドメイン名
出典:一般社団法人日本ネットワークインフォメーションセンター ドメイン名とは

すべてのドメインを1台のサーバで管理することは不可能なため、ドメインごとに複数のサーバで分散管理する体制が構築されている。トップレベルドメインを管理するサーバは世界で13台あり、そのうち1台が東京に存在している。

ホスト名

ホスト名はネットワーク内でマシンを特定するための名前である。マシンとは、ウェブサーバのほかにメールサーバなどの機器が存在していて、ウェブサーバであればwwwとなる。

完全修飾ドメイン名(FQDN)

ホスト名+ドメイン名の形式で繋げた文字列のこと。例えばwww.example.co.jpとなり、example.co.jpというネットワークにあるwwwというホストを示す。例えば、mailというホストがほかに存在すれば、mail.example.co.jpも完全修飾ドメイン名である。DNSを使用して問い合わせをする場合は、完全修飾ドメイン名にプロトコルを付けてhttp://www.example.co.jpという形式で問い合わせをする。

DNSを構成するサーバ等

ネームサーバ
ドメインを管理するサーバ。DNSサーバの要となるサーバ。ドメインとIPアドレスの対応関係を管理するとともに、下位のドメインのサーバの場所も管理している。ネームサーバが複数あることによりDNSの仕組みが構築されている。
権威サーバ
ネームサーバのうち、実際にドメインとIPアドレスの対応関係を管理しているサーバ。分散管理しているDNSの仕様上、機能を区別するための呼び方。コンテンツサーバとも呼ぶ。
リゾルバ
DNSのクライアントで、DNSサーバにドメイン解決を依頼する端末。通常はPCのことを想定するが、実際に各ネームサーバに解決を依頼するDNSキャッシュサーバもリゾルバの一種であるため、スタブリゾルバ、フルサービスリゾルバと呼んで区別することがある。また、スタブリゾルバはDNSクライアント、フルサービスリゾルバをDNSキャッシュサーバと呼ぶ
DNSキャッシュサーバ(フルサービスリゾルバ)
ネームサーバに問い合わせを行うサーバ。DNSサーバの1種。問い合わせた内容を一定期間記憶(キャッシュ)しておくことで、一度アクセスしたサーバへのアクセス時間を短縮したり、ネットワーク負荷を軽減している。

DNSのしくみ

①ブラウザの検索窓などにドメインを入力する。すると、DNSキャッシュサーバに問い合わせを行い、キャッシュされている場合はそのIPアドレスを返す。キャッシュされていない場合は、ルートネームサーバに問い合わせを行う。

②ルートネームサーバからの応答を基に.jpを管理するネームサーバ②に問い合わせる。ここで第2レベルドメインまでの.co.jpを管理しているサーバを問い合わせる。

③ネームサーバ②からの応答を基に.co.jpを管理するネームサーバ③に問い合わせる。ここで第3レベルドメインまでのexample.co.jpを管理しているサーバを問い合わせる。

④ネームサーバ③からの応答を基に.co.jpを管理するネームサーバ④に問い合わせる。ネームサーバ④は目的となるドメイン名example.co.jpとそのIPアドレス5.0.0.1を管理しているサーバで、権威サーバと呼ぶ。この結果がDNSクライアントに返され、IPアドレス5.0.0.1にアクセスする。

このように、複数のネームサーバに繰り返し問い合わせることを再帰問合せという。

DNS

ゾーンファイル

DNSサーバ内に保存されている名前解決情報を集めたテキストファイル。ドメイン名とIPアドレスを関連付ける情報のほか様々な情報があり、その1行1行をDNSレコードという。

Aレコード
ドメイン名に対応したIPアドレス(IPv4)が書かれている。DNSの基本機能となる。
例:www.example.co.jp IN A 5.0.0.1
AAAAレコード
ドメイン名に対応したIPアドレス(IPv6)が書かれている。
NSレコード
あるドメイン名のサブドメインについて管理を委譲しているネームサーバが書かれている。
例:shop.example.co.jp. IN NS ns.example.co.jp.
CNAMEレコード
ドメイン名やホスト名の別名を定義する。
SOAレコード
ゾーンファイルの先頭に一つ書かれていて、ゾーンの設定を定義する。
PTRレコード
IPアドレスに対応したドメイン名が書かれている。Aレコードの正引きに対し、逆引きという。
MXレコード
メールサーバを指定する。
TXTレコード
様々な用途に使えるテキスト情報。
CAAレコード
ドメイン証明書を発行する認証局(CA)を指定する。

電子メールのプロトコル

電子メールは基本的には次の3つのソフトウェアによって配送が行われる。

MUA(Mail User Agent)
電子メールを送信するときのユーザインタフェース。メールユーザーエージェント。PCの端末にインストールされているメールソフトを想定すればよい。
MTA(Mail Transfer Agent)
メールサーバにあるプログラムで、電子メールを転送するサービスを提供する。メールプロトコルの基本的なもの。
MDA(Mail Delivery Agent)
メールをメールボックスに格納する際に用いるプログラム。
DNS

SMTP

SMTPはメールのためのプロトコルとして最初に考案されたもので、現在もその中心となっているプロトコルである。送信者のMUAからMTAへの配送と、送信者・受信者のMTA間の配送を担う。クライアントサーバ型のプロトコルで、メールを送る側をメールクライアント、受け取る側をメールサーバと呼んで、相互でやり取りを行うことでデータ送信を行う。

SMTPの通信の流れ

SMTPでは、SMTPコマンドとその応答であるSMTPリプライによって成り立っており、その間で送信者、受信者、メールの本文などの情報がやり取りされる。SMTPコマンドで送られる情報をエンベロープロという。

SMTPコマンド

コマンド 説明
HELO SMTPセッションでの通信開始
EHLO HELOの拡張版
MAIL FROM 送信者のアドレスを指定する
RCPT TO 受信者のアドレスを指定する
DATA メール本文の送信開始を知らせる
QUIT SMTPセッションの通信終了

SMTPリプライ

リプライ 説明
250 成功、OKを示す。
221 SMTPセッションの通信終了時に、成功を示す。
354 メール本文を要求する。
451 問題が発生したため処理を中断する。
500 文法エラー。
SMTP
メールヘッダ

メールの制御情報がメールヘッダに記載される。

ヘッダ 説明
From 送信者のアドレス。複数指定ができる。
Sender 実際の送信者のアドレス。1件のみ指定できる。
To 宛先アドレス。
Cc カーボンコピー先のアドレス。
Subject メールの件名。

Bccのアドレスはメールヘッダには記載されない。そのため、SMTPコマンドで送られるエンベロープと情報の内容は一致しない。

POP

メールボックスに保存されたデータをクライアントにダウンロードするプロトコル。

SMPTでは常に受信側のメールサーバを立ち上げておく必要がある。いつ送られてくるかわからないメールのために常にインターネットを接続しておくことに対する問題に対応するために考案されたのがPOPである。現在では改良版のPOP3が主流となっている。POPもSMTPと同じくクライアントサーバ型のプロトコルとなっていて、POPリクエストとPOPリプライをやり取りする。

POPリクエスト

コマンド 説明
USER ユーザ名の送信
PASS パスワードの送信
LIST メールの確認、一覧表の取得
RETR メールのメッセージ取得
QUIT POPによる通信終了

POPリプライ

リプライ 説明
OK 正常
ERR エラー
pop

ユーザ名とパスワードで認証を行うのが特徴である。

IMAP

IMAPもPOPと同様にメールボックスに保存されたデータをクライアントが取得するプロトコルであるが、POPと違いメールをダウンロードせずにメールサーバで管理するものである。

MIME

初期のメールはテキストデータしか送信できなかったが、画像、動画なども対応するために作られたプロトコルがMIMEである。

FTP

異なるコンピュータ間でファイル転送をするプロトコル。制御用コネクションとデータ転送用コネクションの2つのTCPコネクションが作られるのが特徴である。

FTP

FTPは基本的にはTCPを使用するが、UDPを用いるTFTPも存在する。TFTPは簡易的なファイル転送プロトコルで、ユーザ認証も行わない。

また、FTPには次の2つのモードがある。

アクティブモード
FTPによる基本的なモード。FTPサーバからFTPクライアントに対してコネクションを張る。ファイアウォールなどでサーバからクライアントに対する通信を許可していない場合は通信できない。
パッシブモード
FTPクライアントからFTPサーバに対してコネクションを張る。アクティブモードで通信できない場合に対応したモードで、PASVコマンドを利用して設定する。

SNMP

ネットワークを管理するためのプロトコル。UDPで動作する。ネットワークを管理する機器をSNMPマネージャ(管理用PC)、管理される機器をSNMPエージェント(ルータ、スイッチ、サーバなど)といい、SNMPメッセージでSNMPエージェントを管理する。

動作チェック
get-request(参照要求)、get-next-request(次の参照要求)とそれに対する応答であるget-response(応答)を繰り返して動作チェックをする。
設定変更
set-request(設定要求)とそれに対する応答であるget-response(応答)で設定変更を行う。
イベント通知
エージェント側にあらかじめ閾値を設定して起き、異常な状態になったときにtrap(イベント通知)をエージェント側から送信する。

MIB

SNMPでやり取りされる情報をMIBと呼ぶ。MIBは階層構造のデータベースである。