导言: 网络应用是计算机网络存在的理由。
应用层
网络应用体系结构
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。在进行软件编码之前,要选择网络应用程序体系结构。
客户机/服务器
服务器
- 7*24小时提供服务
- 永久性访问地址/域名(即IP地址),因为服务器总是打开的,客户总是能够通过向该服务器的IP地址发送分组来与其联系
- 利用大量服务器实现可扩展性(多用于数据中心)
客户机
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址
- 不会与其他客户机直接进行通信
P2P
- 没有永远在线的服务器
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
优点:高度可伸缩
缺点:难于管理
混合结构
结合了客户/服务器模型和P2P模型,如Napster
- 文件传输使用P2P结构
- 文件的搜索采用C/S结构——集中式
每个节点向中央服务器登记自己的内容;
每个节点向中央服务器提交查询请求,查找感兴趣的内容
网络应用的基础:进程间通信
进程间通信
进程:主机上运行的程序
- 客户机进程:发起通信的进程
- 服务器进程:等待通信请求的进程
同一主机上运行的进程之间通信:进程间通信机制、操作系统提供
不同主机上运行的进程间通信:消息交换
套接字:socket
进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。
传输基础设施向进程提供API,包括:传输协议的选择、参数的设置等。
如何寻址进程
通过IP地址对主机进行寻址,通过端口号标识每个需要通信的进程。
进程的标识符:IP地址+端口号。
不同主机上的进程间通信,每个进程必须拥有标识符
应用层协议
网络应用需遵循应用层协议,应用层协议分为公开协议和私有协议。
公开协议:由RFC定义,允许互操作,有HTTP、SMTP等
私有协议:多数P2P文件共享应用
应用层协议的内容
- 消息的类型(Types):
请求消息
响应消息 - 消息的语法/格式(Syntax):
消息中有哪些字段?
每个字段如何描述 - 字段的语义(Semantics):
字段中信息的含义 - 规则(Rules):
进程何时发送/响应消息
网络应用的服务需求
一个运输层协议能够为调用它的应用程序提供什么样的服务呢?
可靠性
分组能够使路由器中的缓存溢出,或者当分组中的某些比特损坏后可能被丢弃
- 某些网络应用能够容忍一定的数据丢失:网络电话
- 某些网络应用要求100%可靠的数据传输:文件传输、telnet、电子邮件、远程主机访问、Web文档传输以及金融应用
带宽
具有吞吐量要求的应用程序被称为带宽敏感的应用,如网络视频只有在带宽达到最低要求时才“有效”
而弹性应用能够根据情况或多或少地利用可供使用的吞吐量。电子邮件、文件传输以及Web传送都属于弹性应用
时延
- 有些应用只有在延迟足够低时才“有效”,如因特网电话、虚拟环境、电话会议和多方游戏
安全性
运输协议能够为应用程序提供一种或多种安全性服务。如,在发送主机中,运输协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够在数据交付给接收进程之前解密这些数据。
Internet传输层服务模型
TCP服务
- 面向连接:客户机/服务器进程间需要建立连接
- 可靠的传输
- 流量控制:发送方不会发送速度过快,超过接收方的处理能力
- 拥塞控制:当网络负载过重时能够限制发送方的发送速度
- 不提供时间/延迟保障
- 不提供最小带宽保障
UDP服务
- 无连接
- 不可靠的数据传输
- 不提供:可靠性保障、流量控制、拥塞控制、延迟保障、带宽保障
特定网络应用及协议
Web和HTTP
Web的应用层协议是超文本传输协议(HTTP)。客户程序和服务器程序运行再不同的端系统中,通过交换HTTP报文进行会话。
Web术语:
- Web页面(也叫文档)是由对象组成的。
- 一个对象只是一个文件(诸如,一个HTML文件、一个JPEG图形、一个Java小程序或一个视频片段这样的我呢见),且它们可通过一个URL地址寻址。
- 多数Web页面含有一个HTML基本文件以及几个引用对象
- HTML基本文件通过对象的URL地址引用页面中的其它对象。
- 每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。
- Web服务器实现了HTTP的服务器端,它用于存储Web对象,每个对象由URL寻址。
HTTP概述:
- HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。
- HTTP使用TCP作为它的支撑运输协议
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
- 关闭TCP连接
- 因为HTTP服务器并不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议
HTTP连接的两种类型
假设用户在浏览器中输入URL
www.someSchool.edu/someDepartment/home.index
非持久性连接
- 每个TCP连接最多允许传输一个对象
- HTTP 1.0版本使用非持久性连接
响应时间分析与建模
- RRT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间
- 响应时间:
- 发起、建立TCP连接:1个RTT
- 发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
- 响应消息中所含的文件/对象传输时间
总的时间=2RTT+文件发送时间
非持续连接的缺点:
1. 必须为每个请求的对象建立和维护一个全新的连接,这会给Web服务器带来严重的负担
2. 每一个对象经受两倍RTT的交付时延,即一个RTT用于创建TCP,另一个RTT用于请求和接收一个对象
持久性连接
- 每个TCP连接允许传输多个对象
- HTTP 1.1版本默认使用持久性连接
- 对于无流水机制的持久性连接,每引用一个对象就会需要一个RTT;而对于带流水机制的持久性连接,引用所有对象只需要大约一个RTT
文件传输协议:FTP
HTTP和FTP都是文件传输协议,都运行在TCP上。也有一些区别:
1. FTP使用了两个并行的TCP连接来传输文件,一个是控制连接,用于两主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及“存放”和“获取”文件的命令;数据连接用于实际发送一个文件
2. 因为FTP使用一个独立的控制连接,所以我们也称FTP的控制信息是带外传送的。
3. HTTP协议是在传输文件的同一个TCP连接中发送请求和响应首部行的。因此,HTTP也可以说是带内发送控制信息的。
4. 对于FTP传输而言,控制连接贯穿了整个用户会话期间,但是对会话中的每一次文件传输都需要建立一个新的数据连接(即数据连接是非持续的)
5. FTP服务器必须在整个会话期间保留用户的状态
FTP命令和回答
从客户到服务器的命令和从服务器到客户的回答,都是以7比特ASCII格式在控制连接上传送的,因此FTP协议的命令也是人可读的。用回车换行符来区分连续的命令。每个命令由4个大写字母ASCII字符组成
常见命令:
- USER:用于向服务器传送用户标识
- PASS:用于向服务器传送用户口令
- LIST:用于请求服务器回送当前远程目录中的所有文件列表。该文件列表是经一个(新建且非持续连接)数据连接传送的,而不是在控制TCP连接上传送
- RETR:用于从远程主机当前目录检索文件
- STOR:用于在远程主机的当前目录上存放文件
回答是一个3位的数字,后跟一个可选信息
- 331 Username OK,Password required(用户名OK,需要口令)
- 125 Data connection already open,transfer starting(数据连接已经打开,开始传送)
- 425 Can’t open data connection(无法打开数据连接)
- 452 Error writing file(写文件差错)
邮件:SMTP、POP、IMAP
电子邮件是一种异步通信媒介,即当人们方便时就可以收发邮件,不必与他人的计划进行协调
email应用的构成组件:邮件客户端(user agent即用户代理)、邮件服务器、SMTP协议(简单邮件传输协议)
邮件客户端:
- 读、写Email消息
- 与服务器交互,收、发Email消息
- Outlook、Foxmail、Thunderbird
- Web客户端
邮件服务器:形成了电子邮件体系结构的核心
- 邮箱:存储发给该用户的Email
- 消息队列:存储等待发送的Email
SMTP协议:是因特网电子邮件中主要的应用层协议。使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件
- 邮件服务器之间传递消息所使用的协议
- 客户端:发送消息的服务器
- 服务器:接收消息的服务器
SMTP
- 使用TCP进行email消息的可靠传输,一般不使用中间邮件服务器发送邮件
- 端口25
- 传输过程的三个阶段:握手、消息的传输、关闭
- 命令/响应交互模式:
命令:ASCII文本
响应:状态代码和语句 - Email消息只能包含7位ASCII码
- SMTP服务器利用回车换行符确定消息的结束;要求消息必须由7位ASCII码构成
与HTTP对比
- HTTP主要是一个拉协议,TCP连接是由想接收文件的机器发起的;SMTP基本上是一个推协议,即发送邮件服务器把文件推向接收邮件服务器。即TCP连接是由要发送该文件的机器发起的
- SMTP要求每个报文(包括它们的体)使用7比特ASCII码格式,HTTP数据不受这种限制
- 关于如何处理一个既包含文本又包含图形(也可能是其它媒体类型)的文档,HTTP把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中
SMTP用来将邮件从发送方的邮件服务器传输到接收方的邮件服务器;SMTP也用来将邮件从发送方的用户代理传送到发送方的邮件服务器;POP3/IMAP/HTTP等邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。
Email消息格式:
头部行:To、From、Subject
消息体:消息本身、只能是ASCII字符
MIME:多媒体扩展
通过在邮件头部增加额外的行以生命MIME的内容类型,如MIME版本、数据编码、多媒体数据的类型,子类型以及参数声明、编码后的数据
POP3:无状态的
随着建立TCP连接,POP3按照三个阶段进行工作:特许、事务处理以及更新
- 特许阶段:用户代理发送(以明文形式)用户名和口令以鉴别用户
客户端命令:User声明用户名,Pass声明密码
服务器响应:+OK,-ERR - 事务处理阶段
List:列出消息数量
Retr:用编号获取消息
Dele:删除消息
Quit: - 更新:出现在客户发出了quit命令之后,目的是结束该POP3会话
“下载并删除”模式:用户如果换了客户端软件,无法重读该邮件
“下载并保持”模式:不同客户端都可以保留消息的拷贝
IMAP
- IMAP服务器把每个报文与一个文件夹联系起来
- IMAP协议为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令
- IMAP还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件
- 与POP3不同的是,IMAP维护了IMAP会话的用户状态信息
- IMAP的另一个重要特性是它具有允许用户代理获取报文组件的命令
DNS:提供主机名到IP地址转换
DNS(域名系统)是:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
DNS协议运行在UDP上,使用53号端口
DNS是应用层协议,原因在于:
- 使用客户-服务器模式运行在通信的端系统之间
- 在通信的端系统之间通过下面的端到端运输协议来传送DNS报文
DNS不同于Web应用、文件传输应用以及电子邮件应用,它不是一个直接和用户打交道的应用,相反,它是为因特网上的用户应用程序以及其它软件提供一种核心功能,即将主机名转换为其背后的IP地址。
DSN服务:
- 域名向IP地址的翻译
- 主机别名
- 邮件服务器别名
- 负载均衡:Web服务器
为什么不使用集中式的DNS?
- 单点失败问题
- 流量问题
- 距离问题
- 维护性问题
DNS服务器采用层次方式组织
- DNS根域名服务器:
本地域名解析服务器无法解析域名时,访问根域名服务器
根域名服务器如果不知道映射,则访问权威域名服务器;获得映射,向本地域名服务器返回映射 - 顶级域名服务器(TLD):负责com,org,net,edu等顶级域名和国家顶级域名,例如cn,uk,fr等
Network Solutions维护com顶级域名服务器
Educause维护edu顶级域名服务器 - 权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务
组织负责维护
服务提供商负责维护
本地域名解析服务器:
- 不严格术语层次体系
- 每个ISP有一个本地域名服务器:默认域名解析服务器
- 当主机进行DNS查询时,查询被发送到本地域名服务器。作为代理,将查询转发给(层级式)域名解析服务器系统
迭代查询:被查询服务器返回域名解析服务器的名字
递归查询:将域名解析的任务交给所联系的服务器
DNS记录缓存和更新:只要域名解析服务器获得域名——IP映射,即缓存这一映射。一段时间过后,缓存条目失效(删除)。本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问。
DNS记录
资源记录(RR)提供了主机名到IP地址的映射,是一个包含了下列字段的4元组:(Name,Value,Type,TTL)
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间,可以忽略。
- Type=A,Name:主机域名;Value:IP地址
- Type=NS,Name:域(edu.cn);Value:该域权威域名解析服务器的主机域名
- Type=CNAME,Name:某一真实域名的别名,如ww.ibm.com等;Value:真实域名
- Type=MX,Value是和Name相对应的邮件服务器
DNS中只有查询和回答报文,且有着相同的格式
- 前12个字节是首部区域,标识符字段用于标识该查询,这个标识符会被复制到对查询的回答报文中。标识字段有:查询或回复、期望递归、递归可用、权威回答
- 问题区域包含着正在进行的查询信息,其中名字字段指出正在被查询的主机名字;类型字段指出有关该名字的正被询问的问题类型
P2P应用
使用P2P体系结构,对总是打开的基础设施服务器有最小的(或者没有)依赖。与之相反,成对间歇连接的主机(称为对等方)彼此直接通信。这些对等方并不为服务提供商所拥有,而是受用户控制的桌面计算机和膝上计算机
- P2P文件分发:每个对等方能够重新分发它所有的该文件的任何部分,从而在分发过程中协助该服务器。分发时间是所有N个对等方得到该文件的副本所需要的时间
- 分布式散列表:考虑构建直接采用客户——服务器体系结构的数据库的一个分布式、P2P的版本,在数以百万计的对等方上存储(键,值)对。在该P2P系统中,每个对等方将保持(键,值)对仅占总体的一个小子集。我们将允许任何对等方用一个特别的键来查询该分布式数据库。分布式数据库则将定位拥有该响应(键,值)对的对等方,然后向查询的对等方返回(键,值)对。任何对等方也将允许在数据库中差入新键——值对。这样一种分布式数据库被称为分布式散列表(DHT)
i. 环形DHT:每个对等方仅知道它的直接后继和直接前任,而不必知道在该DHT中任何其他对等方的情况
ii. 对等方扰动
假设
u
s
u_s
us表示服务器接入链路的上载速率,
u
i
u_i
ui表示第i对等方接入链路的上载速率,
d
i
d_i
di表示第i对等方接入链路的下载速率,F表示被分发文件的文件长度(以比特计),N表示要获得的该文件副本的对等方的数量。分发时间是所有N个对等方得到该文件的副本所需要的时间。在下面的分发时间的过程中,我们对客户——服务器和P2P体系结构做了简化(而且一般是准确的)假设,即因特网核心具有足够的带宽,这以为着所有瓶颈都在网络接入链路。我们还假设服务器和客户没有参与任何其它网络应用,因此它们的所有上传和下载访问带宽能被全部用于分发该文件。
3. 首先来确定对于客户——服务器体系结构的分发时间,我们将其表示为
D
c
s
D_{cs}
Dcs。在客户——服务器体系结构中,没有对等方参与来帮助分发文件。
(1)服务器必须向N个对等方的每个传输该文件的一个副本。因此该服务器必须传输NF比特。因为该服务器的上载速率是
u
s
u_s
us,分发该文件的时间必定至少是
N
F
u
s
\frac{NF}{u_s}
usNF
(2)令
d
m
i
n
d_{min}
dmin表示具有最小下载速率的对等方的下载速率,即
d
m
i
n
=
m
i
n
(
d
1
,
d
p
,
…
,
d
N
)
d_{min}=min\left(d_1,d_p,…,d_N\right)
dmin=min(d1,dp,…,dN)。具有最小下载速率的对等方不可能在少于
F
d
m
i
n
\frac{F}{d_{min}}
dminF秒时间内获得该文件的所有F比特。因此最小分发时间至少为
F
d
m
i
n
\frac{F}{d_{min}}
dminF
总结就是:
D
c
s
≥
m
a
x
(
N
F
u
s
,
F
d
m
i
n
)
D_{cs}≥max\left(\frac{NF}{u_s},\frac{F}{d_{min}}\right)
Dcs≥max(usNF,dminF)
4. 我们现在对P2P体系结构进行简单的分析,其中每个对等方能够帮助服务器分发该文件。特别是,当一个对等方接收到某些文件数据,它能够使用自己的上载能力重新讲数据分发给其他对等方。计算P2P体系结构的分发时间在某种程度上比计算客户——服务器体系结构的更为复杂,因为分发时间取决于每个对等方如何向其他对等方分发该文件的各个部分
(1)在分发的开始,只有服务器具有文件。为了使社区的这些对等方得到该文件,该服务器必须经其接入链路至少发送该文件的每个比特一次。因此最小分发时间至少是
F
u
s
\frac{F}{u_s}
usF。(与客户——服务器方案不同,由服务器发送过一次的比特可能不必由该服务器再次发送,因为对等方在它们之间可以重新分发这些比特)
(2)与客户——服务器体系结构相同,具有最低下载速率的对等方不能够以小于
F
d
m
i
n
\frac{F}{d_{min}}
dminF秒的分发时间获得所有F比特。因此最小分发时间至少为
F
d
m
i
n
\frac{F}{d_{min}}
dminF
(3)最后,观察到系统整体的总上载能力等于服务器的上载速率加上每个单独的对等方的上载速率,即
u
t
o
t
a
l
=
u
s
+
u
1
+
…
+
u
N
u_{total}=u_s+u_1+…+u_N
utotal=us+u1+…+uN。系统必须向这N个对等方的每个交付(上载)F比特,因此总共交付NF比特。这不能以快于
u
t
o
t
a
l
u_{total}
utotal的速率完成。因此,最小的分发时间也至少是
N
F
u
s
+
∑
i
=
1
N
u
i
\frac{NF}{u_s+\sum_{i=1}^N u_i}
us+∑i=1NuiNF
因此P2P的最小分发时间,
D
P
2
P
≥
m
a
x
(
F
u
s
,
F
d
m
i
n
,
N
F
u
s
+
∑
i
=
1
N
u
i
)
D_{P2P}≥max\left(\frac{F}{u_s},\frac{F}{d_{min}},\frac{NF}{u_s+\sum_{i=1}^N u_i}\right)
DP2P≥max(usF,dminF,us+∑i=1NuiNF)
具有P2P体系结构的应用程序能够是自扩展的。这种扩展性的直接成因是:对等方除了是比特消费者外还是它们的重新分布者。
纯P2P架构
- 没有服务器
- 任意端系统之间直接通信
- 节点阶段性接入Internet
- 节点可能更换IP地址
BitTorrent
最为流行的P2P文件共享协议是BitTorrent,用它的术语来讲,参与一个特定文件分发的所有对等方的集合被称为一个洪流。每个洪流具有一个基础设施结点,称为追踪器。当一个对等方加入某洪流时,它向追踪器注册自己,并周期性地通知追踪器它仍在该洪流中
有关分布式散列表的内容请参照书本!
Socket编程
开发者创建一个网络应用时,其主要任务就是编写客户程序和服务器程序的代码
- 网络应用程序有两类,一类时实现在协议标准中所定义的操作,这样的应用程序又称为“开放”的,因为定义其操作的这些规则人所共知。另一类网络应用程序是专用的网络应用程序,在这种情况下,由客户和服务器程序应用的应用层协议没有公开发布在某RFC中或其他地方