yunshuipiao / Potato

Read the fucking source code for the Android interview
Apache License 2.0
80 stars 12 forks source link

when you type url into your browser and hit enter? #34

Open yunshuipiao opened 5 years ago

yunshuipiao commented 5 years ago

when you type url into your browser and hit enter?

[TOC]

至少二十年的经典面试题目。主要过程如下:

客户端获取URL - > DNS解析 - > TCP连接 - >发送HTTP请求 - >服务器处理请求 - >返回报文 - >浏览器解析渲染页面 - > TCP断开连接

过程

  1. 首先进行域名解析,域名解析具体过程讲一下:

浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表; 若有,则搜索操作系统的DNS缓存; 若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找: 本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;

本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;

本地域名服务器向权限域名服务器发起请求,得到IP地址;

本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来; 操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来; 至此,浏览器已经得到了域名对应的IP地址。 2.浏览器发起HTTP请求;

3.接下来到了传输层,选择传输协议,TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息;

4.然后到了网络层,通过IP协议将IP地址封装为IP数据报;然后此时会用到ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;

5.接下来到了数据链路层,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的mac开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;

6.服务器响应请求并请求客户端要的资源,传回给客户端;

7.断开TCP连接,浏览器对页面进行渲染呈现给客户端。