IPv6对应用程序开发和设计有什么好处/影响?
关于IPv6以及即将从IPv4切换到IPv6的问题已经有很多报道。我对IPv6有一些了解,但我经常想知道IPv6对应用程序开发&设计(特别是)有多大影响?IPv6对应用程序开发和设计有什么好处/影响?
IPv6提供了我们现在还没有的一些有形/众所周知的好处吗?
我知道Windows Vista和Server 2008支持IPv6开箱即用,今天任何人都在使用(或者在设计时考虑到IPv6),如果有的话,有什么好处?我们是否应该在当前和未来的项目中考虑IPv6?
是否有任何好支持IPv6的应用程序的示例?
它将影响您输入IP地址的任何软件的UI设计,因为您需要让它们在IPv4和IPv6输入之间进行选择。虽然很明显。
我的理解是没有其他更改。大多数程序都使用操作系统提供的网络功能,因此当数据回到应用程序时,所有的寻址和传输复杂性都将被删除。当然,有些应用程序会受到更多的影响,但这些应用程序将直接与网络一起工作......而不是您典型的业务线应用程序。
您需要查看应用程序位于OSI model的位置。我认为IP地址是第3层的一部分,因此如果您位于该层之上,则会从操作系统的更改中抽象出您。
有一件事情可能会吸引到你将要连接的玩家的IP地址(帝国时代,星际争霸等)的旧游戏。看起来,除了某种IPv4-IPv6隧道之外,游戏的这种功能将被打破。
最初并不多。对于大多数桌面和Web应用程序,从IPv4切换到V6应该是透明的。
但是最终使用IPv6的网络模型的应用程序将变得更加普遍。例如,大多数用户都在NAT后面,因此网状网络仅适用于技术用户。任何不得不在他的路由器上为P2P软件开放端口的人都知道这不是他妈妈可以使用的。
流媒体和广播也是通过IPv6使事情变得更容易的事情。
我喜欢保持相同的IP地址,而区域间移动的概念(如在飞机上),但正如你所建议的那样,它的水平很低,可能不会对应用程序开发人员有太大的用处/注意。 – RobS 2008-10-16 12:40:39
所有现代网络浏览器(Chrome,IE,Safari和Firefox都会想到)都可以识别IPv6。另外还可以识别IPv6是μTorrent。
亚伦的回答是,恐怕是非常不正确的。是的,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 */
你的理解是不正确的。应用程序仍然必须能够创建套接字,地址结构等,所有这些都具有IPv6特定的变体。 – Alnitak 2008-12-18 15:40:36
不,我认为阿龙Axvig的总结是很公平的。大多数应用程序不应该直接操纵IP地址。套接字接口是一个非常低级的接口:它就像汇编语言。功能强大但非常不便。 – bortzmeyer 2009-01-01 17:54:00