有很多关于IPv6以及即将从IPv4切换到IPv6的新闻。我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发的影响有多大。设计(具体)?
IPv6提供了一些我们今天还没有的有形/众所周知的好处吗?
我知道Windows Vista和Server 2008支持开箱即用的IPv6,今天是否有人使用(或设计使用IPv6),如果是这样,有什么好处?我们是否应该在当前和未来的项目中考虑IPv6?
是否有支持IPv6的应用程序的良好示例?
答案 0 :(得分:6)
Aaron的回答是,我担心,非常不正确。是的,UI更改是必要的,但使用传统套接字API的任何代码也可能需要进行大量更改才能支持IPv6。
大多数旧代码使用特定的“地址族”常量(AF_INET
)和特定的数据结构(struct sockaddr_in
)。任何仍在使用它的代码都有效地停留在IPv4领域。
较新的代码应使用现代API调用,例如getaddrinfo()
,无论远程主机是否使用,都能够为协议,地址族(即AF_INET6
),地址等返回正确的值。 IPv4或IPv6(或两者)。
这有点冗长,但这是来自getaddrinfo
的Linux手册页的代码示例。请注意调用如何获取潜在远程地址的完整列表,并依次尝试每个地址直到成功:
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 */
答案 1 :(得分:3)
最初并不多。对于大多数桌面和Web应用程序,从IPv4到v6的切换应该是透明的。
但最终使用IPv6变得更容易的网络模型的应用程序将变得更加普遍。例如,大多数用户都在NAT后面,因此网状网络仅适用于技术受众。任何不得不在他的路由器上打开P2P软件端口的人都知道这不是他妈妈可以使用的。
流媒体和广播也是IPv6变得更容易的事情。
答案 2 :(得分:2)
它将影响您输入IP地址的任何软件的UI设计,因为您需要让他们在IPv4和IPv6输入之间进行选择。虽然很明显。
我的理解是,没有太多其他事情会改变。大多数程序使用操作系统提供的网络设施,因此当数据返回应用程序时,所有寻址和传输复杂性都将被删除。当然,有些应用程序会受到更大影响,但这些应用程序将直接与网络协同工作......而不是典型的业务线应用程序。
您需要查看应用程序在OSI model中的位置。我认为IP地址是第3层的一部分,因此如果您在该层之上,则可以通过操作系统从更改中抽象出来。
可能很糟糕的一件事是旧游戏,你输入你想要连接的玩家的IP地址(帝国时代,星际争霸等)。似乎除了某种IPv4-IPv6隧道之外,游戏的功能将被打破。
答案 3 :(得分:1)
所有现代网络浏览器(Chrome,IE,Safari和Firefox都会浮现在脑海中)都具有IPv6感知功能。此外,IPv6感知是μTorrent。