我们以浏览器为例。 HTTP请求不需要包含任何IP地址。那么www.example.com会被翻译成TPC层的IP地址吗?
似乎DNS用于告诉TCP要连接的IP地址。那么HTTP调用DNS吗?
使用此堆栈:
HTTP
DNS
TCP
答案 0 :(得分:16)
DNS是一种可以说是位于应用程序级别的协议,但它本身就是一个独立的应用程序,它利用整个TCP / IP“堆栈”。 (LDAP类似,如果这有助于“放置”DNS。)它是一个基本的“电话簿”式的Internet目录,并且绝对没有任何与HTTP协议有关的内容。 DNS使用UDP和TCP传输来查询其他分布式DNS服务器以回答客户端问题,例如“哪些IP地址与名称www.google.com相关联?”。一旦客户端应用程序(如Web浏览器)具有可用于连接的IP地址,DNS就会失效。浏览器打开与IP地址的TCP连接,然后通过该TCP传输会话启动HTTP协议以讨论Web内容。
答案 1 :(得分:7)
在OSI堆栈术语中,DNS在应用层(第7层)中将并行运行到HTTP。
DNS实际上是一个被调用来帮助HTTP应用程序的应用程序,因此不会位于OSI堆栈中的“HTTP”之下。
DNS本身也使用UDP而且很少使用TCP,而这两者都使用IP。
答案 2 :(得分:3)
应用层 - OSI#7
http://en.wikipedia.org/wiki/List_of_network_protocols_(OSI_model)
回复您的最新修改:
DNS不使用UDP发送指示所请求IP的任何详细信息的响应(除非特定大小阈值超过512字节)。
答案 3 :(得分:2)
从技术上讲,客户端计算机是第一个被“询问”哪个IP地址应链接到哪个域名。
其中涉及术语DNS解析器。本质上,它搜索先前在客户端计算机上缓存的查询,如果找到匹配,则返回基本上是正常的DNS查找(不离开本地网络查找答案/地址)。您实际上可以在自己的计算机上编辑此文件,并且Web浏览器的URL实际上会显示您的更改。
答案 4 :(得分:1)
我建议你下载并安装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进行通信。
答案 5 :(得分:0)
关于OSI,它是应用层 - 第7层