浏览器输入网址后发生的过程

浏览器输入网址后发生的过程

先谈域名

域名用于在数据传输时标识计算机的电子方位,可以说是IP地址的代称,为了便于记忆后者。

域名的核心是域名系统(DNS)域名系统由一个或多个部分组成,这些部分通常连接在一起,并由点分隔。分为顶级域名、二级域名、三级域名等等,每个域名都以顶级域名结尾

域名解析(分为加CDN和不加CDN)

对于静态资源的访问,一般通过CDN服务器(考虑到部署成本和流量成本),即Content Delivery/Distribution Network。CDN专注于静态资源的分发和访问,方便用户快速访问与就近接入。如果是动态资源的访问,则可能依次经过代理/网关、web服务器、应用服务器、数据库。这里会涉及到高可用部署以及集群和负载均衡等。现在还不熟练,先不说。

不加CDN

img

在浏览器输入网址(域名)后要由DNS域名解析系统解析,大致经过如下几个过程

1.浏览器先检查自身缓存,查看是否有域名与IP的映射关系,有则直接使用IP进行通信。

2.如果缓存过期或没有找到映射,则浏览器将去系统缓存查找是否有域名与IP的映射关系。通常查找本地的hosts文件,不同操作系统的hosts位置也不同。

3.如果本地无法完成域名解析,则系统会请求本地DNS服务器解析,通常由ISP(Internet Service Provider,互联网服务提供商)通过DHCP协议动态分配,在windows操作系统下,采用ipconfig命令可以查看。我们也可以手动修改为公共DNS如Google提供的8.8.8.8,国内的114.114.114.114,它们分布在不同的地理位置上,借助Anycast技术,将请求路由到离用户最近的DNS服务器上

4.当本地DNS服务器仍无法完成解析时,本地DNS服务器会请求根域名服务器,根域名服务器是DNS中最高级别的域名服务器,负责返回顶级域的权威域名服务器地址。根域名服务器有13个,返回的是所查域的通用顶级域(Generic top-level domain,gTLD)如com、cn、org等

5.本地DNS服务器接收到根域名返回的信息,向gTLD服务器发起请求,gTLD服务器向本地服务器返回对应域名的Name Server域名服务器,又称二级域。

6.本地DNS服务器向二级域发送请求后,接收二级域返回的IP地址及TTL值,并解析地址将解析结果返回给用户,同时缓存解析后的结果,缓存时间由TTL控制。用户系统将缓存该IP地址,缓存时间由TTL控制,至此解析结束。

加CDN
CDN系统介绍

CDN(Content Delivery Network),即内容分发网络,其目的是通过在现有的Internet中增加一层新的缓存层,将网站的内容发布到最接近用户的网络“边缘”的节点,使用户可以就近取得所需的内容,提高用户访问网站的相应速度.

CDN系统中主要有四部分,每部分都由集群构成,这4部分分别为CDN专属DNS服务器,全局负载均衡设备、区域负载均衡设备、CDN缓存服务器(边缘节点)构成。除了CDN专属DNS服务器,其他3部分集群都有源服务器上对应资源的全部或部分副本。CDN系统通过各部分的负载均衡算法,最终指示客户端使用附近最优的边缘节点中的一台缓存服务器作为服务端,从而提高Web应用的性能。

下面对比传统请求和加入了CDN的请求(简略版)

在这里插入图片描述

CDN访问流程如下:

1.用户输入域名,先由本地DNS系统解析,如果有缓存则返回,若没有,则本地DNS系统会将域名的解析权交给CNAME指向的CDN专用DNS服务器。

2.CDN的DNS服务器将CDN的负载均衡设备ip地址返回给用户。

3.用户向CDN的负载均衡设备发起URL访问请求。

4.CDN全局负载均衡设备根据用户ip地址、用户请求的URL,选择一台用户所属区域的区域负载均衡设备,并将请求转发到此设备上。

5.区域负载均衡设备选择一个最优的缓存服务器节点,并从缓存服务器节点得到缓存服务器的ip地址,并返回给全局负载均衡设备。

