4

IPv6と、IPv4からIPv6への差し迫った切り替えについて多くの報道がありました。IPv6についてはある程度理解していますが、IPv6がアプリケーションの開発と設計(具体的には)にどの程度の影響を与えるのか疑問に思うことがよくあります。

IPv6が提供する、今日まだ得られていない具体的でよく知られた利点はありますか?

WindowsVistaとServer2008がIPv6をすぐにサポートしていることを知っていますが、今日、IPv6を使用している(またはIPv6を念頭に置いて設計している)人はいますか?もしそうなら、どのような利点がありますか?現在および将来のプロジェクトでIPv6を検討する必要がありますか?

IPv6対応アプリケーションの 良い例はありますか?

4

4 に答える 4

6

Aaron の回答は、残念ながら、かなり間違っています。はい、UI の変更が必要になりますが、従来のソケット API を使用するコードも、IPv6 をサポートするために大幅な変更が必要になる可能性があります。

ほとんどの古いコードは、特定の「アドレス ファミリ」定数 ( AF_INET) と特定のデータ構造 ( struct sockaddr_in) を使用します。それをまだ使用しているコードは、実質的に IPv4 の土地に閉じ込められています。

新しいコードは、リモート ホストが IPv4 または IPv6 (またはその両方) を使用しているかどうかに関係なく、プロトコル、アドレス ファミリ (つまり )、アドレスなどgetaddrinfo()の正しい値を返すことができる最新の API 呼び出しを使用する必要があります。AF_INET6

少し長くなりますが、Linux の man ページからのコード サンプルを次に示しますgetaddrinfo。呼び出しが潜在的なリモート アドレスの全リストを取得し、成功するまで順番に試行する方法に注意してください。

         memset(&hints, 0, sizeof(struct addrinfo));
         hints.ai_family = AF_UNSPEC;    /* Allow IPv4 or IPv6 */
         hints.ai_socktype = SOCK_DGRAM; /* Datagram socket */
         hints.ai_flags = 0;
         hints.ai_protocol = 0;          /* Any protocol */

         s = getaddrinfo(hostname, service, &hints, &result);
         if (s != 0) {
             fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
             exit(EXIT_FAILURE);
         }

         /* getaddrinfo() returns a list of address structures.
            Try each address until we successfully connect(2).
            If socket(2) (or connect(2)) fails, we (close the socket
            and) try the next address. */

         for (rp = result; rp != NULL; rp = rp->ai_next) {
             sfd = socket(rp->ai_family, rp->ai_socktype,
                          rp->ai_protocol);
             if (sfd == -1)
                 continue;

             if (connect(sfd, rp->ai_addr, rp->ai_addrlen) != -1)
                 break;                  /* Success */

             close(sfd);
         }

         if (rp == NULL) {               /* No address succeeded */
             fprintf(stderr, "Could not connect\n");
             exit(EXIT_FAILURE);
         }

         freeaddrinfo(result);           /* No longer needed */
于 2008-12-18T15:38:59.480 に答える
3

最初はあまりありません。IPv4 から v6 への切り替えは、ほとんどのデスクトップおよび Web アプリケーションに対して透過的である必要があります。

しかし最終的には、IPv6 によって容易になったネットワーク モデルを使用するアプリケーションがより一般的になるでしょう。たとえば、ほとんどのユーザーは NAT の背後にいるため、メッシュ ネットワークは技術的な対象者にのみ適しています。P2P ソフトウェアのためにルーターのポートを開く必要があった人なら誰でも、これが母親が使用できるものではないことを知っています。

ストリーミングやブロードキャストも IPv6 によって簡単になったものです。

于 2008-10-16T10:31:49.967 に答える
2

IPv4 と IPv6 の入力を選択できるようにする必要があるため、IP アドレスを入力するソフトウェアの UI デザインに影響を与えます。しかし、かなり明白です。

私の理解では、それ以外はあまり変わらないということです。ほとんどのプログラムは、オペレーティング システムが提供するネットワーク機能を使用しているため、データがアプリケーションに戻るまでに、アドレス指定と送信の複雑さはすべて解消されています。もちろん、より大きな影響を受けるアプリケーションもいくつかありますが、それらは、典型的な基幹業務アプリケーションではなく、ネットワークと直接連携するアプリケーションになります。

アプリケーションがOSI モデルのどこにあるかを調べる必要があります。IPアドレスはレイヤー3の一部だと思うので、そのレイヤーの上にいると、OSによる変更から抽象化されます.

接続したいプレイヤーの IP アドレスを入力する古いゲーム (エイジ オブ エンパイア、スタークラフトなど) は最悪かもしれません。ゲームのその機能が壊れるというある種のIPv4-IPv6トンネリングを禁止しているようです.

于 2008-10-16T17:09:15.923 に答える
1

最新の Web ブラウザー (Chrome、IE、Safari、Firefox が思い浮かびます) はすべて IPv6 に対応しています。また、IPv6 対応は µTorrent です。

于 2008-12-18T15:18:53.887 に答える