大致过程
按下回车–>浏览器分析超链接中的url–>DNS解析–>传输–>建立TCP三次握手–>客户端发送HTTP请求-> 服务端返回资源–>释放TCP连接–>浏览器渲染流程
DNS解析流程
- 去找本地浏览器的DNS缓存,如果有则返回结果,没有就进行下一步查找
linux下域名缓存:nscd服务
缓存会有缓存时间,缓存多久可以指定的
[root@b html]# yum install nscd
[root@b html]# service nscd restart #清除缓存 - 查找本地hosts文件(linux: /etc/hosts),可以解析就直接返回地址
- host文件没有找到,就会去请求本地的域名服务器,本地域名服务器有就返回结果。
linux下指定域名解析服务器文件: 数据库引擎
/etc/resolv.conf
第一个指定的nameserver 就是首选dns服务器
剩下的都是备选dns服务器
[root@b html]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
#nameserver 8.8.8.8 - 本地域名服务器没有找到相应记录,如果设置转发查找,就会去转发的服务器上去查询。如果没有设置转发,或者都没有找到,就会去根查找
- *本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。
- *本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(url)给本地DNS服务器。
- *当本地DNS服务器收到这个地址后,就会找url域服务器,重复上面的动作,进行查询,直至找到url主机
传输
(1) 先找到网关进行路由,再找到目标主机所在的局域网
(2)遇到路由器就解封装到第三层,查看源IP目的IP
(3)接下来就是交换机根据mac地址转发到相应的主机,遇到交换机解封装到第二层,查看源mac目的mac(传输的过程就是不断的封装解封装的过程,在这里解封装完了之后,还会重新将它封装好然后发出去)
(4)找到主机之后,一层层解封装到第四层,定位端口,然后交给相应服务进程进行处理
TCP三次握手建立
(1)第一次握手: 客户端向服务器发送一个请求连接报文 报文数据:
SYN:我(client)想跟你进行连接
seq:我(client)这条数据的序列号是100
当服务器解析该条报文为连接请求且可以建立连接时触发第二次握手
(2)第二次握手:
服务器向客户端发送同意连接报文
报文数据:
SYN:我(server)可以跟你(client)进行连接啦
ACK:你(client)的确认号有效
seq:我(server)这条数据的序列号是200
ack:我(server)已经收到你(client)序列号为100的数据了,下次你(client)给我(server)发的数据序列号应该是101哦
此时client已经知道client发送的数据server可以正常收到,且server发送的数据client也可以正常收到,但是server 并不知道client能不能正常的收到server的数据,由此则衍生出第三次握手
(3)第三次握手:
客户端向服务端发送自己收到服务端可以连接的数据了
报文数据:
ACK:你(server)的确认号是有效的
seq:我(client)这条数据序列号是你(server)希望我发的101
ack:我(client)已经收到你(server)序列号为200的数据了,下次你给我发的数据序列号应该是201哦
至此双端已建立稳定的连接了,之后就可以互相发送数据啦~
引用博客:https://blog.csdn.net/klk0011/article/details/114765495
客户端发送HTTP请求
浏览器将用户输入的地址封装成HTTP Request请求报文,发送到服务器。
HTTP请求报文格式:请求行+请求头+空行+请求体
服务端返回资源
服务器收到请求后会返回响应报文,并在响应体中返回相关资源。
HTTP响应报文格式:状态行+响应头+空行+响应体
释放tcp连接(四次挥手)
浏览器渲染页面
(1)HTML被HTML解析器解析成DOM Tree, css则被css解析器解析成CSSOM Tree(并行解析)。
(2)DOM Tree和CSSOM Tree解析完成后,被合并到一起,形成渲染树(render Tree)。
(3)重排:节点信息计算,即根据渲染树计算每个节点的几何信息(大小及位置)。
(4)重绘:渲染绘制,即根据计算好的信息绘制整个页面,渲染出最终的页面。
原文链接:https://blog.csdn.net/CC_Together/article/details/105579797