1. WAF 防火墙
WAF是通过检测应用层的数据来进行访问控制或者对应用进行控制,而传统防火墙对三、四层数据进行过滤.从而进行访问控制,不对应用层数据进行分析。
基本原理:WAF利用服务器API去获取应用层数据,然后匹配自己的规则库,利用正则表达式来分析判断数据的合法性,生成白名单,黑名单,最后,进行访问控制。
WAF常见的部署方式:
WAF常见部署方式
WAF一般部署在Web服务器之前,用来保护Web应用。
那么WAF能做什么?
WAF可以过滤HTTP/HTTPS协议流量,防护Web攻击。 WAF可以对Web应用进行安全审计,WAF可以防止CC攻击,应用交付。
WAF不能做什么?
WAF不能过滤其他协议流量,如FTP、PoP3协议,WAF不能实现传统防护墙功能,如地址映射,WAF不能防止网络层的DDoS攻击防病毒。
WAF的主要功能:
WAF主要是通过内置的很多安全规则 来进行防御。可防护常见的SQL注入、XSS、网页篡改、中间件漏洞等OWASP TOP10攻击行。当发现攻击后,可将IP进行锁定,IP锁定之后将无法访问网站业务。也支持防止CC攻击,采用集中度和速率双重检测算法。
基于WEB攻击特征库的正则表达式的匹配方式;策略规则组织成规则链表的方式,深度检查请求头部、请求提交内容,响应头部,响应内容体等内容进行逐条匹配检查。
主要可以防止以下攻击:HTTP协议合规性,SQL注入阻断,跨站点脚本/CSRF攻击防护,表单/cookie篡改防护,DoS攻击防护,敏感信息泄漏,目录遍历,防扫描器探测攻击。
防CC:CC攻击的原理就是攻击者控制某些主机不停地发大量数据包给对方服务器造成服务器资源耗尽,一直到宕机崩溃。CC主要是用来消耗服务器资源的,每个人都有这样的体验:当一个网页访问的人数特别多的时候,打开网页就慢了,CC就是模拟多个用户(多少线程就是多少用户)不停地进行访问那些需要大量数据操作(就是需要大量CPU时间)的页面,造成服务器资源的浪费,CPU长时间处于100%,永远都有处理不完的连接直至就网络拥塞,正常的访问被中止。
防止CC攻击的原理:可定义多条DOS策略,可支持多个URL匹配算法,可支持应用层IP匹配算法
WAF的多种部署模式:
WAF一般支持透明代理,反向代理,旁路监控,桥模式部署模式。
透明代理串接模式:
图:WAF部署场景-透明代理串接模式
透明代理部署模式支持透明串接部署方式。串接在用户网络中,可实现即插即用,无需用户更改网络设备与服务器配置。部署简单易用,应用于大部分用户网络中。
反向代理模式:
反向代理又分为两种模式,反向代理(代理模式)与反向代理(牵引模式)。
图:WAF部署场景-反向代理(代理模式)
WAF采用反向代理模式以旁路的方式接入到网络环境中,需要更改网络防火墙的目的映射表,网络防火墙映射WAF的业务口地址,将服务器的IP地址进行隐藏。
牵引模式:
图:WAF部署场景-反向代理(牵引模式)
WAF采用反向代理模式以旁路的方式接入到网络环境中,需要在核心交换机上做策略路由PBR,将客户端访问服务器的流量牵引到WAF上,策略路由的下一跳地址为WAF的业务口地址。
透明桥模式:
图:WAF部署场景-透明桥模式
透明桥模式是真正意义上的纯透明,不会改变更改数据包任何内容,比如源端口、TCP序列号,桥模式不跟踪TCP会话,可支持路由不对称环境。
图:WAF部署场景-透明代理下的HA主备模式
双机HA模式下,WAF工作于Active,Standby的模式,即其中一台WAF处于检测防护模式时,另一台为备用,不进行工作。当主WAF出现故障,或者与主WAF连接的上下行链路出现故障时,备用的WAF将协商进入检测防护模式。
流量的切换:根据流量来进行判断,从哪边来的流量走哪边。
当两边同时有流量的时候,需要使用主主模式,不需要心跳线。
图:WAF部署场景-反向代理下的HA主备模式
WAF在反向代理下通过VRRP协议来协商主备关系,正常情况下只有主机工作,备机不工作,当WAF主机出现问题时,备机自动切换为主机进行工作。
2. 流媒体
流媒体 CDN 系统的组成与关键技术
流媒体等同于在线影音。如电影、电视剧,流是指它们在网络上传输的状态
流媒体要求实时性,连续性,时序性。
1. 流媒体系统工作原理概述
视频播放的基本步骤:
Access, 文件获取。系统将多媒体文件由硬盘读取到内存。
Demux,解复用。将合在一起的视频和音频分开。
Decode,解码。将压缩后的视频和音频进行解码。
Output, 输出。包括音频输出和视频输出
流媒体的具体传送过程:
客户端 Web 浏览器首先向 Web 服务器请求一个展现描述的文件,用来获取播放和控制所需的一些信息。
客户端 Web 浏览器将展现描述文件交付给本地播放器,播放器进行初始化
播放器向流媒体服务器请求响应的流媒体数据,并在传送过程中实时交互控制信息。一旦流媒体数据抵达客户端。满足播放器缓冲要求后,开始实时播放。
2. 流媒体传送协议体系
流媒体传输过程中问题:
与纯文本数据相比,多媒体数据需要占用更多的网络带宽。增加了几千倍的压力。
多媒体需要实时的、稳定的网络传输,只有带宽和时延抖动维持在一定水平,才能保证流媒体在用户端平稳播放。
多媒体数据流突发性很强,单纯增加带宽往往不能解决这种突发问题。因此,需要多媒体应用程序都有接收端的缓存机制
为了应对以上问题,存在几个流媒体传输协议:
实时流传输协议 RTSP
实时传输协议 RTP
实时传输控制协议 RTCP
实时消息传送协议 RTMP
HTTP 流化协议
RTP和RTCP
RTP Realtime Transport Protocol 实时传输协议,定义包含音视频数据、序号、时间戳以及其他有用信息的标准分组结构的协议。简单地说,RTP 的任务是提供时间信息和实现流同步。
RTCP Realtime Transport Control Protcol 是 RTP 的伙伴协议,RTP 只负责流媒体数据包的交付,而不负责按顺序保证质量的交付,为了控制质量,RTCP 分组包中包含已发送的数据包数量、丢失的数据包数量等统计信息,服务端可以根据这些信息动态地改变传输速率。
RTSP
RTSP Real Time Streaming Protocol ,实时流传输协议。用来实现播放控制的协议,如流媒体的播放、暂停和继续。
RTMP
RTMP Real Time Message Protocol 实时消息传输协议。Adobe System公司为 Flash 播放器和流媒体服务器之间传输音频、视频和数据所开发的私有协议。
RTMP 基本通信单元是消息和消息块。消息有种类上看,分为:
协议控制消息
用于发送音频数据的音频消息
用于发送视频数据的视频消息
发送用户数据的数据消息
共享对象消息
命令消息
HTTP Streaming
HTTP Streaming 会将视频数据在服务器上进行编码,然后将编码后的数据进行更细粒度的分片,再把每个分片通过 HTTP 协议传输到客户端。
特点:
HTTP Streaming 的客户端需要对视频文件的每个分片发送HTTP请求。
因为采用分片的特点,客户端可以灵活控制HTTP请求发出的速度。
可以在播放过程中进行码率切换,结合网络带宽资源,为用户提供更好的体验。
内容文件预提取技术
内容文件预提取是指视频内容进入 CDN 以后,进入内容分发流程之前,CDN 系统对于内容的一系列过程。目的是:
为全网内容管理提供依据,比如对内容进行全网唯一标识,对内容基础信息进行记录
提高 CDN 服务效率或降低系统成本提供手段,比如内容切片
为满足业务要求提供能力,比如对同一内容进行多种码率的转换以满足动态带宽自适应。
视频转码。将已经压缩编码封装完成的视频流转换为另一个视频流,以适应不同的网络带宽,不同的终端和不通过的用户需求。
码率转换。不改变编码格式,将原始码率转换为新的码率以适合网络传送要求。
空间分辨率转换。通过“全编全解”架构中添加采样模块,利用采样算法和运动矢量的映射算法以及伸缩算法来降低视频码流的空间分辨率。
时间分辨率转换。指通过降低视频序列的频率,降低对解码设备处理能力的要求
编码格式转换。指将原始视频内容所采用的编码格式转换为终端能够解码播放的歌是。
文件切片。按照一定的规则将一个完整的文件切成大小一致的若干个小文件。目的是:
一些切片可以由其他Cache中获取,降低整个系统中重复复制内容的数量。
使边缘 Cache 能够支持自适应码率业务。
防盗链机制和实现
网站的盗链指通过技术手段,直接在本网站页面上向最终用户提供其他网站的内容,从而免费获取到其他网站的优秀资源。
防盗链常用形式:
利用 HTTP Referer 字段。,利用登陆验证信息。,利用cookie携带动态验证信息
利用POST下载,利用图形验证码,利用动态密钥。,在内容中插入数据,打包下载.
AWS举例:
完整的点播流解决方案通常使用 Amazon S3 存储内容,使用 AWS Elemental MediaConvert 处理基于文件的视频,并使用 Amazon CloudFront 分发内容。
第一种方法很容易实施,而且几乎每种移动设备和桌面设备都支持这种方法。您只需将内容放入 S3 存储桶,然后创建一个指向该存储桶的 CloudFront 分配即可。用户的视频播放器将使用 CloudFront URL(作为分配的一部分提供)请求视频文件。根据用户所在的位置,请求将被定向到最佳的边缘站点。CDN 将从其缓存中提供视频,如果视频尚未缓存,则从 S3 存储桶中获取。这种方法有几个缺点。它没有充分利用观看者的带宽。如果用户不想看完整个视频,他们永远不会观看的内容仍然会下载下来,您也需要为之付费。
第二种方法几乎始终是首选方法。一系列视频流式传输协议(包括 Apple 的 HTTP Live Streaming (HLS)、Dynamic Adaptive Streaming over HTTP (DASH)、Microsoft 的 Smooth Streaming (MSS) 以及 Adobe 的 HTTP Dynamic Streaming (HDS))会在用户观看过程中传输视频,并且通常会早于所需时间几秒钟获取即将观看的内容,从而改善了用户体验。回放速度变得更快,快速转发更高效,整体的用户体验也更流畅。通过这种方法,您只需为观看者所看内容付费,并充分利用了用户的带宽,而用户也可以更快地看到所需内容。
要实施第二种方法,您将需要执行更多操作。首先,您需要使用 MediaConvert 将您的视频文件转换为 HLS 格式(受到最广泛支持的流式传输协议)。这会将视频分成若干短片段,还会创建清单文件。然后,您需要在清单中指向 CloudFront 分配。最后,要播放直播流,您需要将清单 URL 嵌入用户播放您的直播流时所用的播放器。例如,要播放清单文件为 myStream/playlist.m3u8 且 CloudFront 分配为 d111111abcdef8.cloudfront.net 的直播流,您需要将以下 URL 嵌入播放器:http://d111111abcdef8.cloudfront.net/myStream/playlist.m3u8
专业术语
码率是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。 通俗一点的理解就是取样率, 单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件,但是文件体积与取样率是成正比的,所以几乎所有的编码格式重视的都是如何用最低的码率达到最少的失真。但是因为编码算法不一样,所以也不能用码率来统一衡量音质或者画质。
另一个常见的词是帧,它是一段数据的组合,它是数据传输的基本单位。就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。一帧就是一副静止的画面,连续的帧就形成动画,如电视图像等。
直播过程:
我们将视频直播整个流程主要分为几个关键阶段:视频采集、前处理、编码、推流、转码、分发、播放,下图为简化版直播系统的基本架构,后面我们再详细展开。
1. 采集,是视频直播开始的第一个环节,用户可以通过不同的终端采集视频,也就是主播直播的过程。iOS端适配性较好,采集起来比较简单。Android端因为一直以来市面机型多版本复杂种种情况,加大了一个库适配所有硬件的难度,采集起来相对比较困难。PC端则和摄像头驱动联系紧密,目前市面上最好的PC端源免费软件是OBS。
2. 前处理,业内有一种说法,80%的主播没有美颜根本没法看。所以美颜已经是对视频源进行前处理的标配功能,除此之外还有水印、模糊特效等,针对不同的手机系统提供不同的处理库。
3. 编码,编码时候我们需要处理的硬件兼容性问题和寻求码率和画质之前的平衡是最大的两个问题。iOS系统硬件兼容性比较好,可以采用硬编,Android系统则还是因为硬件机型问题,大多采用软编。
4. 推流与转码,在数据传输的整个过程中从主播端到服务器端,再到边缘节点,以及从边缘节点到播放端。为了让采集端的流适配各个平台端不同协议,一般都会在服务端进行转码处理,将视频文件转成不同格式,支持 RTMP、HLS和FLV等不同的协议。
5. 分发,随着移动直播兴起和游戏直播的持续火热,网络直播平台支持亿高并发是理论上应该做到的,为了优化终端观看直播的体验,一般都会采用CDN进行内容分发加速,实现高并发等能力。
6. 客户端播放,也就是解码和渲染,目前 iOS 端的播放兼容性较好,Android 的硬件解码和编码一样也存在兼容性问题。通常秒开、低延时等问题是需要在播放端来克服的。
缺点:
1.播放延时(网络延时)
网络延时这里指的是从主播端采集,到观众端播放,这之间的时间差。这里不考虑主播段采集对视频进行编码的时间,以及观众端观看对视频进行解码的时间,仅考虑网络传输中的延时。例如说下图中的网络延时。
2.网络抖动
网络抖动,是指数据包的到达顺序、间隔和发出时不一致。比如说,发送100个数据包,每个包间隔1s发出。结果第27个包在传输过程中遇到网络拥塞,造成包27不是紧跟着26到达的,而是延迟到87后面才达。在直播中,这种抖动的效果实际上跟丢包是一样的。因为你不能依照接收顺序把内容播放出来,否则会造成失真。网络抖动,会造成播放延时对应增大。如果网络中抖动较大,会造成播放卡顿等现象。这个之前在云计算上都不是什么难事。
3 CDN直播中用到的RTMP、HLS、HTTP FLV等协议都是在TCP的基础之上。TCP一个很重要的特性是可靠性,即不会发生数据丢失的问题。为了保证可靠性,TCP在传输过程中有3次握手,见下图。首先客户端会向服务端发送连接请求,服务端同意后,客户端会确认这次连接。这就是3次握手。接着,客户端就开始发送数据,每次发送一批数据,得到服务端的“收到“确认后,继续发送下一批。TCP为了保证传到,会有自动重传机制。如果传输中发生了丢包,没有收到对端发出的“收到”信号,那么就会自动重传丢失的包,一直到超时。由于互联网的网络状况是变化的,以及主播端的网络状况是无法控制的。所以当网络中丢包率开始升高时,重传会导致延时会不断增大,甚至导致不断尝试重连等情况,这样不能有效的缓存,严重情况下会导致观众端视频无法观看。
阿里云CDN
阿里云CDN主要分为缓存节点(一级缓存节点,二级缓存节点等),内容库,DNS服务器以及全局调度系统等。阿里云中CDN组件分层为服务层,应用层,系统层和设备层。服务层主要提供流媒体分发,大文件分发,应用加速,日志分析功能,应用层最核心功能实现的地方,包括全局负载,本地负载,缓存,监控等功能实现,系统层则是Centos.
CDN利用开源软件搭建自身节点,采用四层和七层负载均衡实现节点内负载均衡。阿里巴巴利用LVS实现四层负载均衡。LVS实现四层负载均衡,LVS采用DR模式,轮询进行负载均衡带调度,双LVS做主备,采用Tengine实现七层负载均衡,通过Nginx实现调度的,采用一致性HASH技术提高缓存率,阿里CDN使用swift HTTP处理引擎,回源,存储,以及索引等核心。目前CDN最热门的组合LVS+Nginx+Swift来实现基础的缓存加速功能。采用LVS+Nginx+Swift来实现基础的缓存加速功能。
腾讯云CDN
包括内容库,缓存模块,DNS服务调度模块,全局调度系统,简称GSLB,自行研发,推出HTTPDNS特点将原来域名解析协议换成了HTTP,通过HTTP将用户域名解析直接交给HTTPDNS服务器,能直接获取用户的IP地址,从而实现了更精准的基于用户IP地址的调度。
中国电信
整个CDN分为全局缓存节点,内容路由系统以及内容系统管理。整个系统包括内容注入,内容分发,内容发布等。目前电信主要负责两种主流分发技术:PUSH(主动分发)和PULL(被动分发)。一般是热点资源采用PUSH方法发送到边缘,通过缓存节点向上级内容拉取资源获得,内容路由可以分为全局负载GSLB和本地负载SLB两类。GSLB主要包括基于DNS和基于HTTP两类重定向,通过用户请求调到离用户最近的地方,SLB是进一步将用户请求调到流媒体服务器上,中国电信建立了CDN骨干节点,垂直建立多个分发加速子网络。