2011-11-23 39 views
-1

簡而言之,我想簡單地解釋一下像Web瀏覽器這樣的應用程序如何解析URL,查詢DNS服務器,然後實際建立TCP連接。如何從URL中構建DNS查詢?

我的例子是這樣的:

http://site.example.com:7902/svn 

現在,在這種情況下,與正常的主機記錄,也不會在DNS查詢簡單地嘗試解決site.example.com部分爲IP地址?

備用端口號是如何進入情況的?我認爲端口號與基本的DNS解析無關。正如我期望的DNS解析site.example.com,然後在形成TCP數據包時使用端口號。然後,我希望目錄/svn可以簡單地在TCP連接建立後傳遞。


現在對於我的動機:

最近,我問爲什麼,我將能夠使用它的外部IP地址和備用端口號來訪問Apache服務器的問題,但有一個問題使用的域時名稱。

所以,我的問題是,這工作得很好:

http://xx.xx.xxx.xxx:7902/svn // this works fine with my external IP 

...但使用DNS當它失敗:

http://site.example.com:7902/svn // this didn't resolve 

帶着這個問題我使用了不同的DNS提供商(而不是dyndns)和一切工作正常。所以我問這個問題,因爲我很好奇爲什麼我不能在我的dyndns主機名上使用備用端口號。

感謝試圖理解這一點......

+0

這裏似乎很好解釋:https://en.wikipedia.org/wiki/Domain_Name_System#Structure –

回答

0

DNS解析的IP地址,時間段(嗯...有不同的類型,如A記錄,CNAME記錄,MX記錄的DNS條目,但他們與你的問題似乎不相關)。

這些端口不是DNS解析的一部分,而是IP地址後面的服務器的一個方面。

嘗試從命令行解析site.example.com,看看你是否得到預期的IP地址。對於Windows和Unix,你可以使用

NSLOOKUP site.example.com

在Windows下,如果你不帶任何參數運行nslookup,您輸入NSLOOKUP的命令模式,在那裏你可以然後鍵入

服務器8.8.8.8

其中 '8.8.8.8' 是你要用於解析的DNS服務器(8.8.8.8是由Google運行的有效DNS服務器,但您可以將任何DNS服務器分配給您)。

然後,您可以只輸入

網站。example.com

並查看IP如何解決。嘗試不同的DNS服務器,看看你是否得到相同的IP。

請注意,DNS更改可能需要一段時間才能傳播。如果IP地址發生變化,全球每個DNS服務器都可能需要幾天的時間才能得到有關更改的通知(儘管目前實踐中,幾個小時足以讓全球大多數用戶獲得更新)。也許IP地址最近改變了,dyndns沒有得到更新呢?

0

你的基本理解是正確的,主要是。在這個過程中,你遺漏的一個(經常是關鍵的)步驟是主機頭的存在。基本上,瀏覽器將包含看起來像這樣的請求標頭:

Host: site.example.com 

...作爲請求的一部分。 Web服務器將使用它來確定如何將請求映射回給定站點。這隻有當有多個站點綁定到給定的IP地址時纔是必要的,但情況往往如此。當您請求IP與名稱時,您可能得到不同結果的原因可能與此主機頭的存在以及Web服務器如何配置爲響應它有關。

要記住的另一件事是路由方面的差異 - 如果你的名字解析爲IP以外的手動輸入,那當然會導致不同的結果。我只提到這一點,因爲有時DNS服務器會根據各種標準發佈不同的IP,例如您在網絡上的位置。

最後,還有代理引入的可能的複雜性。當涉及代理時,所有投注都會關閉,因爲這可能會完全改變請求的處理方式。