4

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

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

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

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

4

4 回答 4

6

恐怕亚伦的回答是非常不正确的。是的,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 */
于 2008-12-18T15:38:59.480 回答
3

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

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

IPv6 也使流媒体和广播变得更容易。

于 2008-10-16T10:31:49.967 回答
2

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

我的理解是,其他方面不会有太大变化。大多数程序都使用操作系统提供的网络设施,因此当数据返回应用程序时,所有寻址和传输复杂性都已消除。当然,有些应用程序会受到更大的影响,但那些将是直接与网络一起工作的应用程序……而不是典型的业务线应用程序。

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

一件可能很糟糕的事情是旧游戏,您在其中输入要连接的玩家的 IP 地址(帝国时代、星际争霸等)。似乎除非某种 IPv4-IPv6 隧道,该游戏的功能将被破坏。

于 2008-10-16T17:09:15.923 回答
1

所有现代网络浏览器(Chrome、IE、Safari 和 Firefox)都支持 IPv6。同样支持 IPv6 的是 µTorrent。

于 2008-12-18T15:18:53.887 回答