应用层协议原理
网络应用程序体系结构
1、客户 - 服务器体系架构(client-server architecture)
-
服务器主机总是打开,接收客户主机请求
-
客户之间不相互通信
2、P2P 体系结构
-
对数据中心的专用服务器仅有最小依赖
-
标识:发起通信为客户,等待联系为服务器
-
间断连接的主机间使用直接通信
- 这样的一组主机称对等方
-
自扩展性 self-scalability
- 向对等方发送文件
- 请求产生工作负载,但也为系统增加服务能力
进程通信
1、进程 process
-
def:运行在端系统的一个程序
-
通信进程对:每对两个进程互相发送报文
-
进程寻址的要求
- 主机地址
- 目的主机需指定接收进程的标识符
2、套接字 socket:向网络发送 / 接收报文的软件接口
3、应用程序编程接口 API
-
建立网络应用程序的可编程接口
-
运输层的控制
- 选择运输层协议
- 部分运输层参数
可供应用程序使用的运输服务
1、可靠数据传输:正确、完全地交付数据
2、吞吐量
-
带宽敏感 / 弹性应用
3、定时保证
-
交互式实时应用
4、安全性
因特网提供的运输服务
1、TCP 服务
-
面向连接:流动前互换运输层控制信息,结束后拆除连接
-
可靠数据传送:无差错、按适当顺序交付
-
拥塞控制
-
无加密机制
- 改进:* 安全套接字层(Secure Socket Layer,SSL)
2、UDP 服务
-
轻量级,仅提供最小服务
-
不可靠数据传送:不保证到达、可乱序
-
可选定数据的传输速率
-
无加密机制
应用层协议
1、RFC(Request For Comments)文档:一系列以编号排定的文件
-
位于公共域中
-
收录几乎所有互联网标准
2、超文本传输协议 HTTP
3、简单邮件传输协议 SMTP
HyperText Transfer Protocol
1、超文本传输协议 HTTP
-
定义报文的结构和客户、服务器进行报文交换的方式
-
实现:一个客户程序和一个服务器程序(P65)
-
支撑运输协议:TCP
-
无状态协议 stateless protocol:不保存关于客户的任何信息
2、连接方式
-
非持续连接 non-persistent connection
- 请求 / 响应经一单独 TCP 连接发送
- 为每个请求对象建立和维护一个全新连接
- 三次握手:发送确认 RTT - 返回确认 RTT - 传输
- 往返时间 Round-Trip Time,RTT
-
持续连接(默认)
- 请求 / 响应经相同的 TCP 连接发送
- 带流水线(默认):对对象的请求可依次发出,不必等待未决请求
3、报文格式
请求报文(P68,CR 回车,LF 换行)
-
组成:
- 第一行称请求行 request line
- 三个部分:方法字段 URL 字段 HTTP 字段
- 后继行称首部行 header line
- 实体体 entity body:POST 方法使用
- 第一行称请求行 request line
-
方法字段:GET POST HEAD PUT DELETE
- GET:请求对象、提交表单(HTML 表单)
- POST:提交表单
- HEAD:响应请求,但不返回对象
- * 试跟踪
- PUT:常与 Web 发行工具共用,上传对象到指定 Web 服务器指定路径
- DELETE:允许删除 Web 服务器上对象
响应报文(P69)
-
组成
- 状态行 status line
- 三个部分:协议版本字段 状态码 相应状态信息
- 首部行和实体体
- 状态行 status line
-
常见状态码:200 OK;301 请求对象已经永久转移;400/404;505 不支持的 HTTP 协议版本
4、Cookie
-
组成
- 响应报文中的一个 cookie 首部行
- 请求报文中的一个 cookie 首部行
- 用户端系统保留的一个 cookie 文件
- 位于 Web 站点的一个后端数据库
-
识别码 Set-cookie:用于标识一个用户
- * 用户隐私侵害
5、Web 缓存
-
Web 缓存器 Web Cache / 代理服务器 proxy server
- 配置后的浏览器请求被定向至代理服务器
- 发送给用户服务器的是保存的一份副本
- 从整体上大大降低因特网的流量
-
内容分发网络 Content Distribution Network,CDN:使大量流量实现本地化
-
条件 Get 方法:执行最新检查
- If-Modified-Since = Last-Modified -> 304 Not Modified
因特网电子邮件
1、组成:用户代理(user agent)邮件服务器(mail server)简单邮件传输协议(SMTP)
2、支撑应用层服务:TCP
3、SMTP
-
因特网电子邮件的核心
-
仅能采用简单的 7 比特 ASCII 表示
-
传送多谋体数据编码需先转码
-
无存留:一般不使用中间邮件服务器
-
使用持续连接
对比 HTTP
-
HTTP 不需要对多谋体数据编码转码
-
HTTP 是拉协议(pull protocol)而 SMTP 基本上是推协议(push protocol)
-
HTTP 封装对象,SMTP 将所有对象存放在一个报文中
4、邮件报文格式
-
首部:From To (Subject,其他可选首部行)
-
一个空白行
-
报文体(ASCII 格式)
5、邮件访问协议
-
第三版的邮局协议 Post Office Protocol - Version 3,POP3
- 三个工作阶段
- 特许(authorization):明文发送用户名和口令以鉴别用户
- 事务处理:取回报文;标记 / 删除报文标记、获取邮件统计信息(可选)
- 更新:在 quit 命令发出后结束会话
- 下载方式:下载并删除(不同机器不可读) / 下载并保留(可多端查看)
- 优点:会话中不包含状态信息,大大简化了服务的实现
- 三个工作阶段
-
因特网邮件访问协议 Internet Mail Access Protocol,IMAP
- 实现访问远程服务器文件夹
- 维护用户状态信息
- 允许用户代理获取报文的某些指定部分(灵活)
- 用户 -> 邮件服务器:HTTP 邮件服务器 -> 邮件服务器:SMTP
DNS
提供服务
-
核心:主机名 ->IP 名转换的目录服务
-
提供主机别名(host aliasing):此时原名称称规范主机名(canonical hostname)
-
邮件服务器别名
-
负载分配(load distribution):每个回答循环响应,在冗余的 Web 服务器间分配负载
工作机理
1、实现
-
一个分层的 DNS 服务器实现的分布式数据库
-
使主机可查询数据库的应用层协议
2、支撑应用层服务:UDP(53 号端口)
3、分布式、层次数据库
-
集中式的弊端
- 单点故障
- 通信容量(traffic volume)
- 远距离的集中式数据库
- 维护
-
服务器类型(P87)
- 根 DNS 服务器:提供 TLD 服务器的 IP 地址
- 顶级域服务器 TLD:提供权威 DNS 服务器的 IP 地址
- 权威 DNS 服务器:提供公共可访问的 DNS 记录
- 本地 DNS 服务器
-
查询方式:主机 -> 服务器递归查询,其余均为迭代查询
4、DNS 缓存
-
将映射缓存在本地存储器中
-
可绕过根服务器:存在缓存,立即返回 IP 地址
-
一段时间丢弃信息(默认:两天)
DNS 记录和报文
1、资源记录 Resource Record,RR
-
提供主机名到 IP 地址的映射
-
格式:(Name,Value,Type,TTL)
- TTL:记录的生存时间
2、Type 的不同类型
-
Type:A
- Name:主机名
- Value:主机名对应 IP 地址
-
Type:NS
- Name:个域
- Value:可提供主机 IP 地址的权威 DNS 服务器主机名
-
Type:CNAME
- Name:别名为 Name 的主机名称
- Value:该主机的规范主机名
-
Type:MX
- Name:别名为 Name 的服务器主机名称
- Value:该服务器主机的规范主机名
3、报文格式(P90)
-
首部区域(12 字节):标识符 标志 问题数 回答 / 权威 / 附加 RR 数
-
问题区域:名字 类型
-
权威区域
-
附加区域
4、插入记录:注册登记机构(registrar)验证域名唯一性,输入 DNS 数据库
*5、DNS 的健壮性
P2P 文件分发
1、def:成对间歇的主机(对等方)彼此直接通信
2、最小分发时间:
3、Bittorrent
-
洪流 torrent:参与一个特定文件分发的所有对等方的集合
-
块 chunk:典型(256kb)等长文件块
-
加入过程:向追踪器注册 - 周期性通知仍在洪流中
-
最稀缺优先 rarest first:优先请求那些邻居中副本数量最少的块,以均衡每个洪流的副本数量
-
疏通 unchoked:一个时间间隔后重新计算最高速率并修改对等方集合,保证最高速率
-
* 分布式散列表 DHT:分布在多个对等方的简单数据库
视频流和内容分发网 CDN
1、压缩比特率,提高图像质量
2、流式视频的重要衡量:avg 端到端时延
3、DASH:经 HTTP 的动态适应流
-
告示文件(manifest file)提供比特率和 URL
-
速率决定算法选择后继请求块
4、CDN
-
分类:专用 CDN 第三方 CDN
-
服务器安置原则
- 深入:靠近端用户,改善时延和吞吐量
- 邀请做客:邀请到放置在 IXP 的集群,降低维护和管理开销
-
机制:截获 重定向
-
* 实时测量
-
案例:油管 Netflix 迅雷
套接字编程
1、分类:协议标准定义 或 专用网络的网络应用程序
2、UDP 套接字
-
过程:键入,发送数据至服务器 - 转换报文,发送给客户 - 客户端监视器显示
-
需显式创建分组并附上目的地址
3、TCP 套接字
-
欢迎套接字和连接套接字
-
仅需将数据放入 TCP 连接