image.png

很久之前,我就在想浏览器输入 https://taobao.com 到返回页面都经历了什么? 做开发以后,接触的知识也越来越全面,我心中的疑惑也逐渐豁然开朗了,所以码字与各位看官老爷分享。

域名解析层面

浏览器输入域名之后,浏览器需要知道将请求发往哪里,所以要经过域名解析,获取对应的ip地址,ip地址可以理解为互联世界的“门牌号”。具体是这么做的:

1.先检查浏览器缓存;看看这个域名是否做过解析;

2.如果发现没有,然后再找本地HOST配置;

3.如果没有命中,那么会去请求本地域名服务器(LDNS)

4.如果LDNS仍未命中,就直接跳到 根域名服务器(Root Server)请求解析

5.根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址

6.此时LDNS再发送请求给上一步返回的gTLD

7.接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个Name Server就是网站注册的域名服务器,权威域名服务器

8.此时LDNS再发送请求给上一步返回的 Name Server

9.Name Server 根据映射关系表找到目标ip,返回给LDNS

10.LDNS缓存这个域名和对应的ip

11.LDNS把解析的结果返回给浏览器,浏览器根据TTL值缓存到本地系统缓存中,域名解析过程至此结束

具体请求域名解析的交互如下图所示:

image20220316155939435.png

请求层面

1.知道了要请求的IP地址,开始打包请求,不管是HTTP 还是HTTPS 都是应用层协议,此时会添加应用层协议的请求头以及报文体

image.png

2.应用层打包请求后会交给下一层传输层去处理,具体通过socket编程去实现,基于TCP协议,然后TCP协议会添加响应的协议头,协议中有两个端口,一个是浏览器端口,一个是目标端口;

image.png

3.传输层处理完就会交给网络层去处理,网络层的协议是IP协议,IP协议中包含源IP地址和目标IP地址;
image.png

4.知道了目标IP,会判断这个地址是“本地”还是“外地”,操作系统在启动的时候,会被DHCP协议配置ip地址和网关的ip地址,如果是去外地,会先找到网关,本地通讯基本靠“吼”,会大吼一声谁是网关(例如:192.168.1.1),网关会回复“在这里,在这里”,并告知它的MAC;这是请求包会通过网卡发往网关;大吼一生的协议便是ARP协议

image.png

网关收到包后会根据自己的“知识”(路由表),判断下一步怎么走;
这个知识依据的协议是路由协议,常⽤的有OSPF和BGP。

5.数据包需要通过层层“关卡”之后,找到目标服务器;然后,再根据TCP协议中的目标端口找,找到对应的进程(例如:tomcat等),随后相应的应用程序处理HTTP的请求,然后封装相应的响应信息;

6.“响应信息”会向来时那样经过千山万水,找打你的个人电脑,最终找到你的浏览,浏览在将相应信息展示出来。

想必读到这里你对浏览器输入"taobao.com",到展示页面的整个过程有了一定的了解;这个过程涉及到许多协议,我们也会在后续的文章做一些介绍,欢迎各位看官老爷的持续关注,如下是一些常用的协议,感兴趣的同学也可以自己去做一些了解。

image.png