从两方面分析:网络通信+页面渲染
如果想要了解TCP/IP推荐两篇:TCP/IP&&TCP/IP
DNS(域名系统【Domain Name System)
网络通信部分
第一步:DNS解析URL对应的IP(输入URL,可能为域名,可能为IP,如果是域名,要进行DNS解析,解析为该域名对应的IP地址);
DNS解析:
- 客户端先检查host文件里是否有这个网址映射关系,有,结束完成解析,进行第二步,没有继续查找
- 查找本地DNS解析器缓存是否有这个网址映射关系,有,结束完成解析,进行第二步,没有继续查找
- 查找本地DNS服务器,如果要查询的域名,包含在本地配置区域资源中,结束完成解析,进行第二步,没有由本地域名服务器向根域名服务器发起查询(迭代查询)
- 迭代查询,按根域服务器 ->顶级域,.cn->第二层域,hb.cn ->子域,www.hb.cn的顺序找到IP地址。
第二步:获取到IP之后,建立TCP链接,三次握手。
TCP的三次握手:
第一次握手:客户端A将标志位SYN置为1,随机产生一个值为seq=J(J的取值范围为=1234567)的数据包到服务器,客户端A进入SYN_SENT状态,等待服务端B确认;
第二次握手:服务端B收到数据包后由标志位SYN=1知道客户端A请求建立连接,服务端B将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端A以确认连接请求,服务端B进入SYN_RCVD状态。
第三次握手:客户端A收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务端B,服务端B检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端A和服务端B进入ESTABLISHED状态,完成三次握手,随后客户端A与服务端B之间可以开始传输数据了。
第三步:向服务器发送HTTP请求。HTTP请求包括请求报头和请求主体两个部分,其中请求报头包含了至关重要的信息,包括请求的方法(GET / POST)、目标url、遵循的协议(http / https / ftp…),返回的信息是否需要缓存,以及客户端是否发送cookie等。
第四步:服务器处理请求。
第五步:浏览器接收HTTP响应。根据不同的状态码处理请求。成功进行第六步。
至此,网络通信部分结束,进行页面渲染
第六步:渲染页面,在解析过程中,如果遇到请求外部资源时,如图片、外链的CSS、iconfont等,会再次发送请求,请求过程是异步的,并不会影响html文档进行加载
第七步:关闭TCP连接(四次挥手)
- 第一次挥手:客户端想分手,发送消息给服务器;
- 第二次挥手:服务器通知客户端已经接受到分手请求,但还没做好分手准备;
- 第三次挥手:服务器已经做好分手准备,通知客户端;
- 第四次挥手:客户端发送消息给服务器,确定分手,服务器关闭连接。
来源:CSDN
作者:ranran_sun
链接:https://blog.csdn.net/ranran_sun/article/details/104589441