在地址栏中输入URL地址或域名,到返回页面做了哪些事?
声明:转载于微信公众号:程序员王不错
以打开浏览器在地址栏输入www.baidu.com为例,整个过程如下:
(1)解析URL。
解析URL的目的是将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源。
(2)应用层进行DNS域名解析获取IP地址
通过DNS将域名解析成IP地址。解析过程按照浏览器缓存、系统缓存、路由器缓存、本地域名服务器缓存、ISP(运营商)缓存、根域名服务器、顶级域名服务器、主域名服务器的顺序,逐步读取缓存,直到拿到IP地址。
(3)应用层封装HTTP请求报文
拿到IP地址,就知道了目标服务器在哪里。应用层生成针对目标服务器的HTTP请求报文,请求报文包括起始行、请求头和请求体三部分。
起始行包括请求方法,一般浏览器地址栏发送的是get方法。如果是get方法,则请求体为空。请求头包括cookie、user-agent等信息。get请求在请求行上传参,post请求在请求体中传参。
起始行除了方法,还有URI,协议版本。
(4)建立TCP连接
通过TCP三次握手建立可靠的连接,保证双方具有可靠的接收和发送能力
(5)浏览器发送请求
TCP三次握手完成之后,浏览器与目标服务器之间就建立了连接,浏览器可以发送HTTP请求。
在TCP连接通道上进行传输时,由于报文比较大,为了更容易和准确地传输,TCP会将HTTP报文按序号分割成若干报文段并加上TCP首部,分别进行传输。接收方按照序号重组这些http报文。
TCP首部:
(6)网络层通过IP协议来选择路线
接收到来自传输层的数据段之后添加IP首部封装成数据包,加入源IP地址和目的IP地址。
IP协议所处的网络层规定:数据报通过怎样的路径才能到达对方计算机,并传送给对方。
(7)数据链路层借助ARP协议凭借MAC地址通信
数据包还要封装成帧,加入CRC校验位,源Mac地址和目的Mac地址
(8)物理层传输比特流
(9)服务器响应请求
服务器接收到比特流之后,将比特流转换成帧,比对目的Mac地址,拆包,上传到网络层,网络层比对IP地址,拆包上传到传输层,传输层对数据段进行确认,按照TCP首部的序号以原来的顺序重组HTTP请求报文,保证数据传输的可靠性。最后传给应用层。生成一个对应请求的响应报文,报文的主体就是一个HTML页面
(10)服务器将其按照上述流程传回浏览器
通过传输层、网络层、数据链路层的层层封装,最终将响应报文封装成二进制比特流,并转换成其他信号,如电信号到网络中传输 , 反向传输的过程与正向传输的过程类似,就不再赘述 。
(11)断开TCP连接
通过四次挥手机制断开TCP连接
(12)浏览器显示界面
浏览器拿到资源后,对页面进行加载、解析、渲染,最后呈现给用户。