CDN
视频业务占据互联网流量的大部分
CDN解决了同时向大量的用户提供并发的流化的服务
视频以及编码
-
网络视频的特点
- 高码率:带宽是音频的10倍以上
- 可被压缩
- 占据互联网的大量流量
-
编码
-
使用图像内和图像间的冗余来降低编码的比特数
-
空间冗余(图像内)相同的颜色不是发送N个相同的值,而是发送一个值和重复的个数N
-
时间冗余(图像间)不是发送N+1帧的全部编码,而是发送其与N帧的区别
-
CBR:(constant bit rate) 以固定的速率编码
-
VBR:(variable bit rate) 编码速率随时间的变化而变化
-
-
-
DASH
dynamic adaptive streaming over HTTP
-
服务器
- 将视频文件分割成块
- 块独立存储,编码于不同的码率
- 告示文件(manifest file):提供不同块的URL
-
客户端
-
获取告示文件
-
周期性地测量服务器到客户端的带宽
-
查询告示文件,在一个时刻请求一个块
- HTTP头部制定字节范围
- 带宽足够选择最大码率的视频块
- 会话中的不同时刻,可以切换不同的编码块
-
自适应
- 有客户端去决定请求什么时候请求
- 请求什么编码速率的视频块
- 去哪里请求(向自己距离近的服务器发送URL,或者用高带宽的服务器请求)
-
优点
- 不用全部下载完才展示
- 一边下载一边播放
- 大幅减少用户点击反馈时间
-
CDN
-
content distribution Networks
旨在解决流化服务器的播放问题
-
单个,大的超级服务中心 “mega-server"方案
- 服务器到用户的路径长,跳数多,瓶颈链路的带宽小导致停顿
- ”二八规律“决定网络同时充斥着同一个视频的多个拷贝,效率低
- 周边网络的拥堵
- 单点故障和性能瓶颈
-
评述:相当简单但是不可拓展
-
”二八规律“:八成用户访问二成信息
-
CDN方案:
-
通过CDN向全网部署缓存节点,存储服务内容的拷贝,就近为用户提供服务
-
enter deep :部署在local ISP范围内部署缓存节点
- 跟接近用户,服务质量高,但是数量多,成本高
-
bring home : 部署在关键位置 (包括上层ISP)
- 采用租用线路将服务器簇连接起来
-
-
-
CDN运营商预先部署内容到啊缓存节点,CDN是在网边缘应用层提供的内容加速服务 (over the top)
-
客户端通过告示文件获取缓存节点地址
- 1.通过manifest告示文件直接定位;
- 2.通过域名解析(DNS)重定向到CDN;
-
-
DNS
Domain Name System 从域名到IP地址的一个转换
- IP地址标识主机和路由器 1.1.1.1
必要性
- IP地址不好记忆,不便人类使用(没有意义)
- 人类倾向于使用有意义的字符串来标识Internel上的设备
- 存在着字符串-IP地址的转换的必要性
- 由DNS负责转换为二进制的网络地址
DNS系统需要解决的问题
如何命名
层次化命名:DNS采用树状结构命名方法
-
Internet被分为几百个顶级域(top lever domains)
- 通用的:.com .edu .gov .int .mil .net .org .firm .hsop .web .arts .rec
- 国家的:.cn .us .nl .jp
-
每个域下面可以划分若干子域,区域的划分由区域管理者自己决定
-
每个区域都是互不相交的
-
树叶是主机
域名管理
- 一个域管理其下的子域
- 创建新的域必须征得所属域的同意
域与物理网络无关
域遵从组织界限而不是物理网络,一个域的主机可以不在一个网络,一个网络的主机不一定在一个域
域的划分是逻辑的,而非物理的
如何解析
解决方案
-
ARPANET的解决方法
- 用一个集中的维护站,维护一张主机名-IP地址的映射文件(Host.txt)
- 每台主机定时从维护站取文件
ARPANET当主机数量很大时,没有层次的主机名很难分配,文件的管理,发布和查找很麻烦
-
DNS的主要思路
-
分层的,基于域的命名机制
-
若干分布式的数据库完成名字IP地址的转换
-
UDP之上的端口53的应用服务
-
核心的Internet功能,但以应用层协议实现
- 在网络边缘处理的复杂性
-
DNS工作过程
-
应用调用 解析器 (resolver)
-
解析器作为用户向 Name Server 发出查询报文 (封装在UDP段中)
-
NameServer 返回响应报文(name/ip)
-
本地名字服务器(Local Name Server)
- 并不严格属于层次结构
- 每个ISP(公司大学居民区)都有一个本地DNS服务器(也即Local name server)
-
当一个主机发起DNS查询时,查询被发送到本地DNS
- 起一个代理作用(可以缓存),将查询转发到层次结构中
-
通常Local Name Serve在同一个子网中,减少延时
DNS记录
保存资源记录(RR)的分布式数据库
name | value | type | ttl
Type = A : Name 为主机 Value为IP
Type = CNAME : Name为规范名字的别名 Value 为规范名字
Type = NS : Name域名 Value 为该域名的权威服务器的域名
Type = MX : Value 为name对应邮箱服务服务器的名字
-
ttl (time to live)
- 决定了资源记录应当从缓冲中删除的时间
解析过程
-
目标名字在Local Name Server中
- 情况1 : 查询名字在该区域内部
- 情况2 : 缓存
本地找不到的时候就顺着根-TLD 一直找到权威名字服务器
-
递归查询
- 都走到根DNS服务器
- 根服务器负担很大
-
迭代查询
- 服务器返回的不是结果而是下一个NS的地址
- 权威名字服务器给出解析结果
- “我不知道这个名字,你可以问问这个服务器”
如何维护
权威DNS服务器
- 组织机构的权威服务器,提供组织机构的权威服务器可访问的主机和IP之间的映射
- 组织机构可以选择自己维护或者让某个服务提供商来维护
名字服务器
- 每个区域有一个名字服务器,维护他所管理的区域的权威信息(authoritative record)
- 名字服务器允许被放在区域之外,以保证可靠性
单个名字服务器具有的问题
- 可靠性问题:单点故障
- 拓展性问题:通信容量
- 维护性为题:远距离的集中式数据库
顶级域服务器(TLD)
-
负责顶级域名和所有国家级的顶级域名
- Netword solutions 公司维护 com TLD 服务器
- Educause 公司维护 edu TLD 服务器
新增域
-
在上级域的名字服务器新增: 1.指向找个新增的子域的域名 2.域名服务器的地址
-
运行新增子域的名字服务器,负责本域名的解析
-
到注册登记机构注册域名
- 提供权威DNS名字和IP
- 登记机构在com TLD服务器中插入两条RR记录
在networktopia.com的权威服务器中确保有:
用于Web服务器的类型为A的记录
用于邮件服务器的类型为MX的记录
是互联网的核心,但是运行在互联网的边缘(传输层之上)
DNS的安全性
DDos攻击
-
对根服务器流量轰炸,发送大量ping
- 失败:有防火墙和流量过滤,LocalDNS服务器缓存的TLD服务器的地址,无需查询根服务器
-
向TLD服务器流量轰炸攻击
- 效果一般,大部分DNS缓存的TLD
重定向攻击
-
中间人攻击
- 截获查询,伪造回答,从而攻击某个DNS回答的IP
-
DNS中毒,发送伪造应答,希望它缓存
-
技术上难度高
利用DNS基础设置进行DDos
- 伪造某个IP进行查询,攻击目标IP
- 查询放大,响应报文比查询报文大
- 效果有限
👆上面的都是CS模型的应用 下面是P2P模型的应用👇
Socket编程
Socket编程说的就是应用之间是如何实现通信的,而不是虚空传输
通过socket应用层将报文物理地向下传,目标应用进程才能物理地收到报文
- TCP/ip :引用进程通过socket接口进行传输
套接字: 应用进程与端到端之间的传输协议(UDP ,TCP)之间的门户
TCP套接字编程
可靠的字节流 (不保证界限)
- 标识IP地址和port捆绑关系的数据结构(标识进程的端节点)
struct sockaddr_in {
short sin_family;//地址簇
u_short sin_port;//端口号
struct in_addr sin_addr;//IP地址
char sin_zero[8];//对齐作用
}
struct hostent{
char *h_name;//主机域名
char **h_aliases;//主机一系列别名
int h_addrtype;//
int h_length;//ip地址的长度
char **h_addr_list;//ip地址列表
#define h_addr h_addr_list[0];
}
其中 *Socket() | bind() | accept() | connect | read() | write() | read() | close() *都是下层提供的接口
UDP套接字编程
不可靠的字节组服务
- 客户端和服务器之间没有连接
- 没有握手
- 发送端在报文中制定目标的IP和端口号
- 服务器从收到的分组中提取发送端的IP和端口号
笔者才疏学浅,请多多指教。