有很多关于IPv6以及即将从IPv4切换到IPv6的新闻。我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发的影响有多大。设计(具体)?

IPv6提供了一些我们今天还没有的有形/众所周知的好处吗?

我知道Windows Vista和Server 2008支持开箱即用的IPv6,今天是否有人使用(或设计使用IPv6),如果是这样,有什么好处?我们是否应该在当前和未来的项目中考虑IPv6?

是否有支持IPv6的应用程序的良好示例?

有帮助吗?

解决方案

它将影响您输入IP地址的任何软件的UI设计,因为您需要让他们在IPv4和IPv6输入之间进行选择。虽然很明显。

我的理解是,没有太多其他事情会改变。大多数程序使用操作系统提供的网络设施,因此当数据返回应用程序时,所有寻址和传输复杂性都将被删除。当然,有些应用程序会受到更大影响,但这些应用程序将直接与网络协同工作......而不是典型的业务线应用程序。

您需要在 OSI模型中查看应用程序所在的位置。我认为IP地址是第3层的一部分,因此如果您在该层之上,则可以通过操作系统从更改中抽象出来。

可能很糟糕的一件事是旧游戏,你输入你想要连接的玩家的IP地址(帝国时代,星际争霸等)。似乎除了某种IPv4-IPv6隧道之外,游戏的功能将被打破。

其他提示

Aaron的回答是,我担心,非常不正确。是的,UI更改是必要的,但使用传统套接字API的任何代码也可能需要进行大量更改才能支持IPv6。

大多数旧代码使用特定的“地址系列”。常量( AF_INET )和特定的数据结构( struct sockaddr_in )。任何仍在使用它的代码都有效地停留在IPv4领域。

较新的代码应该使用现代API调用,例如 getaddrinfo(),它能够为协议,地址族(即 AF_INET6 ),地址等返回正确的值。 ,无论远程主机是使用IPv4还是IPv6(或两者)。

这有点冗长,但这是来自Linux手册页的 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 */

最初并不多。对于大多数桌面和Web应用程序,从IPv4到v6的切换应该是透明的。

但最终使用IPv6变得更容易的网络模型的应用程序将变得更加普遍。例如,大多数用户都在NAT后面,因此网状网络仅适用于技术受众。任何不得不在他的路由器上打开P2P软件端口的人都知道这不是他妈妈可以使用的。

流媒体和广播也是IPv6变得更容易的事情。

所有现代网络浏览器(Chrome,IE,Safari和Firefox都会浮现在脑海中)都具有IPv6感知功能。 IPv6知识也是µ Torrent。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top