协议

记录常见网络协议的概念和应用

CDN

Content Delivery Network,内容分发网络

网站可以预先把内容分发至全国各地的加速节点。这样用户就可以就近获取所需内容,避免网络拥堵、地域、运营商等因素带来的访问延迟问题,有效提升下载速度、降低响应时间,提供流畅的用户体验。

好处

CDN 技术消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量

广泛分布的 CDN 节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵以及降低各种 DDoS 攻击对网站的影响,同时保证较好的服务质量

工作流程

  • 当在地址栏输入一个地址后,先经过本地 DNS 服务器解析,如果本地 DNS 没有相应域名的缓存,则本地 DNS 系统会将域名的解析权交给 CNAME 指向的 CDN 专用的 DNS 服务器
  • CDN 的 DNS 服务器将CDN 的全局负载均衡设备IP 返回给用户
  • 用户向 CDN 的全局负载均衡设备发起 URL 访问请求。
  • CDN 全局负载均衡设备根据用户 IP 地址,以及用户请求的 URL,选择一台用户所属区域区域负载均衡设备,并将请求转发到此设备上。
  • 基于以下这些条件的综合分析之后,区域负载均衡设备会选择一个最优的缓存服务器节点,并从缓存服务器节点处得到缓存服务器的 IP 地址,最终将得到的 IP 地址返回给全局负载均衡设备
    • 根据用户 IP 地址,判断哪一个边缘节点距用户最近
    • 根据用户所请求的 URL 中携带的内容名称,判断哪一个边缘节点上有用户所需内容;
    • 查询各个边缘节点当前的负载情况,判断哪一个边缘节点尚有服务能力。
  • 全局负载均衡设备把服务器的 IP 地址返回给用户
  • 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
1
2
3
/* 总结
* 用户发起请求 => 本地DNS服务查找域名 => 查找不到 => CDN的DNS服务器 => 返回CDN的全局负载均衡设备IP => 用户请求这个IP => 区域负载均衡设备 => 最优缓存服务器节点IP => 用户请求这个IP => 返回数据
*/

组成

中心节点包括CDN 网管中心全局负载均衡 DNS 重定向解析系统,负责整个 CDN 网络的分发及管理。

CDN 边缘节点主要指异地分发节点,由负载均衡设备、高速缓存服务器两部分组成。

DNS

域名系统(Domain Name System), 掘金csdn

在网络的世界中,域名只是为了便于记忆和识别的唯一地址,真正起作用的还是 IP 地址

DNS 系统正是存储了域名和 IP 之间的对应关系,所以请求的时候需要到 DNS 服务器上找到域名对应的 IP

解析流程

  • 浏览器缓存,所以一般修改完 hosts 文件需要重启一下浏览器,否则默认还是走浏览器的缓存.可以找到则返回,向下一级查找
  • 本机系统缓存即 hosts 文件,其中存储了域名和其 IP 的映射.DNS 劫持
  • 本地域名解析服务系统,本地域名系统 LDNS 一般都是本地区的域名服务器,离当前位置较近.LDNS 一般都缓存了大部分的域名解析的结果,大部分的解析工作到这里就差不多已经结束了,以下为迭代查询
  • 根域名解析,本地域名解析服务器无法解析时,会向13 根发起域名解析请求
  • 根域名解析服务器返回*gTLD(Generic top-level domain)*给本地解析服务器,即该域名所属的顶级域及其所在的服务器,顶级域名即如:.com .cn 等等
  • 本地解析服务器已知顶级域名服务器地址后,发起解析请求
  • 顶级域名解析服务器返回 权限域名服务器 信息给本地解析服务器,权限域名服务器 即如:taobao.com
  • 本地解析服务器已知权限域名服务器地址后,发起解析请求.
  • 限域名服务器返回域名对应的 IP 地址给本地解析服务器
  • 本地解析服务器缓存相关信息,并返回给用户
  • 迭代查询和递归查询

TCP

传输控制协议(transmission control protocol)

SYN(synchronous),ACK(acknowledgement),PSH(push),FIN(finish),RST(reset),URG(urgent),seq(sequence number)

三次握手

工作流程
  • 客户端向服务端发送 SYN 表示想要建立连接
  • 服务端收到客户端的 SYN,返回 ACK 表示收到建立连接请求,此时客户端-服务端的连接建立
  • 服务端向客户端发送 SYN 表示想要建立连接
  • 客户端收到服务端的 SYN,返回 ACK 表示收到建立连接请求,此时服务端-客户端的连接建立
  • 第二步和第三步可以合成一步,因此要想建立连接至少有三步

