ネットワークマスクとCIDR表記法

IPv4アドレスは、ネットワークを識別する部分(ネットワーク部)と、そのネットワーク内の機器を識別する部分(ホスト部)の2つに分けて扱います。この境界がどこにあるかを示す情報がネットワークマスク(サブネットマスク)です。

ネットワークマスクは、255.255.255.0のように、IPアドレスと同じ4オクテット(32ビット)の形式で表記する方法と、/24のようにネットワーク部のビット数だけを示すCIDR(Classless Inter-Domain Routing)表記法の2通りの書き方があります。192.0.2.10/24と書けば、「IPアドレスは192.0.2.10で、先頭24ビットがネットワーク部」という意味になり、255.255.255.0と表記した場合と同じ内容を表します。

CIDR表記ネットワークマスクホスト部のビット数割り当て可能なホスト数(目安)
/8255.0.0.02416,777,214
/16255.255.0.01665,534
/24255.255.255.08254
/25255.255.255.1287126
/26255.255.255.192662
/27255.255.255.224530

「割り当て可能なホスト数」が2の累乗より2少ないのは、そのネットワークの先頭アドレス(ネットワークアドレス)と末尾アドレス(ブロードキャストアドレス)を機器に割り当てられないためです(例えば/24なら2^8=256個のアドレスのうち254個が割り当て可能)点対点(point-to-point)リンク専用の/31は、ネットワークアドレス・ブロードキャストアドレスという概念自体を持たず2個のアドレスを両方とも使える特別な扱い(RFC 3021)、/32は単一のホストを指すアドレスとして使われる等、常にこの「2少ない」計算が当てはまるわけではない例外もありますが、本記事では基本となる考え方として扱います。[1]。

サブネット化

サブネット化(サブネッティング)とは、1つのネットワークを、ホスト部のビットの一部をネットワーク部に「借りる」ことで、より小さい複数のネットワーク(サブネット)に分割することです。例えば192.0.2.0/24というネットワークは、ホスト部の先頭1ビットをネットワーク部に加えて/25にすることで、192.0.2.0/25と192.0.2.128/25という2つのサブネットに分割できます。ネットワーク部のビット数を1ビット増やすごとに、分割後のサブネット数は2倍に、1つあたりのサブネットに割り当てられるホスト数は約半分になります。

プライベートIPアドレスとパブリックIPアドレスの違い

IPv4のアドレス空間には、インターネット上で一意に使われるパブリック(グローバル)IPアドレスと、組織内のネットワークなど限られた範囲でのみ使うプライベート(プライベート用)IPアドレスがあります。

プライベートIPアドレスとして使ってよい範囲は、RFC 1918で以下の3つのブロックとして予約されています。

アドレス範囲CIDR表記
10.0.0.0 〜 10.255.255.25510.0.0.0/8
172.16.0.0 〜 172.31.255.255172.16.0.0/12
192.168.0.0 〜 192.168.255.255192.168.0.0/16

プライベートIPアドレスは、公衆インターネット上では通常、これらの宛先への経路広告・到達性が提供されず、そのままではインターネットに直接接続できません。組織内のネットワークで、インターネット上の他組織との重複を気にせず使える一方、同一の通信範囲内では重複しないように管理する必要があります。インターネットへ通信する際には通常、NAT(ネットワークアドレス変換)によってパブリックIPアドレスに変換します。これに対しパブリックIPアドレスは、インターネット上で重複なく一意になるよう、IANAおよび地域インターネットレジストリ(RIR)などを通じて管理・割り当てが行われているアドレスです。

なお、127.0.0.0/8(ループバックアドレス、自分自身を指す)や169.254.0.0/16(リンクローカルアドレス、DHCPでのアドレス取得に失敗した場合等に自動的に割り当てられる)のように、プライベート・パブリックのどちらにも当てはまらない特殊な用途のアドレス範囲も存在しますこれらは「プライベートとパブリックの違い」という出題範囲の項目そのものではありませんが、127.0.0.1(ループバック)等と混同しないよう、実務上・試験対策上の参考として触れています。[2]。

一般的なTCPおよびUDPポートとサービス

TCP・UDPでは、1台のホスト上で複数のサービスを同時に区別して通信できるよう、0〜65535のポート番号を使います。慣習的によく使われるサービスには、あらかじめ決まったポート番号(ウェルノウンポート、0〜1023番)が割り当てられており、この対応関係は/etc/servicesファイルに記載されています。