6.全局负载均衡设备把服务器ip返回给用户,用户向缓存服务器发起请求,缓存服务器进行相应,将用户所需内容传送至用户中断,如果这台缓存服务器上没有用户想要的内容,区域负载均衡设备却将它分给了用户,那么这台服务器就要向上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地(回源)

CDN涉及到的内容也很多,在这里不做深入讨论。

其中,CDN选择缓存服务器的依据包括:根据ip地址,判断哪台服务器离用户最近,根据请求url中携带的内容名称判断哪台服务器上有所需内容,查询负载情况选择负载较小的服务器。

在接受请求的同时CDN还会判断缓存数据是否过期,若过期则从源站拉取最新数据更新本地缓存,并将数据返回给客户端。不同服务商的CDN节点缓存机制也不同,但一般都遵循http协议,通过http响应头中的Cache-Control:max-age字段设置文件缓存时间

理论上,最简单的CDN网络只有一个CDN专用DNS服务器,一个全局负载均衡设备,然后各节点一台缓存服务器,即可运行。

HTTP请求

这里先讲一下HTTP请求和相应报文的结构

请求报文:请求行、请求头、请求体;http协议是没有对请求大小做限制的,但实际上,不同的浏览器和服务端有不同的限制

img

GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
 
username=jinqiao&password=1234

响应报文:响应行、响应头、响应体

img

HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

<html>
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>

其中请求的缓存指令和响应的状态码值得了解,这里也暂不赘述(后面待更新)

注1:DNS查询方式

DNS查询有两种方式:递归迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。

以查询 zh.wikipedia.org 为例:

  • 客户端发送查询报文"query zh.wikipedia.org"至DNS服务器,DNS服务器首先检查自身缓存,如果存在记录则直接返回结果。
  • 如果记录老化或不存在,则:
    1. DNS服务器向根域名服务器发送查询报文"query zh.wikipedia.org",根域名服务器返回顶级域 .org 的权威域名服务器地址。
    2. DNS服务器向 .org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到二级域 .wikipedia.org 的权威域名服务器地址。
    3. DNS服务器向 .wikipedia.org 域的权威域名服务器发送查询报文"query zh.wikipedia.org",得到主机 zh 的A记录,存入自身缓存并返回给客户端。

注2:只有13台根域名服务器的原因

DNS是应用层协议,主要基于UDP传输协议。由于一次TCP交换至少包含9个包:三次握手初始化TCP会话、一个查询包、一个相应包及四次分手的包交换;而一次UDP交换可以短到两个包:一个查询包、一个响应包。考虑到效率因此采用UDP协议。而受限于UDP数据包512字节的限制,所以服务器台数也有限制。这里引用知乎的回答:

作者:Avery Lu

Why 13 DNS root servers

12 Header + 5 Question section + 31 Resource record + 15 * n (Other resource record) + 16*n (A record in additional section)

15的组成:

第一个 Resource record 要是全场度,nameserver name需要20bytes. 加上前面 root label 之类的信息后是 root-label: 1 byte + ttl: 4 bytes + class: 2 bytes + type: 2 bytes + rdlength: 2 bytes + 20 = 31 bytes.

之后的 resource record 的 nameserver name 可以被压缩(DNS compression),只需要4bytes. 需要:11 + 4 = 15bytes.

16的组成:

Additional section 类似情况,ttl: 4 bytes + class: 2 bytes + type: 2 bytes + rdlength: 2 bytes + address: 4 bytes = 14 bytes. 外加被压缩的 nameserver name 2 bytes. = 16 bytes

最后512bytes 的分配为: 12 + 5 + 31 + 31*n = 512

n = 14.96

当初设计的时候,安排了13个,空出了以后字节空间给以后的 feature 使用。

注3:DNS原理入门,我觉得写的不错的文章,推荐给大家

DNS原理入门
[参考资料]: 维基百科
[参考资料]: https://www.itcodemonkey.com/article/10598.html
[参考资料]: https://cloud.tencent.com/developer/user/1002467/articles
[参考资料]: https://www.zhihu.com/question/22587247
[参考资料]: https://wxs.me/1749

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值