应用层协议原理
端到端的通信
网络核心设备不在应用层起作用
网络应用程序体系架构
客户机/服务器(CS)
- 服务器
- 总是打开的
- 具有固定、众所周知的IP地址(域名)
- 主机集群常被用于创建强大的虚拟服务器
- 客户机
- 同服务器端通信
- 可以拥有动态IP地址(不同方式上网、分配IP随机)
- 客户机相互之间不直接通信
- 可以间断的同服务器连接
P2P
- 特点
- 没有总是打开的服务器(既能做服务器,也能接收)
- 主机直接相互通信
- 间歇连接并且改变IP地址
- 优点:自拓展性
- 缺点:难以管理
两者混合
举例:即时讯息
- 两个聊天用户之间是P2P
- 注册、查询通过服务器
- 用户上线时要在中心服务器上进行注册
进程通信
- 进程:运行在端系统中的程序
- 客户进程:发起通信的进程
- 服务器进程:等待联系的进程
具有P2P体系结构的应用程序既有客户进程,又有服务器进程
- 同一主机上的两个进程通过内部进程通信机制进行通信
- 不同主机上的进程通过交换报文相互通信
套接字(Socket)——应用程序编程接口API
进程和计算机网络的接口
- 进程通过它的套接字在网络上发送和接收报文
- 套接字类比门户
- 发送进程把报文推出门户
- 发送进程假定门户到另一侧之间又运输设施,该设施可以传送报文到接收进程
- 用户通过API对传输层的控制仅限于:选择传输协议和可设定的几个参数
进程寻址
- 为了一个进程接收报文,主机上的进程需要一个标识,包括IP地址和端口号(因为一台主机上有多个进程)
应用层协议
应用层协议头部往往不需要编址信息
定义内容
- 报文类型,如请求报文和应答报文
- 报文类型的语法:报文中各个字段及其详细描述
- 字段的语义,即包含在字段中的信息的含义
- 进程何时、如何发送报文及对报文进行响应
分类
- 公共邻域协议
- 由RFC文档定义
- 专用协议
常见应用的传输服务需求
码率 原文
720p(1280720)中等码率 2mbps,高码率 4mbps,极高码率 8mbps。
1080p(19201080)中等码率 4mbps,高码率 8mbps,极高码率 16mbps。
因特网传输协议提供的服务
- TCP(见第一章)
- UDP
安全的TCP:SSL/TLS
Web应用和HTTP协议(重要)
网页由许多对象组成
每个对象被一个URL(Uniform Resource Locator,统一资源定位符)寻址
HTTP协议
Hyper Text Transfer Protocol,超文本传输协议
特点
使用TCP
- 客户初始化一个与HTTP服务器80端口的 TCP连接 (创建套接字)
- HTTP服务器接受来自客户的TCP连接请求, 建立连接
- Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
- 最后结束(或叫关闭)TCP连接
无状态
HTTP服务器不维护客户先前的状态信息(应用层session)
补充
维护状态的协议非常复杂
必须维护过去历史
如果server/client崩溃,它们各自的状态视图可能不一致,因此必须保证协调一致
HTTP连接
非持久HTTP连接
- 每个TCP连接上只传送一个对象,下载多个对象需要建立多个TCP连接
- HTTP/1.0使用非持久HTTP连接
- 最大好处节约资源,一定程度上降低时延
持久HTTP连接
- 一个TCP连接上可以传送多个对象
- HTTP/1.1默认使用持久HTTP连接
响应时间模型
定义往返时间RTT(Round-Trip Time)
响应时间:
• 1个RTT用于建立TCP连接
• 1个RTT用于HTTP请求/响应消息的交互
• Html文件传输时间
total = 2RTT+transmit time
- 非持久HTTP连接每个对象需要两个RTT,OS必须为每个TCP连接分配主机资源,大量客户的并发TCP连接形成服
务器的严重负担 - 持久HTTP连接:服务器发送响应信息后保持连接,同1客户/服务器的后续HTTP 消息继续在该连接上传送
HTTP报文
请求报文request
请求行:get、post、head(调试)
HTTP/1.1 方法类型增加了PUT、DELETE
get后为相对路径
host:访问服务器全局标识
user-agent:用户代理
上载表单(各字段)输入值
- Post方法
- 网页时常包含表单输入
- 输入值在请求报文的实体主体中被上载到服务器
- URL方法
- 使用GET方法
- 表单(各字段)输入值被上载,以URL请求行的字段:www.somesite.com/animalsearch?monkeys&banana
响应报文response
Last-Modified:上一次更新时间
常见响应状态码
- 200:OK
- 301:Moved Permanently
- 400:Bad Request
- 404:Not Found
- 505 :Version Not Supported
Cookies
用于跟踪用户
- cookies头部行在HTTP请求消息中
- cookies头部行在HTTP响应消息中
- cookies 文件保存在用户主机中并被用户浏览器管理
- cookie也保存在Web站点的后端数据库
Web缓存(代理服务器)
目标:代表起始服务器满足HTTP请求
缓存的同步是关键问题
- 用户配置浏览器:Web访问经由缓存
- 所有HTTP请求指向缓存
- 对象在缓存中:缓存器返回对象
- 否则缓存器向起始服务器发出请求,接收对象后转发给客户机
- 既是服务器又是客户机
- 为什么需要Web缓存器
- 减少对客户机请求的响应时间
- 减少内部网络与接入链路上的通信流量
- 能从整体上大大降低因特网上的Web流量
条件GET方法----解决同步问题
目的:证实缓存器中的对象是否为最新
缓存器:在请求报文中包含对象最后修改时间
FTP(不纳入考试范围)
端口号:网络进程的编址
FTP使用2个端口:21(指令)、20(数据交换)
21号端口传送时间过长会中断连接
FTP是有状态的 要用户认证
过程
- FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接,指定TCP作为传输层协议
- 客户在建立的控制连接上获得身份认证(authentication:认证 authorization:授权)
- 客户在建立的控制连接上发送命令来浏览远程主机的目录.
- 当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户
的TCP数据连接 - 1个文件传输后,服务器结束这个TCP数据连接
建立模式
主动模式
被动模式
邮件传输
电子邮件
组成部分
- 用户代理:允许用户阅读,恢复,转发,保存,编辑邮件信息
- 邮件服务器:存放用户接收的邮件信息;外出报文队列;运行邮件协议
- 简单邮件传送协议和邮件接收协议:SMTP(发)、POP3(收)、IMAP(收)
mail server不会主动把邮件推送给user agent,因为user agent不知道在哪里
SMTP(推)
客户使用TCP来可靠传输邮件消息到服务器端口号25
直接传送: 发送服务器到接收服务器
传输的3个阶段:握手 (问候) ;邮件消息的传输 ;结束
特点:
- SMTP使用持久连接
- SMTP 要求邮件消息(header & body)必须是7-bit ASCII
- SMTP服务器使用CRLF.CRLF(\r\n)来判断邮件消息的结束
与HTTP比较: - HTTP:拉协议
- SMTP:推协议
- 都有ASCII 命令/应答交互, 状态码
- HTTP: 每个对象封装在它各自的HTTP响应消息中发送
- SMTP: 一个邮件内各个对象置于同一个邮件消息的多目部分发送
邮件格式
- RFC 822: 文本邮件消息格式标准
- MIME: Multipurpose Internet mail Extensions (多用途因特网邮件扩展, RFC 2045, 2046 ) 增添额外的信头头部声明MIME content-type
邮件访问协议(收)
POP
Post Office Protocol 邮局协议[RFC 1939]110端口号
身份认证 (代理 <–>服务器) 并 下载邮件消息
有"Download-and-delete"和"Download-and-keep"模式
无状态
IMAP
Internet Message Access Protocol [RFC 3501] 143端口
更多功能特征 (更复杂!)
允许用户像对待本地邮箱那样操纵远程邮箱的邮件
保存所有邮件消息在一个位置: 服务器
允许用户在服务器的各文件夹中管理邮件消息
IMAP跟踪用户会话的状态信息 :文件夹和邮件消息IDs与文件夹名字的映射
DNS(重要)
域名系统 Domain Name System
ip地址的域名映射
分布式数据库
为什么不集中式DNS?
- 单点故障
- 巨大访问量
- 远距离集中式数据库
- 维护
在传输层对应UDP
功能
- 主机名到ip地址的转换
- 主机别名:一个主机可以有一个规范主机名和多个主机别名
- 邮件服务器别名
- 负载分配:DNS实现冗余服务器:一个IP地址集合可以对应于同一个规范主机名
过程
本地DNS
顶级域服务器(TLD)和权威DNS服务器
本地DNS服务器
- 严格来说不属于DNS标准层次结构
- 每个ISP都有一个本地DNS
- 由主机发出DNS请求,该请求被发往本地DNS服务器。
- 起着代理的作用,转发请求到层次结构中
查询方式
递归
问题:对顶层的服务器负担很重
迭代
DNS缓存和权威DNS记录更新
- 一旦名字服务器获得DNS映射,它将缓存该映射到局部内存
- 服务器在一定时间后将会丢弃缓存的信息(一般缓存10分钟)
- 本地DNS服务器一般都缓存由TLD服务器的IP地址
DNS记录
- type=A
- name = 主机名
- value = IP地址
- type=NS
- name = domain(域)
- value = 真实的规范主机名
- type=CNAME
- name 真实域名的别名
- type=MX
- name =邮件服务器的主机别名
- value =邮件服务器的真实规范主机名
如何插入记录
DNS协议,消息
在DNS中插入记录
安全问题
- 拒绝服务攻击
- 重定向攻击
- 利用DNS开展拒绝服务攻击
P2P文件共享
类似BitTorrent
(纯P2P架构)特点
- 没有总是在线的服务器
- 任意端系统之间直接通信
- 对等方之间可以简短连接并可以改变IP地址
P2P:集中式目录的问题
- 单点故障
- 性能瓶颈
文件分发
- BitTorrent是一种用于文件分发的流行P2P协议
- 一个洪流中的对等方彼此下载等长度的文件块(chunk),典型块长度为256KB
- 扰动:节点可能随时加入和退出
- 请求chunk:访问哪些节点有所需的节点,且节点速率最高
- 发送chunks:挑选节点速率最好的前4个,每隔30秒会随机选择其它节点,保证公平
tracker 服务器
多媒体的一些概念
CBR(constant bit rate) 固定码率
VBR(variable bit rate) 可变码率
DASH(Dynamic Adaptive Streaming over HTTP)
CDN(内容分发网络)
CDN: 将内容的拷贝存储在CDN节点中
将多份拷贝存储在地理上分散的不同站点来提供服务
用户向CDN请求内容
- 被定向到附近的拷贝,取得内容
- 如果网络路径拥塞,则可能选择其他的拷贝
- 深入(Enter Deep): 将CDN服务器部署在众多的接入网络中
- 靠近用户
- 邀请做客(Bring Home): 在少量(例如10个)靠近接入网的关键位置(例如IXP),建造大集群,邀请到ISP做客
减少端到端的时延