ポート番号主なプロトコルサービス名用途
20TCPftp-dataFTPのデータ転送用
21TCPftpFTPの制御用(コマンドのやり取り)
22TCPsshSSH(暗号化されたリモートログイン)
23TCPtelnetTelnet(暗号化されないリモートログイン)
25TCPsmtpSMTP(メール送信)
53TCP・UDPdomainDNS(名前解決。問い合わせは主にUDP、ゾーン転送やUDP応答が切り詰められた場合などはTCP)
80TCPhttpHTTP(Webアクセス)
110TCPpop3POP3(メール受信)
123UDPntpNTP(時刻同期)
139TCPnetbios-ssnNetBIOSセッションサービス(Windowsファイル共有等)
143TCPimapIMAP(メール受信)
161UDPsnmpSNMP(ネットワーク機器の監視・管理)
162UDPsnmptrapSNMPトラップ(機器側からの通知の受信)
389TCPldapLDAP(ディレクトリサービスへの問い合わせ)
443TCPhttpsHTTPS(暗号化されたWebアクセス)
465TCPsubmissionsメール送信をTLSで暗号化する送信専用ポート(IANA正式名はsubmissionsだが、慣習的に「SMTPS」とも呼ばれる)
514TCP・UDPshell(TCP)/syslog(UDP)同じ514番でも、TCPはrsh(リモートシェル、パスワード無しの信頼関係でコマンド実行)、UDPはsyslog(ログ転送)という全く別のサービス「同じポート番号だからTCP版・UDP版は同じサービスの別プロトコル版」と早合点しやすい代表例です。他の多くのポート(53番のDNS等)はTCP・UDPどちらでも同じサービスを指しますが、514番は例外的にTCP・UDPで指すサービス自体が異なります。[3]
636TCPldapsLDAP over TLS(暗号化されたディレクトリサービス問い合わせ)
993TCPimapsIMAP over TLS(暗号化されたメール受信)
995TCPpop3sPOP3 over TLS(暗号化されたメール受信)

「主なプロトコル」欄は実際の通信で主に使われる方を示したもので、/etc/servicesファイル自体には歴史的経緯からTCP・UDP両方のエントリが登録されているポート番号もあります。実際にどちらが使われるかは、アプリケーションやサービスの設計によって決まり、信頼性や即時性などの要求が選択の判断材料になります(次節参照)。

/etc/services

/etc/servicesは、ポート番号とサービス名の対応関係を記録したテキストファイルで、サービス名 ポート番号/プロトコルの形式で1行ずつ記載されています。

ssh             22/tcp
smtp            25/tcp
domain          53/tcp
domain          53/udp
http            80/tcp

このファイルは、/etc/nsswitch.confのservices設定でfilesが検索対象になっている場合、NSS(Name Service Switch)の仕組みを通じてgetent servicesコマンドや、プログラムがサービス名からポート番号を調べる際(getservbyname関数等)に参照されます名前解決の仕組み自体(/etc/nsswitch.conf・getent)は「クライアント側のDNS設定」の技術解説記事で詳しく扱っています。ここでのgetent servicesはホスト名ではなくサービス名を調べる用途である点が異なります。[4]。ポート番号の指定としてサービス名を受け付けるコマンドやプログラムは、内部でこのファイルを参照してポート番号に変換する場合があります。

UDP、TCPおよびICMPの違いや主な機能

TCP・UDPはいずれもIPの上位で動作するトランスポート層のプロトコルですが、性質が大きく異なります。

  • TCP(Transmission Control Protocol):通信を始める前に3ウェイハンドシェイクで接続を確立するコネクション型のプロトコルです。送ったデータが届いたかどうかを確認し、届いていなければ再送する、順序が入れ替わっても正しい順番に並べ直す、送信速度を調整する(フロー制御・輻輳制御)等の仕組みを持ち、信頼性の高い通信を実現します。Webアクセス(HTTP/HTTPS)やメール送受信、SSHのように、データの欠落や順序の入れ替わりが許されない通信で使われます。
  • UDP(User Datagram Protocol):接続の確立を行わないコネクションレス型のプロトコルです。届いたかどうかの確認や再送、順序の並べ替えといった仕組みを持たない代わりに、オーバーヘッドが小さく、低遅延が求められる通信に適しています。DNSの問い合わせやNTPの時刻同期、動画・音声のストリーミング配信のように、多少のデータ欠落よりも即時性を優先したい通信で使われます。
  • ICMP(Internet Control Message Protocol):TCP・UDPとは異なり、アプリケーション同士のデータ転送を目的としたプロトコルではありません。ネットワーク経路上の状態(相手に到達できるか、途中で経路が無い等)をやり取りするための制御・診断用のプロトコルで、pingが使うエコー要求・エコー応答や、tracerouteが経路を調べる際に利用するTTL超過通知などが代表例ですping・tracerouteの実際の使い方は「基本的なネットワークの問題解決」の技術解説記事で扱っています。[5]。ICMPにはTCP・UDPのようなポート番号の概念が無い点にも注意してください。

IPv4とIPv6の主な違い

