浏览器通过域名找出其IP地址(DNS解析)
客户端先检查本地是否有对应的IP地址,若找到则返回响应的IP地址。若没找到则请求上级DNS服务器,直至找到或到根节点。(浏览器缓存
→系统缓存
→路由器缓存
→ISP DNS缓存
→从根域名服务器递归搜索
) 注意⚠️:
- URL和域名的区别:域名:需要注册和购买,域名经过解析为ip地址。。。就是说用ip地址和域名都可以访问同一资源。url:简单说网址=ip或域名 + 端口号 + 资源位置 + 参数 + 锚点
- IP 地址与域名的关系:多个提供相同服务的服务器 IP 可设置为同一个域名,但同一时刻一个域名只能解析出一个 IP地址。
一个 IP 地址可以绑定多个域名。 - 若修改hosts文件,可自己指定域名的IP,绕过DNS。
浏览器和服务器建立连接(TCP/TP三次握手)
- 客户端发送
SYN
包到服务器,等待服务器确认接收。(浏览器问服务器:我可以连接你吗?) - 服务器确认接收
SYN
包并确认客户的SYN
,并发送回来一个SYN+ACK
的包给客户端。(服务器:好,连吧) - 客户端确认接收服务器的
SYN+ACK
包,并向服务器发送确认包ACK
,二者相互建立联系完成TCP三次握手后,就可以开始传输数据了。(浏览器:嗯,那我连接了)
浏览器向服务器发送HTTP请求
建立连接成功后,浏览器给web服务器发送一个HTTP请求。
服务器接受到请求并返回HTTP响应
服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器
浏览器解析渲染页面
浏览器根据响应先解析HTML文件构建DOM树,然后解析CSS文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。
客户端和服务端发送四次数据包断开连接(四次挥手)
- 客户端主动关闭连接,发送
FIN
报文给服务器,然后进入FIN_WAIT_1
状态。(浏览器问服务器:不早了,我该走了) - 服务器收到
FIN
报文,回应一个ACK
报文,进入CLOSED_WAIT
状态;客户端收到FIN
报文,进入FIN_WAIT_2
状态。(服务器:知道了) - 服务器向客户端发送FIN报文,进入
LAST_ACK
状态。(服务器:我也该走了) - 客户端收到
FIN
报文后,向服务器发送ACK
报文,进入TIME_WAIT
状态,等待2MLS
(它是任何报文在网络丢弃前在网络内的最长时间)后客户端就自动关闭。服务器在接收数据后经过判断无误后,服务器进入关闭状态。(浏览器回复:嗯,好的,然后等待2MLS。同时服务器那边收到浏览器的回复后断开连接)