IPv6がアプリケーション開発に与えるメリット/インパクト設計? [閉まっている]
-
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です。