2011-03-11 56 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和 查看哪一個具有最佳響應 時間,緩存該值並嘗試 稍後使用它。