DNS
什么是DNS?
DNS:域名系统,存储IP地址与域名之间的映射关系,提供域名解析,通过域名获取服务器的IP地址的服务
- 域名:服务器地址的别名,但是最终通过域名访问服务器的时候还是进行解析IP地址访问服务器
- 域名服务器:记录所有服务地址与域名的映射关系,采用分布式存储,分摊访问压力
- 域名服务器划分:根域名服务器,顶级域名服务器,二级域名服务器,三级域名服务器
- 域名划分例子:顶级域名(.com /.org /.cn),二级域名(.baidu.com),三级域名(.zhidao.baidu.com)
DNS解析流程
- 主机向本地域名服务器的查询一般为递归查询:如果主机查询的IP地址,本地域名服务器不知道,那么本地域名服务器就向其它根域名服务器继续发出查询请求报文,代替主机进行查询,所以,递归查询返回的查询结果要么返回正确的IP地址,要么报错
- 本地域名服务器向根域名服务器的查询为迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么返回正确的Ip地址,要么告诉本地服务器下一个应该向那个域名服务器进行查询,然后返回给本地域名服务器,就是每查询一次都返回给本地域名服务器
在浏览器中输入url发生了什么?
大体来说
1.域名解析
2.根据http协议格式组织http请求数据
3.搭建tcp客户端与服务器建立连接,发送请求数据
4.等待响应,得到响应之后进行解析渲染
细节来说
1.输入一个url再回车
2.浏览器查找域名的IP地址,域名解析(递归获取)
3.浏览器给web服务器发送一个http请求
4.服务器会给浏览器发送一个301永久重定向响应
为什么服务器会进行重定向而不是直接发送用户希望看到的网页内容呢?
使用不同的地址会造成缓存友好性变差,当一个页面存在好几种名称也意味着它有可能再
缓存中也出现了好几次
5.浏览器跟踪重定向地址
获取了新的地址后,会向这个新地址发送获取请求
6.服务器处理请求
服务器接收到http请求之后,会处理然后返回一个响应
7.服务器发回一个HTTP响应
这个响应会告诉浏览器应该怎么做
8.浏览器开始显示HTML
9.浏览器发送获取嵌入在HTML中的文件(图片表格之类)的请求
请求时都会发生和HTML读取类似过程,所以浏览器会在DNS中查找这些域名,发送域名,重定
向等操作,对于静态文件来说,浏览器会对其进行缓存,所以有些文件可能不需要通过服务器来
获取,而是可以通过本地缓存中读取
10.浏览器发送异步(AJAX)请求
在页面显示完成之后,客户端与服务器仍建立着连接,所以在有些支持聊天的网站,为了更新好友的状态,浏览器的JavaScript代码会给服务器发送异步请求,这个请求会发送给特定的地址(是一个按照固定格式的获取或发送请求)