一、简答:
1.浏览器查询DNS解析当前URL对应的IP
2.建立TCP链接(三次握手)
3.浏览器发送HTTP请求
4.服务器收到请求并响应HTTP请求并返回报文
5.浏览器收到返回报文并执行渲染(DOM树.CSS树,Render-Tree,布局,重绘)
6.关闭TCP链接(四次挥手)
二、详细解答
1.DNS解析
一个IP地址对应一台服务器,一个域名可能对应多个IP,域名解析服务器会根据一定的规则分配给用户其中一个IP地址,例www.baidu.com(域名)=>DNS解析=>11.22.33.444(IP地址)
查找过程(DNS预解析)
- 向
浏览器缓存
中进行查找,如果无则下一步 - 向
系统缓存
中查找,如果无则下一步 - 向
路由器
中查找DNS缓存,如果无则下一步 - 向
IPS(运行商)
查找DNS缓存,如果无则下一步 - 向
根域名服务器
=>顶级域名服务器
中查找
2.建立TCP链接/三次握手
- 客户端向服务端发消息(你好,我是客户端)
- 服务端回应(你好客户端 ,我是服务端,我能接收到你的消息)
- 客户端回应(你好服务端,你能接收我的消息,我也能接收到你的消息)
三次握手才能确认双向通信是正常的
三次握手四次挥手详答
3.浏览器发送HTTP请求和服务端响应请求
建立完TCP链接就要正式和服务器进行通信了
- 浏览器根据解析到的IP和端口号进行HTTP请求发送,一个HTTP请求一般包括header和body,header包括请求的方式(get,post),请求的协议 (http、https),请求的地址ip,缓存cookie,请求类型等,body则为我们请求的参数
- 服务器根据请求地址和请求参数返回给浏览器对应的请求报文
- get产生一个tcp数据包,post产生两个(get请求时直接发送header和data,post则先发送header,服务器返回100,再发送data,服务器再响应200和返回正文)
Status-Code(状态码)
- 1xx: 指示消息, 收到请求,等待继续操作
- 2xx: 成功 请求成功
- 3xx: 重定向,要完成请求需要继续操作
- 4xx: 客户端错误,连接服务端成功,但请求有语法错误或参数错误,跨域等,请求无法实现
- 5xx: 服务端异常
4.浏览器渲染
浏览器拿到html文件后开始渲染页面,渲染顺序和规则:
- DOM: 解析HTML代码构造DOM树
- CSSOM:解析CSS代码构造CSSOM-CSS树
- Render-Tree: 结合DOM,CSSOM生成Render-Tree-渲染树
- 布局: 根据节点关系和CSS进行定位
- 绘制: 根据计算的好的信息绘制页面
5.四次挥手关闭Tcp连接
-
第一次挥手:Client 的应用进程先向其 TCP 发出连接释放报文段(FIN = 1,序号 seq = u),并停止再发送数据,主动关闭 TCP 连接,进入 FIN-WAIT-1(终止等待1)状态,等待 Server 的确认。
-
第二次挥手:Server 收到连接释放报文段后即发出确认报文段,(ACK = 1,确认号 ack = u + 1,序号 seq = v),Server 进入 CLOSE-WAIT(关闭等待)状态,此时的 TCP 处于半关闭状态,Client 到 Server 的连接释放。
-
第三次挥手:Server 已经没有要向 Client 发出的数据了,Server 发出连接释放报文段(FIN = 1,ACK = 1,序号 seq = w,确认号 ack = u + 1),Server 进入 LAST-ACK(最后确认)状态,等待 Client 的确认。
-
第四次挥手:Client 收到 Server 的连接释放报文段后,对此发出确认报文段(ACK = 1,seq = u + 1,ack = w + 1),Client 进入 TIME-WAIT(时间等待)状态。此时 TCP 未释放掉,需要经过时间等待计时器设置的时间 2MSL 后,Client 才进入 CLOSED 状态。 三次握手四次挥手详答