第二章 应用层
主要需要掌握的知识:
网络应用及应用层协议的概念、实现
传输层服务模型
客户服务器模式
对等模式peer-to-peer
通过对主流应用层协议分析来掌握应用层协议
HTTP
FTP
SMTP / POP3 / IMAP
DNS
网络应用编程
socket API
2.1 应用层协议原理
网络应用举例:电子邮件、Web、即时讯息、远程登陆、P2P文件共享、在两台计算机之间的两个帐户之间的文件传输、多用户网络游戏、流式存储视频片段、因特网电话、实时视频会议
研发网络应用程序的核心:
写出能够运行在不同的端系统并通过网络彼此通信的程序
例如,Web:Web服务器软件和浏览器软件通信
没有应用程序软件运行在网络核心设备上
网络核心设备不在应用层起作用
这种设计方法促进了应用程序的研发
网络应用程序体系结构
客户机/服务器体系结构:
服务器:
总是打开的主机
具有固定的、众所周知的IP地址
主机群集常被用于创建强大的虚拟服务器
客户机:
同服务器端通信
可以间断的同服务器连接
可以拥有动态IP地址
客户机相互之间不直接通信
P2P体系结构
没有总是打开的服务器
任意一对主机直接相互通信
对等方间歇连接并且可以改变IP地址
优点:网络可扩展性强,用户数量越多,服务能力越强,某一个计算机的故障不会导致服务丢失。
缺点:服务器地址未知,服务管理复杂。
客户机/服务器和P2P混合的体系结构
Napster(一款可以在网络中下载自己想要的MP3文件的软件。它同时能够让自己的机器也成为一台服务器,为其它用户提供下载。)
文件直接在对等方之间交换
文件搜索通过服务器
中心服务器记录对等方内容
对等方查询中心服务器来决定要求的文件位置
即时通讯:
两个聊天用户之间是P2P
注册、查询通过服务器
用户上线时要在中心服务器上进行注册
用户与中心服务器联系以找出在线伙伴
☆进程通信:
进程:运行在端系统中的程序
同一主机上的两个进程通过内部进程通信机制进行通信
不同主机上的进程通过交换报文相互通信
客户进程:
发起通信的进程
服务器进程:
等待联系的进程
注意:具有P2P体系结构的应用程序既有客户进程和服务器进程。
☆套接字(应用程序编程接口API )
进程通过它的套接字在网络上发送和接收报文
套接字类比于门户
发送进程把报文推出门户
发送进程假定门户到另外一侧之间有运输设施,该设施可以传送报文到接收进程
用户通过API对传输层的控制仅限于: (1) 选择传输协议; (2)能设定几个参数
☆进程寻址:
主机上的进程标识包括IP地址和端口号(因为主机上可以运行多个进程,所以主机IP不能唯一标识进程)
常用应用程序的端口号:
Web服务器:80
邮件服务:25
☆应用层协议:
交换的报文类型,如请求报文和应答报文
报文类型的语法:报文中的各个字段及其详细描述
字段的语义,即包含在字段中的信息的含义
进程何时、如何发送报文及对报文进行响应
公共领域协议:RFC文档定义、可供大家使用、例如:HTTP,SMTP
专用协议: 例如:KaZaA,Skype等
不同应用需要不同的服务
数据丢失率:
如实时音频能容忍一定程度的数据丢失
文件传输,telnet 需要100%可靠的数据传输
定时:如:因特网电话、多方游戏要求低时延
带宽和吞吐量:
如多媒体必须要求到所需的带宽
如弹性应用根据需要充分利用可供使用的带宽
安全:
一些应用需要加密,数据完成性等。
常见应用的传输服务需求
应用 数据丢失 带宽 时间敏感
文件传输 不能丢失 弹性 不
电子邮件 不能丢失 弹性 不
Web 不能丢失 弹性 不
实时音频/视频 容忍丢失 音频:几kbps-1Mbps 是,100msec
视频:10kbps-5Mbps
存储音频/视频 容忍丢书 同上 是,几秒
交互式游戏 容忍丢失 几kbps 是,100msec
即时讯息 不能丢失 弹性 是或不是(根据实际情况确定)
因特网应用:应用层协议,传输协议
应用 应用层协议 下面的传输协议
电子邮件 SMTP TCP
远程终端访问 Telnet TCP
Web HTTP TCP
文件传输 FTP TCP
流媒体 通常专用 TCP or UDP
因特网电话 通常专用 典型用UDP
安全TCP:
TCP和UDP:没有加密、网络明文传输。如用户名和口令信息等
SSL:(Security Socket Layer)
提供加密的TCP连接
保证数据完整性
端点认证
SSL在应用层:
应用使用SSL库调用TCP服务接口
SSL提供套接字API
2.2 Web应用和HTTP协议
1 常用术语:
网页(Web页,或称文档)由许多对象组成。
对象就是文件,可以是HTML文件, JPEG图像, Java applet, 音频文件…
多数网页由单个基本HTML文件和若干个所引用的对象构成
每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻址
举例URL: http://www.someschool.edu/someDept/pic.gif
{协议}{ 主机名 }{ 径名 }
2 HTTP概述:
HTTP:超文本传输协议(Web的应用层协议,为client/server模式)
使用TCP:
客户初始化一个与HTTP服务器80端口的TCP连接 (创建套接字)
HTTP服务器接受来自客户的TCP连接请求, 建立连接
Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
最后结束(或叫关闭)TCP连接
☆☆HTTP是无状态协议:HTTP服务器不维护客户先前的状态信息
3 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连接:
非持久HTTP连接的问题:
每个对象需要2个RTT
OS必须为每个TCP连接分配主机资源
大量客户的并发TCP连接形成服务器的严重负担
持久HTTP连接
服务器发送响应消息后保持连接
同1客户/服务器的后续HTTP 消息继续在该连接上传送
不带流水线的持久HTTP连接:
客户先前响应消息收到,才发出新的请求消息
每个引用对象经历1个RTT
带流水线的持久HTTP连接:
HTTP/1.1默认使用
客户遇到1个引用对象就发送请求消息
所有引用对象只经历1个RTT
4 HTTP报文格式:
请求报文request,响应报文response
HTTP请求报文:
ASCII文本
例如:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent: Mozilla/4.0 //该代理类型的对象版本
Connection: Close //不使用持久连接
Accept-language:zh-cn //中文版本
通用格式:
请求行 -> 方法 space URI space 版本 cr If (URI=Uniform Resource Identifiers)
首部字段名:space 值 cr If
首部行 -> .
首部字段名:space 值 cr If
空行 ->cr If
实体主体 -> .......
方法类型:
HTTP/1.0
GET
POST
HEAD
服务器收到请求时,用HTTP报文进行响应,但不返回请求对象
HTTP/1.1
GET, POST, HEAD
PUT
文件在实体主体中被上载到URL字段指定的路径
DELETE
删除URL字段指定的文件
上载表单(各字段)输入值:
Post方法:
网页时常包含表单输入
输入值在请求报文的实体主体中被上载到服务器
URL方法:
使用GET方法
表单(各字段)输入值被上载,以URL请求行的字段: www.somesite.com/animalsearch?monkeys&banana
HTTP响应消息:
例如:
HTTP/1.1 200 OK
Connection:close
Date: Sat, 06 Aug 2011 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Thu, 22 Jun 2011 …...
Content-Length: 6821
Content-Type: text/html
data data data data data ...
HTTP 响应的状态码:
位于服务器响应客户的响应消息的第一行.
几个常见的样本状态码:
200 OK
请求成功, 所请求信息在响应消息中返回
301 Moved Permanently
所请求的对象已永久迁移, 新的URL在本响应消息的(location:)头部指出
400 Bad Request
该请求不能被服务器解读
404 Not Found
服务器上不存在所请求文档
505 HTTP Version Not Supported
5 用户与服务器交互:Cookies
Cookies的 4个重要方面:
1) cookie头部行在HTTP响应消息中
2) cookie头部行在HTTP请求消息中
3) cookie文件 保存在用户主机中并被用户浏览器管理
4) cookie也保存在Web站点的后端数据库
cookies的优点:
身份认证
虚拟购物车(跟踪用户购买的物品)
推荐广告
用户会话状态 (Web e-mail)
Cookies和隐私:
cookies允许网站更加了解你
你可以提供名字和e-mail给网站
广告公司通过网站获得信息
Cookies不适合游动用户
6 Web 缓存 (代理服务器)
目标:代表起始服务器满足HTTP请求
用户配置浏览器:Web访问经由缓存
所有http请求指向缓存:
对象在缓存中:缓存器返回对象
否则缓存器向起始服务器发出请求,接受对象后转发给客户机
缓存器既是服务器有事客户机,一般的Web缓存器既是服务器又是客户机
典型的缓存器被ISP提供
Web缓存器的作用:
减少对客户机请求的响应时间
减少内部网络与接入链路上的通信量
能从整体上大大降低因特网上的Web流量
条件GET方法:
目的:
证实缓存器中的对象是否为最新
缓存器:
在请求报文中包含对象最后修改时间
If-modified-since:<data>
服务器:如果对象是最新的则响应报文中不包含对象:
HTTP/1.0 304 Not Modified
2.3文件传输协议:FTP
传输文件到远程主机/从远程主机下载文件
client/server模式
client:发起传输的一方
server:远程主机
ftp服务器:端口号 21
TCP数据连接:端口号20
FTP:独立的控制连接,数据连接
1. FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接, 指定TCP作为传输层协议
2. 客户在建立的控制连接上获得身份认证
3. 客户在建立的控制连接上发送命令来浏览远程主机的目录.
4. 当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户的TCP数据连接
5. 1个文件传输后,服务器结束这个TCP数据连接.
6. 服务器创建第2个TCP与客户的数据连接来传输下一个文件.
7. 控制连接: 带外发送控制信息
8. FTP 服务器要维护用户状态信息: 当前目录, 先前的身份认证
控制连接:
USER-PI(protocol interpreter):用户协议解释器
SERVER-PI:服务器协议解释器
数据连接:
user-DTP(Data Transfer Process):用户数据传输进程
server-DTP:服务器数据传输进程
FTP数据连接建立方式
主动模式:
客户端发送PORT命令
PORT h1,h2,h3,h4,p1,p2
(h1-h4是IP地址,p1-p2是端口号)
服务器根据PORT命令指定的客户端地址和端口号发起数据连接
被动模式:
客户端发送PASV命令
服务器返回监听的地址和端口号
客户端发起数据连接
常见命令:
在控制连接上发送ASCII文本
USER username
PASS password
LIST:返回当前远程目录的文件列表
RETR filename:获取远程主机当前目录下的1个文件(get)
STOR filename:存放1个文件到远程主机当前目录下(put)
常见应答:
状态码及其相应短语 (同 HTTP)
331 Username OK, password required
125 data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file
2.4 因特网中的电子邮件(SMTP,POP3,IMAP)
电子邮件
3个主要组成部分:
用户代理user agents
邮件服务器mail servers
简单邮件传送协议和邮件接收协议
用户代理:
允许用户阅读,回复,转发,保存,编辑邮件消息
例如:Outlook, foxmail等
发送, 接收邮件消息到/从服务器
运行邮件协议
邮件服务器:
邮箱mailbox 存放用户接收的邮件消息
外出报文队列outgoing message queue
运行邮件协议
SMTP:(Simple Mail Transfer Protocol)
客户使用TCP来可靠传输邮件消息到服务器端口号25
传输的3个阶段
握手(问候)
邮件消息的传输
结束
命令/应答的交互
命令:ASCII文本格式
应答:状态码及其短语
邮件消息必须是7-bit ASCII
例子:Alice发送邮件消息到Bob
1) Alice使用用户代理编写邮件消息(给bob@someschool.edu的)
2) Alice的用户代理发送邮件消息 到她的邮件服务器;邮件消息存放在邮件消息队列
3) Alice邮件服务器的SMTP客户端发起建立一个到Bob的邮件服务器的SMTP服务器端的TCP连接,经过应用层握手.
4) SMTP客户在这个TCP连接上发送Alice的邮件消息
5) Bob服务器存放邮件消息存到 Bob的邮箱
6) Bob调用他的用户代理读邮件消息
SMTP客户和服务器的命令交互
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@hamburger.edu>
S: 250 bob@hamburger.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection
SMTP命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFC821。
常用的命令如下。
HELO <domain> <CRLF>。向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM: <reverse-path> <CRLF>。<reverse-path>为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。
RCPT TO:<forward-path> <CRLF>。 <forward-path>用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO。
DATA <CRLF>。将之后的数据作为数据发送,以<CRLF>.<CRLF>标志数据的结尾。
REST <CRLF>。重置会话,当前传输被取消。
NOOP <CRLF>。要求服务器返回OK应答,一般用作测试。
QUIT <CRLF>。结束会话。
VRFY <string> <CRLF>。验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令。
EXPN <string> <CRLF>。验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令。
HELP <CRLF>。查询服务器支持什么命令。
总结:
SMTP使用持久连接
SMTP 要求邮件消息(header & body)必须是7-bit ASCII
SMTP服务器使用CRLF.CRLF 来判断邮件消息的结束
与HTTP的比较:
HTTP: 拉协议
SMTP: 推协议
都有ASCII 命令/应答交互, 状态码
HTTP: 每个对象封装在它各自的HTTP响应消息中发送
SMTP: 一个邮件内各个对象置于同一个邮件消息的多目部分发送
邮件消息的格式:
信头、信体 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆(带扩展)
多媒体扩展:
MIME:(Multipurpose Internet mail Extensions)多用途因特网邮件扩展
增添额外的信头头部声明MIME content-type
邮件访问协议:
SMTP: 递送/存储邮件消息到接收者邮件服务器
邮件访问协议: 从服务器获取邮件消息
POP: Post Office Protocol 邮局协议[RFC 1939]110端口号
身份认证 (代理 <-->服务器) 并 下载邮件消息
IMAP: Internet Message Access Protocol [RFC 3501] 143端口
更多功能特征 (更复杂!)
允许用户像对待本地邮箱那样操纵远程邮箱的邮件
HTTP: Hotmail , Yahoo! Mail, etc.
POP3协议:
身份认证阶段:
客户命令:
user username
pass password
服务器响应
+OK
-ERR
传输阶段:
client:
list: 列出邮件编号
retr: 按编号取邮件
dele: 删除
quit
注意:POP3的会话是无状态的
Bob换客户端后不能再读邮件
IMAP:
保存所有邮件消息在一个位置: 服务器
允许用户在服务器的各文件夹中管理邮件消息
IMAP跟踪用户会话的状态信息 :
文件夹和邮件消息IDs与文件夹名字的映射
2.5 DNS:因特网的目录服务
DNS服务器提供的功能:
主机名到IP地址的转换
主机别名
一个主机可以有一个规范主机名和多个主机别名
邮件服务器别名
负载分配
DNS实现冗余服务器:一个IP地址集合可以对应于同一个规范主机名。
分布式数据库:一个由分层DNS服务器实现的分布式数据库
应用层协议:DNS服务器实现域名转换 (域名/地址转换)
不使用集中式DNS原因:
单点故障
巨大访问量
远距离集中式数据库
维护
分布式、层次数据库
根 DNS 服务器
com DNS 服务器 org DNS 服务器 edu DNS 服务器
yahoo.com amazon.com pbs.org poly.edu umass.edu
DNS 服务器 DNS服务器 DNS服务器 DNS服务器 DNS服务器
例如:
客户机怎样决定主机名www.amazon.com的IP地址?
客户机查询根服务器得到com DNS服务器
客户机查询com DNS服务器得到amazon.com DNS服务器
客户机查询amazon.comDNS服务器得到www.amazon.com的IP地址
DNS: 根名字服务器Root name servers 负责记录顶级域名服务器的信息
顶级域服务器和权威DNS服务器:
顶级域服务器(top-level domain servers):负责顶级域名 com, org, net, edu, etc, 和所有国家的顶级域名 uk, fr, ca, jp.
Network solutions 公司维护com顶级域的TLD服务器
Educause 公司维护edu顶级域的 TLD服务器
权威DNS服务器(authoritative DNS servers): 在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。组织机构的权威DNS服务器负责保存这些DNS记录。
多数大学和公司维护它们的基本权威DNS服务器
本地DNS服务器(Local DNS name server):
严格来说不属于该服务器的层次结构
每个ISP(如居民区ISP、公司、大学)都有一个本地DNS,也叫默认服务器
当主机发出DNS请求时,该请求被发往本地DNS服务器。起着代理的作用,转发请求到层次结构中。
DNS查询方法:
1) 递归查询(recursive query):
名字解析的负担交给被查询的名字服务器
2) 迭代查询(iterated query):
被查询的名字服务器 回复可以被查询的名字服务器的IP地址
“我不知道它的名字,但是可以问服务器”
DNS缓存和权威DNS记录更新:
一旦名字服务器获得DNS映射, 它将缓存该映射到局部内存
服务器在一定时间后将丢弃缓存的信息
本地DNS服务器可以缓存TLD服务器的IP地址。因此根DNS服务器不会被经常访问
权威DNS服务器记录更新:IETF动态更新/通报机制
DNS记录:(存储资源记录(RR,Resource Records)的分布式数据库)
RR格式:(name, value,type,ttl)
Type=A(Adress)
name = 主机名
value = IP地址
Type=NS( name server )
name = 域名(如foo.com)
value = 该域权威名字服务器的主机名
Type=CNAME(canonical)
name = 主机别名
www.ibm.com的真名为
servereast.backup2.ibm.com
value = 真实的规范主机名
Type=MX(mail exchange)
name =邮件服务器的主机别名
value =邮件服务器的真实规范主机名
DNS协议, 消息:
DNS协议:查询报文与应答报文,但具有同样的报文格式 (简略)
报文头部:
标识符: 16位,查询和应答报文使用相同的标识符
标志:有若干个标志构成,分别标识不同的功能
查询/应答-0/ 1
查询希望是/非递归查询-1/0
应答可/否获得(支持)递归查询-1/0
应答是/否来自权威名字服务器-1/ 0
消息:
0 15 16 31位
| 查询名 |
| 查询类型 | 查询类 |
在DNS数据库中插入记录:
例子:刚刚创建一个“网络乌托邦”公司
如果你想在注册登记机构注册你的域名network.com,则
需要提供你自己的基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址
该注册登记机构将下列两条资源记录插入注册机构的DNS系统中:
(network.com, dns1.network.com, NS)
(dns1.network.com, 212.212.212.1, A)
如果你想建立一个网站,则可以将网址www.network.com以类型A的方式记录到你的权威DNS服务器dns1.network.com中。
如果你想建一个邮件服务器,则可以将mail.network.com以类型MX的方式记录到你的权威DNS服务器dns1.network.com中。
DNS攻击:
DDoS攻击:对根域名服务器或顶级域名服务器发起拒绝服务攻击
重定向攻击:中间人攻击、DNS中毒攻击(发送欺骗的域名解析结果给DNS服务器)
利用DNS实现DDoS攻击: DNS反弹式拒绝服务攻击(DNS reflector attacks,又称DNS amplification attacks)。伪造客户地址向大量的dns服务器发出请求,导致客户无法访问dns服务器进行域名解析。
本机HOST文件被篡改
DNS胁持
DNS污染
2.6 P2P技术 (应该是非重点了解)
纯P2P结构;
没有总是在线的服务器
任意端系统之间直接通信
对等方之间可以间断连接并可以改变IP地址
例子:
文件分发
流媒体
VoIP
P2P: 集中式目录
问题:
单点故障
性能瓶颈
侵犯版权
注意:文件传输是分散的,但是定位内容的过程是高度集中的
Gnutella:P2P的通信协议
全分布
没有集中式服务器
公共域协议
许多Gnutella客户机实现Gnutella协议
覆盖网络: graph
如果对等方X和Y维护了一条TCP连接,则说X和Y之间有一条边
所有活跃的对等方和边组成覆盖网络
边不是物理通信链路
给定对等方连接的覆盖网络路径中的节点少于10个,即TTL小于10
查询报文在已有的TCP连接上发送
对等方转发报文
QueryHit 报文按反向
路径传送
加入对等方:
加入对等方X必须发现在Gnutella网络中的其他对等方:使用对等方列表 。
X试图与该列表上的对等方建立一条TCP连接,直到与Y创建一条连接。
X向Y发送一个Ping报文;Y转发该Ping报文。
所有的对等方接收Ping报文并响应一个Pong报文。
X接收到许多Pong报文。然后能同某些其他对等方建立TCP连接。
对等方离开:
主动离开:离开接点的所有对等方都会刷新自身的激活对等方列表,并开始与列表中的新的对等方建立连接
断网:发送信息的时候对等方没有响应,则表明对等方离开,节点刷新自身的激活对等方列表,并开始与列表中的新的对等方建立连接
KaZaA
每个对等方要不被指派为组长,要不被指派给一个组长
对等方和组长之间建立TCP连接
组长之间建立TCP连接
组长维护它的子对等方共享的内容
每个文件有文件的散列码标识
客户机送向组长发送关键词的查询
组长响应匹配
逐项匹配:元数据,散列值,IP地址
如果组长转发查询给其他组长则其他组长响应匹配
客户端选择要下载的文件
请求排队:限制对等方并行上载数量,新的请求进行排队。
激励优先权:根据不同的上载下载比例优先服务贡献大者。
并行下载:将一个文件分成若干段,从多个对等方并行下载。
BitTorrent
BitTorrent是一种用于文件分发的流行P2P协议。
参与一个特定文件分发的所有对等方的集合被称为一个洪流(torrent)。
一个洪流中的对等方彼此下载等长度的文件块(chunk),典型块长度为256KB。
网络应用程序体系结构
Web应用和HTTP协议
基本术语(网页、URL等)
HTTP的特性及其区别(无状态、非持久和持久等)
请求和响应报文
COOKIE技术
Web缓存
文件传输协议FTP :两种连接
电子邮件:组成及其使用的协议
DNS的功能和实现
P2P文件共享原理和实现技术
TCP、UDP套接字编程的C/S基本流程
简答题8个(70分);
综合应用题2个(30分)。
其中,rdt部分的内容不考。协议细节比如http头部格式,smtp/pop命令,TCP/UDP头部格式等也不考。
但课堂上提到的重点肯定会考,而且可能具有一定综合性,大家要认真看PPT的主要内容,以及我建议大家做的课后习题
主要需要掌握的知识:
网络应用及应用层协议的概念、实现
传输层服务模型
客户服务器模式
对等模式peer-to-peer
通过对主流应用层协议分析来掌握应用层协议
HTTP
FTP
SMTP / POP3 / IMAP
DNS
网络应用编程
socket API
2.1 应用层协议原理
网络应用举例:电子邮件、Web、即时讯息、远程登陆、P2P文件共享、在两台计算机之间的两个帐户之间的文件传输、多用户网络游戏、流式存储视频片段、因特网电话、实时视频会议
研发网络应用程序的核心:
写出能够运行在不同的端系统并通过网络彼此通信的程序
例如,Web:Web服务器软件和浏览器软件通信
没有应用程序软件运行在网络核心设备上
网络核心设备不在应用层起作用
这种设计方法促进了应用程序的研发
网络应用程序体系结构
客户机/服务器体系结构:
服务器:
总是打开的主机
具有固定的、众所周知的IP地址
主机群集常被用于创建强大的虚拟服务器
客户机:
同服务器端通信
可以间断的同服务器连接
可以拥有动态IP地址
客户机相互之间不直接通信
P2P体系结构
没有总是打开的服务器
任意一对主机直接相互通信
对等方间歇连接并且可以改变IP地址
优点:网络可扩展性强,用户数量越多,服务能力越强,某一个计算机的故障不会导致服务丢失。
缺点:服务器地址未知,服务管理复杂。
客户机/服务器和P2P混合的体系结构
Napster(一款可以在网络中下载自己想要的MP3文件的软件。它同时能够让自己的机器也成为一台服务器,为其它用户提供下载。)
文件直接在对等方之间交换
文件搜索通过服务器
中心服务器记录对等方内容
对等方查询中心服务器来决定要求的文件位置
即时通讯:
两个聊天用户之间是P2P
注册、查询通过服务器
用户上线时要在中心服务器上进行注册
用户与中心服务器联系以找出在线伙伴
☆进程通信:
进程:运行在端系统中的程序
同一主机上的两个进程通过内部进程通信机制进行通信
不同主机上的进程通过交换报文相互通信
客户进程:
发起通信的进程
服务器进程:
等待联系的进程
注意:具有P2P体系结构的应用程序既有客户进程和服务器进程。
☆套接字(应用程序编程接口API )
进程通过它的套接字在网络上发送和接收报文
套接字类比于门户
发送进程把报文推出门户
发送进程假定门户到另外一侧之间有运输设施,该设施可以传送报文到接收进程
用户通过API对传输层的控制仅限于: (1) 选择传输协议; (2)能设定几个参数
☆进程寻址:
主机上的进程标识包括IP地址和端口号(因为主机上可以运行多个进程,所以主机IP不能唯一标识进程)
常用应用程序的端口号:
Web服务器:80
邮件服务:25
☆应用层协议:
交换的报文类型,如请求报文和应答报文
报文类型的语法:报文中的各个字段及其详细描述
字段的语义,即包含在字段中的信息的含义
进程何时、如何发送报文及对报文进行响应
公共领域协议:RFC文档定义、可供大家使用、例如:HTTP,SMTP
专用协议: 例如:KaZaA,Skype等
不同应用需要不同的服务
数据丢失率:
如实时音频能容忍一定程度的数据丢失
文件传输,telnet 需要100%可靠的数据传输
定时:如:因特网电话、多方游戏要求低时延
带宽和吞吐量:
如多媒体必须要求到所需的带宽
如弹性应用根据需要充分利用可供使用的带宽
安全:
一些应用需要加密,数据完成性等。
常见应用的传输服务需求
应用 数据丢失 带宽 时间敏感
文件传输 不能丢失 弹性 不
电子邮件 不能丢失 弹性 不
Web 不能丢失 弹性 不
实时音频/视频 容忍丢失 音频:几kbps-1Mbps 是,100msec
视频:10kbps-5Mbps
存储音频/视频 容忍丢书 同上 是,几秒
交互式游戏 容忍丢失 几kbps 是,100msec
即时讯息 不能丢失 弹性 是或不是(根据实际情况确定)
因特网应用:应用层协议,传输协议
应用 应用层协议 下面的传输协议
电子邮件 SMTP TCP
远程终端访问 Telnet TCP
Web HTTP TCP
文件传输 FTP TCP
流媒体 通常专用 TCP or UDP
因特网电话 通常专用 典型用UDP
安全TCP:
TCP和UDP:没有加密、网络明文传输。如用户名和口令信息等
SSL:(Security Socket Layer)
提供加密的TCP连接
保证数据完整性
端点认证
SSL在应用层:
应用使用SSL库调用TCP服务接口
SSL提供套接字API
2.2 Web应用和HTTP协议
1 常用术语:
网页(Web页,或称文档)由许多对象组成。
对象就是文件,可以是HTML文件, JPEG图像, Java applet, 音频文件…
多数网页由单个基本HTML文件和若干个所引用的对象构成
每个对象被一个URL(Uniform Resource Locator统一资源定位符)寻址
举例URL: http://www.someschool.edu/someDept/pic.gif
{协议}{ 主机名 }{ 径名 }
2 HTTP概述:
HTTP:超文本传输协议(Web的应用层协议,为client/server模式)
使用TCP:
客户初始化一个与HTTP服务器80端口的TCP连接 (创建套接字)
HTTP服务器接受来自客户的TCP连接请求, 建立连接
Browser (HTTP client)和Web服务器 (HTTP server) 交换HTTP消息(应用层协议消息)包括HTTP请求和响应消息
最后结束(或叫关闭)TCP连接
☆☆HTTP是无状态协议:HTTP服务器不维护客户先前的状态信息
3 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连接:
非持久HTTP连接的问题:
每个对象需要2个RTT
OS必须为每个TCP连接分配主机资源
大量客户的并发TCP连接形成服务器的严重负担
持久HTTP连接
服务器发送响应消息后保持连接
同1客户/服务器的后续HTTP 消息继续在该连接上传送
不带流水线的持久HTTP连接:
客户先前响应消息收到,才发出新的请求消息
每个引用对象经历1个RTT
带流水线的持久HTTP连接:
HTTP/1.1默认使用
客户遇到1个引用对象就发送请求消息
所有引用对象只经历1个RTT
4 HTTP报文格式:
请求报文request,响应报文response
HTTP请求报文:
ASCII文本
例如:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
User-agent: Mozilla/4.0 //该代理类型的对象版本
Connection: Close //不使用持久连接
Accept-language:zh-cn //中文版本
通用格式:
请求行 -> 方法 space URI space 版本 cr If (URI=Uniform Resource Identifiers)
首部字段名:space 值 cr If
首部行 -> .
首部字段名:space 值 cr If
空行 ->cr If
实体主体 -> .......
方法类型:
HTTP/1.0
GET
POST
HEAD
服务器收到请求时,用HTTP报文进行响应,但不返回请求对象
HTTP/1.1
GET, POST, HEAD
PUT
文件在实体主体中被上载到URL字段指定的路径
DELETE
删除URL字段指定的文件
上载表单(各字段)输入值:
Post方法:
网页时常包含表单输入
输入值在请求报文的实体主体中被上载到服务器
URL方法:
使用GET方法
表单(各字段)输入值被上载,以URL请求行的字段: www.somesite.com/animalsearch?monkeys&banana
HTTP响应消息:
例如:
HTTP/1.1 200 OK
Connection:close
Date: Sat, 06 Aug 2011 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Thu, 22 Jun 2011 …...
Content-Length: 6821
Content-Type: text/html
data data data data data ...
HTTP 响应的状态码:
位于服务器响应客户的响应消息的第一行.
几个常见的样本状态码:
200 OK
请求成功, 所请求信息在响应消息中返回
301 Moved Permanently
所请求的对象已永久迁移, 新的URL在本响应消息的(location:)头部指出
400 Bad Request
该请求不能被服务器解读
404 Not Found
服务器上不存在所请求文档
505 HTTP Version Not Supported
5 用户与服务器交互:Cookies
Cookies的 4个重要方面:
1) cookie头部行在HTTP响应消息中
2) cookie头部行在HTTP请求消息中
3) cookie文件 保存在用户主机中并被用户浏览器管理
4) cookie也保存在Web站点的后端数据库
cookies的优点:
身份认证
虚拟购物车(跟踪用户购买的物品)
推荐广告
用户会话状态 (Web e-mail)
Cookies和隐私:
cookies允许网站更加了解你
你可以提供名字和e-mail给网站
广告公司通过网站获得信息
Cookies不适合游动用户
6 Web 缓存 (代理服务器)
目标:代表起始服务器满足HTTP请求
用户配置浏览器:Web访问经由缓存
所有http请求指向缓存:
对象在缓存中:缓存器返回对象
否则缓存器向起始服务器发出请求,接受对象后转发给客户机
缓存器既是服务器有事客户机,一般的Web缓存器既是服务器又是客户机
典型的缓存器被ISP提供
Web缓存器的作用:
减少对客户机请求的响应时间
减少内部网络与接入链路上的通信量
能从整体上大大降低因特网上的Web流量
条件GET方法:
目的:
证实缓存器中的对象是否为最新
缓存器:
在请求报文中包含对象最后修改时间
If-modified-since:<data>
服务器:如果对象是最新的则响应报文中不包含对象:
HTTP/1.0 304 Not Modified
2.3文件传输协议:FTP
传输文件到远程主机/从远程主机下载文件
client/server模式
client:发起传输的一方
server:远程主机
ftp服务器:端口号 21
TCP数据连接:端口号20
FTP:独立的控制连接,数据连接
1. FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接, 指定TCP作为传输层协议
2. 客户在建立的控制连接上获得身份认证
3. 客户在建立的控制连接上发送命令来浏览远程主机的目录.
4. 当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户的TCP数据连接
5. 1个文件传输后,服务器结束这个TCP数据连接.
6. 服务器创建第2个TCP与客户的数据连接来传输下一个文件.
7. 控制连接: 带外发送控制信息
8. FTP 服务器要维护用户状态信息: 当前目录, 先前的身份认证
控制连接:
USER-PI(protocol interpreter):用户协议解释器
SERVER-PI:服务器协议解释器
数据连接:
user-DTP(Data Transfer Process):用户数据传输进程
server-DTP:服务器数据传输进程
FTP数据连接建立方式
主动模式:
客户端发送PORT命令
PORT h1,h2,h3,h4,p1,p2
(h1-h4是IP地址,p1-p2是端口号)
服务器根据PORT命令指定的客户端地址和端口号发起数据连接
被动模式:
客户端发送PASV命令
服务器返回监听的地址和端口号
客户端发起数据连接
常见命令:
在控制连接上发送ASCII文本
USER username
PASS password
LIST:返回当前远程目录的文件列表
RETR filename:获取远程主机当前目录下的1个文件(get)
STOR filename:存放1个文件到远程主机当前目录下(put)
常见应答:
状态码及其相应短语 (同 HTTP)
331 Username OK, password required
125 data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file
2.4 因特网中的电子邮件(SMTP,POP3,IMAP)
电子邮件
3个主要组成部分:
用户代理user agents
邮件服务器mail servers
简单邮件传送协议和邮件接收协议
用户代理:
允许用户阅读,回复,转发,保存,编辑邮件消息
例如:Outlook, foxmail等
发送, 接收邮件消息到/从服务器
运行邮件协议
邮件服务器:
邮箱mailbox 存放用户接收的邮件消息
外出报文队列outgoing message queue
运行邮件协议
SMTP:(Simple Mail Transfer Protocol)
客户使用TCP来可靠传输邮件消息到服务器端口号25
传输的3个阶段
握手(问候)
邮件消息的传输
结束
命令/应答的交互
命令:ASCII文本格式
应答:状态码及其短语
邮件消息必须是7-bit ASCII
例子:Alice发送邮件消息到Bob
1) Alice使用用户代理编写邮件消息(给bob@someschool.edu的)
2) Alice的用户代理发送邮件消息 到她的邮件服务器;邮件消息存放在邮件消息队列
3) Alice邮件服务器的SMTP客户端发起建立一个到Bob的邮件服务器的SMTP服务器端的TCP连接,经过应用层握手.
4) SMTP客户在这个TCP连接上发送Alice的邮件消息
5) Bob服务器存放邮件消息存到 Bob的邮箱
6) Bob调用他的用户代理读邮件消息
SMTP客户和服务器的命令交互
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@hamburger.edu>
S: 250 bob@hamburger.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection
SMTP命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFC821。
常用的命令如下。
HELO <domain> <CRLF>。向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。
MAIL FROM: <reverse-path> <CRLF>。<reverse-path>为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。
RCPT TO:<forward-path> <CRLF>。 <forward-path>用来标志邮件接收者的地址,常用在MAIL FROM后,可以有多个RCPT TO。
DATA <CRLF>。将之后的数据作为数据发送,以<CRLF>.<CRLF>标志数据的结尾。
REST <CRLF>。重置会话,当前传输被取消。
NOOP <CRLF>。要求服务器返回OK应答,一般用作测试。
QUIT <CRLF>。结束会话。
VRFY <string> <CRLF>。验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令。
EXPN <string> <CRLF>。验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令。
HELP <CRLF>。查询服务器支持什么命令。
总结:
SMTP使用持久连接
SMTP 要求邮件消息(header & body)必须是7-bit ASCII
SMTP服务器使用CRLF.CRLF 来判断邮件消息的结束
与HTTP的比较:
HTTP: 拉协议
SMTP: 推协议
都有ASCII 命令/应答交互, 状态码
HTTP: 每个对象封装在它各自的HTTP响应消息中发送
SMTP: 一个邮件内各个对象置于同一个邮件消息的多目部分发送
邮件消息的格式:
信头、信体 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆(带扩展)
多媒体扩展:
MIME:(Multipurpose Internet mail Extensions)多用途因特网邮件扩展
增添额外的信头头部声明MIME content-type
邮件访问协议:
SMTP: 递送/存储邮件消息到接收者邮件服务器
邮件访问协议: 从服务器获取邮件消息
POP: Post Office Protocol 邮局协议[RFC 1939]110端口号
身份认证 (代理 <-->服务器) 并 下载邮件消息
IMAP: Internet Message Access Protocol [RFC 3501] 143端口
更多功能特征 (更复杂!)
允许用户像对待本地邮箱那样操纵远程邮箱的邮件
HTTP: Hotmail , Yahoo! Mail, etc.
POP3协议:
身份认证阶段:
客户命令:
user username
pass password
服务器响应
+OK
-ERR
传输阶段:
client:
list: 列出邮件编号
retr: 按编号取邮件
dele: 删除
quit
注意:POP3的会话是无状态的
Bob换客户端后不能再读邮件
IMAP:
保存所有邮件消息在一个位置: 服务器
允许用户在服务器的各文件夹中管理邮件消息
IMAP跟踪用户会话的状态信息 :
文件夹和邮件消息IDs与文件夹名字的映射
2.5 DNS:因特网的目录服务
DNS服务器提供的功能:
主机名到IP地址的转换
主机别名
一个主机可以有一个规范主机名和多个主机别名
邮件服务器别名
负载分配
DNS实现冗余服务器:一个IP地址集合可以对应于同一个规范主机名。
分布式数据库:一个由分层DNS服务器实现的分布式数据库
应用层协议:DNS服务器实现域名转换 (域名/地址转换)
不使用集中式DNS原因:
单点故障
巨大访问量
远距离集中式数据库
维护
分布式、层次数据库
根 DNS 服务器
com DNS 服务器 org DNS 服务器 edu DNS 服务器
yahoo.com amazon.com pbs.org poly.edu umass.edu
DNS 服务器 DNS服务器 DNS服务器 DNS服务器 DNS服务器
例如:
客户机怎样决定主机名www.amazon.com的IP地址?
客户机查询根服务器得到com DNS服务器
客户机查询com DNS服务器得到amazon.com DNS服务器
客户机查询amazon.comDNS服务器得到www.amazon.com的IP地址
DNS: 根名字服务器Root name servers 负责记录顶级域名服务器的信息
顶级域服务器和权威DNS服务器:
顶级域服务器(top-level domain servers):负责顶级域名 com, org, net, edu, etc, 和所有国家的顶级域名 uk, fr, ca, jp.
Network solutions 公司维护com顶级域的TLD服务器
Educause 公司维护edu顶级域的 TLD服务器
权威DNS服务器(authoritative DNS servers): 在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。组织机构的权威DNS服务器负责保存这些DNS记录。
多数大学和公司维护它们的基本权威DNS服务器
本地DNS服务器(Local DNS name server):
严格来说不属于该服务器的层次结构
每个ISP(如居民区ISP、公司、大学)都有一个本地DNS,也叫默认服务器
当主机发出DNS请求时,该请求被发往本地DNS服务器。起着代理的作用,转发请求到层次结构中。
DNS查询方法:
1) 递归查询(recursive query):
名字解析的负担交给被查询的名字服务器
2) 迭代查询(iterated query):
被查询的名字服务器 回复可以被查询的名字服务器的IP地址
“我不知道它的名字,但是可以问服务器”
DNS缓存和权威DNS记录更新:
一旦名字服务器获得DNS映射, 它将缓存该映射到局部内存
服务器在一定时间后将丢弃缓存的信息
本地DNS服务器可以缓存TLD服务器的IP地址。因此根DNS服务器不会被经常访问
权威DNS服务器记录更新:IETF动态更新/通报机制
DNS记录:(存储资源记录(RR,Resource Records)的分布式数据库)
RR格式:(name, value,type,ttl)
Type=A(Adress)
name = 主机名
value = IP地址
Type=NS( name server )
name = 域名(如foo.com)
value = 该域权威名字服务器的主机名
Type=CNAME(canonical)
name = 主机别名
www.ibm.com的真名为
servereast.backup2.ibm.com
value = 真实的规范主机名
Type=MX(mail exchange)
name =邮件服务器的主机别名
value =邮件服务器的真实规范主机名
DNS协议, 消息:
DNS协议:查询报文与应答报文,但具有同样的报文格式 (简略)
报文头部:
标识符: 16位,查询和应答报文使用相同的标识符
标志:有若干个标志构成,分别标识不同的功能
查询/应答-0/ 1
查询希望是/非递归查询-1/0
应答可/否获得(支持)递归查询-1/0
应答是/否来自权威名字服务器-1/ 0
消息:
0 15 16 31位
| 查询名 |
| 查询类型 | 查询类 |
在DNS数据库中插入记录:
例子:刚刚创建一个“网络乌托邦”公司
如果你想在注册登记机构注册你的域名network.com,则
需要提供你自己的基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址
该注册登记机构将下列两条资源记录插入注册机构的DNS系统中:
(network.com, dns1.network.com, NS)
(dns1.network.com, 212.212.212.1, A)
如果你想建立一个网站,则可以将网址www.network.com以类型A的方式记录到你的权威DNS服务器dns1.network.com中。
如果你想建一个邮件服务器,则可以将mail.network.com以类型MX的方式记录到你的权威DNS服务器dns1.network.com中。
DNS攻击:
DDoS攻击:对根域名服务器或顶级域名服务器发起拒绝服务攻击
重定向攻击:中间人攻击、DNS中毒攻击(发送欺骗的域名解析结果给DNS服务器)
利用DNS实现DDoS攻击: DNS反弹式拒绝服务攻击(DNS reflector attacks,又称DNS amplification attacks)。伪造客户地址向大量的dns服务器发出请求,导致客户无法访问dns服务器进行域名解析。
本机HOST文件被篡改
DNS胁持
DNS污染
2.6 P2P技术 (应该是非重点了解)
纯P2P结构;
没有总是在线的服务器
任意端系统之间直接通信
对等方之间可以间断连接并可以改变IP地址
例子:
文件分发
流媒体
VoIP
P2P: 集中式目录
问题:
单点故障
性能瓶颈
侵犯版权
注意:文件传输是分散的,但是定位内容的过程是高度集中的
Gnutella:P2P的通信协议
全分布
没有集中式服务器
公共域协议
许多Gnutella客户机实现Gnutella协议
覆盖网络: graph
如果对等方X和Y维护了一条TCP连接,则说X和Y之间有一条边
所有活跃的对等方和边组成覆盖网络
边不是物理通信链路
给定对等方连接的覆盖网络路径中的节点少于10个,即TTL小于10
查询报文在已有的TCP连接上发送
对等方转发报文
QueryHit 报文按反向
路径传送
加入对等方:
加入对等方X必须发现在Gnutella网络中的其他对等方:使用对等方列表 。
X试图与该列表上的对等方建立一条TCP连接,直到与Y创建一条连接。
X向Y发送一个Ping报文;Y转发该Ping报文。
所有的对等方接收Ping报文并响应一个Pong报文。
X接收到许多Pong报文。然后能同某些其他对等方建立TCP连接。
对等方离开:
主动离开:离开接点的所有对等方都会刷新自身的激活对等方列表,并开始与列表中的新的对等方建立连接
断网:发送信息的时候对等方没有响应,则表明对等方离开,节点刷新自身的激活对等方列表,并开始与列表中的新的对等方建立连接
KaZaA
每个对等方要不被指派为组长,要不被指派给一个组长
对等方和组长之间建立TCP连接
组长之间建立TCP连接
组长维护它的子对等方共享的内容
每个文件有文件的散列码标识
客户机送向组长发送关键词的查询
组长响应匹配
逐项匹配:元数据,散列值,IP地址
如果组长转发查询给其他组长则其他组长响应匹配
客户端选择要下载的文件
请求排队:限制对等方并行上载数量,新的请求进行排队。
激励优先权:根据不同的上载下载比例优先服务贡献大者。
并行下载:将一个文件分成若干段,从多个对等方并行下载。
BitTorrent
BitTorrent是一种用于文件分发的流行P2P协议。
参与一个特定文件分发的所有对等方的集合被称为一个洪流(torrent)。
一个洪流中的对等方彼此下载等长度的文件块(chunk),典型块长度为256KB。
网络应用程序体系结构
Web应用和HTTP协议
基本术语(网页、URL等)
HTTP的特性及其区别(无状态、非持久和持久等)
请求和响应报文
COOKIE技术
Web缓存
文件传输协议FTP :两种连接
电子邮件:组成及其使用的协议
DNS的功能和实现
P2P文件共享原理和实现技术
TCP、UDP套接字编程的C/S基本流程
简答题8个(70分);
综合应用题2个(30分)。
其中,rdt部分的内容不考。协议细节比如http头部格式,smtp/pop命令,TCP/UDP头部格式等也不考。
但课堂上提到的重点肯定会考,而且可能具有一定综合性,大家要认真看PPT的主要内容,以及我建议大家做的课后习题