前面我们学习了各种协议,应用层的 HTTP、DNS 协议,传输层的 TCP 协议,网络层的 IP 协议等等,今天我就带你看看一道常见的面试题:当在浏览器输入一个网址后会发生什么?探究一个数据包在网络的心路历程。
解析 URL
当我们在浏览器输入一个 URL 后,第一步就是对 URL 进行解析,得到里面的参数,将域名和需要请求的资源分离开来,从而知道需要请求的是哪个服务器,请求的是服务器上的哪些资源等。我们首先看看 URL 各元素的组成:
![](https://gitee.com/kuangtf/blogImage/raw/master/img/数据包历程.png)
服务器上面的资源的文件路径为:
![](https://gitee.com/kuangtf/blogImage/raw/master/img/数据包历程2.png)
封装 HTTP 请求报文
对 URL
进行解析之后,浏览器确定了目标服务器和文件名,接下来就需要根据这些消息封装成一个 HTTP 请求报文发送出去。例如将上面的请求URL解析之后封装成下面这样的 HTTP 请求报文:
![](https://gitee.com/kuangtf/blogImage/raw/master/img/数据包历程3.png)
封装好报文之后,就是将该报文发送出去,但是怎么知道服务器的地址呢?别忘了,我们之前学的 DNS 协议。
DNS 域名解析获取 IP 地址
在浏览器解析完 URL 后我们可以得到域名,但是域名并不是服务器的真实地址&#x