吊打名企面试官 | 当我们打开网页时,浏览器究竟做了什么?

news/2024/5/17 16:45:59 标签: 当我们打开网页时, 计算机网络, 网络, tcp, http

系列文章持续更新中

吊打名企面试官 | 当我们打开一个网页时,究竟发生了什么?

吊打名企面试官 | 如何理解java的反射机制?

https://img-blog.csdnimg.cn/20200619115147541.jpg" width="250" />


吊打面试官 | 当我们打开网页时,浏览器究竟做了什么? 

这个题目主要考察面试者对整个网络>计算机网络的理解。涉及的知识面非常广泛,协议、软件、安全、硬件、高并发、高可用等等。

回答要点

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc21MT0JSdm8wQm9MamdEaHhpY1hFZ1g1NmgxVExzNWliT0NkZFFQM3dNclFjNTN2SFJZWE1zN2hnLzY0MA?x-oss-process=image/format,png" />

 

  • 浏览器做了哪些事情。

  • 内核协议栈做了哪些事情。

  • web服务器相关话题。

  • CDN加速网络服务。

下面我们就上面4个点分别说明。

 

1.浏览器做了哪些事情

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc2daeGRSdmtXNGpyaWF2OGljWjN2eE9IU0dDNVJ6b1M1QU0xNUtQbllPbWRpYm1QQmt6b2VKZ0tkUS82NDA?x-oss-process=image/format,png" />

 

当输入https://www.baidu.com/index.html,浏览器进行URL解析,首先会看https,就知道我们要访问的是web服务器,www.baidu.com是web服务器名字,后面index.html就是数据源路径和文件名。

根据上面的解析结果生成HTTP请求消息。

