目录
看各种面经发现这个问题是一个高频出现的面试问题,但我自己对于浏览器知识点的了解相对薄弱,通过这篇文章来简单了解下浏览器相关知识点。
输入URL按下回车后,浏览器会提取输入的协议、域名、路径等信息,检测输入的URL是不是一个合法的链接或者搜索词。
域名的构成如www.baidu.com.
最后的.为根域名(常忽略不写)
.com:一级域名(也叫顶级域名) com一般为营利组织 还有.net(网络提供商)? .org(非营利组织)
baidu:二级域名
www:主机名
获取输入域名中的ip地址,会通过多层域名解析服务器解析域名获得ip地址。
1.会在本地缓存中查找是否缓存过域名所指的ip地址
2.会检查host文件
3.浏览器发送一个请求到本地DNS服务器,本地DNS服务器进行解析
4.如果本地DNS服务器没有,则本地DNS服务器向根DNS服务器发送请求,进行解析
5.如果根域名解析服务器没有则本地DNS服务器去向顶级域DNS服务器进行解析
6.本地DNS服务器向权威DNS服务器发送请求
seq:序列号 用于标识TCP报文段的顺序
ack:确认号 用于确认已接收到的报文字段的序列号
SYN:用于建立连接,等于1时表示这是一个连接请求或连接接受报文
ACK:确认序号有效 为1时生效,为0时无效
1.第一次握手 客户端发送SYN包(seq=x)到服务器,等待服务器确认
2.第二次握手 服务器接收客户端的SYN包,确认客户的SYN(ack=x+1),同时自己也发送一个SYN(seq=y)包,即ACK+SYN包
3.第三次握手 客户端接收服务器传过来的ACK+SYN包,向服务器发送确认包ACK(ack=y+1)
三次握手完成,客户端和服务器正式开始传递数据
如图所示:
TCP连接建立好后浏览器会向服务器发送http/https请求
完整的请求包含三个部分:请求行+请求头部+请求体
?
在这条博客详细写了浏览器渲染的流程
FIN:请求释放连接
第一次挥手:客户端发送FIN(seq=u)数据包到服务器,用来关闭客户端到服务器的数据连接
第二次挥手:服务器接收FIN包,向客户端发送ACK包(seq=v,ack=u+1,将序列号+1作为本次确认号)
第三次挥手:服务器发送一个FIN(seq=w)包到客户端,请求客户端关闭连接
第四次挥手:客户端收到服务器发送的FIN包,向服务器端发送ACK包(ack=w+1,将序列号+1作为本次确认号,seq=u+1,将确认号作为序列号发送),服务器收到ACK包后关闭连接,客户端等待一段时间后未收到服务器端消息证明其关闭后则关闭连接。
如图所示:
以上就是在浏览器中输入URL到回车会发生的全部过程