计算机网络之应用层
应用层
1应用层协议原理
研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。
1.1 网络应用程序体系结构
- 应用程序体系结构(application architecture)由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。现代网络应用程序中所使用的的两种主流体系结构:客户-服务器体系结构和对等(P2P)体系结构。
- 客户-服务器体系结构(client-server architecture)中,有一个总是打开的主机称为服务器,该服务器具有固定的、周知的地址,该地址称为IP地址,且在该体系中,客户之间不直接通信。具有该体系结构的著名的应用程序包括Web、FTP、Telnet和电子邮件等。
- P2P体系结构(P2P architecture)中,对位于数据中心的专用服务器有最小的依赖,应用程序在主机对之间使用直接通信。目前流行的、流量密集型应用都是P2P体系结构的,包括文件共享(BitTorrent)、对等方协助下载加速器(如迅雷)、因特网电话(如Skype)、和IPTV(如"辛迅雷看看"、“PPstream”)。P2P体系结构的最引人入胜的特性之一是它的自扩展性(self-scalability)。
- 需要注意,某些应用具有混合的体系结构,它结合了客户-服务器和P2P的元素。例如对于很逗即时讯息而言,服务器被用于跟踪用户的IP地址,但用户到用户的报文在用户主机之间直接发送,无需经过中间服务器。
1.2 进程通信
- 在操作系统的术语中,进行通信的实际上是进程(processing)而不是程序,一个进程可以被认为是运行在端系统中的一个程序。在两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而互相通信。
- 客户和服务器进程:在给定的一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
2. 进程与计算机网络之间的接口:多数应用程序是由应用进程对组成的,从一个进程向另一个进程发送的报文必须通过因特网;进程通过套接字(socket)的软件接口向网络发送报文和从网络接收报文。由于套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用程序编程接口(Application Programming Interface, API).
3. 进程寻址:在主机上运行的进程为了标识接收进程,需要定义两种信息,即主机的地址和定义在目的主机中的接收进程的标识符;在因特网中,分别由IP地址(IP address)和目的地端口号(port number)来实现。
1.3 可供应用程序使用的运输服务
- 从四个方面对应用服务要求进行分类:可靠数据传输、吞吐量、定时和安全性。
- 可靠数据传输:当一个运输层协议提供可靠数据传输服务时,发送进程只要将其数据传递进套接字,就可以完全相信该数据将能无差错的到达接收进程;当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些数据可能不能够到达接收进程,这可能能被容忍丢失的应用(loss-tolerant application)所接受,如交谈式音频/视频等。
- 吞吐量:可用吞吐量就是发送进程能够向接收进程交付比特的速率。运输层协议能够以某种特定的速率提供确保的可用吞吐量。
- 定时:运输层协议能够提供定时保证。例如,发送方注入进套接字中的每个比特到达接收方的套接字不迟于100ms。
- 安全性:运输协议能够为应用程序提供一种或多种安全性服务。例如,在发送主机中,运输层协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够在将这些数据交付给进程之前解密这些数据。
1.4 因特网提供的运输服务
- 因特网为应用程序提供两个运输层协议:TCP和UDP
- TCP服务模型包括面向连接服务和可靠数据传输服务。
- UDP是一种不提供不必要服务的轻量级运输协议,它提供一种不可靠数据传输服务。
- 对于TCP、UDP协议是运输层中的重中之重,在这里仅提到它们与应用层之间的关系,两个协议的具体内容将在运输层中介绍。
1.5 应用层协议
- 应用层协议定义了运行在不同端系统上的应用程序进程如何互相传递报文。特别是应用层协议定义了:
- 交换的报文类型,如请求报文和响应报文;
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的;
- 字段的语义,即这些字段中包含的信息的含义;
- 一个进程何时以及如何发送报文,对保文进行响应的规则。
2 Web和HTTP
2.1 HTTP概况
- Web的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP),该协议由两个程序实现:一个客户程序和一个服务器程序。
- HTTP使用TCP作为它的支撑运输协议。
- HTTP服务器并不保存关于客户端的任何信息,它是一个无状态协议(stateless protocol)。Web的服务器总是打开的,它具有一个固定的IP地址。
2.2 非持续连接和持续连接
- 当每个请求/响应对是经一个单独的TCP连接发送,该应用程序被称为使用非持续连接(non-persistent connection);当所有的请求及其相应经过相同的TCP连接发送时,该应用程序被称为持续连接(persistent connection)。HTTP在默认方式下使用持续连接,当然它也能配置成使用非持续连接。
- 在非持续连接中,每个TCP连接只传输一个请求报文和响应报文;传输的每一个对象的时间大概为两陪往返时间(Round-Trip Time, RTT)加传输对象的时间。
- 在采用持续连接的情况下,服务器在发送响应后保持该TCP连接打开,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器则关闭该连接。
2.3 HTTP报文格式
- HTTP请求报文的第一行叫做请求行(request line),该行有三个字段:方法字段、URL字段和HTTP版本字段。方法字段包括GET、POST、HEAD、PUT和DELETE。使用GET方法时请求包体为空,使用POST方法时该请求包体中包含的是用户在表单字段中的输入值。
- HTTP响应报文的第一行叫做状态行(status line),该行有三个字段:协议版本字段、状态码和相应状态信息。这里总结一下状态码及状态码描述:
- 200 OK:请求成功,信息在返回的响应报文中;
- 301 Moved Permanently:请求的对象已经被永久转移;
- 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解;
- 404 Not Found:请求的文档不在服务器上;
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP版本协议。
2.4 用户与服务器的交互:cookie
- 2.1中提到HTTP服务器并不保存关于客户端的任何信息,它是一个无状态协议(stateless protocol),但一个Web站点通常希望能够识别用户,所以HTTP使用了cookie,它允许站点对用户进行跟踪。
- cookie可用于标识一个用户。用户首次访问一个站点时,需要提供一个用户标识。在后继对话中,浏览器向服务器传递一个cookie首部,从而向该服务器标识了用户。
2.5 Web缓存器
- Web服务器(Web Server)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网络实体。它有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
- Web缓存器即使服务器也是客户。当他接收浏览器的请求并发回相应是,他是一个服务器。当它向初始服务器发出请求并接收响应时,它是一个客户。
2.6 条件GET方法
- 为防止出现保存在服务器中的对象自该副本缓存在缓存器后被修改,HTTP协议提供一种条件GET(conditional GET)方法,允许缓存器证实它的对象是最新的。
- 如果:①请求报文使用GET方法:并且②请求报文中包含一个"If-Modified-Since:"首部行,那么这个HTTP请求报文就是一个条件GET请求报文。
3 文件传送协议:FTP
- 用户通过一个FTP用户代理与FTP交互的过程:
- 用户首先提供远程主机的主机名,是本地主机的FTP客户进程建立一个到远程主机的FTP服务器进程的TCP连接;
- 用户提供用户标识和口令,作为FTP命令的一部分在TCP连接上传送;
- 一旦服务器向该用户授权,用户可以将存放在本地文件系统中的一个或者多个文件复制到远程文件系统(反之亦然)。
- FTP使用了两个并行的TCP连接来传输文件,一个是控制连接(control connection),一个是数据连接(data connection). 因为FTP使用一个独立的控制连接,故也称FTP的控制信息是带外(out-of-band)传送的.
- FTP服务器必须在整个会话期间保留用户的状态,即对每个进行中的用户会话的状态信息进行追踪,大大限制了同时维持的会话总数;而HTTP是无状态连接的,即它不必对任何用户状态进行追踪。
- 在FTP会话中,TCP控制连接端口号为21,TCP数据连接端口号为20.
4 因特网中的电子邮件
- 因特网电子邮件系统的关键组件:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol, SMTP).
- SMTP是因特网电子邮件中主要的应用层协议,它使用TCP可靠数据传输服务。用户SMTP(运行在发送邮件服务器上)在25号端口建立一个到服务器SMTP(运行在接收邮件服务器上)的TCP连接。
- SMTP与HTTP协议都是用于从一台主机向另一台主机传送文件:HTTP从Web服务器向Web客户(通常是一个浏览器)传送文件(对象);SMTP从一个邮件服务器向另一个邮件服务器传送文件(及电子邮件报文)。当进行文件传送时,它们都采用持续连接;它们有一些重要的区别:
- HTTP是一个拉协议(pull protocol),即用户使用HTTP从Web服务器拉取想要获得的信息;SMTP是一个推协议(push protocol),即发送邮件服务器把文件推向接收邮件服务器;
- SMTP要求每个报文使用7比特ASCII码格式,HTTP数据不受这种限制;
- 关于如何处理一个既包含文本又包含图形的文档:HTTP把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文中。
- SMTP被设计成将电子邮件从一台主机推到另一台主机。用户代理不能使用SMTP取回报文,因为取报文是一个拉操作,而SMTP协议是一个推协议。对于用户从邮件服务器读取邮件的问题,可以通过引入一个特殊的邮件访问协议来解决,具体包括:第三版的邮局协议(Post Office Protocol———Version 3, POP3)、因特网邮件访问协议(Inter Mail Access Protocol, IMAP)以及HTTP。
- POP3:当用户代理打开一个到邮件服务器端口110上的TCP连接后, POP3按照三个阶段进行工作:特许(authorization)、事务处理和更新。POP3协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法。
- IMAP服务器把每个报文与一个文件夹联系起来,他维护了用户状态信息;它具有允许用户代理获取报文组件的命令。
- 目前越来越多的用户使用Web浏览器收发电子邮件,这种服务的用户代理就是普通的浏览器,用户和他远程邮件服务器之间的通信通过HTTP进行。
5 DNS:因特网的目录服务
- 一个主机使用IP地址(IP address)进行标识,一个IP地址由4个字节组成,并有着严格的层次结构。
5.1 DNS提供的服务
- 可以通过主机名或者IP地址来标识主机,人们喜欢便于记忆的主机名标识方式,而路由器则喜欢定长的、有着层次机构的IP地址,而域名系统(Domain Name System, DNS)的主要任务就是完成主机名转换到IP地址转换的目录服务。
- DNS是:①一个由分层的DNS服务器实现的分布式数据库;②一个使得主机能够查询分布式数据库的应用层协议。DNS服务器通常是运行BIND(Berkley Internet Name Domain)软件的UNIX机器。
- DNS协议运行在UDP之上,使用53号端口。
- DNS通常是由其他应用层协议所使用的,包括HTTP、SMTP和FTP,将用户提供的主机名解析为IP地址。
- DNS还提供了其他重要的服务:主机别名(host aliasing)、邮件服务器别名(mail server aliasing)、负载分配(load distribution)等。
5.2 DNS工作机理
- DNS采用了分布式的设计方案,它使用了大量的DNS服务器,它们以层次的方式组织,并且分布在全世界范围内。没有一台DNS服务器拥有因特网上所有主机的映射。
- 有三种类型的DNS服务器:跟DNS服务器、顶级域(Top-Level Domain, TLD)DNS服务器和权威DNS服务器。
- 从请求主机到本地DNS服务器的查询是递归的(recursive query),其余的查询是迭代的(iterative query)。
- DNS缓存(DNS caching):为改善时延性能并减少因特网上到处传输的DNS保文数量,DNS广泛采用了DNS缓存技术。当某DNS服务器接收到一个DNS回答时,能够将回答中的信息缓存在本地存储器中。由于主机和主机名与IP地址间的映射不是永久的,DNS服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。
5.3 DNS记录和报文
- 共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record, RR),RR提供了主机名导IP地址的映射。
- 资源记录是一个包含以下字段的4元组:(Name、Value、Type、TTL),其中TTL是该记录的生存时间,它决定了资源记录应该从缓存中删除的时间。
- DNS只有查询报文和回答报文,它们有着相同的格式,如下图所示。
6 P2P应用
- 以上描述的应用(Web、电子邮件和DNS)都采用了客户-服务器体系结构,极大地依赖于总是打开的基础设施服务器;而是用P2P体系结构对总是打开的基础设施服务器没有依赖,成对间歇连接的对等方彼此直接通信。有两种特别适合于P2P设计的应用:
- P2P文件分发。单一服务器向大量主机分发一个大文件时,在客户-服务器文件分发中,该服务器必须向每个对等方发送该文件的一个副本,消耗了大量的服务器带宽;在P2P文件分发中,每个对等方能够重新分发他所有的该文件的任何部分,从而帮助服务器分担带宽压力。
- 目前最流行的P2P文件共享协议是BitTorrent,参与一个特定文件分发的所有对等方的集合被称为一个洪流(torrent),在一个洪流中的对等方彼此下载等长度的文件块(chunk)。
- 分布式散列表(Distributed Hash Table, DHT):在P2P系统中,每个对等方保持(键,值对)占总体数据库的一个小子集,允许任何对等方用一个特别的键来查询分布式数据库。分布式数据库则将定位拥有该相应(键,值对)的对等方,然后向查询的对等方返回该键值对。任何对等方也可以在数据库中插入新键-值对。
- 分布式散列表包括环形DHT和对等方扰动技术。
欢迎关注【OAOA】