1、浏览器的网络请求

要理解 CDN 这件事情,我们就得先理解浏览器发出一个请求的过程是怎样的,其整体过程如下图所示。

  1. 用户在浏览器中输入要访问的网址域名。
  2. 浏览器向本地 DNS 服务器请求对域名的解析。
  3. 如果本地 DNS 服务器有域名的解析结果,那么直接响应用户请求,返回该域名对应的 IP 地址。
  4. 如果本地 DNS 服务器没有域名的解析结果,那么则会递归地向 DNS 系统请求解析,随后将该结果返回给用户。
  5. 浏览器得到域名解析结果后,其实也就是域名对应的 IP 地址。
  6. 随后浏览器向服务器请求内容。
  7. 服务器将用户请求内容返回给浏览器。

通过这么复杂的步骤,用户就可以看到页面内容了。但实际上,在第 6、7 这两步的时候,其中间也经过了非常复杂的过程。为了更清晰地表述,我们可以将这个过程分为 3 个主要节点,如下图所示。

网站服务器通过公网出口,再通过长途骨干网,最后通过用户的宽带广猫到达用户所在的局域网,最终才到达用户电脑的浏览器。

其中长途骨干网的传输是最为耗时的,它需要经过网站服务器所在的机房、骨干网、用户所在城域网、用户所在接入网等,其物理传输距离非常遥远。

在这种情况下,如果传输的数据非常多,访问的用户特别大,那么就会出现很长的延时,影响用户体验。同时,每请求一次数据都需要经过漫长的数据传输,对于长途骨干网来说,都是一次负担。

刚刚说的这个场景,很形象的一个例子是春节抢票的场景。当我们春节抢票时,我们都会登陆 12306 网站,网站上肯定有不少图片资源。这时候可能同时会有 1 个亿的人,同时去请求一张一模一样的图片。

这时候如果我们都按照上面的过程去请求一次图片数据,那么将会产生 1 亿次的网络数据传输,这对于我们整个国家的互联网基础设施是个灾难啊!

但事实情况是:12306 貌似也没有挂掉呀!

那么他们是如何解决这个问题呢?答案就是:CDN!

2、什么是 CDN ?

其实 CDN 就是内容分发网络的意思,其英文全称为 Content Delivery Network。

简单地说,CDN 可以提前把数据存在离用户最近的数据节点,从而避免长途跋涉经过长途骨干网,最终达到减少骨干网负担、提高访问速度的目的。

按照我们上面的场景,如果没有 CDN 的话,每次请求都需要从网站服务器经过公网出口、长途骨干网、用户接入局域网,最终到达浏览器。但是当有了 CDN 之后,可能就变成了下面这样:

浏览器请求图片数据时,会先去 CDN 缓存服务器获取。如果获取到数据,那么就直接返回。否则才会经过长途骨干网,最终到达网站服务器获取图片数据。那么只要我们提前在 CDN 缓存服务器上传图片,那么我们就可以极大地减少网络流量,同时减少网络延迟。

从上图我们可能会觉得:这不就是在长途骨干网和用户局域网中间,加了一个服务器嘛。但事实上可并不是这样,CDN 其实还缩短了请求数据的距离。

我们知道用户所处的位置可能是全国各地,为了尽可能地减少网络传输的延时,一般都会在离用户较近的地方设置 CDN 缓存服务器,例如:在华南、华北、华东、西南设置一个主 CDN 服务器,这样各个地区的用户就可以直接请求对应的 CDN 服务器,而不需要来回跑大半个中国,极大地提高了效率!

因此,当我们说内容分发网络的时候,脑海里应该有如下这样一张图片:遍布全国各地的 CDN 缓存服务器,组成了我们的内容分发网络。每次用户请求都会到离他最近的 CDN 服务器请求数据,从而极大地提高访问速度。

3、CDN 工作原理

到了这里,相信大家都知道 CDN 是什么了。但实际上 CDN 是如何与 DNS 结合起来的,这里面还是有点复杂的。加入了 CDN 之后,浏览器的网络请求就变成如下图所示的情况。

  1. 浏览器发起图片 URL 请求,经过本地 DNS 解析,会将域名解析权交给域名 CNAME 指向的 CDN 专用 DNS 服务器。

  2. CDN 的 DNS 服务器将 CDN 的全局负载均衡设备 IP 地址返回给浏览器。

  3. 浏览器向 CDN 全局负载均衡设备发起 URL 请求。

  4. CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域的区域负载均衡设备,向其发起请求。

  5. 区域负载均衡设备会为用户选择最合适的 CDN 缓存服务器(考虑的依据包括:服务器负载情况,距离用户的距离等),并返回给全局负载均衡设备。

  6. 全局负载均衡设备将选中的 CDN 缓存服务器 IP 地址返回给用户。

  7. 用户向 CDN 缓存服务器发起请求,缓存服务器响应用户请求,最终将用户所需要偶的内容返回给浏览器。

