IPv6がアプリケーション開発に与えるメリット/インパクト設計? [閉まっている]

StackOverflow https://stackoverflow.com/questions/207838

  •  03-07-2019
  •  | 
  •  

質問

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

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

Windows VistaおよびServer 2008は、すぐにIPv6をサポートしていることを知っていますが、今日、誰でもIPv6を使用(またはIPv6を念頭に置いて設計)されていますか?現在および将来のプロジェクトでIPv6を検討すべきですか?

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

役に立ちましたか?

解決

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

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

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

1つおかしいのは、接続したいプレイヤー(Age of Empires、Starcraftなど)のIPアドレスを入力する古いゲームです。ある種のIPv4-IPv6トンネリングを禁止すると、ゲームのその機能が破壊されるようです。

他のヒント

アーロンの返事は、恐らく、ほとんど間違いです。はい、UIの変更が必要になりますが、従来のソケットAPIを使用するコードもIPv6をサポートするために大幅な変更が必要になる可能性があります。

ほとんどの古いコードでは、特定の「アドレスファミリ」を使用しています。定数( AF_INET )および特定のデータ構造( struct sockaddr_in )。まだそれを使用しているコードは、事実上IPv4ランドに留まります。

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

やや長めですが、これは getaddrinfo のLinux manページのサンプルコードです。呼び出しが潜在的なリモートアドレスのリスト全体を取得し、成功するまでそれぞれを順番に試行することに注意してください。

         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 */

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

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

ストリーミングとブロードキャストもIPv6によって簡単になります。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top