前言
当我们想浏览某一个网页时,一般都会输入对应的URL,这个其实就是请求对应资源的过程。那么这个过程实质上经历了什么呢?
流程概述
- 查找IP - 客户端根据域名查找对应的IP
- 建立连接 - 客户端根据IP地址与服务器链接
- 相互通信 - 客户端与资源服务器通信
- 断开连接 - 客户端与资源服务器断开连接
具体流程详解
1.查找IP
- 浏览器搜索自己的 DNS 缓存,查找成功返回其对应 IP 地址,失败则进行下一步;
- 搜索系统中的 DNS 缓存,查找成功返回其对应 IP 地址,失败则进行下一步;
- 搜索系统中的 hosts 文件,查找成功返回其对应 IP 地址,失败则进行下一步;
- 系统发送一个请求到路由器上,路由器查找其缓存,查找成功返回其对应 IP 地址,失败则进行下一步;
- 系统将域名发送至 LDNS(本地域名服务器),查找成功返回其对应 IP 地址,失 败则 LDNS 向 Root Name Server(根域名服务器)发起请求获得域的顶级域名 服务器地址,然后依次请求获得各级域名服务器地址,最后获得域名对应 IP 地址;
- LDNS 将 IP 地址返回给操作系统并缓存起来;
- 系统将 IP 地址返回给浏览器并缓存起来;
- 浏览器获得 IP 地址,发起建立连接的请求。
2.建立连接 - 三次握手
浏览器获取相应的IP之后,就会对目标服务器发起建立连接的请求,建立连接主要分三步,就是常说的三次握手:
- 浏览器发送想和服务器建立连接的请求(你好,可以认识一下么?)
- 服务器发送同意建立连接的响应(你好,当然可以啊!)
- 浏览器向服务器发送确认受到响应的请求,并建立连接。(很高兴认识你。)
3.相互通信
建立连接之后,本次连接的主要目的来了,就是数据交互,这里主要说客户端请求数据
- 客户端发送一个请求页面资源的请求
- 服务器返回对应的资源
- 客户端请求到相应的资源之后,进行页面渲染之类的活,可能会继续请求css、js等资源
4.断开连接
数据通信之后,要通过“四次挥手”断开连接
- 浏览器向服务器发送想断开连接的请求 (我要走啦);
- 服务器向浏览器发送收到请求的响应 (我知道啦);
- 服务器向浏览器发送断开连接的请求;(可以了,我走啦)
- 浏览器断开连接,并向服务器发送一个反馈请求,服务器收到后断开连接 (好的,拜拜)。
注意
断开连接为为什么必须这么繁琐的四次挥手?
主要是因为当客户端告诉服务器想断开连接的时候,服务器的数据不一定已处理完毕,所以服务器是先告诉客户端说已经收到了它想断开连接的请求,然后当服务器中数据处理完毕时,便断开请求并通知客户端,客户端收到后也断开请求并通知服务器。