使用 CDN 服务的网站,只需要将域名解析权交给 CDN 服务商,接着将需要分发的内容上传到 CDN,就可以实现内容加速了!

4、总结

这么看下来,其实 CDN 内容分发网络,本质上就是一大堆遍布在全球各个角落的缓存服务器。通过与 DNS 的配合,找到最靠近用户的一台 CDN 缓存服务器,然后把数据快速地分发给用户。

通过 CDN 技术,我们不仅减少了对于整体骨干网的流量负担,还提高了用户的体验。

CDN - 原理解析相关推荐

  1. 运维小知识之CDN内容分发网络原理解析

    0x00 前言简述 基础概念 工作原理 组成部分 应用场景 0x01 基础配置 CDN 入门配置 CDN 跨域设置 CDN 响应头参数 (扩充) 0x02 边缘脚本与程序 EdgeScript - 边 ...

  2. 基础知识之CDN内容分发网络原理解析

    文章目录 0x00 前言简述 基础概念 工作原理 组成部分 应用场景 0x01 基础配置 CDN 入门配置 CDN 跨域设置 CDN 响应头参数 (扩充) 0x02 边缘脚本与程序 EdgeScrip ...

  3. Tengine HTTPS原理解析、实践与调试【转】

    本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验.内容主要有四个方面:HTTPS趋势.HTTPS基础.HTTPS实践.HTTPS调试. 一.HTTPS趋势 这一 ...

  4. 【CDN】CDN 原理和使用

    目录 一.CDN 是什么 二.CDN 由来 三.CDN 原理 3.1 概念 3.2 一般的 web 请求过程 3.3 CDN 加速的 WEB 请求过程 3.4 二者区别 四.CDN 分类 4.1 网页 ...

  5. HTTP/HTTPS及CDN 原理

    HTTP 是一个无状态的协议.无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服务 ...

  6. Spark Shuffle原理解析

    Spark Shuffle原理解析 一:到底什么是Shuffle? Shuffle中文翻译为"洗牌",需要Shuffle的关键性原因是某种具有共同特征的数据需要最终汇聚到一个计算节 ...

  7. 秋色园QBlog技术原理解析:性能优化篇:用户和文章计数器方案(十七)

    2019独角兽企业重金招聘Python工程师标准>>> 上节概要: 上节 秋色园QBlog技术原理解析:性能优化篇:access的并发极限及分库分散并发方案(十六)  中, 介绍了 ...

  8. Tomcat 架构原理解析到架构设计借鉴

    ‍ 点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 Tomcat 架构原理解析到架构设计借鉴 Tomcat 发展这 ...

  9. 秋色园QBlog技术原理解析:性能优化篇:数据库文章表分表及分库减压方案(十五)...

    文章回顾: 1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用 2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程 3: 秋色 ...

  10. CSS实现元素居中原理解析

    原文:CSS实现元素居中原理解析 在 CSS 中要设置元素水平垂直居中是一个非常常见的需求了.但就是这样一个从理论上来看似乎实现起来极其简单的,在实践中,它往往难住了很多人. 让元素水平居中相对比较简 ...

最新文章

  1. tf.estimator的用法
  2. python和java和scala_有没有与python3相当的scala/java收藏。国家
  3. C#后台访问前台Html控件的方法
  4. android- Auto Monitor Logcat
  5. 对图片进行压缩,水印,伸缩变换,透明处理,格式转换操作
  6. python实现邮件发送功能
  7. Dijkstra算法——最短路径(转)
  8. python 检查域名是否可以访问_糖尿病人是否都要做喝糖水的检查?结果可以说明胰岛功能水平吗?...
  9. Atitit java播放mp3 目录 1.1. 不能直接支持mp3播放。。需要解码播放转化为pcm 1 1.2. 使用\javalayer类库播放 3 1.3. ,就是普通的java sound
  10. OpenCV图像预处理常用函数及流程
  11. BCM业务连续性管理
  12. 最强大脑记忆曲线(7)——“复习页面”逻辑实现
  13. 扫描技术的原理与应用(Nmap使用)
  14. 心流_追求生命的意义
  15. python自动输入密码_Python实现自动输密码
  16. Java小知识点合集-面向对象
  17. 没有自制力,你有资格玩吗?
  18. 如何通过手机APP远程控制PLC
  19. The_Last_Geass
  20. 柳岩直播卖货,三小时豪赚1500万?快手为什么那么带货?

热门文章

  1. python计算定积分_python 求定积分和不定积分示例
  2. PHP+新浪微博开放平台+新浪云平台(SAE)
  3. 用百度OCR识别URL图片中的文字
  4. 【Linux】如何查看命令运行历史时间以及操作人IP
  5. 【强化学习】基本知识梳理
  6. 中国邮政国际航空挂号信是可以网上查询跟踪的
  7. 原相机怎么拍出网图_教你如何用iPhone原相机拍照也能网红风
  8. Python之温度换算
  9. 利用PPT制作PNG透明图片
  10. 显微镜下的大明内容_读《显微镜下的大明》有感