2.1应用层协议原理
2.1.1网络应用程序体系结构
1. 客户-服务器体系结构
- 有一个总是打开的主机成为服务器,服务于其他称为客户的请求。客户之间不直接通信;服务器具有固定的、周知的地址,即IP地址。
- 数据中心:配备这大量主机,用于创建强大的虚拟服务器;
2.P2P体系结构
- 对服务器几乎没有依赖;
- 面临的挑战:ISP 友好,安全性,激励;
2.1.2进程通信
不同端系统上的进程,通过跨越计算机网络交换报文相互通信。
1.客户和服务器进程
发起通信的进程被标记为客户,在会话开始时等待联系的进程是服务器;
2.进程与计算机网络的接口
- 进程通过套接字的软件接口向网络发送报文和从网络接受报文;
- 套接字是同一台主机内应用层与运输层的接口,套接字也叫应用程序编程接口;
3.进程寻址
- 主机的地址
- 定义在目的主机中接收进程的标识符
2.1.3可供应用程序使用的运输服务
在套接字的另一方,运输层协议负责使该报文进入接收进程的套接字。运输层协议不止一种。
1. 可靠数据传输
2. 吞吐量
3. 定时
4. 安全性
2.1.4因特网提供的运输服务
- TCP服务
包括面向连接服务和可靠的数据传输服务。
- 面向连接的服务:在应用层数据报文开始流动前,TCP让客户和服务器互相交换运输层的控制信息。在握手阶段,一个TCP连接就在两个连通的套接字简历,双方的进程可以在次连接上同时进行报文的收发。
- 可靠地数据传输服务:当应用程序的一端讲字节流传进套接字是,他能够依靠TCP将相同的字节流交付给接收方的套接字,没有字节的丢失和冗杂。
- TCP 安全
- UDP 服务
仅提供最小服务,UDP是无连接的,两个进程通信前没有握手的过程,提供一种不可靠的数据服务
2.1.5 应用层协议
- 交换的报文类型,例如是请求报文还是响应报文;
- 各种报文;类型的语法。例如报文中的各字段以及这些字段如何描述;
- 一个进程何时以及如何发送报文;
- web的应用层协议是 HTTP,它定义了在浏览器和Web服务器之间传输的报文格式和序列。
2.2 Web 和 HTTp
2.2.1 HTTP的概况
- Web的应用层协议是超文本传输协议,它是 Web 的核心;
- HTTP 有两个程序实现:一个客户程序和一个服务器程序,两个程序分别运行在不同的端系统中,通过交换 HTTP 报文进行会话;
- HTTP 定义了这些报文的结构以及客户和服务器进行报文交换的方式;
- HTTP 定义了 Web 客户向 Web 服务器请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式;当用户请求一个Web 页面时,浏览器向服务器发出对该页面中所包含对象的 HTTP 请求报文,服务器接收到请求并用包含这些对象的 HTTP 响应报文进行响应;
- HTTP使用 TCP 作为它的支撑运输协议;HTTP 客户首先发起一个与服务器进程的 TCP 连接,一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问 TCP;
- HTTP 服务器不保存关于客户的任何信息,所以 HTTP 是一个 无状态协议。
2.2.2 非持续连接和持续连接
- 非持续连接:每个 TCP 连接只传输一个报文一个响应对象;总的响应时间就是两个 RTT 加上服务传输文件的时间(响应时间Total=2RTT + 文件发送时间)
- 持续连接:发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送;必须为每一个请求的对象建立和维护一个全新的连接,给服务器带来的负担太大了
2.2.3 HTTP 报文格式
- HTTP 请求报文
- HTTP 响应报文
2.2.4 用户与服务器的交互:cookie
cookie技术的四个组件
1. 在 HTTP 响应报文中的一个 cookie 首部行;
2. 在 HTTP 请求报文中的一个 cookie 首部行;
3. 在用户端系统中保留一个 cookie 文件,并由用户的浏览器进行管理;
4. 位于 Web 站点的一个后端数据库
cookie 可以用于标识一个用户。用户首次访问一个站点时,需要提供一个用户标识,在后继会话中,浏览器像服务器传递一个 cookie 首部,从而该服务器标识了用户。cookie 可以在无状态的 HTTP 之上建立一个用户会话层。
2.2.5 Web 缓存
Web 缓存 也叫代理服务器,代表初始 Web 服务器来满足 HTTP 请求的网络实体。
Web 缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
- 浏览器建立一个到 Web 缓存器的 TCP 连接,并向 Web 缓存器的对象发一条 HTTP 请求
- Web 缓存器 进行检查,看本地是否存储了该对象的副本,如果有,Web 缓存器就像客户浏览器用 HTTP 响应报文 返回该对象;
- 如果 Web 缓存器没有该对象时,它就打开一个与该对象的初始服务器的 TCP 连接。
- 当 Web 缓存器接收到该对象时,它在本地存储空间就存储一份副本,并向客户的浏览器用 HTTP 响应报文发送改副本。
- Web 缓存器是服务器也是客户;
- Web 缓存器能够大大减少一个机构的接入链路到因特网的通信量。
2.2.6 条件 GET 方法
HTTP 协议的一种机制,允许缓存器证实他的对象时最新的;用条件 Get 执行最新的检查
- 请求报文使用 GET 方法,并且请求报文中包含一个 “If-Modified-Since”首部行;
- 缓存器在将对象转发到请求的浏览器的同时,也在本地缓存了该对象,同时存储了最后修改日期;缓存器在存储该对象时也存储了最后的修改日期。
- 状态行 304 Not Modified,告诉服务器可以使用对象,能向请求的浏览器转发它缓存的该对象副本;
2.3 文件传输协议:FTP
2.4 Email的应用
Email的应用的构成组件
- 邮件客户端(读写Email消息,与服务器交互,收发消息)
- 邮件服务器(邮箱:存储发给该用户的Email;消息队列:存储等待发送的Email)
- SMTP 协议
2.4.1 SMTP
- 使用TCP进行email消息的可靠传输
- 端口是25
- 传输过程的三个阶段:握手、消息的传输、关闭、
- 命令/响应交互模式:命令是ASCII文本;响应是状态代码和语句;
- Email消息只能包含7位ASCII码
- HTTP 每个对象封装在独立的响应消息中
- SMTP是多个对象在由多个部分构成的消息中发送
2.4.2Email消息格式
SMTP:email消息的传输交换协议。
RFC 822文本消息格式标准
- 头部行header(TO From Subject)
- 消息体body(消息本身 只能是ASCII字符)
MIME:多媒体扩展 RFC 2045,2056
- 通过在邮件头部增加额外的行以声明MIME的内容类型
邮件访问协议
- POP:认证/授权和下载;
1. 认证过程
- 客户端命令:user,password
- 服务器响应:ok或者是err
2. 事务阶段
- List:列出消息数量
- Retr:用编号获取消息
- Dele:删除消息
- Quit
3. 下载并删除模式(无法重读该邮件)
4. 下载并保存模式(可以保留消息的拷贝)
5. POP3是无状态协议
- IMAP:更复杂和功能更多,能够操纵服务器上存储的消息;
- 所有消息统一保存在一个地方:服务器
- 允许用户利用文件夹组织消息
- 支持跨会话的用户状态:文件夹的名字;文件夹与消息ID之间的映射;
- HTTP:
2.5 DNS应用
域名系统服务器DNS:
- 一个由分层的DNS服务器实现的分布式数据库;
- 一个使得主机能够查询分布式数据库的应用层协议;
- DNS服务器通常是运行在BIND软件的UNIX机器,DNS协议运行在UDP之上,使用53端口
- DNS协议是应用层协议,将用户的主机名解析层IP地址
2.5.1 DNS 工作机理
如果只使用一个DNS服务器
- 单点故障;
- 通信容量;
- 远距离的集中式数据库;
- 维护
分布式层次数据库
- 根DNS服务器
- 顶级域(DNS)服务器
- 权威DNS服务器
本地DNS服务器: 每个ISP都有一台本地DNS服务器,起着代理作用,转发到DNS服务器层次结构中;
DNS地查询方式: 有递归查询和迭代查询。可以所有的查询凑采用递归查询,但是大部分是采用从请求主机到本地DNS服务器是用递归查询,其余查询是用迭代查询
DNS的缓存: 为了改善时延性能并减少在因特网到处传输DNS报文数量,DNS广泛采用缓存技术,DNS服务器在一段时间后会丢弃缓存的信息。
2.5.2 DNS记录和消息格式
DNS记录: 资源记录提供了主机名到IP地址的映射(Name,Value,Type,TTL)
DNS报文: DNS查询和回答报文,有着相同的格式
2.6 P2P应用
2.6.1 P2P文件分发
- 在P2P文件分发过程中,每个对等方能够重新分发它所有的该文件的任何部分,从而在分发过程中协助该服务器,P2P文件共享协议是 BitTorrent。
- BitTorrent
- 参与一个文件分发的所有对等方的集合称为洪流。在洪流的对等方彼此下载等长度的文件快,当一个新的对等方首次加入时,它是没块的,但是随着时间的流逝,它累积越来越多的块,一旦它获得一个的完整的文件,它可以选择继续留在洪流中并继续向其他对等方上载块,也可以选择离开。同时,任何对等方可能在任何时候仅具有块的子集就离开洪流,并在以后重新加入洪流。
- 稀缺优先优先向附近的对等方请求那些最稀缺的块,使最稀缺的块得到更为迅速的重新分发,均衡每个快在洪流的副本数量。