GET /index.html HTTP/1.1 <!-- 请求行 -->User-Agent: curl/7.29.0Host: www.baidu.comAccept: */*<!-- 空行 -->

发送请求后,会得到服务器的响应消息。

HTTP/1.1 200 OKAccept-Ranges: bytesCache-Control: private, no-cache, no-store, proxy-revalidate, no-transformConnection: keep-aliveContent-Length: 2443Content-Type: text/html<!-- 空行 -->
<html>    <!-- ........省略...... --></html>

浏览器生成了HTTP请求后,需要操作系统来把数据发送出去,内核协议栈用的是IP,并不是域名,所以要进行域名(DNS)解析。web浏览器中其实就是gethostbyname ("www.baidu.com"),就可以获得IP地址。

 

gethostbyname函数内部实现就是生成DNS查询消息,发送UDP查询消息到DNS服务器,得到DNS服务器的响应,从响应消息中取出IP。这里需要注意,我们要去DNS服务器查询信息,需要知道DNS服务器的IP地址,所以要配置正确。国内移动、电信、联通的通用DNS:114.114.114.114。

 

DNS系统是三层树状分布式服务。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc2lhaWEzRmFoOG5KQnpTTklXZXhMRWZEZXNQaWJTOTJ0VTFVU1ZJSG5taWFWOXExVk90R2NDTHJzWlEvNjQw?x-oss-process=image/format,png" />

 

目前全球有13组根域名服务器,又有几百台镜像,保证一定能被访问得到。有了这个系统,我们查询域名www.baidu.com对应的IP,按照如下顺序:

  1. 访问根域名服务器,它告诉我们com域名服务器地址。

  2. 访问com域名服务器,它告诉我们baidu.com域名服务器的地址。

  3. 访问baidu.com域名服务器,得到www.baidu.com的地址。

 

我们为了加速域名解析,也可以在自己公司内部搭建DNS服务器,缓存域名对应的IP。其实我们操作系统也会缓存曾经访问过的域名。当然,我们还可以在操作系统的hosts文件中,记录域名对应的IP地址。如果在这些地方能够找到ip地址,就避免了远程访问DNS服务器,加快了DNS解析过程,也减轻了DNS服务器的压力。

 

得到了目标机器IP地址,浏览器就可以用socket,委托内核帮我们发送数据了,代码如下:

int fd = socket(AF_INET, SOCK_STREAM, 0);connect(fd, 服务器地址);while ( 1 ) {    write(fd, http请求数据);    read(fd,服务器响应的数据)}close(fd);

浏览器拿到服务器的响应数据,解析报文,对于HTML文件,调用排版引擎、js引擎等来处理,然后在浏览器展示。

 

当然,如果近期访问过的网页,很有可能缓存在本地,这样再次访问,就不需要去服务器拿数据,直接访问本地缓存数据,可以降低服务器的压力,提高响应速度。

 

2.内核协议栈做了哪些事情

 

 

因为HTTP协议底层用的是TCP协议,所以要经过三次握手进行连接,传送数据,最后四次挥手断开连接。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc1BEUFdtUFozdExiQ1FjdGVhZ1I5OUYzNFQ0TjJRMHpRY2JWVnlvUFM3eGZLRkVVWHlQdlprZy82NDA?x-oss-process=image/format,png" />

 

内核协议栈主要是将应用层HTTP请求按照TCP/IP协议栈的要求,经过层层封装后成帧,然后将报文的类似0101001串转换成电信号发送出去。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc0tkQ2lhMlRMSHhKSndWbmYxSnlFUXZYT1MxeE5FRE8wN1dLRVhMMHpDeElTUnFPYzU5cHlYaHcvNjQw?x-oss-process=image/format,png" />

 

这里要注意MAC头部的目标机器MAC,是下一跳机器的MAC,如果当前机器没有缓存,就需要ARP广播,先得到去往目标机器的下一跳机器的MAC,这样才能逐跳转发。还有,局域网的IP地址也不能在公网上使用,所以在出网关的时候,IP地址通过NAT转换成公网地址

 

3.企业web服务器相关话题招聘

 

 

目标服务器得到了客户端的HTTP请求,如果找到相应的资源文件,组成HTTP响应报文,将资源发送回来,如果没有找到,就会给客户端返回404错误。

 

目标网站的服务器对外表现是一个IP,为了能够扛住高并发,内部往往是一套非常复杂的架构,入口有负载均衡设备,比如四层的LVS和七层的Nginx,后面有许多服务器构成一个集群。

 

负载均衡服务器先访问内存级的缓存,比如redis,把频繁访问的数据缓存几秒到几分钟,减轻后端服务器的压力。如果缓存没有相应的数据,再把请求转发给应用服务器,应用服务器如果需要数据,再访问后端的数据库服务器。为了提高数据库并发能力可以做成读写分离,目前主流的数据库都实现了这个功能。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc1lSSnA5djJYMEo3aWFzVjNXVldXaWNsTGFHQU9ZSnhuZldtZ0V1Vk1vQ2czSTZiVW4wanhldGljZy82NDA?x-oss-process=image/format,png" />

 

4.CDN加速网络服务

 

 

互联网虽然是一个大网,其实它由好多个小网组成,各个小网又相互连通,比如电信、移动、联通,各自是一个网络,它们之间需要联通。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc2x2TnU2dVVCY0FqdzdjbmhRTDNxaWF0WGNCWkIyTDAxOXppY0lzdVJWckxvUFd5SGowVTl1eWZRLzY0MA?x-oss-process=image/format,png" />

 

小的网络内部很流畅,网络之间只有很少的联通点。如果网站在中国移动,笔记本在中国联通,那么就必须跨网传输。大量的用户去抢这个联通点,就会带来网络压力,产生比较大的延迟。另外,每过一个网络节点,都需要停顿一下,二层、三层的解析转发,也会带来延迟。为了解决这种上网速度慢的问题,CDN就出现了。

 

CDN中文名称是内容分发网络,它主要解决的问题是就近访问的问题。CDN分发源站的内容,也就是把源站的内容缓存在各个节点上。用户上网就不直接访问源站的内容,而是访问距离它最近的一个CDN节点,术语叫边缘节点,其实就是缓存了源站的内容,就是源站的一个代理服务器,避免远距离访问源站,实现网络加速。

 

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9ScUdPTnlUNTBYNTRoRk1BWWxVVXIyR241eHJxekZyc2M0U1pMZ09icG1GUWM4eVE2UmljZmx1RUtUUW1kQjNIWGNVWnZBM3RxdWdpYXZraWM1cGo5Qm12QS82NDA?x-oss-process=image/format,png" />

 

CDN里面缓存的数据,主要是html、图片、视频等静态资源。动态资源往往都需要源站实时生成,缓存也没有太大意义,不过,我们也可以短暂的缓存动态资源,在这段短暂的时间内,动态资源也就变成了静态资源,可以被CDN缓存以实现加速。

 

网络上的资源无穷无尽,CDN不可能全部缓存起来,只能缓存最常见的资源。如果所访问的资源就在CDN缓存中,也就是命中了,直接返回给客户端。如果没有命中,则要去源站取数据,也叫回源。

 

我们应该尽可能的提高命中率,降低回源率。这就需要在存储系统上做更多的事情,比如硬件上,要更大的内存,更大和快速的磁盘,比如SSD,万兆以太网,更高速的CPU等。软件上,可以用redis等尽可能高效利用存储,存下更多的内容。

 

5.总结

 

 

1.浏览器主要发送HTTP请求,接收HTTP响应,然后然后进行渲染,展示到界面。

2.HTTP底层走的是TCP/IP,如果不知道IP,就需要DNS协议解析。

3.TCP连接后收发HTTP数据包。

4.为了降低服务器压力,加快访问速度,有很多缓存,比如,客户端缓存,CDN缓存,负载均衡器缓存等。

 

由于网络是非常复杂的,本文对所涉及的知识点,只是浅尝辄止,旨在让读者对浏览器输入URL后的过程有一个总体认识。


http://www.niftyadmin.cn/n/1488334.html

相关文章

吊打名企面试官 | 如何理解java的反射机制?

系列文章&#xff1a; 吊打名企面试官 | 当我们打开一个网页时&#xff0c;究竟发生了什么&#xff1f; 吊打名企面试官 | 如何理解java的反射机制&#xff1f; 概述 Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c…

c程序设计第五版谭浩强课后答案c程序设计课后习题答案

c程序设计第五版谭浩强课后习题答案 第一章 1.什么是程序?什么是程序设计? 程序&#xff1a;就是一组能识别和执行的指令&#xff0c;每一条指令使计算机执行特定的操作 程序设计&#xff1a;是指从确定任务到得到结果、写出文档的全过程 2.为什么需要计算机语言?高级语…

c程序设计第五版谭浩强课后答案 第二章习题答案

c程序设计第五版谭浩强课后习题答案 第二章&#xff1a;算法----程序的灵魂 1. 什么是算法&#xff1f;试从日常生活中找3个例子&#xff0c;描述它们的算法 算法&#xff1a;简而言之就是求解问题的步骤&#xff0c;对特定问题求解步骤的一种描述。 比如生活中的例子&…

c程序设计第五版谭浩强课后答案 第三章习题答案

c程序设计第五版谭浩强课后习题答案 第三章 最简单的C程序设计 ----顺序程序设计 1、假如我国国民生产总值的年增长率为7%&#xff0c; 计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为p(1r)np (1r)^np(1r)n ,其中r为年增长率&#xff0c;n为年数&#xff…

c程序设计第五版谭浩强课后答案 第四章习题答案

c程序设计第五版谭浩强习题答案 第四章 选择结构程序设计 1. 什么是算术运算&#xff1f;什么是关系运算&#xff1f;什么是逻辑运算&#xff1f; 【答案解析】 算熟运算&#xff1a; 算术运算即“四则运算”&#xff0c;是加法、减法、乘法、除法、乘方、开方等几种运算的…

c程序设计第五版谭浩强课后答案 第六章习题答案

c程序设计第五版课后答案谭浩强 1.请画出例5.6中给出的3个程序段的流程图 流程图1&#xff1a; 流程图2&#xff1a; 流程图3&#xff1a; 2.请补充例5. 7程序,分别统计当“fabs(t)> le- 6”和“fabs(t)> le- 8”时执行循环体的次数。 fabs(t)> le- 6 &#xff0c;…

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数

有n个整数&#xff0c;使前面各数顺序向后移m个位置&#xff0c;最后m个数变成最前面m个数&#xff0c;。写一函数实现以上功能&#xff0c;在主函数中输入n个整数和输出调整后的n个数 #include <stdio.h> #include <stdlib.h> void fix(int *a, int len, const i…

leetcode题解之52. N皇后 II n 皇后问题研究的是如何将

leetcode题解之52. N皇后 II n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 上图为 8 皇后问题的一种解法。 给定一个整数 n&#xff0c;返回 n 皇后不同的解决方案的数量。 示例: 输入: 4 输出: 2 解释: 4 皇后问题存…