网络应用是计算机网络存在的理由
网络应用程序体系结构
- 网络体系结构是固定的,并为应用程序它提供了特定的服务集合
- 应用程序体系结构由应用程序研发者设计,规定了如何在端系统上组织该应用程序
- 两种主流体系:客户-服务器,对等P2P结构
客户-服务器体系
- 有一个总是打开的主机称为服务器,它服务以来自许多其他称为客户的主机的请求
- 在此体系中客户之间不直接通信
- 该服务器具有固定的,周知的地址,改地址称为IP地址
P2P体系结构
- 次结构对于数据中心的专用服务器具有最小的依赖
- 应用程序在间断连接的主机对之间使用直接通信,这些主机对称为对等方
- 目前许多流行的,流量密集型应用都是P2P体系结构
- 其优秀特性之一为自扩展性
进程通信
- 用操作系统术语来说,进行通信的实际上是进程而不是程序
- 进程间通信的规则由端系统上的操作系统确定
- 在两个不同的端系统上的进程,通过跨越计算机网络交换报文而互相通信
客户和服务器进程
- 网络应用程序由成对的进程组成,这些进程通过网络互相发送报文
- 对每对通信进程,我们通常将这两个进程之一标识为客户,而另一个进程标识为服务器
进程与计算机网络之间的接口
- 进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文
- 套接字是一台主机内应用层和运输层之间的接口
- 由于该套接字是建立网络应用程序的可编程接口,因此套接字也被称为应用程序和网络之间的应用程序编程接口
- 应用程序开发者对于运输层的控制权仅限于:选择运输层协议 设定几个运输层参数(如最大缓存和最大报文段长度等)
进程寻址
- 在一台主机上运行的进程为了向在另一台主机上运行的进程发送分组,接收进程需要有一个地址
- 为了标识该进程,需要定义两种信息:主机的地址 在目的主机中指定接收进程的标识符
- 在因特网中,主机由其IP地址标识
- 进程由目的地端口号标识,已经给流行的应用分配了特定的端口号
可供应用程序使用的运输服务
我们大体上可以从四个方面对应用程序服务要求进行分类:可靠数据传输,吞吐量,定时和安全性
可靠数据传输
必须做一些工作以确保由应用程序的一端发送的数据正确,完全的交付给该应用程序的另一端。如果一个协议提供了去确保数据交付服务,就认为提供了可靠数据传输
吞吐量
在沿着一条网络路径上的两个进程之间的通信会话场景中,可用吞吐量就是发送进程能够向接受进程交付比特的速率
具有吞吐量要求的应用程序被称为带宽敏感的应用
定时
为了有效性而要求数据交付有严格的时间限制
安全性
运输协议能够为应用程序提供一种或多种安全性服务
因特网提供的运输服务
因特网为应用程序提供了两个协议,UDP和TCP
TCP服务
TCP服务包括面向连接服务和可靠数据传输服务
面向连接的服务
- 握手阶段:应用层数据报文开始流动前,TCP让客户端和服务器相互交换运输层信息
- 握手之后:一个TCP连接就在两个进程的套接字之间建立了,这条连接是全双工的,意味着双方的进程可以在此连接上同时进行报文收发
可靠的数据传输服务
- 通信能够依靠TCP进行无差错,按适当顺序交付所有发送的数据
UDP服务
UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务
UDP是无连接的,因此在两个进程通信前没有握手过程
UDP提供一种不可靠的数据传输服务,当一个报文发送到UDP套接字时,UDP协议并不保证该报文将到达接收进程,不仅如此,到达接收进程的报文很可能是乱序到达的。
应用层协议
应用层协议定义了运行在不同端系统上的应用程序如何相互传递报文,定义了:
- 交换的报文类型(请求报文和响应报文)
- 各种报文的语法
- 字段的语义
- 确定一个进程何时以及如何发送报文,对报文响应的规则
- 很多应用层协议是由RFC文档定义的
HTTP
- Web的应用层协议是超文本传输协议(HTTP)它是Web的核心。
- Web由两个程序实现:一个客户端程序和一个服务器程序
- HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户端传送Web的方式
- HTTP使用TCP作为它的运输层协议
- HTTP不用担心数据丢失,也不关注TCP的细节
- HTTP不保存任何关于客户的信息,所以HTTP是一个无状态协议
持续连接和非持续连接
HTTP报文格式
请求报文
GET / somedir/page.html HTTP/1.1 Host:www.someschool.edu Connection:close User-agent:Mozilla/5.0 Accept-language:fr
- 第一行叫做请求行,其后继的行叫做首部行
- 请求行有三个字段:方法字段,URL字段和HTTP版本字段
- 方法字段有几种不同的值,包括GET,POST,HEAD,PUT,DELETE
响应报文
HTTP/1.1 200 OK Connection: close Date:Tue,18 Aug 2015 15:44:04 GMT Sever:Apache/2.2.3(Cent OS) Last-Modified:Tue,18, Aug 2015 15:11:03 GMT Content-Length:6821 Content-Type:text/html (data data data...)
- 他有三个部分:一个初始状态行,6个首部行,然后是实体体
- Last-Modified首部行指示了对象创建或者最后修改的日期和时间
- Content-Length指示了被发送对象中的字节数
常见状态码
- 200 OK 请求成功,信息在返回的响应报文中
- 301 Moved Permanently 请求的对象已被永久转移了
- 400 Bad Request 一个通用差错代码,指示该请求不能被服务器理解
- 404 Not Found 被请求的文档不在服务器上
- 505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本
cookie
cookie是为了HTTP识别用户和将内容和用户身份联系起来,它允许站点对用户进行跟踪
cookie四个组件
- 在HTTP响应报文中的一个cookie首部行
- 在HTTP请求报文中的cookie首部行
- 用户端系统中保留有一个cookie文件,并由浏览器进行管理
- 位于Web站点的一个后端数据库
Web缓存
Web缓存也叫代理服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体
Web缓存器即是客户也是服务器
部署Web缓存器的原因
- Web缓存器可以大大减少对客户请求的响应时间,特别是客户与初始服务器之间的瓶颈带宽远低于客户与Web缓存器之间的瓶颈带宽时更是如此
- Web缓存器能够大大减少一个机构的接入链路到因特网的通信量
条件GET方法
HTTP有一种机制允许缓存缓存器证实它的对象是最新的,这种机制就是条件GET方法,如果
- 请求报文使用GET方法
- 请求报文中包含一个"If-Modified-Since"首部行,那么,这个HTTP请求报文就是一个条件GET请求报文
DNS
因特网上的主机和人类一样,可以使用多种方式进行标识。主机的一种标识方法是用它的主机名hostname
主机名也可以使用IP地址进行标识。一个IP地址有四个字节组成,并有着严格的层次结构
DNS提供的服务
提供主机名到IP地址转换的目录服务就是域名系统DNS的主要任务
DNS是:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
- DNS协议运行在UDP之上,使用35号端口
DNS通常是由其他的应用层协议所使用的,包括HTTP,SMTP和FTP
DNS为互联网应用带来了额外的时延,但通常想获得的IP地址通常缓存在附近的DNS服务器中,这有助于减少DNS网络流量和DNS的平均时延
DNS提供的一些其他重要服务
- 主机别名 应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址
- 邮件服务器别名
- 负载分配
P2P文件分发
使用P2P体系结构,对总是打开的基础设施服务器有最小的依赖。
在P2P文件分发中,每个对等方能够向任何其他对等方重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器。
P2P其中每个对等方能够帮助服务器分发该文件,特别是当一个对等方接收到某些文件数据,它能够使用自己的上载能力重新将数据分发给其他对等方。
具有P2P体系结构的应用程序能够是自扩展的。这种扩展性的直接成因是:对等方除了是比特的消费者外还是它们的重新分发者。
BitTorrent
BitTorrent是一种用于文件分发的流行P2P协议
套接字编程
网络应用分两类:
- 一类是由协议标准中所的定义的操作的实现,这样的应用程序有时称为是开放的,因为定义其操作的这些规则则为人们所知
- 另一类网络应用程序是专用的网络应用程序。在这种情况下,由客户和服务器程序应用的应用层协议没有公开发布在某RFC中或其他地方
UDP套接字编程
当生成一个套接字的时候,就为它分配一个称为端口号的标识符
TCP套接字编程
TCP是一个面向连接的协议。这意味着在客户和服务器能够开始互相发送数据之前,他们首先要进行握手和创建一个TCP连接。