发出Web请求到服务器都经历了什么(二)服务器的IP是多少?

110 阅读2分钟

客户端知道了自己的IP之后,总得知道服务器的IP才能访问吧! 运行Web应用后,用户在浏览器输入的是域名,需要通过DNS获得IP地址。

域名

我们常见的www.baidu.com等域名其实应该补全应该为www.baidu.com.,从右到左依次为 .根域名服务器,com顶级域名服务器(Top Level Domain TLD),baidu权威域名服务器(Authoritative)。

根是由13个根服务器组成的,13个域名,但是节点很多(1k多个)。大多数的节点的IP是一样的,通过任播找到最近的需要的(根域名服务器/IP)的节点。

DNS

DNS帮我们从域名解析为IP地址。

DNS与四层协议

DNS采用UDP,DNS传输的时候,传输层UDP,网络层DNS服务器的IP可以通过DHCP获取到。但到了数据链路层,目标的MAC地址是多少这时候我们就需要ARP协议来获取。

DNS域名解析过程

一般我们都是通过浏览器输入的域名进行访问。

  1. 查询缓存

浏览器看看自己和本地主机文件里面有没有对应的记录,如果有记录就不需要查询了。

  1. 发送解析请求

如果缓存中没有,我们需要解析器(相当于DNS客户端)向DNS服务器发送请求。浏览器发送解析请求gethostbyname("域名"),解析器帮助浏览器调用系统网络功能,向DNS服务器发送请求。

  • 浏览器发送解析请求
  • 解析器收到浏览器发送解析请求,向DNS服务器发送请求
  • DNS服务器查询本地缓存,如果有直接返回IP
  • DNS查询根服务器域名,之后再依次查找顶级域名服务器、权威域名服务器。

注:可以用nslook可视化这个过程。nslook的type为ns(nameserver),查询域名为.(根域名)。type为a(ipv4)。

  • 本地DNS服务器收到根域名服务器IP后,向顶级域名服务器发送插查询请求,收到顶级域名服务器返回后向权威服务器发送请求,权威服务器返回IP地址,缓存并返回给解析器。【迭代】
  • 但权威服务器也可能返回的是CNAME类型,CNAME为别名返回的还是域名,如果是域名那就再进行解析直到获得IP地址。
  • 解析器把地址给浏览器

本地DNS服务器和解析器采用递归的方式传输,三层域名服务器和本地DNS服务器之间通过迭代的方式传输。 3. 浏览器就可以通过IP地址进行访问了