当我们打开网页时,浏览器做了什么???

问题:请谈谈从浏览器输入URL到拿到网页的整个过程

  • 浏览器做了哪些事?
  • 内核协议栈做了哪些事?
  • web服务器做了哪些事?
  • CDN加速网络服务。

浏览器

  1. 当你在搜索栏输入https://www.baidu.com/ ,浏览器进行URL解析。
    看到https,就知道要访问的是web服务器,www.baidu.com是web服务器的名字。根据上面的解析结果生成HTTP请求信息。
  2. 浏览器生成了HTTP请求之后(如果业务有加密需要的话,可以使用HTTPS),需要操作系统把数据发出去,内核协议栈用的是IP,并不是域名,所以要进行域名解析。web浏览器中的gethostbyname,就可以获得IP地址。
  3. 获得目标IP地址,浏览器调用socket,委托内核帮忙发送数据。
  4. 发送请求之后,会得到服务器的响应信息,解析报文,对于HTML文件,调用排版引擎、JS引擎等来处理,然后浏览器展示。(近期访问过的网页,很可能缓存在本地,这样再次访问,就不需要去服务器拿数据,提高响应速度)

PS:gethostbyname函数内部就是生成DNS查询消息,发送UDP查询到DNS服务器,得到DNS服务器的响应,从响应消息中取出IP。国内的三大运营商的通用DNS:144.144.144.144;还可以使用一种更加精准的地址簿查找协议HTTPDNS
PS:DNS系统是三层树状、分布式服务。目前全球有13台根域名服务器,又有几百台镜像,保证一定能被访问到。在查询域名www.baidu.com对应的IP时,首先访问根域名服务器,它告诉我们com服务器的地址;访问com域名服务器,它告诉我们baidu.com的地址;最后访问baidu.com域名服务器,得到www.baidu.com的地址。

加速域名解析的一些手段:

  • 在公司内部搭建DNS服务器,缓存域名对应的IP
  • 在操作系统的hosts文件中,记录域名对应的IP地址

内核协议栈

HTTP协议底层用的是TCP协议(面向连接的,TCP会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达),所以要经过三次握手进行连接,传送数据,最后四次挥手断开连接。内核协议栈主要是将应用层HTTP请求按照TCP/IP协议栈的要求,经过层层封装成帧,然后将报文的类似0101001串转换成电信号发送出去。这里要注意MAC头部的目标机器MAC,是下一跳的MAC,如果当前机器没有缓存,就需要ARP广播,先得到去往目标机器的下一跳机器的MAC。这样才能逐跳转发。还有局域网的IP地址也不能在公网上使用,所以在出网关的时候,IP地址通过NAT转换成公网地址。网关往往是一个路由器,到某个IP地址应该怎么走叫做路由表。常见的路由协议有OSPF和BGP。

web服务器相关话题

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

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

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

在服务器端如何告诉相关的进程呢?使用往往通过 RPC 调用,即远程过程调用的方式来实现。

CDN加速网络服务

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

CDN里面缓存的数据,主要是HTML、图片、视频等静态资源。动态资源往往需要源站加载。可以短暂的缓存动态资源,在这段短暂的时间内,动态资源就变成了静态资源,可以被CDN缓存实现加速。

CDN只能缓存最常见的资源。如果访问的资源就在CDN缓存中,也就是命中了,直接返回客户端;如果没有命中,则要去源站取数据,也叫回源。我们应该尽可能提高命中率,降低回源率。

总结

  1. 浏览器主要发送HTTP请求,接收HTTP响应,然后进行渲染,展示到界面。
  2. HTTP底层走的是TCP/IP,如果不知道IP,就需要DNS协议解析。
  3. TCP连接后收发HTTP数据包
  4. 为了降低服务器压力,加快访问速度,有很缓存,比如客户端缓存,CDN缓存,负载均衡缓存等

来源:IT面试真题讲解

协议的三要素:

  • 语法:这一段内容要符合一定的规则和格式。例如括号要成对,结束要使用分号等
  • 语义:就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本是没有意义的
  • 顺序:先干啥后干啥。

下图是OSI七层模型中的每一层所对应的网络协议:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值