【问题标题】:Why is addrinfo loop needed?为什么需要 addrinfo 循环?
【发布时间】:2013-10-07 08:21:45
【问题描述】:

假设我们有一个纯 IPv6 网络。 套接字应用程序使用 getaddrinfo 通过其主机名查找 HOST1,并获取 HOST1 的一个 IP 地址作为第一个响应。 为什么要在返回的地址上循环?这不是路由器的责任还是 HOST1 的 TCP/IP 堆栈或本地 TCP/IP 堆栈以查找到 HOST1 的备用路由,可能通过 HOST1 上的不同网络接口?

您可能会认为查找到名称已知的主机的路由是计算机网络基础设施的最基本功能,而不是套接字应用程序。

【问题讨论】:

    标签: ipv6 getaddrinfo


    【解决方案1】:

    getaddrinfo() 可以为您提供一个名称的地址,该名称实际上是一个不同的主机,因此如果一个主机关闭,您仍然可以访问该服务。

    但是互联网很笨,它不是他们在旧电信网络中尝试的智能网络。互联网将功能推向边缘,路由器只需查看数据包中的 IP 地址并发出它可以发送的最佳管道。这确实可以解决通往该 IP 地址的一条路径中断的问题,路由器将在另一条路径上发送数据包。

    但是edge,你的socket应用,负责决定你想发包到哪个IP地址,以及你是否想清楚发包到哪个IP地址,通过查询DNS,LDAP,静态配置,配置文件与否,与网络无关。

    您可能希望循环查看 getaddrinfo() 结果,因为解析名称可以为您提供不同的 IP 地址,它们属于世界各地提供相同服务的不同主机,并且可以通过 IPv4 或 IPv6 访问。

    【讨论】:

      【解决方案2】:

      不,最基本的功能是将数据包转发到目标主机。互联网设计旨在让路由器专注于最基本的功能,并让端点尽可能多地完成其余的工作。

      那么,this 位可以而且应该留给端点吗?我认为是的,因为它对端点没有额外的工作,对路由器来说将是相当多的额外工作。

      无论如何,端点都需要代码来尝试多个地址,以支持 v4 和 v6。并且路由器必须跟踪哪些地址集组成了一个主机(无论“主机”是什么意思)。

      【讨论】:

        【解决方案3】:

        名称解析与路由属于不同的层。用技术术语来说,您的问题假设路由器是应用层网关,效率低下。您最好先从一些能够概述 TCP/IP 网络的文献开始。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-17
          • 1970-01-01
          • 2021-07-06
          • 2022-01-05
          • 2019-08-21
          • 2012-08-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多