首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPv6对应用程序开发和设计有什么好处/影响?

IPv6对应用程序开发和设计有什么好处/影响?
EN

Stack Overflow用户
提问于 2008-10-16 08:55:37
回答 4查看 3.3K关注 0票数 4

关于IPv6和即将从IPv4转到IPv6的消息已经有了很多媒体。我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发和设计(具体来说)有多大的影响?

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

我知道Windows和Server 2008支持IPv6开箱即用,现在有人在使用(或考虑到IPv6 )吗?如果是的话,有什么好处呢?我们应该在当前和未来的项目中考虑IPv6吗?

对IPv6 6敏感的应用程序有什么好的例子吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-16 17:09:15

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

我的理解是,其他方面不会有太大变化。大多数程序都使用操作系统提供的网络设施,所以当数据返回到应用程序时,所有的寻址和传输复杂性都被删除了。当然,有些应用程序会受到更大的影响,但这些应用程序将直接与network...not (您的典型业务应用程序)一起工作。

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

有一件事可能很糟糕,那就是老游戏,你把你想连接的玩家的IP地址(帝国时代,星际争霸等等)放进去。看来,除非有某种IPv6 4-IPv6 6隧道,否则游戏的功能就会被破坏。

票数 2
EN

Stack Overflow用户

发布于 2008-12-18 15:38:59

恐怕亚伦的回答很不正确。是的,UI更改是必要的,但是使用传统套接字API的任何代码也可能需要大量的更改才能支持IPv6。

大多数旧代码使用特定的“地址族”常量(AF_INET)和特定的数据结构(struct sockaddr_in)。任何仍在使用的代码实际上都卡在IPv4中。

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

这有点长,但是这里有一个来自getaddrinfo的Linux手册页面的代码示例。请注意调用如何获得潜在远程地址的完整列表,并依次尝试每个地址,直到成功为止:

代码语言:javascript
复制
         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 */
票数 6
EN

Stack Overflow用户

发布于 2008-10-16 10:31:49

一开始不多。对于大多数桌面和web应用程序来说,从IPv4切换到v6应该是透明的。

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

流媒体和广播也是IPv6使之变得更容易的东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/207838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档