IPv6
IPv6をアプリケーションで利用するためのプログラムは、IPv4でのプログラムと比べて大きな違いがあるものではない。
ネットワークを利用するプログラムではソケットを利用することが多く、通常のIPv4プログラミングでsocketを作成するときには
のように、アドレスファミリ部をIPv4固定で指定することが多いが、一つのサイトがIPv4とIPv6の両プロトコルに対応している場合や、どちらに対応しているのか事前にはわからないことを考慮すると、DNSで一つの名前を検索した後、列挙された複数のプロトコルのアドレスに対して順番にconnectを試みる必要がある。
アドレスを検索する際は、IPv4のみを前提としているgethostbyname() や、socket同様にアドレスファミリ固定であるgethostbyname2() などではなく、getaddrinfo() を利用する。
以上をまとめると、典型的なソケットを作成するCのコードは以下のようになる。
この手法はIPv6のみならず、別のIPプロトコルが登場した場合にも有効な手法で、プロトコル独立プログラミングなどと呼ばれる。
なお、ここで示した方法は、getaddrinfo() によって返されるアドレスファミリの順に接続を試みるので、AAAAレコードより先にAレコードを返すようなgetaddrinfo() では、IPv6による通信が行われない可能性もある。
一般に言われているIPv6導入によるメリットとしては以下のようなものが挙げられている。
事実上無限の数のIPアドレス アドレス枯渇の心配がほぼ解消される。実際には非常に大きな有限の数(2個 = 340,282,366,920,938,463,463,374,607,431,768,211,456個 = 約340澗個 = 約340兆×1兆×1兆個)であるが、「その辺の石ころにも個別に割り当てることができる」ぐらいあり余っている。 仮に、地球の全人類(約8,000,000,000 = 80億人)へ均等に割り当てられるとしても、1人あたり約4穣2,500𥝱個 = 4京2,500兆×1兆個 = 4.25×10個という天文学的な数になり、各個人が毎秒1兆個使い捨て続けたとしても、枯渇するまで約13億5000万年かかるほど巨大な数になる。 同時に、IPマスカレード(NAT/NAPTなど)を使わずに済むので、全ノードがグローバルな接続性を持ち、直接接続が可能になる。これによって、P2Pアプリケーション(IP電話、インスタントメッセンジャーおよびネットワークゲームなど)の利用やIoTの普及が容易になり、またNATの設定などに気を遣わなくて済むようになる。 実際にフレッツによるIPv6サービス (IPoE)では、/64のネットワークブロックが1ブロック提供される(契約形態によっては異なる)。このサービスを受けることで、1人あたり約43億の2乗(2の64乗、IPv4におけるIPアドレスの総数の2乗)ものアドレス空間をもつネットワークブロックを取得できる。
あるリンクでのみ一意なアドレス。このスコープ宛てのパケットはルータを越えて配送されることはない。
また端末やネットワークの要因のためIPv6での接続に失敗することがあるが、その場合IPv4にフォールバックすることになり、最初からIPv4で接続していれば不要であったはずのタイムラグが生じてしまう。(フレッツ網におけるIPv6#IPv6-IPv4フォールバック問題)
アドレス空間が広いことと、MACアドレスによる自動設定のため、逆引きの管理が困難であり、逆引きを要求されるケースで問題が起きる(逆引きできないホストからの接続を拒否するサーバなど)。
技術面や運用面でまだ不確定な要素が多い(サイトローカルアドレスの廃止、エニーキャストアドレスの見直しとDHCPv6の再検討、逆引きの問題など)。
IPv4では、NAT/NAPTやIPマスカレードの必要性からルーターなどを介して間接的にインターネットと接続するのが一般的であるため、「インターネット側からは直接ローカルホストに接続できない」という点が結果的にセキュリティおよびプライバシーの向上に貢献している。IPv6においてはNAT/NAPTなどは一般的に行われず、さらに後述のModified EUI-64(注意)で生成したIPv6アドレスをそのままグローバルユニキャストアドレスとして使用すると、ユーザーが使用した端末を半永続的に追跡可能になるなど、プライバシーの面で問題が発生する。
IPv6を利用していて通常目にするアドレスは、グローバルユニキャストアドレスかリンクローカルユニキャストアドレスである。IPv6のアドレス空間については、#IPv6アドレス空間参照。