一次完整的浏览器请求的流程

1.完整的流程

输入URL(Uniform Resource Locator): 用户在浏览器地址栏中输入要访问的网址或点击链接。

DNS解析: 浏览器通过域名系统(DNS)将输入的域名解析为相应的IP地址,以便与服务器建立连接。

建立TCP连接: 使用HTTP协议,浏览器通过TCP(Transmission Control Protocol)与目标服务器建立连接。这是一个三次握手的过程,确保数据可靠地传输。

发起HTTP请求: 浏览器向服务器发送HTTP请求,请求特定的资源,如网页、图像、样式表等。

服务器处理请求: 服务器接收到请求后,根据请求的内容进行相应的处理,可能涉及数据库查询、业务逻辑处理等。

服务器发送HTTP响应: 服务器将处理结果封装在HTTP响应中,并发送回浏览器。

浏览器接收响应: 浏览器接收到服务器的响应后,根据响应头中的信息判断响应类型(HTML、CSS、JavaScript等),并开始处理。

解析HTML: 如果响应内容是HTML,浏览器开始解析HTML文档,构建DOM(Document Object Model)树。

加载外部资源: 浏览器在解析HTML过程中遇到外部资源链接(如CSS、JavaScript、图片等),会发起新的请求去获取这些资源。

执行JavaScript: 如果页面包含JavaScript代码,浏览器会执行这些脚本,可能会修改DOM结构、发送Ajax请求等。

渲染页面: 浏览器根据DOM树和CSS样式表进行页面布局和渲染,最终呈现给用户。

建立持久连接: 浏览器和服务器之间可能会保持持久连接,以便在后续的请求中更快地传输数据。

页面加载完成: 所有资源都被加载和渲染完毕后,页面加载完成,用户可以与页面进行交互。

2.具体分析

2.1 DNS解析

DNS(Domain Name System)解析是将人类可读的域名转换为计算机可理解的IP地址的过程。以下是DNS解析的主要步骤:

本地缓存查找: 浏览器首先会检查本地的DNS缓存,看是否已经解析过这个域名。如果在缓存中找到了对应的IP地址,并且缓存尚未过期,就可以跳过后续的步骤直接使用这个IP地址。

操作系统缓存查找: 如果本地缓存中未找到对应的IP地址,浏览器会检查操作系统的DNS缓存。类似于本地缓存,如果在操作系统缓存中找到了对应的IP地址,就会直接使用。

递归查询: 如果在本地和操作系统缓存中都没有找到对应的IP地址,浏览器将发起一个递归查询。它会向本地配置的DNS服务器发送一个DNS请求,并等待该服务器的响应。

根域查询: 如果本地DNS服务器无法直接提供域名解析,它将向根域名服务器发出请求。根域名服务器负责存储整个DNS层次结构的顶层信息,它返回一个指向顶级域(如.com、.net)的权威域名服务器的IP地址。

顶级域查询: 本地DNS服务器获得顶级域名服务器的IP地址后,将向该服务器发送请求,获取下一级域的权威域名服务器的IP地址。例如,如果域名是example.com,那么顶级域名服务器将返回.com域的权威域名服务器的IP地址。

权限域查询: 本地DNS服务器继续向下查询,直到找到负责目标域的权威域名服务器。每一步都会获取下一级域的权威域名服务器的IP地址。

目标域查询: 本地DNS服务器最终向目标域的权威域名服务器发送请求,获取该域名对应的IP地址。

结果返回: 目标域名服务器将域名对应的IP地址返回给本地DNS服务器,本地DNS服务器再将这个结果返回给浏览器。

本地缓存更新: 本地DNS服务器将刚刚解析的域名和对应的IP地址存储到本地缓存中,以便在下一次相同的解析请求中加速解析过程。

2.2 建立tcp请求,说明一下三次握手和四次挥手

一些字段的含义

SYN:简写为S,同步标志位,用于建立会话连接,同步序列号;
ACK: 简写为.,确认标志位,对已接收的数据包进行确认;
FIN: 简写为F,完成标志位,表示我已经没有数据要发送了,即将关闭连接;
PSH:简写为P,推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
RST:简写为R,重置标志位,用于连接复位、拒绝错误和非法的数据包;
URG:简写为U,紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;

三次握手

1.客户端发送建立请求  SYN=K
2.服务端接受到请求之后返回  SYN=J ACK = K+1
3.客户端接受到请求后 发送 ACK=J+1	

为什么要三次握手

因为防止服务端接受到过去的链接,实际客户端已经断开了

四次挥手

1.客户端发送断开请求 FIN = K 
2.服务端接受请求后发送 ack = K+1 
3.服务端发送请求 FIN = J
4.客户端接受请求之后发送  ack = J+1 ACK = 1

为什么要四次挥手

因为tcp是双全工的,前两次挥手是客户端表示我已经发送完成,后两次是服务端发送完成。

为什么要等待2MSL?

1.保证tcp链接可以准确关闭
2.保证信息不会给传递给下次链接,消息存活时间是MSL

tcp是什么时候断开链接的

1.如果只是简单的一次 就会立刻断开
2.如果是多次复用要看设置 但也不会一直链接
3.http keep_live 可以设置链接时间

3.借鉴参考的文章

一文彻底搞懂 TCP三次握手、四次挥手过程及原理
TCP三次握手详解-深入浅出(有图实例演示)

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值