IPアドレスとは、インターネットやイントラネットなどのTCP/IPプロトコルを利用したネットワークにおける識別番号のことである。ネットワークに接続された個々のコンピュータに割り振られる。
現在のインターネットで用いられているIPv4では、8ビットずつ4つに区切られた32ビットの数値が使われており、0から255までの10進数の数字が4つ並べて表される。なお、ネットワーク上では、同じIPアドレスが存在することは許されていないため、国際的な管理組織であるNICによって一元的に管理されている。また、日本においては、JPNICが管理を行っている。
IPアドレスは、数値が並んでいるだけのものであるため、DNSというシステムを用いることで、IPアドレスに名称(ドメイン名)を付けることも可能である。
現在のIPv4では、42億9496万7296台のIPアドレスまでしか表すことができないため、IPアドレス資源の枯渇が問題となっているが、後継バージョンのIPv6では、約3.4×10の38乗個のIPアドレスを表すことができ、実質的には、ほぼ無限大にまで拡大されている。これにより、パソコンだけでなく家電や車など、あらゆる身の回りのもの全てにIPアドレスを割り当てることも可能になるといわれている。
構文
解説
使用例サーバーに問い合わせて、ファミリ アドレスおよびそのサーバーがサポートする IP アドレスを取得する方法を次の例に示します。
' This program shows how to use the IPAddress class to obtain a server ' IP addressess and related information. Imports System Imports System.Net Imports System.Net.Sockets Imports System.Text.RegularExpressions Imports Microsoft.VisualBasic Namespace Mssc.Services.ConnectionManagement Module M_TestIPAddress Class TestIPAddress 'The IPAddresses method obtains the selected server IP address information. 'It then displays the type of address family supported by the server and 'its IP address in standard and byte format. Private Shared Sub IPAddresses(ByVal server As String) Try Dim ASCII As New System.Text.ASCIIEncoding() ' Get server related information. Dim heserver As IPHostEntry = Dns.Resolve(server) ' Loop on the AddressList Dim curAdd As IPAddress For Each curAdd In heserver.AddressList ' Display the type of address family supported by the server. If the ' server is IPv6-enabled this value is: InternNetworkV6. If the server ' is also IPv4-enabled there will be an additional value of InterNetwork. Console.WriteLine(("AddressFamily: " + curAdd.AddressFamily.ToString())) ' Display the ScopeId property in case of IPV6 addresses. If curAdd.AddressFamily.ToString() = ProtocolFamily.InterNetworkV6.ToString() Then Console.WriteLine(("Scope Id: " + curAdd.ScopeId.ToString())) End If ' Display the server IP address in the standard format. In ' IPv4 the format will be dotted-quad notation, in IPv6 it will be ' in in colon-hexadecimal notation. Console.WriteLine(("Address: " + curAdd.ToString())) ' Display the server IP address in byte format. Console.Write("AddressBytes: ") Dim bytes As [Byte]() = curAdd.GetAddressBytes() Dim i As Integer For i = 0 To bytes.Length - 1 Console.Write(bytes(i)) Next i Console.WriteLine(ControlChars.Cr + ControlChars.Lf) Next curAdd Catch e As Exception Console.WriteLine(("[DoResolve] Exception: " + e.ToString())) End Try End Sub 'IPAddresses ' This IPAddressAdditionalInfo displays additional server address information. Private Shared Sub IPAddressAdditionalInfo() Try ' Display the flags that show if the server supports IPv4 or IPv6 ' address schemas. Console.WriteLine((ControlChars.Cr + ControlChars.Lf + "SupportsIPv4: " + Socket.SupportsIPv4.ToString())) Console.WriteLine(("SupportsIPv6: " + Socket.SupportsIPv6.ToString())) If Socket.SupportsIPv6 Then ' Display the server Any address. This IP address indicates that the server ' should listen for client activity on all network interfaces. Console.WriteLine((ControlChars.Cr + ControlChars.Lf + "IPv6Any: " + IPAddress.IPv6Any.ToString())) ' Display the server loopback address. Console.WriteLine(("IPv6Loopback: " + IPAddress.IPv6Loopback.ToString())) ' Used during autoconfiguration first phase. Console.WriteLine(("IPv6None: " + IPAddress.IPv6None.ToString())) Console.WriteLine(("IsLoopback(IPv6Loopback): " + IPAddress.IsLoopback(IPAddress.IPv6Loopback).ToString())) End If Console.WriteLine(("IsLoopback(Loopback): " + IPAddress.IsLoopback(IPAddress.Loopback).ToString())) Catch e As Exception Console.WriteLine(("[IPAddresses] Exception: " + e.ToString())) End Try End Sub 'IPAddressAdditionalInfo Public Shared Sub Main(ByVal args() As String) Dim server As String = Nothing ' Define a regular expression to parse user's input. ' This is a security check. It allows only ' alphanumeric input string between 2 to 40 character long. 'Define a regular expression to parse user's input. 'This is a security check. It allows only 'alphanumeric input string between 2 to 40 character long. Dim rex As New Regex("^[a-zA-Z]\w{1 ,39}$") If args.Length < 1 Then ' If no server name is passed as an argument to this program, use the current ' server name as default. server = Dns.GetHostName() Console.WriteLine(("Using current host: " + server)) Else server = args(0) If Not rex.Match(server).Success Then Console.WriteLine("Input string format not allowed.") Return End If End If ' Get the list of the addresses associated with the requested server. IPAddresses(server) ' Get additonal address information. IPAddressAdditionalInfo() End Sub 'Main End Class 'TestIPAddress End Module End Namespace
// This program shows how to use the IPAddress class to obtain a server // IP addressess and related information. using System; using System.Net; using System.Net.Sockets; using System.Text.RegularExpressions; namespace Mssc.Services.ConnectionManagement { class TestIPAddress { /** * The IPAddresses method obtains the selected server IP address information. * It then displays the type of address family supported by the server and its * IP address in standard and byte format. **/ private static void IPAddresses(string server) { try { System.Text.ASCIIEncoding ASCII = new System.Text.ASCIIEncoding(); // Get server related information. IPHostEntry heserver = Dns.Resolve(server); // Loop on the AddressList foreach (IPAddress curAdd in heserver.AddressList) { // Display the type of address family supported by the server. If the // server is IPv6-enabled this value is: InternNetworkV6. If the server // is also IPv4-enabled there will be an additional value of InterNetwork. Console.WriteLine("AddressFamily: " + curAdd.AddressFamily.ToString()); // Display the ScopeId property in case of IPV6 addresses. if(curAdd.AddressFamily.ToString() == ProtocolFamily.InterNetworkV6.ToString()) Console.WriteLine("Scope Id: " + curAdd.ScopeId.ToString()); // Display the server IP address in the standard format. In // IPv4 the format will be dotted-quad notation, in IPv6 it will be // in in colon-hexadecimal notation. Console.WriteLine("Address: " + curAdd.ToString()); // Display the server IP address in byte format. Console.Write("AddressBytes: "); Byte[] bytes = curAdd.GetAddressBytes(); for (int i = 0; i < bytes.Length; i++) { Console.Write(bytes[i]); } Console.WriteLine("\r\n"); } } catch (Exception e) { Console.WriteLine("[DoResolve] Exception: " + e.ToString()); } } // This IPAddressAdditionalInfo displays additional server address information. private static void IPAddressAdditionalInfo() { try { // Display the flags that show if the server supports IPv4 or IPv6 // address schemas. Console.WriteLine("\r\nSupportsIPv4: " + Socket.SupportsIPv4); Console.WriteLine("SupportsIPv6: " + Socket.SupportsIPv6); if (Socket.SupportsIPv6) { // Display the server Any address. This IP address indicates that the server // should listen for client activity on all network interfaces. Console.WriteLine("\r\nIPv6Any: " + IPAddress.IPv6Any.ToString()); // Display the server loopback address. Console.WriteLine("IPv6Loopback: " + IPAddress.IPv6Loopback.ToString()); // Used during autoconfiguration first phase. Console.WriteLine("IPv6None: " + IPAddress.IPv6None.ToString()); Console.WriteLine("IsLoopback(IPv6Loopback): " + IPAddress.IsLoopback(IPAddress.IPv6Loopback)); } Console.WriteLine("IsLoopback(Loopback): " + IPAddress.IsLoopback(IPAddress.Loopback)); } catch (Exception e) { Console.WriteLine("[IPAddresses] Exception: " + e.ToString()); } } public static void Main(string[] args) { string server = null; // Define a regular expression to parse user's input. // This is a security check. It allows only // alphanumeric input string between 2 to 40 character long. Regex rex = new Regex(@"^[a-zA-Z]\w{1,39}$"); if (args.Length < 1) { // If no server name is passed as an argument to this program, use the current // server name as default. server = Dns.GetHostName(); Console.WriteLine("Using current host: " + server); } else { server = args[0]; if (!(rex.Match(server)).Success) { Console.WriteLine("Input string format not allowed."); return; } } // Get the list of the addresses associated with the requested server. IPAddresses(server); // Get additonal address information. IPAddressAdditionalInfo(); } } }
// This program shows how to use the IPAddress class to obtain a server // IP addressess and related information. import System.*; import System.Net.*; import System.Net.Sockets.*; import System.Text.RegularExpressions.*; class TestIPAddress { /** The IPAddresses method obtains the selected server IP address information.It then displays the type of address family supported by the server and its IP address in standard and byte format. */ private static void IPAddresses(String server) { try { System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding(); // Get server related information. IPHostEntry heserver = Dns.Resolve(server); // Loop on the AddressList for (int iCtr = 0; iCtr < heserver.get_AddressList().length; iCtr++) { IPAddress curAdd = heserver.get_AddressList()[iCtr]; // Display the type of address family supported by the server. // If the server is IPv6-enabled this value is:InternNetworkV6. // If the server is also IPv4-enabled there will be an // additional value of InterNetwork. Console.WriteLine(("AddressFamily: " + curAdd.get_AddressFamily().ToString())); // Display the ScopeId property in case of IPV6 addresses. if (curAdd.get_AddressFamily().ToString().equals( ProtocolFamily.InterNetworkV6.ToString())) { Console.WriteLine(("Scope Id: " +(new Long(curAdd.get_ScopeId())).ToString())); } // Display the server IP address in the standard format. In // IPv4 the format will be dotted-quad notation, in IPv6 // it will be in in colon-hexadecimal notation. Console.WriteLine(("Address: " + curAdd.ToString())); // Display the server IP address in byte format. Console.Write("AddressBytes: "); ubyte bytes[] = curAdd.GetAddressBytes(); for (int i = 0; i < bytes.length; i++) { Console.Write(bytes[i]); } Console.WriteLine("\r\n"); } } catch (System.Exception e) { Console.WriteLine(("[DoResolve] Exception: " + e.ToString())); } } //IPAddresses // This IPAddressAdditionalInfo displays additional server address // information. private static void IPAddressAdditionalInfo() { try { // Display the flags that show if the server supports IPv4 or IPv6 // address schemas. Console.WriteLine("\r\nSupportsIPv4: " + System.Convert.ToString(Socket.get_SupportsIPv4())); Console.WriteLine("SupportsIPv6: " + System.Convert.ToString(Socket.get_SupportsIPv6())); if (Socket.get_SupportsIPv6()) { // Display the server Any address. This IP address indicates // that the server should listen for client activity on all // network interfaces. Console.WriteLine(("\r\nIPv6Any: " + (IPAddress.IPv6Any).ToString())); // Display the server loopback address. Console.WriteLine(("IPv6Loopback: " + (IPAddress.IPv6Loopback).ToString())); // Used during autoconfiguration first phase. Console.WriteLine(("IPv6None: " + (IPAddress.IPv6None).ToString())); Console.WriteLine(("IsLoopback(IPv6Loopback): " + IPAddress.IsLoopback(IPAddress.IPv6Loopback))); } Console.WriteLine(("IsLoopback(Loopback): " + System.Convert.ToString(IPAddress. IsLoopback(IPAddress.Loopback)))); } catch (System.Exception e) { Console.WriteLine(("[IPAddresses] Exception: " + e.ToString())); } } //IPAddressAdditionalInfo public static void main(String[] args) { String server = null; // Define a regular expression to parse user's input. // This is a security check. It allows only // alphanumeric input string between 2 to 40 character long. Regex rex = new Regex("^[a-zA-Z]\\w{1,39}$"); if (args.length < 1) { // If no server name is passed as an argument to this program, // use the current server name as default. server = Dns.GetHostName(); Console.WriteLine(("Using current host: " + server)); } else { server = args[0]; if (!(rex.Match(server).get_Success())) { Console.WriteLine("Input string format not allowed."); return; } } // Get the list of the addresses associated with the requested server. IPAddresses(server); // Get additonal address information. IPAddressAdditionalInfo(); } //main } //TestIPAddress
継承階層
スレッド セーフ
プラットフォームWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照
構文
解説
プラットフォームWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照
構文
例外
解説このコンストラクタは IPv6 アドレスをインスタンス化します。scopeid は、リンクローカル アドレスの場合にネットワーク インターフェイスを識別します。スコープは、リンクローカル アドレスおよびサイトローカル アドレスの場合にだけ有効です。
プラットフォームWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照
オーバーロードの一覧| 名前 | 説明 |
|---|---|
| IPAddress (Byte[]) | Byte 配列として指定されたアドレスを使用して、IPAddress クラスの新しいインスタンスを初期化します。 .NET Compact Framework によってサポートされています。 |
| IPAddress (Int64) | Int64 として指定されたアドレスを使用して、IPAddress クラスの新しいインスタンスを初期化します。 .NET Compact Framework によってサポートされています。 |
| IPAddress (Byte[], Int64) | 指定したアドレスとスコープを使用して、IPAddress クラスの新しいインスタンスを初期化します。 .NET Compact Framework によってサポートされています。 |
参照
構文
例外
解説IPAddress が、Address プロパティが address に設定された状態で作成されます。
address の長さが 4 の場合は、IPAddress(Byte[]) が IPv4 アドレスを作成します。それ以外の場合は、スコープが 0 の IPv6 アドレスが作成されます。
プラットフォームWindows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
バージョン情報
参照
パブリック メソッド| 名前 | 説明 | |
|---|---|---|
| Equals | オーバーロードされます。 オーバーライドされます。 |
| GetAddressBytes | IPAddress のコピーをバイト配列として提供します。 |
| GetHashCode | オーバーライドされます。 IP アドレスのハッシュ値を返します。 |
| GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
| HostToNetworkOrder | オーバーロードされます。 値をホストのバイト順からネットワークのバイト順に変換します。 |
| IsLoopback | 指定した IP アドレスがループバック アドレスかどうかを示します。 |
| NetworkToHostOrder | オーバーロードされます。 数値をネットワークのバイト順からホストのバイト順に変換します。 |
| Parse | IP アドレス文字列を IPAddress インスタンスに変換します。 |
| ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
| ToString | オーバーライドされます。 インターネット アドレスを標準表記に変換します。 |
| TryParse | 文字列が有効な IP アドレスであるかどうかを判断します。 |
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
参照インターネット プロトコル (IP: Internet Protocol) アドレスを提供します。
IPAddress データ型で公開されるメンバを以下の表に示します。
パブリック コンストラクタ
パブリック フィールド
パブリック プロパティ
パブリック メソッド| 名前 | 説明 | |
|---|---|---|
| Equals | オーバーロードされます。 オーバーライドされます。 |
| GetAddressBytes | IPAddress のコピーをバイト配列として提供します。 |
| GetHashCode | オーバーライドされます。 IP アドレスのハッシュ値を返します。 |
| GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
| HostToNetworkOrder | オーバーロードされます。 値をホストのバイト順からネットワークのバイト順に変換します。 |
| IsLoopback | 指定した IP アドレスがループバック アドレスかどうかを示します。 |
| NetworkToHostOrder | オーバーロードされます。 数値をネットワークのバイト順からホストのバイト順に変換します。 |
| Parse | IP アドレス文字列を IPAddress インスタンスに変換します。 |
| ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
| ToString | オーバーライドされます。 インターネット アドレスを標準表記に変換します。 |
| TryParse | 文字列が有効な IP アドレスであるかどうかを判断します。 |
プロテクト メソッド| 名前 | 説明 | |
|---|---|---|
| Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
参照(IPAddress から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/01/27 00:39 UTC 版)
|
|
この記事には複数の問題があります。
|
IPアドレス(アイピーアドレス、英: IP address)は、Internet Protocol(IP)で通信相手を識別するための番号である。インターネットアドレスとも呼ばれる[1][2]。
IPアドレスは、IPネットワーク上の情報機器を識別するために指定するネットワーク層における識別用の番号である。データリンク層のMACアドレスを物理アドレスということに対応して、論理アドレスとも呼ばれる。IPのバージョン(IPv4とIPv6)に応じて、IPv4のIPアドレス(IPv4アドレス)とIPv6のIPアドレス(IPv6アドレス)がある。当初、RFC 791でIPを定義した際に、IPが現在のIPv4に当たるもののみであったことから、狭義では、単にIPアドレスと呼称した場合にIPv4のIPアドレスを意味する場合がある。
IPアドレスは、IPv4では32ビット、IPv6では128ビットの数値である。この数値のうち、最上位ビット(MSB)に近い側をネットワーク部、最下位ビット(LSB)に近い側をホスト部として区別する。ネットワーク部がネットワークを指定し、ホスト部がそのネットワーク内の機器を指定する。ネットワーク部とホスト部の区別にはサブネットマスクを用いることができる(ある)。
IPv4のIPアドレスの表記法には以下の規則がある。IPv6については「IPv6」および「IPv6アドレス」の記事で取り扱う。
gethostbyname() や inet_aton() など、IPアドレスを解釈する実装の一部では以下のような表記も許している。
0xC0A80001 (= 192.168.0.1)0xC0.0250.1 (= 192.168.0.1、(C0→192、250→168))これらの表記は、URL StandardでURLの一部分として定義されている[3][4]。ただし、オペレーティングシステム(OS)やアプリケーション(例:ウェブブラウザソフト)、ネットワーク機器などによっては利用できないことがある。また悪意のある者がフィッシングサイトなどのURLを偽装するために用いる場合もあるので、注意が必要である。
IPアドレスは、次の5つのアドレスクラスに分かれている。
| クラス | アドレス範囲 | 用途(先頭ビットの値) |
|---|---|---|
| クラスA | 0.0.0.0 - 127.255.255.255 | ネットワークアドレス長は8ビット、ホストアドレス長は24ビット。 RFC 791で規定。(0-で始まる) |
| クラスB | 128.0.0.0 - 191.255.255.255 | ネットワークアドレス長は16ビット、ホストアドレス長も16ビット。 RFC 791で規定。(10-で始まる) |
| クラスC | 192.0.0.0 - 223.255.255.255 | ネットワークアドレス長は24ビット、ホストアドレス長は8ビット。 RFC 791で規定。(110-で始まる) |
| クラスD | 224.0.0.0 - 239.255.255.255 | IPマルチキャスト専用。 RFC 1112で規定。(1110-で始まる) |
| クラスE | 240.0.0.0 - 255.255.255.255 | 将来の使用のために予約されている。 RFC 1112で規定。(1111-で始まる) |
クラスAからクラスCまでは、ネットワーク部とホスト部の境界が8ビット単位で区分けされている。クラスAはネットワーク部が短く(8ビット)、ホスト部が長い(24ビット)。すなわち、多くの機器を保有する大組織や多くの顧客を有する大規模なインターネットサービスプロバイダ(ISP)に割り当てるのに適している。クラスCはその逆である。これは、日本の電話番号において東京などの人口が多い地域には03のような短い市外局番が割り当てられ、人口の少ない地域には長い市外局番が割り当てられているのと同じである。クラスAが約1,677万台、クラスBが65,534台、クラスCが254台のホストを接続できる。
クラスBの割り当てを受けたネットワークの中には65,534台のホスト(インターネットサービスプロバイダであれば接続ユーザー数)を同時にすべて接続することがまれであるネットワークも存在し、IPアドレスが無駄に消費されることになった。そこで現在ではアドレスクラスを使わず、ネットワーク部とホスト部の境界を8ビット単位に固定せずに細分化する可変長サブネットマスクやCIDR(Classless Inter-Domain Routing)の使用が一般化している。
IPアドレスの割り当て範囲を示すために、IPアドレスの末尾に「/」(スラッシュ)とともにネットワークアドレス長を付記して表すことも多い。IPv4の場合、MSB側からのビット数でネットワークアドレス長を表す。例えば192.168.0.0/24の表記の場合、ネットワーク部はMSBから24ビットで残り8ビットがホスト部となる。アドレスクラスでなく可変長サブネットマスクを使用した場合、ネットワークアドレス長の数字は必ずしも8の倍数にはならないことになる。
「CIDR」は、「サイダー」と読む。
Classless Inter-Domain Routingを用いることで、複数のIPアドレスを範囲指定して一つのアドレスブロックとして扱うことができる。例えば、192.168.1.0 - 192.168.1.255という範囲のIPアドレスは、192.168.1.0/24として表すことができる。CIDRを使うことでアドレスブロックの集約や分割が容易に行えることから、IPパケットのルーティングで主に活用されている。例えば、203.0.113.0/26、203.0.113.64/26、203.0.113.128/26、203.0.113.192/26の4つのアドレスブロックは、203.0.113.0/24[注 3]として集約することができる。
例えば69.208.0.0を含むIPアドレス群の場合、CIDRと開始アドレスおよび終了アドレスの関係は以下のようになる。
| CIDR | 開始アドレス | 終了アドレス | 含まれるアドレス数 | 二進法表記したプレフィックス部分のアドレス |
|---|---|---|---|---|
| 69.208.0.0/0 | 0.0.0.0 | 255.255.255.255 | 4,294,967,296 | ********.********.********.******** |
| 69.208.0.0/1 | 0.0.0.0 | 127.255.255.255 | 2,147,483,648 | 0*******.********.********.******** |
| 69.208.0.0/4 | 64.0.0.0 | 79.255.255.255 | 268,435,456 | 0100****.********.********.******** |
| 69.208.0.0/8 | 69.0.0.0 | 69.255.255.255 | 16,777,216 | 01000101.********.********.******** |
| 69.208.0.0/11 | 69.192.0.0 | 69.223.255.255 | 2,097,152 | 01000101.110*****.********.******** |
| 69.208.0.0/12 | 69.208.0.0 | 69.223.255.255 | 1,048,576 | 01000101.1101****.********.******** |
| 69.208.0.0/13 | 69.208.0.0 | 69.215.255.255 | 524,288 | 01000101.11010***.********.******** |
| 69.208.0.0/14 | 69.208.0.0 | 69.211.255.255 | 262,144 | 01000101.110100**.********.******** |
| 69.208.0.0/15 | 69.208.0.0 | 69.209.255.255 | 131,072 | 01000101.1101000*.********.******** |
| 69.208.0.0/16 | 69.208.0.0 | 69.208.255.255 | 65,536 | 01000101.11010000.********.******** |
| 69.208.0.0/17 | 69.208.0.0 | 69.208.127.255 | 32,768 | 01000101.11010000.0*******.******** |
| 69.208.0.0/18 | 69.208.0.0 | 69.208.63.255 | 16,384 | 01000101.11010000.00******.******** |
| 69.208.0.0/19 | 69.208.0.0 | 69.208.31.255 | 8,192 | 01000101.11010000.000*****.******** |
| 69.208.0.0/20 | 69.208.0.0 | 69.208.15.255 | 4,096 | 01000101.11010000.0000****.******** |
| 69.208.0.0/21 | 69.208.0.0 | 69.208.7.255 | 2,048 | 01000101.11010000.00000***.******** |
| 69.208.0.0/22 | 69.208.0.0 | 69.208.3.255 | 1,024 | 01000101.11010000.000000**.******** |
| 69.208.0.0/23 | 69.208.0.0 | 69.208.1.255 | 512 | 01000101.11010000.0000000*.******** |
| 69.208.0.0/24 | 69.208.0.0 | 69.208.0.255 | 256 | 01000101.11010000.00000000.******** |
| 69.208.0.0/25 | 69.208.0.0 | 69.208.0.127 | 128 | 01000101.11010000.00000000.0******* |
| 69.208.0.0/26 | 69.208.0.0 | 69.208.0.63 | 64 | 01000101.11010000.00000000.00****** |
| 69.208.0.0/27 | 69.208.0.0 | 69.208.0.31 | 32 | 01000101.11010000.00000000.000***** |
| 69.208.0.0/28 | 69.208.0.0 | 69.208.0.15 | 16 | 01000101.11010000.00000000.0000**** |
| 69.208.0.0/29 | 69.208.0.0 | 69.208.0.7 | 8 | 01000101.11010000.00000000.00000*** |
| 69.208.0.0/30 | 69.208.0.0 | 69.208.0.3 | 4 | 01000101.11010000.00000000.000000** |
| 69.208.0.0/31 | 69.208.0.0 | 69.208.0.1 | 2 | 01000101.11010000.00000000.0000000* |
| 69.208.0.0/32 | 69.208.0.0 | 69.208.0.0 | 1 | 01000101.11010000.00000000.00000000 |
通信可能な範囲のことをスコープという。IPアドレスは、それぞれにスコープが決められている。(→一覧)
後述するプライベートIPアドレス、リンクローカルアドレス、特殊用途のIPアドレスなどを除いたIPアドレスは「グローバルIPアドレス」と呼び、インターネットの接続用に利用され、重複が発生しないように管理される。そのため、ICANNを頂点とした階層的な委譲関係によって、世界的な管理が行われている。
通常、パソコンやルーターなどをインターネットに接続すると、ISPに割り振られているグローバルIPアドレスの中の1つがパソコンなどに割り当てられる。
プライベートIPアドレス(ローカルIPアドレス)は、プライベートネットワーク(外部から利用できない社内LANなど)のアドレスとして使うことができる。異なるプライベートネットワークを相互接続してルーティングすることも可能である。
プライベートIPアドレスとして、次のアドレス空間が予約されている。ネットワークの規模に応じて、使い分ける必要がある。
| クラス | 範囲 | サブネットマスク | アドレス数 |
|---|---|---|---|
| クラスA | 10.0.0.0 - 10.255.255.255 | 255.0.0.0 | 16,777,216(16,777,216 × 1 サブネット) |
| クラスB × 16 | 172.16.0.0 - 172.31.255.255 | 255.240.0.0 | 1,048,576(65,536 × 16 サブネット) |
| クラスC × 256 | 192.168.0.0 - 192.168.255.255 | 255.255.0.0 | 65,536(256 × 256 サブネット) |
WindowsなどではIPアドレスが設定されておらず、DHCPサーバも見付からない場合には自動的に169.254で始まるクラスBのIPアドレスが振られる(APIPAという機能)。これはリンクローカルアドレスと呼ばれ単一のLAN内での通信に使うことができるが、ルーティングができないなどプライベートアドレスとは異なるものである。
プライベートIPアドレスとグローバルIPアドレスを相互変換することにより、インターネットに接続することができる。その方法として、NAPT(実装としてはIPマスカレードやipfwなど)やプロキシサーバがある。
インターネット接続サービスによってはインターネットに接続する機器にグローバルIPアドレスではなく、このプライベートIPアドレスを割り当てることもある[5]。
プライベートIPアドレスとこれに関する仕組みによって、グローバルIPアドレスを多量に消費することなくインターネットに接続できる機器を増やすことができる。
2012年4月に RFC 6598として発行したインターネットサービスプロバイダ(ISP)が契約者に貸し出すIPアドレスで、範囲は100.64.0.0/10。
ISP Shared Addressは、個々のISPのネットワーク内でのみ使用可能なIPアドレスで、キャリアグレードNAT(CGN)によりISP Shared AddressとグローバルIPアドレスを相互変換することにより、インターネットに接続することができる。
IPアドレス枯渇問題により、契約者が増加しても、ISPが契約者に貸し出すグローバルIPアドレスを新規に獲得できなくなった。
しかし、ISPが契約者にプライベートIPアドレスを割り当てると、該当するIPアドレスを契約者のローカルネットワーク内で使用できなくなる。例えば、NTTが提供するフレッツの地域IP網においてプライベートIPアドレス(10.0.0.0/8)を使用しているため、フレッツの利用者がプライベートIPアドレス(10.0.0.0/8)をローカルネットワーク内で使用できない。
そこで、ISP Shared Addressの導入により、ISPはISP Shared Addressを使用し、ISPの契約者は、任意のプライベートIPアドレスが使用できるようになる。
なお、/10というアドレス範囲は、東京地域を網羅するISPがISP Shared Addressを導入するには、/10程度のアドレス範囲が必要であるという、日本からの提案がベースになっている。
一部のアドレスおよびブロックは、特殊な用途に使われる。それぞれのスコープに応じて、通常、機器に割り振るべきではない。詳細はIPv4#特別用途のアドレスを参照のこと。
グローバルIPアドレスは、まずインターネットレジストリ(APNICやJPNICなど)からISPにまとまった単位で付与される。これを割り振り(allocation)という。ISPは末端の利用者(個人、法人など)に対して、利用契約に基づいてIPアドレスを払い出す。これを割り当て(assignment)という。かつて一部の大学やIT企業が非営利でインターネットを支えていた時代には、レジストリからこれらの組織に直接割り当てられる例が多かったが、今日では商用ISPが発達したため、新規の割り当てではそのような例は少ない。インターネットレジストリにもIANA(Internet Assigned Numbers Authority) →RIR(Regional Internet Registry)→NIR(National Internet Registry)→LIR(Local Internet Registry)といった階層構造が存在する[6]。
個人契約者の場合、グローバルIPアドレス1個を動的に割り当てる(接続ごとにIPアドレスが変わることがある)ものがほとんどである。ただしISPや契約プランによってはプライベートIPアドレスやISP Shared Addressを割り当てるもの(CATV接続に多い)、グローバルIPアドレス1個を固定で割り当てるもの、複数のグローバルIPアドレスを固定で割り当てるものもある。割り当ての通信プロトコルはダイヤルアップ接続ではPPP、ADSL・FTTHなどではPPPoE、CATVや公衆無線LAN(ホットスポット)ではDHCPによることが一般的である。
法人契約の場合はDNSやメールなどの各種サーバを運用するケースが多いこと、VPN(仮想専用網)などによる取引先などとのデータのやりとりにおいて、IPアドレスによる認証やアクセス制限があることなどの理由により、複数(多いのは4個から16個程度)のグローバルIPアドレスを固定で割り当てる契約が一般的である。
なお、家庭内や組織内でのプライベートIPアドレスの割り当てはDHCP(専用サーバの他、一般向けのいわゆるブロードバンドルーターに実装されている)によることが一般的である。ただし、サーバやルーターのLAN側など固定IPアドレスを必要とするものや、割り当てを厳密に管理したい場合には固定IPアドレスの割り当てが行われる。
2019年3月現在、特殊な用途のものを除く、すべてのIPv4のグローバルアドレスを誰かに割り当てた状態になりつつある。すなわちIPv4のグローバルアドレスに空きがなく、インターネット上に公開するIP機器の増設が不可能になるという問題が発生している。不動産に例えると、これまでは新規分譲で土地が提供されて建物を建築できていたが、分譲する土地がなくなったために、既存の建物が建っている土地を地上げして再開発しない限り新たな建物を建てられなくなった状態である。
2017年2月15日 LACNICのIPv4アドレス在庫が/11ブロック以下となり、AFRINICを除く4つのRIRでIPv4アドレス在庫枯渇の最終段階になった[7]。
この枯渇問題の対策として、IPv6の普及が進められている。