应用层
应用层协议原理
两种架构
- C/S 客户-服务器架构
- P2P 对等架构
P2P的自扩展性
:尽管每个对等方都请求文件产生工作量,但每个对等方也向其他对等方分发文件增加系统服务能力。
未来P2P面临的三大挑战:
- ISP友好。
大多数ISP都是下载比上传快。但是P2P加大了上传流量,给ISP带来了压力。需要设计对ISP友好的P2P。 - 安全性。
因为高度分布和开放特性。给安全带来了挑战。 - 激励
未来P2P的成功也取决于说服用户自愿向应用提供带宽,存储和计算资源。这对激励设计带来挑战。
进程通信
实际通信的是计算机上面的进程。
通过IP地址确定一个主机。通过端口号确定一个进程。
计算机提供了一套socket套接字。
使用的运输层服务
看几个方面:
- 可靠数据传输
- 吞吐量 带宽敏感
- 时延
- 安全
因特网提供的运输服务
TCP
- 建立连接
- 可靠数据传输
- 流量控制
- 拥塞控制
UDP
轻量级,全部由应用层实现
应用层协议
- 交换的报文类型, 例如请求报文和响应报文
- 各种报文类型的语法,如报文的各个字段及这些字段是如何描述的。
- 字段的语义,这些字段中包含的信息的含义。
- 一个进程何时以及如何发送报文,对报文进行响应的规则。
Web和HTTP
HTTP的RFC文档
- RFC 1945
- RFC 2616
报文格式
请求报文
- 请求行
- 首部行
- 空行
- 请求体
响应报文
- 状态行
- 首部行
- 响应体
cookie
HTTP本身是无状态的,通过cookie可以实现身份记录。
cookie技术有4个组件
- HTTP响应报文中的一个cookie首部行
- HTTP请求报文中的一个cookie首部行
- 用户端系统有一个cookie文件
- WEB站点的一个后端数据库
WEB缓存
WEB缓存器也叫代理服务器,它是能代表初始WEB服务器来满足HTTP请求的实体。WEB缓存服务器有自己的磁盘空间,保存最近请求过的对象的副本。
CDN就是一种WEB缓存。
条件GET方法
尽管高速缓存能快速响应,但是存储的副本可能是陈旧的,过期的。
HTTP协议有一种机制,允许缓存器证实它是最新的。这种机制就是条件GET方法
- 请求报文使用GET方法
- 请求报文中包含一个“if-Modified-Since”首部行,内容是上次服务器返回的最新修改时间
WEB服务器会检查如果没有修改就返回一个304状态码,缓存就知道还是最新的。
文件传输FTP
HTTP和FTP都是文件传输协议。(RFC959)
一些重要的区别,最显著的是FTP
使用两个并行的TCP连接来传输文件,一个是控制连接
,一个是数据连接
。
控制连接用于在俩主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及存放
和获取
文件的命令。
数据连接用于实际发送一个文件。
因为FTP使用一个独立的控制连接,所以我们也称FTP的控制信息是带外传送
的。
FTP首先在21端口建立一个控制连接
。
FTP的客户端通过控制连接发送用户标识和口令,命令。
FTP的服务端收到传输文件的命令后,建立数据连接用来传输文件。
每个数据连接传输一个文件后关闭。
FTP命令和回答
命令和回答都是以7比特的ASCII格式
在控制连接上发送的。为了区分连续的命令,每个命令后跟回车换行符。
- USER username: 用于向服务器发送用户标识
- PASS password: 用于向服务器发送用户口令
- LIST :用于请求服务器回送当前远程目录中的所有文件列表。该文件列表是一个数据连接发送的。
- RETR filename: 用于从远程主机当前目录检索文件。该命令引起远程主机发起数据连接传输该文件到本地客户端。
- STOR filename: 用于在远程主机当前目录存放文件。就是往远程主机传输文件。
一些典型回答:
- 331 Username OK, Password required(用户名Ok,需要口令)
- 125 Data connection already open: transfer starting (数据连接已经打开,开始传送)
- 425 Can’t open data connection (无法打开数据连接)
- 452 Error Writing File (写文件出错)
电子邮件
邮件有三部分
- 用户代理
- 邮件服务器
- 简单邮件传输协议
发送邮件过程
- 发送方的用户代理 到 发送方的邮件服务器
- 发送方的邮件服务器 到 接收方的邮件服务器
- 接收方的邮件服务器 到 接收方的用户代理邮箱
SMTP
RFC 5321 给出了SMTP的定义。SMTP使用TCP协议。只能传输7比特的ASCII表示。
发送过程:
- 客户端建立连接
- S:220 hamburger.edu
- C:HELO crepes.fr
- S:250 Hello crepes.fr,pleased to meet you
- C:MAIL FROM: alice@crepes.fr
- S:250 alice@crepes.fr … sender ok
- C:RCPT TO: bob@humburger.edu
- S:250 bob@humburger.edu …. Recipient ok
- C:DATA
- S:354 Enter mail, end with “.” on a line by itself
- C:Do you like ketchup?
- C:How about you pickets?
- C:.
- S:250 Message accepted for delivery
- C:QUIT
- S:221 hamburger.edu closeing connection
和HTTP对比
HTTP 是一个拉协议,从服务器拉取数据。
SMTP 是一个推协议,往服务器推送邮件。
HTTP 可以任意表示
SMTP 只能7比特ASCII表示。
HTTP 每个对象一个响应
SMTP 一个邮件多个对象
SMTP典型的首部报文
FROM:
TO:
Subject:
获取邮件协议
POP3 和 IMAP
POP3
pop3分为3个阶段
- 特许:用户代理发送用户名和口令(明文)
- 事务处理:用户代理取回报文,做删除报文的标记,取消删除标记,获取邮件的统计信息。
- 更新阶段:发生在客户端QUIT指令后,结束会话,删除那些标记的报文。
特许阶段有两个主要命令
- user
- pass
事务处理阶段有4个主要命令
- list 列出邮件列表
- retr id 读取邮件内容
- delete 删除邮件
- quit 退出
IMAP
imap比pop3更加复杂,增加了远程文件夹功能。imap支持用户读取报文的一部分,比如只读取首部,或多部分MIME的一部分。当宽度低的时候非常有用。
DNS
DNS使用UDP协议。
DNS完成域名和ip地址的转换。
域名分为
- 根DNS服务器
- 顶级DNS服务器 com,org,edu,cn
- 权威DNS服务器
请求
迭代请求
- 请求根服务器
- 根服务器返回
- 请求顶级服务器
- 顶级服务器返回
- 请求权威
- 权威返回
递归请求
- 请求根
- 根请求顶级
- 顶级请求权威
- 权威返回顶级
- 顶级返回根
- 根返回
TCP套接字
遵守RFC协议文档的应用程序是“开放”的。不遵循RFC文档中的协议的应用程序是“专用”的。