今天我们详细分析一下,浏览器中输入 url 后,到底发生了什么?
一、进行域名解析(获取IP地址)
域名解析过程:
1、浏览器搜索自己的DNS缓存,缓存中维护了一张域名和IP地址的对应表
2、若没有则搜索操作系统的DNS缓存
3、若没有则操作系统将域名发送到本地域名服务器,本地域名服务器在自己的DNS缓存查找(递归查询)
4、若没有则通过以下方式查找(递归查询/迭代查询)
本地域名服务器向根域名服务器发送请求,根域名服务器返回com域顶级服务器域名地址
本地域名服务器向com域顶级域名发送请求,com域顶级域名服务器返回权限域名服务器地址
本地域名服务器向权限域名服务器发送请求,得到IP地址
5、本地域名将得到的IP地址返回操作系统,同时自己也将IP地址缓存起来
6、操作系统得到IP地址返回给浏览器,同时自己也将IP地址缓存起来
7、浏览器得到IP地址
此后进入正式七层网络模型调用:
二、应用层-浏览器发送HTTP请求
作为发送端的客户端在应用层(HTTP协议)发送了一个想要做某件事的HTTP请求(比如请求某个接口)
三、传输层-TCP或者UDP封装数据(HTTP请求报文)
为了传输方便,传输层选择协议(TCP协议或者UDP协议)对从应用层收到的数据(HTTP请求报文)进行封装(对收到的数据进行分割,并在各个报文上打上标记序号及端口号)后转发给网络层
四、网络层-IP协议封装IP地址,获取目的MAC(media access control address)地址
通过IP协议将IP地址封装为IP数据报,此时会使用ARP协议(ARP是一种用以解析地址的协议,根据通信方的IP就可以反查对应的MAC地址)主机发送信息时会将包含目标IP地址信息ARP请求广播到网络上所有的主机,并接受返回消息,以此确定目标的物理地址,找到目的的MAC地址
五、链路层-(又名数据链路层、网络接口层)建立TCP连接
把网络层交下来的IP数据添加首部和尾部,封装为MAC帧,根据目的MAC地址建立TCP连接(三次握手)
具体作用:
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。
六:tcp连接,三次握手
在域名解析之后,浏览器向服务器发起了http请求,tcp连接,三次握手建立tcp连接。TCP协议是面向连接的,所以在传输数据前必须建立连接
七:服务器收到请求
服务器收到浏览器发送的请求信息,返回一个响应头和一个响应体。整个过程结束之后,浏览器关闭TCP连接。
到此,该问题分析完毕。
这个问题曾经是一个经典的面试题,回答的越详细越好!