假设我们有一个纯IPv6网络。 套接字应用程序使用getaddrinfo按主机名查找HOST1,并获取HOST1的IP地址之一作为第一个响应。 为什么要在返回的地址上循环?这不是路由器的责任或 HOST1的TCP / IP堆栈或本地TCP / IP堆栈,可以通过HOST1上的不同网络接口找到到HOST1的备用路由?
您会认为找到通过其名称已知的主机的路由是计算机网络基础结构的最基本功能,而不是套接字应用程序。
答案 0 :(得分:3)
getaddrinfo()可以为您提供真正不同主机名称的地址,因此如果一台主机关闭,您仍然可以访问该服务。
但互联网非常愚蠢,它不是一个智能网络,因为他们在旧的电信网络中尝试过。互联网将功能推向边缘,路由器只查看数据包中的IP地址,并发出最佳管道。这将确实解决了该IP地址的一条路径被破坏的问题,路由器将在另一条路径上发送数据包。
但是,您的套接字应用程序边缘负责决定您要将数据包发送到哪个IP地址,以及您是否通过查询DNS,LDAP,静态配置来确定要将数据包发送到哪个IP地址,配置文件或什么不是,不关心网络。
您希望循环使用getaddrinfo()结果,因为解析名称可以为您提供不同的IP地址,属于世界各地提供相同服务的不同主机,并且可以通过IPv4或IPv6进行访问。 / p>
答案 1 :(得分:0)
不,最基本的功能是将数据包转发到目标主机。互联网设计旨在让路由器专注于最基本的功能,并使端点尽可能地完成其余功能。
那么,这个位可以并且应该留给端点吗?我想是的,因为端点没有额外的工作,并且对于路由器来说将是相当多的额外工作。
端点需要代码才能尝试多个地址,以支持v4和v6。并且路由器必须跟踪哪些地址组成主机(无论“主机”是什么意思)。
答案 2 :(得分:0)
名称解析属于与路由不同的层。在技术方面,您的问题假设路由器是应用程序层网关,效率低下。最好从一些文献开始,概述TCP / IP网络。