第二章 应用层
目录
2.1应用层协议原理
2.1.1 网络应用程序体系结构
- 客户-服务器体系结构(client-server architecture)
客户相互之间不直接通信;
服务器具有固定的、周知的地址(IP地址),因而服务器总是打开的;
配备大量主机的数据中心常被用于创建强大的虚拟服务器;
- P2P体系结构(P2P architecture)
应用程序在间断连接的主机对之间使用直接通信;
某些应用具有混合的体系结构,结合了客户-服务器和P2P的元素;
自拓展性(self-scalability)
2.1.2 进程通信
在两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而相互通信。
1)客户和服务器进程
在给定的一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户(client),在会话开始时等待联系的进程标识为服务器(server)。
对Web而言,浏览器→客户进程,Web服务器→服务器进程;
对P2P文件共享,下载文件的对等方→客户,上载文件的对等方→服务器。
2)进程与计算机网络之间的接口
进程通过一个成为套接字(socket)的软件接口向网络发送报文和接收报文。套接字是同一台主机内应用层与运输层之间的接口,亦称应用程序和网络之间的应用程序编程接口(Application Programming Interface,API)。
3)进程寻址
为了标识接收进程,需要定义两种信息:
-
主机的地址(IP地址 IP adress);
-
定义在目的主机中的接收进程的标识符(端口号 port number)。
2.1.3 可供应用程序使用的运输服务
- 可靠数据传输
如果一个协议提供了确保数据交付支付服务,就认为提供了可靠数据传输(reliable data transfer);
当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些数据可能不能够到达接收进程,这可能能被容忍丢失的应用(loss-tolerant application)所接收。
- 吞吐量
具有吞吐量要求的应用程序被称为宽带敏感的应用(bandwidth-sensitive application);
弹性应用(elastic application)能够根据情况或多或少的地利用可供使用的吞吐量。
- 定时
这种服务对交互式实时应用程序由吸引力(电话、网络游戏)。
- 安全性
2.1.4 因特网体提供的运输服务
1)TCP服务
-
面向连接的服务
-
可靠的数据传送服务
【TCP安全-SSL】
无论TCP还是UDP都没有提供任何加密机制;
TCP的加强版:安全套接字层(Secure Socket Layer,SSL)。
2)UDP服务
-
无连接
-
不可靠的数据传送服务
3)因特网运输协议所不提供的服务
今天的因特网通常能够为时间敏感应用提供满意的服务,但它不能提供任何定时或宽带保证。
2.1.5 应用层协议
应用层协议(application-layer protocol)定义了运行在不同端系统上的应用程序进程如何相互传递报文。
特别定义了:
-
交换的报文类型,例如请求报文和响应报文;
-
各种报文类型的语法;
-
字段的语义;
-
一个进程何时以及如何发送报文,对报文进行响应的规则。
2.1.6 本书涉及的网络应用
Web、文件传输、电子邮件、目录服务和P2P。
2.2 Web和HTTP
2.2.1 HTTP概况
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol,HTTP),它是Web的核心,在【RFC 1945】和【RFC 2616】中进行了定义。
某些Web术语:
Web页面(Web page)(也叫文档,由对象组成);
对象(object)只是一个文件,诸如HTML文件、JPEG图形、Java小程序等等;
HTML 基本文件(base HTML file):通过对象的URL地址引用页面中的其他对象;
Web浏览器(Web browser)实现了HTTP的客户端;
Web服务器(Web server)实现了HTTP的服务端,用于存储Web对象,每个对象由URL寻址。
HTTP服务器并不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议(statusless protocol)。
2.2.2 非持续连接和持续连接
每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送呢?采用前者的应用程序被称为使用非连续连接(non-persistent connection);采用后者则被称为使用持续连接(persistent connection)。
1)采用非持续连接的HTTP
往返时间(Round-Trip Time,RTT):一个短分组从客户到服务器然后再返回客户所花费的时间。
“三次握手”:客户向服务器发送一个小TCP报文段,服务器用一个小TCP报告文段做出确认和响应,最后,客户向服务器返回确认。
总的响应时间:两个RRT加上服务器传输HTML文件的时间。
2)采用持续连接的HTTP
在采用持续连接的情况下,服务器在发送响应后保持该TCP连接打开,在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的Web页面(上例中的HTML基本文件加上10个图形)可以用单个持续TCP连接进行传送。
HTTP的默认模式是使用带流水线的持续连接。
2.2.3 HTTP 报文格式
1.HTTP 请求报文
一个请求报文至少为一行,第一行为请求行(request line)其后继的行叫做首部行(header line);
请求行有三个字段:方法字段、URL字段和HTTP版本字段。
方法字段:GET、POST、HEAD、PUT、DELETE。(绝大部分HTTP请求使用GET方法)
2.HTTP响应报文
三个部分:状态行(status line)、首部行(header line)、实体体(entity body)【包含了所请求的对象本身】
状态行有三个字段:协议版本字段、状态码和相应状态信息。
(Date:首部行指示服务器产生并发送该相应报文的日期和时间。注意,这个时间不是指对象创建或者最后修改的时间,而是服务器从它的文件系统中检索到该对象,插入到响应报文,并发送该响应报文的时间。)
常见的状态码和相关的短语:
- 200 OK:请求成功,信息在返回的响应报文中;
- 301 Moved Permanently:请求的对象已经被永久转移了,客户软件将自动获取新的URL;
- 400 Bad Request:一个通用差错代码,指示该请求不能被服务器理解;
- 404 Not Found:被请求的文档不在服务器上;
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本。
2.2.4 用户和服务器的交互:cookie
cookie技术的四个组件:
- 在HTTP响应报文中的一个cookie首部行;
- 在HTTP请求报文中的一个cookie首部行;
- 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
- 位于Web站点的一个后端数据库。
2.2.5 Web缓存
Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网络实体。
内容分发网络(Content Distribution Network,CDN)。
2.2.6 条件 GET 方法
条件 GET 方法(conditional GET),如果:
- 请求报文使用 GET 方法;
- 请求报文中包含一个 “If-Modified-Since:” 首部行。
则该 HTTP 请求报文就是一个条件 GET 请求报文。
2.3 文件传输协议:FTP
HTTP 和 FTP 都是文件传输协议,并且有很多共同的特点,例如,它们都运行在 TCP 上。区别:FTP 使用了两个并行的 TCP 连接来传输文件,一个是控制连接(control connection),一个是数据连接(data connection)。
FTP 命令(4个大写字母 ASCII 字符):
- USER username:用于向服务器传送用户标识;
- PASS password:用于向服务器发送用户口令;
- LIST:用于请求服务器回送当前远程目录中的所有文件列表;
- RETR filename:用于从远程主机当前目录检索(即 get)文件;
- STOR filename:用于在远程主机的当前目录上存放(即 put)文件。
典型的回答:
- 331 Username OK,Password required(用户名 OK,需要口令);
- 125 Data connection already open;transfer starting(数据连接已打开,开始传送);
- 425 Can't open data connection(无法打开数据连接);
- 452 Error writing file(写文件差错)。
2.4 因特网中的电子邮件
2.7 TCP套接字编程
2.7.1 UDP 套接字编程
应用程序演示:
1)客户从其键盘读取一行字符并将数据向服务器发送;
2)服务器接收该数据并将这些字符转换成大写;
3)服务器将修改的数据发送给客户;
4)客户接收修改的数据并在其监视器上将该行显示出来。
2.7.2 TCP 套接字编程