域名的IP地址是怎么来的?

域名的IP地址是怎么来的?

devna

经过上一篇主机的IP地址是怎么来的,主机拿到了自己的IP地址,同时记录了DNS服务器的IP地址。接下来我们就可以浏览感兴趣的网页了,我们会打开浏览器,输入网址,比如www.google.com,然后浏览器会向Google服务器发出HTTP请求,并将得到的HTTP响应呈现给我们。

事实上,浏览器在真正发出HTTP请求前,会先试图拿到域名www.google.com对应的IP地址,然后再通过IP地址访问Google服务器。DNS协议负责将域名转换为IP地址(DNS客户端内置在操作系统中)。


本文中的网络拓扑结构如下:

  • 主机的IP地址是1.0.0.2,其所在局域网的网关路由器R1的IP地址是1.0.0.1
  • DNS服务器的IP地址是2.0.0.2,其所在局域网的网关路由器R2的IP地址是2.0.0.1(DNS服务通常由ISP,即网络提供商提供,电信就是一个ISP)


DNS协议是应用层协议,其体现了网络设计中的端到端原则,即网络的复杂性大部分位于端系统中。在端系统中实现网络协议,可以在保证网络核心精简有效的同时,给予端系统极大的自由。

DNS查询报文(start)

为了得到域名对应的IP地址,浏览器首先会生成一个DNS查询报文,并将www.google.com放入查询报文的问题段中。

应用层的DNS查询报文被放入UDP报文段,目的端口53(DNS服务器默认端口)。

传输层的UDP报文段被放入IP数据报,目的IP地址2.0.0.2(DNS服务器IP),源IP地址1.0.0.2(主机IP地址)。

网络层的IP数据报被放入链路层帧,源MAC地址为主机MAC。由于DNS服务器位于另外一个局域网,所以目的MAC地址会被设置为网关路由器MAC。

但是此时主机还不知道网关路由器的MAC地址,所以在真正组装帧前,需要先用ARP协议得到网关路由器的MAC地址。


ARP协议用于根据IP地址得到对应的MAC地址,其介于网络层和链路层之间,可以大概理解为位于TCP/IP栈的2.5层。

ARP查询报文

为了得到网关路由器的MAC地址,浏览器会生成一个ARP查询报文,其目的IP地址1.0.0.1(网关路由器IP),源IP地址1.0.0.2(主机IP)。

ARP查询报文被放入链路层帧,然后向主机所在局域网广播该帧。

ARP应答报文

网关路由器在接到主机发来的ARP查询报文后,首先从查询报文中抽取目的IP地址,发现与自己的IP地址匹配后,路由器会准备一个ARP应答报文,在应答报文中填入自己的的MAC地址,并指示自己的MAC地址对应IP地址1.0.0.1。

ARP应答报文被放入链路层帧,并发往主机。

DNS查询报文(continue)

主机收到网关路由器发来的ARP应答报文后,从中抽取路由器的MAC地址,将其填入DNS查询报文的目的MAC地址部分。至此,包含DNS查询报文的链路层帧最终组装完毕,该帧被发往网关路由器。

网关路由器在收到包含有DNS查询报文的链路层帧后,将链路层帧的源MAC地址改为网关路由器R1的MAC地址,目的MAC地址改为网关路由器R2的MAC地址(这里还会有一次ARP查询)。

DNS所在局域网的网关路由器R2再次修改链路层帧的MAC地址,最终该帧到达DNS服务器(同样也会有一次ARP查询)。

DNS应答报文

DNS报务器收到DNS查询报文后,从中取出要查询的域名www.google.com。

但是DNS服务器此时也不知道www.google.com对应的IP地址,它会接着向顶层的域名服务器查询:

  1. 向.com顶级域名服务器(TLD)查询该域名,TLD会把.google.com权威域名服务器(SLD)的IP地址返回给DNS服务器
  2. 向SLD查询该域名,SLD将www.google.com的IP地址返回给DNS服务器
  3. DNS服务器将域名到IP的映射缓存起来,并设置一个有效期(TTL)。如果DNS服务器在有效期内收到相同域名的的DNS查询,它会直接将缓存中的结果返回。

最终DNS服务器得到了域名www.google.com对应的IP地址,它会生成一个包含域名到IP地址映射的DNS应答报文,将其发往主机。

浏览器从DNS应答报文中取出www.google.com对应的IP地址,然后就可以向该IP地址发出HTTP请求了。


Report Page