- 作者:老汪软件技巧
- 发表时间:2024-10-12 07:01
- 浏览量:
一、写在开头
本文的主题是和大家一起探讨学习:“在浏览器中输入URL开始后,计算机所做的几件事”,这个问题是好几年前自己面试的时候,面试官考问过的,当时准备十分不充分,回答的一塌糊涂,今天拿出来再整理学习一遍,一同进步!
其实这个问题本身倒是不难,但它巧妙的是可以将我们所学过的网络编程知识给串联起来,面试官仅仅通过一个问题就可以考察出我们对于这部分知识的掌握程度。那么我们今天也以此为题展开网络编程的正式学习啦!
二、访问网页的底层运行机制
如上图所示,当我们在浏览器的搜索框中输入了“” 并回车后,浏览器就跳转到了百度的首页中,这个过程计算机做了哪些操作呢?
1. 在浏览器中输入指定的URL地址; 2. 浏览器通过DNS协议(域名解析协议),获取域名所对应IP地址; 3. 浏览器根据获取到的IP+端口,向目标服务器端发动一个TCP连接请求; 4. 经过三次握手后TCP连接成功,浏览器会在该TCP连接上发送一个HTTP请求报文; 5. 服务器处理HTTP请求后,反馈响应报文给浏览器; 6. 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。 7. 浏览器不与服务器交互时,会通过四次挥手关闭TCP连接。
三、解析底层
在第二章中我们将浏览器的操作分为了7个小点,接下来,我们就来分别解释一下其中所用到的技术,由于单篇文章篇幅不易过长,其中的知识点都是粗讲,达到贯穿理解即可,后续会针对每一个知识点,如TCP/UDP,HTTP,DNS等进行单独分析。
3.1 URL
在我们浏览器输入的一个可以访问我们想要的内容,这个输入就叫做URL,英文为:Uniform Resource Locators,释义:统一资源定位器。它可以标识网络中唯一的资源,并给出定位它的路径。与之相关的还有一个URI(Uniform Resource Identifier):统一资源标志符,它可以唯一标识一个资源。
URL是一种具体的URI,它不仅唯一标识资源,还提供定位地址,URI比喻成我们的身份证号的话,那URL就是我们具体的家庭住址。
URL的结构:
在这里插入图片描述
3.2 DNS
我们在上面提到了域名与IP地址映射关系,这里其决定作用的就是DNS(Domain Name System) 域名系统,具体流程如下:
本地缓冲查询:当我们在浏览器中输入一个域名后,会先到浏览器缓存中查询,是否已经存在该域名解析结果,如果存在则返回对应IP地址,否则进行下一步;本地DNS服务器查询:本地缓存中没有后,浏览器会向本地配置的DNS服务器发送递归查询请求,如果本地DNS服务器也没有命中,则继续下一步;根DNS服务器查询:如果本地DNS服务器也没有相应的解析结果,它会向根DNS服务器发送迭代查询请求。根DNS服务器负责管理顶级域名服务器的IP地址,它会根据顶级域名(例如.com)的信息返回对应的顶级域名服务器的IP地址;顶级域名查询:本地DNS服务器向顶级域名服务器发送查询请求,并根据顶级域名的信息返回下一级域名服务器的IP地址。这个过程会一层一层地向下查询,直到找到负责解析的权威域名服务器;权威域名查询:本地DNS服务器向权威域名服务器发送查询请求,并获取域名对应的IP地址。本地DNS服务器会将解析结果缓存起来,并返回给浏览器;返回并缓存:浏览器收到本地DNS服务器返回的IP地址后,会将其存储在本地缓存中,并发起与该IP地址相关的网络请求。3.3 TCP
在3.2部分,通过DNS解析,拿到了目标主机的IP地址后,浏览器就可以向目标服务器发送TCP连接请求,TCP协议是传输层协议,可以在建立了安全连接的基础上,控制数据传输,保证可靠性,并且支持双向通信,像HTTP,HTTPS都是建立在TCP协议之上的。(TCP连接最经典的就是3次握手!)
注意:TCP/IP协议是绑定来看的,建议TCP协议时,需要发送数据,发送数据就需要网络层的IP协议,这个协议一种分组交换的协议,不保证可靠传输,负责将数据包从源主机路由到目标主机。