2011-03-11 57 views
0

我很惊讶地发现一个域名可以有很多IP地址。例如,这里是我的结果Dns.GetHostAddresses("www.google.com")如何将域名解析为单个IP地址?

{System.Net.IPAddress[6]} 
    [0]: {74.125.127.147} 
    [1]: {74.125.127.99} 
    [2]: {74.125.127.103} 
    [3]: {74.125.127.104} 
    [4]: {74.125.127.105} 
    [5]: {74.125.127.106} 

(因人而异;地址似乎定期更改)

哪里做这些不同的地址从何而来,以及应该如何选择连接到一个IP地址?

回答

0

IP地址来自与您查询的域名www.google.com相关联的DNS服务器。这将是Web浏览器获取服务器IP地址连接的相同过程。

至于要连接到哪个IP地址,我想他们都是多余的,你应该只是连接到第一个,但这只是猜测,我并不确定。

2

除非有明确绑定到IP的理由,否则在进行连接时应使用DNS解析。

至于“他们从哪里来”,这是由任何数量的基础设施决定回答。这是DNS的强大之处,因为负载平衡,缓存,交付等系统可以动态地从任何数量的源提供域(example.com),而无需您(客户端)担心该实现。

多个DNS可以是多个服务器,不同的数据中心,缓存网络等等,这取决于任何数量的因素。

+0

“你应该使用DNS来解决” - 这不正是Dns.GetHostAddresses所做的吗?问题是,它不是解决一个地址,而是解决了很多问题。 – Qwertie 2011-03-11 21:12:22

+0

当然,但你想做什么?大多数客户端(网络,肥皂等)将要求您提供主机名与IP地址。 – 2011-03-11 21:24:06

+0

我想要做的是了解域名是应该如何解决的。我对“为什么”感兴趣。我注意到,如果我使用TcpClient进行连接,但是存在一个构造函数重载,它接受一个字符串并允许域名或IP地址,因此对于该连接方法,不需要手动解析域。 – Qwertie 2011-03-11 21:42:21

1

最有可能使用某种RoundRobin。

您只能依赖域名,除非域名在您的控制之下。

0

你可以做两件事情:

  1. 使用System.Net.IPAddress [0]权 蝙蝠。
  2. 您可以ping所有6和 查看哪一个具有最佳响应 时间,缓存该值并尝试 稍后使用它。