how explorer works after typing URL
一道面试的经典问题,但其实也有很多地方值得探究。
DNS解析
DNS 服务器分为四类
- 根域名服务器 (root Server)
- 顶级域名服务器 (TLD Server)
- 权威域名服务器 (Authoritative Server)
- 本地域名服务器 (Local Server)
如某客户机想要获知域名为y.abc.com的主机IP地址,域名的解析过程(共使用8个UDP报文),如下:
- 客户机向其
local Server
发出DNS
请求报文 local Server
收到请求后,查询本地缓存,如果没有该记录,则以DNS客户
的身份向root Server
发出解析请求root Server
收到请求后,判断该域名属于.com
域,将对应的TLD
顶级域名服务器dns.com的IP地址返回给local Server
local Server
向TLD
(顶级域名服务器)发出解析请求报文TLD
dns.com收到请求后,判断该域名属于abc.com域,故将对应的Authoritative Server
dns.abc.com的IP地址返回给local server
local Server
向权威域名服务器dns.abc.com发起解析请求报文。Authoritative Server
dns.abc.com收到请求后,将查询结果返回给local Server
local Server
将查询结果保存到本地缓存,同时返回给客户机
常见DNS记录类型:
- A: 地址记录(Address),返回域名对应的 IP 地址
- NS: 域名解析服务器记录(Name Server),如果要将子域名指定某个域名服务器来解析,需要设置NS记录。
- AAAA: 对应的 IP 地址为 IPV6。
- CNAME: 域名的别名,好处是当域名发生变化时,用户侧的访问方式可以不发生变化。
HTTP连接
我们在浏览器输入 http://www.baidu.com 之后,按下回车键,地址会变为 https://www.baidu.com,按一下`F12`看一下network,我们会发现状态码是302,那这里到底做了什么呢?
由于我们键入的是 http,所以浏览器会首先找到服务器的80
端口,进行tcp
连接,然后服务器会返回一个301/302
状态码,表示重定向,同时在服务器响应头还会添加HTTP-Strict-Transport-Security
, 简称HSTS
,里面有 max-age
,用户访问时,服务器种下这个头,下次如果使用http
访问,只要max-age
未过期「客户端检验」,客户端会进行内部跳转,可以看到307
Redirect Internel 的响应码。然后就直接变成和443
端口建立连接,走https
连接。
所以,下次看到状态码如果是307
,说明对应的网站的max-age
还没到期,浏览器内部进行了跳转,直接和服务器的443
端口进行连接了。
HTTPS的连接全过程
阮文峰的博客写的介绍得很清楚:
SSL/TLS介绍
协议运行机制
为何需要数字证书
简而言之,https = tls/ssl + httpHTTP
的传输实际上是两个过程:
- 验证过程,使用
RSA
非对称加密+Hash
算法;- 客户端给出版本协议号、一个客户端生成的随机数
Random
以及客户端支持的加密方式; - 服务器端确认双方使用的加密方式和加密通信协议版本,并给出数字证书「包含了服务器的公钥」,以及服务器生成的一个随机数
Random
; - 客户端确认数字证书的有效性,然后生成一个新的随机数,并且这个随机数使用数字证书中的公钥加密,发给服务器,客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的
Hash
值,用来供服务器校验。 - 服务器使用自己的私钥,进行解密。然后通知客户端握手阶段结束,同时将之前的信息
Hash
后发给客户端,让客户端校验。
- 客户端给出版本协议号、一个客户端生成的随机数
至此,验证过程就结束了,客户端会和服务器根据约定的加密方式,使用前面三个随机数,生成“对话密钥”,然后根据这个对话密钥进行对称加密,传输数据。
- 传输过程,使用
AES
对称加密。