客户端知道了自己的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域名解析过程
一般我们都是通过浏览器输入的域名进行访问。
- 查询缓存
浏览器看看自己和本地主机文件里面有没有对应的记录,如果有记录就不需要查询了。
- 发送解析请求
如果缓存中没有,我们需要解析器(相当于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地址进行访问了