我們以瀏覽器爲例。 HTTP請求不需要包含任何IP地址。那麼www.example.com會被翻譯成TPC層的IP地址嗎?在協議棧的哪一層DNS發生?
編輯
似乎像DNS是用來告訴TCP要連接到哪個IP地址。 HTTP是如何調用DNS的?
有了這個堆棧:
HTTP
DNS
TCP
我們以瀏覽器爲例。 HTTP請求不需要包含任何IP地址。那麼www.example.com會被翻譯成TPC層的IP地址嗎?在協議棧的哪一層DNS發生?
似乎像DNS是用來告訴TCP要連接到哪個IP地址。 HTTP是如何調用DNS的?
有了這個堆棧:
HTTP
DNS
TCP
DNS是一種協議,可以說是坐落在應用程序級別,但它是一個單獨的應用程序,並且使用整個TCP/IP「堆棧」。 (LDAP是相似的,如果這有助於「放置」DNS)。它是一個基本的「電話簿」 - 類似於Internet的目錄,並且絕對沒有特定的HTTP協議。 DNS使用UDP和TCP傳輸來查詢其他分佈式DNS服務器來回答客戶的問題,例如「什麼IP地址與名稱www.google.com關聯?」。一旦客戶端應用程序(如Web瀏覽器)具有可與之連接的IP地址,DNS就不在圖片中。瀏覽器打開一個到IP地址的TCP連接,然後通過該TCP傳輸會話啓動HTTP協議以對話網頁內容。
關於OSI它是應用層 - 層7
APPLI陽離子層 - OSI
http://en.wikipedia.org/wiki/List_of_network_protocols_(OSI_model)
的#7在回答您的最新編輯:
不DNS使用UDP發送指示所請求的IP的任何細節(除非具有一定規模的閾值的響應跨越512字節)。
我的意思是DNS的結果用於TCP通信。 我並不是說與DNS服務器的通信發生在TCP上。 – user2939415
我建議你下載並安裝wireshark。運行wireshark並訪問一些網站。你可以看到DNS是如何工作的。 DNS(如前所述)在應用程序層進行處理。幾乎所有高級語言都有函數「gethostbyname」的庫。
Python 3.3.3 (default, Nov 26 2013, 13:33:18)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.gethostbyname("stackoverflow.com")
'198.252.206.16'
以例如一個瀏覽器,使用某種形式的gethostbyname的從DNS服務器獲取所述主機後,標準的TCP套接字連接建立和瀏覽器/網絡服務器通信通過HTTP。
從技術上講,客戶端計算機是第一個被「問」的IP地址應該鏈接到哪個域名。
這涉及術語DNS解析器。從本質上講,它會搜索客戶端計算機上緩存的以前的查詢,並且如果它找到匹配,則它將返回基本上是常規DNS查找的內容(無需離開本地網絡即可找到答案/地址)。您可以在自己的計算機上實際編輯此文件,並且網頁瀏覽器的網址實際上會顯示您的更改。
HTTP請求是否啓動了此過程? – user2939415
在OSI協議棧術語中,DNS並行運行到應用層(第7層)中的HTTP到。
DNS實際上是一個被調用來幫助HTTP應用程序的應用程序,因此不會位於OSI堆棧中「低於」HTTP的位置。
DNS本身也使用UDP和更少使用TCP,兩者都使用IP。
,但在技術上不是DNS服務器在另一個網絡,所以要從HTTP到DNS我們直接從應用程序到應用程序或從應用程序到傳輸到網絡到物理然後到DNS的物理.... @Alnitak – iajnr
http://en.wikipedia.org/wiki/List_of_network_protocols_%28OSI_model%29 –