Application Layer
约 8316 个字 44 张图片 预计阅读时间 55 分钟
应用层中会有大量的协议,需要记住协议的作用以及协议在客户端和服务端使用的端口
应用层概述
应用进程通信方式
- 客户/服务器(C/S, Client/Server)方式
- 浏览器/服务器(B/S,Browser/Server) 方式
- 对等(P2P,Peer to Peer)方式
C/S
C/S方式可以是面向连接的,也可以是无连接的。面向连接时,C/S通信关系一旦建立,通信就是双向的,双方地位平等,都可发送和接收数据。
客户机主动发起请求,需要知道服务器所在主机的IP地址,服务器被动等待请求。并且服务器上可以运行多种服务,需要一直运行着。
B/S
B/S方式可以看做C/S方式的特例,即客户软件改为浏览器,通常采取3层架构实现。
特点
- 界面统一,使用简单。客户端只需要安装浏览器软件
- 易于维护。对应用系统升级时,只需更新服务器端的软件,减轻了系统维护和升级的成本
- 可扩展性好。采用标准的TCP/IP和HTTP协议,具有良好的扩展性
- 信息共享度高。HTML是数据格式的一个开放标准,目前大多数流行的软件均支持HTML
- 需要注意的是,在一种浏览器环境下开发的界面在另一种浏览器环境下可能有不完全适配的情况,这时需要安装对应的浏览器
P2P
对等方式是指两个进程在通信时并不区分服务的请求方和服务的提供方。P2P方式从本质上看仍然是使用了C/S方式,但强调的是通信过程中的对等,这时每一个P2P进程既是客户同时也是服务器
服务器进程工作方式
- 循环方式:一次只运行一个服务进程,当有多个客户进程请求服务时,服务进程就按请求的先后顺序依次做出响应(阻塞方式)
- 使用无连接的UDP服务进程通常都工作在循环方式,即一个服务进程在同一时间只能向一个客户进程提供服务。(顺序服务)
- 并发方式:可以同时运行多个服务进程,每一个服务进程都对某个特定的客户进程做出响应(非阻塞方式)
- 面向连接的TCP服务进程通常都工作在并发服务方式,服务进程在同一时间可同时向多个客户进程提供服务。(并发服务)
域名系统
概述
域名系统(DNS)是互联网重要的基础设施之一,向所有需要域名解析的应用提供服务,主要负责将可读性好的域名映射成IP地址。
域名系统名字空间和层次结构
一个域名可以同时是一级域名和二级域名
- 域名的结构由若干个分量组成,各分量之间用小数点(.)隔开,总长不超过255个字符
- 各分量分别代表不同级别的域名。(≤63字符)
顶级域名
顶级域名TLD(Top Level Domain)一般有三类
- 国家或地区顶级域nTLD,也记为ccTLD (.cn 中国)
- 基础设施域.arpa (Address and Routing Parameter Area),专用于Internet基础设施目的
- 通用顶级域gTLD (.com .edu .gov ...)
国家顶级域名 .cn下的二级域名分为三类
- 类别域名7个(.edu.cn, .gov.cn, .org.cn, .net.cn, .com.cn, .ac.cn, .mil.cn)
- 行政区域名34个:省、直辖市、自治区、特区等行政区域名
- 无类别域名:例如 www.google.cn、www.tianya.cn等
域名管理
- 域名管理机构分级负责域名注册,低一级域名由高一级域名的下属机构管理
- .edu.cn下三级域名注册由CERNET负责
- 我国的其它二级域名注册由中国互联网络信息中心(CNNIC)负责
域名服务器
- 保存关于域树(domain tree)的结构和设置信息的服务器程序称为名字服务器(name server)或域名服务器,负责域名解析工作
- 每个名字服务器具有连向其它有关域名服务器的信息
- 域名与IP地址可以是一对一、一对多或者多对一的关系
- 域名解析过程对用户透明
域名系统的区域
- Internet上域名服务器系统也按域名层次树状安排。每个域名服务器管辖一部分域
- 一个域名服务器所负责或管辖(有权限的)范围称为管辖区(zone),简称为区
- 域名服务器的管辖范围以“区”为单位,而不是以“域”为单位
- 管辖区是域名“域”的子集。管辖区可以小于或等于域,但不可能大于域
名字服务器类别
- 权威名字服务器(authoritative name server):知道一个区的所有内容,每个DNS区至少应有一个IPv4可访问的权威名字服务器提供服务
- 根名字服务器(root name server) /根服务器(root server)
- 每个根服务器都知道所有的顶级域名服务器的域名及其IP地址
- 路由器把查询转发到距离递归服务器最近的一个根服务器(采用了任意播技术),提高了查询效率
- 根服务器并不直接把主机用户所查的域名转换成IP地址
- 根服务器共有13套,这些根服务器相应的域名分别是: a.rootservers.net - m.rootservers.net
- 更改根服务器数据只在a.rootservers.net上进行,然后同步到另外12套中,这样既能保证数据一致性,也提高了域名服务可靠性
- 顶级域名字服务器(TLD name server)
- 顶级域(TLD)名字服务器负责管理在该顶级域名服务器注册的所有二级域名
- 二级域名字服务器(second level domain name server)
- 每一个主机都必须在某个二级域名字服务器处注册登记。因此二级域名字服务器知道其管辖的主机名应当转换成什么IP地址
- 三级域名字服务器(third level domain name server),三级域及以下的名字服务器(例如zju.edu.cn)通常在用户本地区域,因此三级域及以下的名字服务器也统称为本地域名服务器
- 根名字服务器(root name server) /根服务器(root server)
- 递归解析器(recursive resolver)/递归服务器
- 每一个Internet服务提供者ISP(Internet Service Provider), 都至少有一个递归服务器,距离用户主机较近
- 当用户主机发出DNS查询报文时,这个查询报文就首先被送往该主机所在区域的递归服务器
域名解析过程
- 当某一应用进程需要进行域名解析时,该应用进程将域名放在DNS请求报文(UDP数据报, 端口号为53)发给递归服务器(使用UDP是为了减少开销)。递归服务器得到查询结果后, 将对应IP地址放在应答报文中返回给应用进程
- 域名查询有递归查询(recursive query)和迭代查询(或循环查询,iterative query)两种方式
- 主机向递归解析器/本地域名字服务器的查询一般采用递归查询
- 递归解析器/本地域名字服务器向根服务器可以采用递归查询,但一般优先采用迭代查询
递归查询
迭代查询
域名系统查询和响应
常用资源类型
DNS报文格式
报文字段解释
- 事务ID:DNS报文的ID标识。对于请求报文和其对应的响应报文,该字段的值是相同的。通过它可以区分 DNS 应答报文是对哪个请求进行响应的
- 标志:DNS报文中的标志字段,具体结构下页说明
- 问题计数:DNS查询请求的数目
- 回答资源记录数:DNS响应的数目
- 权威资源记录数:权威资源记录的数目
- 附加资源记录数:额外的记录数目(权威名字服务器对应IP地址的数目)
DNS报文格式的标志(Flags)字段
- QR(Query/Response):查询请求/响应的标志信息。查询请求时值为0;响应时值为1
- Opcode:操作码。其中,0表示标准查询;1表示反向查询;2表示服务器状态请求
- AA(Authoritative):授权应答,该字段在响应报文中有效。值为1时表示名称服务器是权威服务器;值为0时表示不是权威服务器
- TC(Truncated):表示是否被截断。值为1时,表示响应已超过512字节并已被截断,只返回前512个字节
- RD(Recursion Desired):期望递归。该字段能在一个查询中设置,并在响应中返回。该标志告诉域名服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为0,且被请求的域名服务器没有一个授权回答,它将返回一个能解答该查询的其他域名服务器列表。这种方式被称为迭代查询
- RA(Recursion Available):可用递归。该字段只出现在响应报文中。当值为1时,表示服务器支持递归查询
- Z:保留字段,在所有的请求和响应报文中,它的值必须为0
- Rcode(Reply code):返回码字段,表示响应的差错状态。常用Rcode有
- 当值为0(NoError)时,表示没有错误
- 当值为1(FormErr)时,表示报文格式错误,服务器不能理解请求的报文
- 当值为2(ServFail)时,表示域名服务器失败,因为服务器的原因导致没办法处理这个请求
- 当值为3(NXDomain)时,表示域名不存在,只有对授权域名解析服务器有意义,指出解析的域名不存在
- 当值为4(NotImp)时,表示查询类型不支持,即域名服务器不支持查询类型
- 当值为5(Refused)时,表示拒绝应答,一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答
DNS报文格式的问题部分
- 用来显示DNS查询请求的问题,通常只有一个问题
- 包含正在进行的查询信息,包含查询名(被查询主机名字)、查询类型、查询类
- 查询名(name):一般为要查询的域名,有时是IP地址,用于反向查询
- 查询类型(type):DNS查询请求的资源类型。通常查询类型为A类型,表示由域名获取对应的IP地址
- 查询类(class):地址类型,通常为互联网地址,值为1(IN)
DNS报文格式的资源记录(RR, Resource Record)部分
资源记录部分是DNS报文格式的最后3个字段,只有在DNS响应报文中才出现 ,包括 回答问题区域字段、权威名字服务器区域字段、附加信息区域字段。这3个字段都采用资源记录的格式
- 域名:DNS请求的域名
- 类型:资源记录的类型,与问题部分中的查询类型值相同
- 类:地址类型,与问题部分中的查询类值相同
- 生存时间:以秒为单位,表示资源记录的生命周期,一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。它同时也可以表明该资源记录的稳定程度,稳定的信息会被分配一个很大的值
- 资源数据长度:资源数据的长度
- 资源数据:表示按查询段要求返回的相关资源记录的数据
DNSSEC
DNSSEC依靠数字签名保证DNS应答报文的真实性和完整性,包括通过身份验证拒绝DNS数据存在的机制
域名系统高速缓存
为提高DNS查询效率,并减轻根域名服务器的负荷和减少Internet上的DNS查询报文数量,域名服务器广泛使用高速缓存,用来存放最近查询过的域名以及从何处获得域名映射信息的记录
好处
- 减小网络中的流量
- 减轻根域名服务器的负荷
域名系统隐私
DNS敏感数据主要的泄露途径
- 通信链路窃听:由于DNS的开放性,窃听者可以像窃听其他流量一样监听DNS流量。同时DNS查询并不经过任何的加密手段,因此,任何第三方的机构或个人很容易通过在用户和服务器之间进行搭线窃听,查看到用户所有的DNS查询信息
- 服务器收集:全球现有超过1000万台域名服务器,每天产生的域名查询信息已经达到了万亿级别,同时由于DNS日志已被广泛应用于各种DNS解析器软件中,因此用户的每条查询信息都可以被服务器记录下来
电子邮件
体系结构和服务
电子邮件系统体系结构
- 用户代理(user agent)——邮件客户端
- 传输代理(message transfer agent)——邮件服务器
- 简单邮件传输协议SMTP(Simple Mail Transfer Protocol)——邮件服务器之间传递邮件使用的协议
用户代理
用户代理是一个程序,用户通过它和电子邮件系统交互
功能
- 显示入境邮件信息
- 邮件处置:删除邮件、转发邮件、保存邮件、过滤/搜索邮件
- 自动处理邮件:邮件过滤、自动回复、自动转发
- 发送邮件
- 邮件列表:允许用户通过一个命令把相同的邮件发送给群发列表中的每个人。可由用户代理在本地维护或远程维护一个在邮件传输代理上的群发名单
- 其它功能:在邮件底部追加签名块(signature block)、更正拼写错误和计算表名该邮件是否有效的数字签名
邮件传送
邮件传输采用的协议是SMTP:SMTP利用TCP可靠地从客户向服务器传递邮件,使用端口25。SMTP有3个阶段(连接建立、邮件传送、连接关闭)。
SMTP是一个简单的ASCII协议,邮件必须为7位ASCII
SMTP的不足
- 不包括认证
- 传输ASCII而不是二进制数据
- 邮件以明文形式出现
邮件格式
包括首部header(必须含有一个From:首部行和一个To:首部行,还可以包含Subject: 等其他可选的首部行)和消息体(邮件正文)
最后传递
最终交付(邮件访问)协议: 从邮件服务器的邮箱中获取邮件
- POP3:Post Office Protocol-Version 3,第三版邮局协议
- IMAP:Internet Message Access Protocol,Internet邮件访问协议
- Webmail(HTTP):基于Web的电子邮件
为什么不能使用SMTP获取邮件?
接收方的用户代理不能使用 SMTP 从传输代理获取邮件,因为取邮件是一个拉操作,而 SMTP 是一个推协议,通过引入最终交付(邮件访问)协议来解决这个问题。
POP3协议
- 当用户代理打开一个到端口110上的TCP连接后,客户/服务器开始工作
- POP3的三个阶段:
- 认证(Authorization):处理用户登录的过程
- 事务处理(Trnsactions):用户收取电子邮件,并将邮件标记为删除
- 更新(Update):将标为删除的电子邮件删除
IMAP
- IMAP是较早使用的最终交付协议—POP3(邮局协议,版本3)的改进版
- 邮件服务器运行侦听端口143的IMAP服务器
- IMAP还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件
- 与POP3不同,IMAP服务器维护了IMAP会话的用户状态信息,例如,文件夹的名字以及哪些邮件与哪些文件夹相关联
POP3 vs IMAPv4
Webmail
- 使用Web作为界面,用户代理就是普通的浏览器
- 用户及其远程邮箱之间的通信通过HTTP进行
WWW
WWW体系结构概述
- 服务器
- Web页面(HTML文档):包含到多种对象或链接
- Web对象(包括:静态对象和动态对象):可以是 HTML文档、 图像文件、视频文件、声音文件、脚本文件等
- 对象用URL(统一资源定位符)编址:协议类型://主机名:端口//路径和文件名
- 客户端
- 发出请求、接收响应、解释HTML文档并显示
- 有些对象需要浏览器安装插件
统一资源定位器URLs
URI
URI与URL有所不同,URL告诉资源的名字以及如何找到资源,但是URI仅告诉资源的名字
静态Web(对象)
- 静态对象与静态网页
- 文本,表格,图片,图像和视频等多媒体类型的信息(实现语言:标记语言,如:HTML,XML,PHP等)
- 字体、颜色和布局等风格类型的信息(实现语言:层叠样式表CSS)
- 动态对象与动态网页
- 交互信息,比如,用户注册信息、登录信息等(实现:PHP/JSP等语言+MySQL等数据库)
- 链接:超链接(HyperLinks)
HTML和XML
动态Web和Web应用
动态Web概述
- 动态Web页面
- 通用网关接口CGI (*.cgi)
- 脚本语言+数据库技术 (.php, .asp, *.aspx)
- 客户端动态网页(*.js)
通用网关接口CGI
运行流程
- User fills in form
- Form sent back
- Handed to CGI
- CGI queries DB
- Record found
- CGI builds page
- Page returned
- Page displayed
CGI是运行在服务器上的一段程序
脚本语言+数据库技术
PHP实现是将PHP脚本文件插入到原本的页面代码中
这些脚本程序都是运行在服务器上的,可能会导致服务器的压力过大。为了降低服务器的负载,并且加快客户端的反应速度,一些简单的请求以及不涉及服务器中数据库中内容的请求可以直接在客户端本都完成。
Client-side dynamic web page generation
从HTML 4.0开始,客户端浏览器本地也可以运行script代码来进行页面的动态渲染。
典型的动态Web技术:AJAX
- AJAX:Asynchronous JavaScript and XML
- 超文本标记语言HTML+CSS: 用于Web网页内容的显示
- 文档对象模型DOM(Document Object Model): 文档对象模型 (DOM)是HTML和XML文档的编程接口,其本质上是页面的API,允许程序读取和操作页面的内容、结构和样式;采用树形结构组织
- 扩展标记语言XML(eXtensible Markup Language):用于程序与服务器交换应用数据
- 异步式工作方式:用于发送和检索XML数据
- JavaScript:用于将以上所有功能进行组合,并协同工作
浏览器中可以添加一些特殊的使用脚本语言实现的插件来方便用户的使用,本质上就是对页面元素的修改与拓展
HTTP协议
- 超文本传输协议HTTP( HyperText Transfer Protocol)在传输层通常使用TCP协议,缺省使用TCP的80端口
- HTTP为无状态协议,服务器端不保留之前请求的状态信息
- 无状态协议:效率低、但简单
- 有状态协议:维护状态相对复杂,需要维护历史信息,在客户端或服务器出现故障时,需要保持状态的一致性等
HTTP发展现状
HTTP1.0执行过程
加入用户输入URL建立连接,并且该页面中有两个图像
这种情况下效率很低
非持久连接和持久连接(HTTP1.x)
- 非持久连接
- HTTP/1.0缺省为非持久连接
- 持久连接
- HTTP/1.1缺省为持久连接:在相同的TCP连接上,服务器接收请求、响应;再接收请求、响应;响应后保持连接
- HTTP/1.1支持流水线机制:需要按序响应
- 经历较少的慢启动过程,减少往返时间:降低响应时间
思考题
Suppose within your Web browser you click on a link to obtain a Web page. Suppose that the IP address for the associated URL is not cached in your local host, so that a DNS lookup is necessary to obtain the IP address. Suppose that n DNS servers are visited before your host receives the IP address from DNS; the successive visits incur an RTT of RTT1, ..., RTTn. Further suppose that the Web page associated with the link contains exactly one object, a small amount of HTML text. Let RTT0 denote the RTT between the local host and the server containing the object. Assuming zero transmission time of the object, how much time elapses from when the client clicks on the link until the client receives the object?
答案与解析
DNS解析过程所需的时间为 \(RTT_1 + RTT_2 + ... + RTT_n\),页面解析所需时间为 \(2\times RTT_0\) (因为TCP有一个连接建立的过程),所以总时间为 \(2\times RTT_0 + RTT_1 + ... RTT_n\)
Suppose the HTML file indexes three very small objects on the same server. Neglecting transmission times, how much time elapses with
(1) Multiple HTTP connections and sequential requests
(2) persistent HTTP connection and sequential requests
(3) persistent HTTP connection and pipelined requests
答案与解析
(1) \(2\times RTT_0 + RTT_1 + ... RTT_n + 3\times 2\times RTT_0\),每一个图片的请求都需要重新建立连接(不需要考虑关闭的时间是因为可以不等待这个关闭,直接发起下一次连接)
(2) \(2\times RTT_0 + RTT_1 + ... RTT_n + 3\times RTT_0\),因为连接保持了,所以后面获取图片就不需要新建立连接了
(3) \(2\times RTT_0 + RTT_1 + ... RTT_n + RTT_0\),流水线情况一次就能获得所有图片
HTTP报文结构:请求报文
具体方法包括
HTTP响应报文:状态码
- 状态码都是三位数字
- 1xx 表示通知信息的,如请求收到了或正在进行处理。
- 2xx 表示成功,如接受或知道了。
- 3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
- 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
- 5xx 表示服务器的差错,如服务器失效无法完成请求。
- 典型的状态码
- 200 OK:请求成功,被请求的对象包含在该响应的数据部分
- 301 Moved Permanently:请求的对象被移走,新的位置在响应中通过Location: 给出
- 400 Bad Request:服务器不能解释请求报文
- 404 Not Found:服务器中找不到请求的文档
- 505 HTTP Version Not Supported:服务器不支持相应的HTTP版本
Web缓存技术与Web代理
- 浏览器缓存:在浏览器主机保存用户访问过的服务器Web页副本。再次访问该页,不必从服务器再次传输,提高访问效率
- Web代理服务器缓存:ISP安装Web代理缓存服务器,保存ISP客户访问过的服务器Web页副本。副本可以供ISP的所有客户访问,提高访问服务器的Web页效率
浏览器缓存
需要检查缓存版本是否过期(使用条件GET,如果过期会返回更新结果,如果没过期会返回未改变信号)
Web缓存技术与Web代理
浏览器缓存的只能是个人的访问信息,但是代理服务器缓存可以缓存多个主机的访问信息,进一步提高效率。
优点:降低时延、减少网络流量
性能分析
- 假设:
- 平均每个Web页对象大小: 1M bits
- 机构网络内用户向原始服务器请求对象速率为平均每秒15个请求:15/sec
- 互联网访问原始Web页的平均往返时延为2秒
- 接入链路速率为15Mbps
- 结果:
- 机构网络内带宽使用率1.5%,接入链路的使用率接近1
- 总的时延:= 互联网时延+接入链路时延+ 机构网络时延 = 2 sec + minutes + msecs(机构网络时延以毫秒记)
- 假设:
- 缓存代理访问命中率为40%
- 平均每个Web页对象大小: 1M bits
- 机构网络内用户向原始服务器请求对象速率为平均每秒15个请求:15/sec
- 结果:
- 机构网络内带宽使用率1.5%,接入链路的使用率接近0.6
- 总的时延 = 0.6 * (互联网延迟) +0.4 * (Web代理命中率的延迟)= 0.6 * (2秒+计10毫秒机构网络内延迟) + 0.4 * (计10毫秒机构网络内延迟) = ~ 1.2 secs
Web安全与隐私
Web缓存存在的困难,即Web缓存与原始服务器Web页一致性问题
- 启发式策略:服务器响应Web页的Last-Modified头和Expires头启发,原始Web页一段时间没更改,最近一段时间也不会更改。Expires头很少用
- 询问式策略:通过特殊的关键字头询问原始服务器,Web副本是否已更新
- 客户端:在发送的HTTP请求中指定缓存的时间,请求头包含If-modified-since: <date>
- 服务器:如果缓存的对象是最新的,在响应时无需包含该对象,响应头包含HTTP/1.1 304 Not Modified否则服务器响应HTTP/1.1 200 OK <data>
- 或者服务器向客户端返回Web页时带一个ETag: <页内容的标签>
- 客户端:请求中需要包含If-None-Match头让服务器比对If-None-Match :<Web页副本内容的标签>
访问安全
- 请求头中携带认证信息
- 服务器用cookies保持用户状态
Cookie
- Cookies一般包含5个字段
- 域指明Cookie来自何方,每个域为每个客户分配Cookie有数量限制
- 路径标明服务器的文件树中哪些部分可以使用该Cookie
- 内容采用“名字=值”的形式,是Cookie存放内容的地方,可以达到4K容量,内容只是字符串,不是可执行程序
- 安全指示浏览器只向使用安全传输连接的服务器返回Cookie
Cookie技术是把双刃剑
- 能分析用户喜好,向用户进行个性化推荐(Cookie可以实现跨站跟踪)
- 也能跟踪用户网络浏览痕迹,泄露用户隐私
- Cookie容易嵌入间谍程序,这是个误区,Cookie文件保存的只是文本串,没有可执行程序
流式音频和视频
流媒体概述
- 常见的流媒体服务
- 点播:提前录制好,边下载边播放(起始时延<10s;类VCR操作(例如拖动进度条)<1~2s)
- 直播:边录制边上传,边下载边播放(大规模直播往往有数秒的时延)
- 实时交互 :双方或多方实时交互式通信(时延<400ms可接受,VR则需要<25ms)
- 流媒体概念:连续媒体(音视频)经压缩编码、数据打包后,经过网络发送给接收方,接收方对数据进行重组、解码和播放
- 流媒体的特性
- 端到端时延约束
- 时序性约束:流媒体数据必须按照一定的顺序连续播放
- 具有一定程度的容错性:丢失部分数据包也可完成基本功能
- 流媒体面临的挑战
- 约束条件:网络特性(带宽有限、动态变化、延迟与抖动、丢失、异构性)
- 目标:流媒体服务质量要素(画质、启动延迟、平滑、交互性)
数字音视频与编码
- MPEG视频压缩
- 摄像机固定不变,演员慢慢走来走去:从前一帧中减去当前帧,对两帧之差运行JPEG算法
- 摄像机在推拉移动:需要某种方法来补偿这种运动,这正是MPEG擅长的
- MPEG的输出包括3类帧
- 帧内编码帧(I帧):包含了压缩的静止图片(帧内编码,用JPEG来压缩静止图像)
- I帧必须周期性地出现在媒体流中
- 流媒体直播中,后加入的观众需要收到I帧才能成功解码
- 如果任意一帧发生了接收错误,则后续非I帧无法解码(由于B/P帧依赖损坏的帧)
- 快进或者回退到某位置时,解码器需要从该位置前面的I帧开始计算
- I帧必须周期性地出现在媒体流中
- 预测帧(P帧):是与前一帧的逐块差值(帧间编码,消除跨帧的冗余度)
- 双向帧(B帧):是与前一帧和后一帧的逐块差值(帧间编码)
- 帧内编码帧(I帧):包含了压缩的静止图片(帧内编码,用JPEG来压缩静止图像)
流式存储媒体
- 浏览器从服务器下载流媒体文件
- 浏览器用户使用 HTTP 的 GET 报文接入到万维网服务器;这个超链指向一个元文件(有音/视频文件的统一资源定位符 URL)
- 万维网服务器把该元文件装入 HTTP 响应报文的主体,发回给浏览器
- 浏览器调用媒体播放器,把提取出的元文件传输给媒体播放器
- 媒体播放器使用元文件中的 URL,向媒体服务器发送 HTTP 请求报文,要求下载音/视频文件(如对应的某个GOP)
- 媒体服务器发送 HTTP 响应报文,把音/视频文件发送给媒体播放器;媒体播放器边下载边解压缩边播放(通过时间戳同步音频流和视频流)
如果到达就播放,把么效果一般不好,所以会有缓存
- 客户端缓冲区
- 客户端播放的是本地缓冲区的内容,而不是立即播放来自网络的实时内容
- 缓冲区内容小于低阈值标记:数据即将播完,容易出现卡顿;需要加速传输
- 缓冲区内容大于高阈值标记:增大播放时延,占用存储空间;可以减慢传输
- 需要的决策:需要多大缓存,服务器以多快速率发送,才能在不稳定的网络中,尽量满足用户期望:高清、低延迟、不卡顿
RTSP协议
- 实时流式协议RTSP (Real-Time Streaming Protocol)
- RTSP本身并不传送数据,是一个多媒体播放控制协议
- RTSP对用户下载的实时数据的播放情况进行控制,如:暂停/继续、后退、前进等。 又称为“互联网录像机遥控协议”
- RTSP 是有状态的协议,它记录用户所处于的状态(初始化状态、播放状态或暂停状态)
- RTSP 控制分组既可在 TCP 上传送,也可在 UDP 上传送
- RTSP 没有定义音频/视频的压缩方案,也没有规定音频/视频在网络中传送时应如何封装在分组中
- RTSP 协议本身没有规定音频/视频流在媒体播放器中应如何缓存,由协议的具体实现(和算法)负责
RTSP协议是一个控制协议
RTP/RTCP协议
一般认为这两个协议在传输层或者传输层与应用层中间
- 实时传输协议 RTP (Real-time Transport Protocol)
- RTP 为实时应用提供端到端的数据传输,但不提供任何服务质量的保证
- RTP 是一个协议框架,只包含了实时应用的一些共同的功能
- RTP 不对多媒体数据块做任何处理,而只是向应用层提供一些附加的信息,让应用层知道应当如何进行处理
- 实时传输控制协议 RTCP (RTP Control Protocol)
- RTCP 是与 RTP 配合使用的控制协议
- RTCP 的主要功能:服务质量的监视与反馈、媒体间的同步、播组中成员的标识
- RTCP 分组也使用 UDP 传送,但 RTCP 并不对声音或视像分组进行封装
- 可将多个 RTCP 分组封装在一个 UDP 用户数据报中
- RTCP 分组周期性地在网上传送,它带有发送端和接收端对服务质量的统计信息报告
直播与实时音视频
WebRTC协议栈
因为网络带宽随时间不断变化,所以需要选择合适的码率
流媒体动态自适应传输
动态自适应流媒体传输协议DASH
- 完整视频被拆分为固定时长 (2s-10s) 的视频片段(segment), 每段提供不同码率
- 视频片段与其对应的元文件(URL)一同存放于DASH服务器
- 客户端基于网络条件、缓冲大小等,对每个视频片段,自适应选择合适的视频码率来下载
DASH中普遍使用的自适应码率ABR(Adaptive bitrate)
内容分发
内容和Internet流量
存在问题:少量站点有很大的流量
服务器群和Web代理
服务器群支持大规模Web服务器
- 前端负责服务器请求的负载均衡
- 服务器访问相同的后端数据库
代理缓存帮助组织扩展Web
- 将服务器内容缓存到客户上以提高性能
- 实现组织的策略(如访问策略)
内容分发网络CDN
目的:将内容放到离用户比较近的地方,从而降低网络流量
优点:
- 降低响应时延,避免网络拥塞
- 避免原始服务器过载及防止DDoS攻击
- 分布式架构,具有良好的可扩展性
- 对用户透明,无需用户感知
具体实现
CDN可以扩展Web 服务器的客户端,这些客户端从就近的CDN结点(或缓存)处得到内容
DNS重定向实现CDN:将请求调度到较近或负载较轻的CDN服务器
P2P网络实现内容分发
P2P文件分发协议:BitTorrent
- 文件被划分为256Kb大小的块
- 具有种子(torrents)的节点发送或接收文件
跟踪器存储所有节点的metadata
BitTorrent 使得对等方可以下载种子(torrents)
分布式哈希表(Distributed Hash Tables ,DHTs)
分布式哈希表是一个完全分布式索引,可扩展到多客户端(或实体)
工作过程:
- 使用一个哈希函数hash把任何IP地址转换成一个160位的数字,该数字称为节点标识符(node identifier),并排好顺序successor函数表示后继节点
- 有些标识符的节点才对应于实际节点,其余的节点都不存在实际节点
- 关键字(key)也可以由哈希函数产生
- 节点必须请求successor(hash (torrent))来存储my-IP-address
分布式哈希表(仅仅只是拓展)
其他应用层协议
Telnet
远程登录是网络最早提供的基本服务之一,远程登录需要解决异构计算机系统的差异性问题,主要体现在对终端键盘输入命令的解释上。
Telnet协议使用TCP连接通信,服务器进程默认监听TCP23端口,服务器使用主进程等待新的请求,并产生从属进程来处理每一个连接。
Telnet协议引入网络虚拟终端NVT(Network Virtual Terminal),使用一种专门的键盘定义来屏蔽不同计算机系统对键盘输入的差异性,同时定义客户进程与远程服务器进程之间的交互过程。
NVT是Telnet协议定义的一组通用字符集,通过这种统一的数据表示方式,来保证不同硬件、软件与数据格式的终端与主机之间通信的兼容性。本地终端输入的字符首先由本地Telnet客户进程转换为NVT格式,通过网络将NVT格式的字符传输到远程主机,远程Telnet服务器进程再将NVT格式的字符转换为远程主机能够识别和处理的字符格式。
工作过程
Telnet可以模拟实现SMTP过程
FTP
文件传输协议FTP提供交互式的访问,允许用户指明文件的类型与格式,并允许文件具有存取权限。同时屏蔽了各计算机系统的细节,适用于在异构网络中任意计算机之间传送文件。
FTP使用C/S方式实现。
服务器主进程使用21端口,也是控制端口。连接建立后从属进程使用20端口进行数据传输,也就是数据传输进程。
TFTP
- 使用C/S方式和UDP协议实现
- 只支持文件传输而不支持交互
- 没有庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别
- 支持ASCII 码或二进制传送
- 支持对文件进行读或写
- 使用数据块进行传输,每次传送的数据PDU中有512字节的数据,但最后一次可不足512字节
TFTP的工作过程类似于停等协议。开始工作时,TFTP客户进程发送一个读请求PDU或写请求PDU给TFTP服务器进程,其UDP端口号为69。
SNMP
进行网络管理的功能
- 配置管理(Configuration Management)
- 故障管理(Fault Management)
- 性能管理(Performance Management)
- 计费管理(Accounting Management)
- 安全管理(Security Management)
SNMP协议实现
- SNMP使用无连接的UDP协议实现,众所周知UDP协议不保证可靠交付
- SNMP使用C/S方式实现
- 代理运行服务器端进程在UPD端口161接收get或set报文以及发送response报文,与161端口通信的客户端进程则使用临时端口
- 管理器运行客户端进程在UPD端口162接收来自代理的trap报文