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

标签 network-protocols ipv6

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

3年前关闭。




Improve this question




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

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

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

是否有任何支持 IPv6 的应用程序的好例子?

最佳答案

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

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

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

有点长,但这里是来自 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 */

关于network-protocols - IPv6 对应用程序开发和设计有什么好处/影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/207838/

相关文章:

mongodb - 在原始 MongoDB 协议(protocol)上实现 "count"方法的正确方法是什么?

http - 使用持久 HTTP 连接

elasticsearch - 无法访问在 VirtualBox 上运行的 Elasticsearch 服务器

c - 获取地址信息和 IPv6

python - 如何使用 scapy 创建新层或新协议(protocol)?

http - 最大 HTTP 数据包大小

ios - 如果我的 IOS 应用程序支持 IPV6,共享库 (.so) 是否需要更改

c - 打印网络掩码

C# IPv4/IPv6 不可知套接字监听器

c++ - getaddrinfo() 只返回::1 作为 IPV6 地址,