IPv6は、IPv4のアドレス枯渇に対応するために設計された、IPの後継バージョンです。両者には次のような違いがあります。

観点IPv4IPv6
アドレス長32ビット128ビット
アドレスの表記10進数4つをピリオドで区切る(例: 192.0.2.10)原則として16進数の8グループをコロンで区切る(省略表記の例: 2001:db8::1)
アドレス空間約43億個実質的に枯渇の心配が無いほど巨大
ブロードキャストあり無し(マルチキャストで代替)
経路上でのフラグメンテーション(分割)ルーターが、DFフラグが設定されていない場合に必要に応じて分割するルーターは分割せず、送信元のみが分割する(Path MTU Discoveryを利用)
アドレスの自動設定主にDHCPによる動的割り当てステートレスアドレス自動設定(SLAAC)が標準機能として利用可能

IPv6はアドレス空間が非常に広いため、IPv4で広く使われてきたNAT(プライベートアドレスとパブリックアドレスの変換)に頼らずに、機器ごとにグローバルなアドレスを割り当てやすい設計になっていますIPv6でもNAT66等のNAT技術自体は存在しますが、アドレス不足を理由にNATが必須になる場面はIPv4に比べて大きく減っています。[6]。また、ヘッダー構造がIPv4より単純化されており、ルーターでの処理負荷を下げやすい設計になっています。

IPv6の基本的な機能

アドレスの種類

IPv6のアドレスは、大きく3種類に分類されます。

  • ユニキャストアドレス:特定の1つのインターフェースを指すアドレス。IPv4のユニキャストアドレスと同じ考え方です。
  • マルチキャストアドレス:複数のインターフェースからなるグループ宛てのアドレス。IPv4のブロードキャストが担っていた「同一セグメント内の全員への通知」のような用途も、IPv6ではマルチキャストで実現します。
  • エニーキャストアドレス:複数のインターフェースに同じアドレスを割り当て、経路的に最も近い1つが応答するアドレス。

IPv4にあったブロードキャストアドレスという概念はIPv6には存在しません。

アドレス表記の省略ルール

IPv6アドレスは128ビットと長いため、次のような省略記法が使えます。

  • 各グループ(16ビットごと)の先頭にある連続する0は省略できる(例: 0db8→db8)。
  • 0だけのグループが1つ以上連続する箇所は、::という記法でまとめて1回だけ省略できる(1つのアドレス中で::は1回のみ使用可能)。

代表的な特殊アドレス

アドレス(範囲)用途
::1ループバックアドレス(IPv4の127.0.0.1に相当)
fe80::/10リンクローカルアドレス(同一リンク内でのみ有効)
fc00::/7ユニークローカルアドレス(IPv4のプライベートIPアドレスに近い、組織内利用向けのアドレス)

ステートレスアドレス自動設定(SLAAC)

IPv6には、DHCPサーバーが無くても、ルーターが送信するルーター広告(Router Advertisement)を受け取ることで、ホスト自身がネットワーク部の情報を得てIPv6アドレスを自動的に組み立てるSLAAC(Stateless Address Autoconfiguration)という仕組みが標準機能として用意されています。IPv6でもDHCPv6によるアドレス管理を使う構成も存在しますが、SLAACはIPv6独自の基本機能として押さえておく必要があります。


補足

  1. 点対点(point-to-point)リンク専用の/31は、ネットワークアドレス・ブロードキャストアドレスという概念自体を持たず2個のアドレスを両方とも使える特別な扱い(RFC 3021)、/32は単一のホストを指すアドレスとして使われる等、常にこの「2少ない」計算が当てはまるわけではない例外もありますが、本記事では基本となる考え方として扱います。 ↩
  2. これらは「プライベートとパブリックの違い」という出題範囲の項目そのものではありませんが、127.0.0.1(ループバック)等と混同しないよう、実務上・試験対策上の参考として触れています。 ↩
  3. 「同じポート番号だからTCP版・UDP版は同じサービスの別プロトコル版」と早合点しやすい代表例です。他の多くのポート(53番のDNS等)はTCP・UDPどちらでも同じサービスを指しますが、514番は例外的にTCP・UDPで指すサービス自体が異なります。 ↩
  4. 名前解決の仕組み自体(/etc/nsswitch.conf・getent)は「クライアント側のDNS設定」の技術解説記事で詳しく扱っています。ここでのgetent servicesはホスト名ではなくサービス名を調べる用途である点が異なります。 ↩
  5. ping・tracerouteの実際の使い方は「基本的なネットワークの問題解決」の技術解説記事で扱っています。 ↩
  6. IPv6でもNAT66等のNAT技術自体は存在しますが、アドレス不足を理由にNATが必須になる場面はIPv4に比べて大きく減っています。 ↩