数据传输

四次挥手

工作流程
  • 客户端发送 FIN 给服务端,表示要断开连接
  • 服务端收到 FIN,返回给客户端 ACK 表示客户端-服务端的连接已断开
  • 服务端发送 FIN 给客户端,表示要断开连接
  • 客户端收到 FIN,返回给服务端 ACK 表示服务端-客户端的连接已断开

UDP

HTTP

存在的问题

通信使用明文(未经加密的报文),内容可能被窃听

  • HTTP 协议在通信过程中不会对数据进行加密,采用明文传输,可能会导致数据泄漏,数据篡改,流量劫持等安全问题,通过一些手段很容易就知道通信内容了

无法证明报文的完整性,可能遭到篡改

  • HTTP 协议无法证明通信报文的完整性,无法确认收到的数据是否和发送的数据一致

不验证通信方的身份,可能遭遇伪装

HTTP2

SSL / TLS

SSL(Secure Sockets Layer)

两个问题

  1. 如何保证公钥不会被篡改

    • 公钥是放在数字证书中的,如果证书是可信的,那么公钥也就是可信的
  2. 非对称加密计算耗时太多,如何解决效率问题

    • SSL 通信过程中采用非对称加密 + 对称加密的加密方式.首先进行非对称加密,得到公钥和私钥,使用公钥私钥对对称加密的秘钥进行加密,之后就不用公钥和私钥了.数据传输的加密使用的是对称加密,对称加密效率很高,可以解决加密耗时的问题

工作流程(握手)

基本过程
1
2
3
1. 客户端向服务器索要并验证公钥
2. 双方协商生成'对话秘钥'
3. 双方采用'对话秘钥'进行加密通信
详细过程

客户端发出请求

  • 首先,客户端(通常是浏览器)先向服务器发出加密通信的请求
  • 在这一步,客户端主要向服务器提供以下信息
1
2
3
4
1. 支持的协议版本,比如TSL 1.0版
2. 一个客户端生成的随机数,稍后用于生成‘对话密钥’
3. 支持的加密方法,比如RSA公钥加密
4. 支持的压缩方法

服务器回应客户端

  • 服务器收到客户端的请求后,做出回应,回应包含以下内容
1
2
3
4
1. 确认使用的加密通信协议的版本,如果浏览器和服务器支持的版本不一致,服务器将关闭加密通信
2. 一个服务器生成的随机数,稍后用于生成‘对话密钥’
3. 确认使用的加密方法。比如RSA公钥加密
4. 服务器证书

客户端回应服务端

  • 客户端收到服务器回应以后,首先验证服务器证书。如果证书不是可信机构颁布、或者证书中的域名和实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信
  • 如果证书没有问题,客户端就会从证书中取出服务器的公钥,然后,向服务器发送下面三项信息
  • 到这一步为止,一共出现了三个随机数,然后用事先商量好的加密方法对随机数进行加密,生成最终的对话密钥,至于为什么要生成三个随机数,是因为让随机更加随机
1
2
3
1. 一个随机数,该随机数用服务器公钥加密,防止被窃听
2. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
3. 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的hash值,用来供服务器校验

服务器的最后回应

  • 服务器收到客户端的第三个随机数之后,计算生成本次会话所用的‘会话密钥’,然后向客户端最后发送下面信息
  • 致辞,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用‘会话密钥’加密内容
1
2
1. 编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送
2. 服务器握手结束通知,表示服务器的握手阶段已经结束,这一项同时也是前面发送的所有内容的hash值,用来供客户端校验

HTTPS

HTTPS 是在 HTTP 上建立 SSL 加密层,并对传输数据进行加密,是HTTP 协议的安全版

HTTPS 的优势

  • 数据隐私性:通信内容经过加密,每个链接生成一个唯一的加密密钥.采用加密(对称加密 + 非对称加密)解决
  • 数据完整性:内容传输经过完整校验.采用数据校验解决
  • 身份认证:第三方无法伪造服务端(客户端)身份.采用数字证书解决

HTTPS 的理解

  • HTTPS 并不是一个新的应用层协议,只是部分 HTTP 通信接口用 SSL 和 TLS 协议代替
  • 通常,HTTP 直接和 TCP 通信,当使用 SSL 后,则变成先和 SSL 通信,再和 TCP 通信
  • 在采用了 SSL 后,HTTP 协议就有了 HTTPS 的加密,证书和完整性保护的功能

实现过程

实现过程其实就是SSL/TLS 协议的握手过程,详情看 ssl 协议运行机制