概述
当我们点击一个网址后,它能够呈现在我们的面前,在这个过程中,究竟发生了什么。
整体流程如下:
- DNS查询
- 三次握手
- TLS/SSL握手
- HTTP请求
- 四次挥手断开连接
详细过程
1. DNS查询
浏览器会使用DNS协议返回域名所对应的的IP地址。
DNS是一个应用层协议,并且他选择的运输层协议是UDP。
在DNS服务器上,域名和和他所对应的IP地址存储为一条记录。
所有的记录都不可能只存储在一台服务器上,无论多么强大的服务器都扛不住全球上亿次的并发量。
大致来说,有三种DNS服务器,跟服务器,顶级域DNS服务器和权威DNS服务器。
顶级域DNS服务器主要负责诸如com、org、net等顶级域名。
跟DNS服务器存储了所有顶级域DNS服务器的IP地址,也就是说可以通过根服务器找到顶级域服务器。
然后可以选择一个顶级服务器,请求该顶级域服务器,顶级服务器拿到域名后应当做出判断并给出负责当前域的权威服务器地址。以百度为例的话,顶级域服务器将返回所有负责 baidu 这个域的权威服务器地址。
选择一个权威服务器地址,向他继续查询相应域名对应的IP地址。最终权威服务器会返回具体的IP地址。
实际上DNS是有缓存功能的,首先会从现有的缓存中找。
上图是一个请求案例(假设请求www.xxxx.com):
- 主机向本地DNS发送查询报文,入如果本地服务器缓存中有,将直接返回结果。
- 本地服务器返现缓存中没有,于是从内置的内部根服务器列表中选择一个发送查询报文
- 根域名解析一下这个后缀名,告诉本地服务器负责.com的所有顶级服务器列表
- 本地服务器选择一个顶级域服务器继续查询,.com顶级服务器拿到域名后继续解析,返回负责.xx域的所有权威服务器列表。
- 本地服务区从返回的权威服务器选择一个再次发送报文,最终会从某一个服务器上得到具体的IP地址
- 返回主机结果
例如查询www.linux178.com这个域名的IP
运营商的DNS服务器首先查找