一、应用层协议原理
网络应用是计算机网络存在的理由。
研发网络应用的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。
网络核心设备不在应用层上起作用。
1. 网络应用程序体系结构
- 应用程序体系结构(application architecture) 由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。
- 客户-服务器体系结构(client-server architecture),客户之间不直接通信,服务器具有固定的、周知的地址(IP地址)。
- P2P体系结构(P2P architecture),应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方。
2. 进程通信
进行通信的实际上是进程(process)而不是程序。一个进程可以被认为是运行在端系统上的一个程序。
发送进程生成并向网络中发送报文;接收进程接收这些报文并可能通过回送报文进行响应。
客户和服务器进程
- Web应用程序中,一个客户浏览器进程(客户)与一台Web服务器进程(服务器)交换报文。
- 在一个P2P文件共享系统中,文件从一个对等方中的进程(服务器)传输到另一个对等方中的进程(客户)。
进程与计算机网络之间的接口
一个进程向另一个进程发送的报文必须通过下面的网络。
进程通过一个称为 套接字(socket) 的软件接口向网络发送报文和从网络接收报文。
比喻 房子(进程),门(套接字)。
套接字是同一台主机内应用层与传输层之间的接口。
由于套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的 应用程序编程接口(Application Programming Interfere,API)。
应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的运输层端几乎没有控制权。应用程序开发者对于运输层的控制仅限于:
- 选择运输层协议;
- 也许能设定几个运输层参数,如最大缓存和最大报文段长度等。
一旦应用程序开发者选择了一个运输层协议(如果可供选择的话),则应用程序就建立在由该协议提供的运输层服务之上。
进程寻址
接收进程需要:
- 主机地址(IP address);
- 在目的主机中指定接收进程(接收套接字,一台主机可以运行许多网络应用)的标识符 (端口号,port number) 。
流行应用的端口号:
- Web服务器端口号80
- 邮件服务器进程端口号25
- 端口号查询网址
3. 可供应用程序使用的运输服务
开发一个应用时,选择一个最能为你的应用需求提供恰当服务的协议。
应用程序服务要求:
- 可靠数据传输(reliable data transfer);容忍丢失的应用(loss-tolerant application) 接受运输层不提供可靠数据传输
- 吞吐量,发送进程能够向接收进程交付比特的速率。
- 具有吞吐量要求的应用程序被称为 带宽敏感的应用(bandwidth-sensitive application) ,如多媒体应用
- 弹性应用(elastic application),如电子邮件、文件传输、Web传送等。
- 定时 如因特网电话、虚拟环境、电话会议和多方游戏
- 安全性 如机密性、数据完整性、端点鉴别等
4. 因特网提供的运输服务
TCP服务
- 面向连接服务
- 可靠数据传输服务
TCP的加强版本安全套接字层(Secure Sockets Layer,SSL)
UDP服务
UDP是一种不提供不必要服务的轻量级运输协议,它仅提供最小服务。UDP是无连接的,因此在两个进程通信前没有握手过程。
- 不可靠数据传送服务
- 没有拥塞控制机制
因特网运输协议所不提供的服务
定时、带宽保证不提供服务
| 应用 | 应用层协议 | 支撑的运输协议 |
|---|---|---|
| 电子邮件 | SMTP | TCP |
| 远程终端访问 | Telnet | TCP |
| Web | HTTP | TCP |
| 文件传输 | FTP | TCP |
| 流式多媒体 | HTTP | TCP (存疑) |
| 因特网电话 | SIP、RTP或专用的 | UDP或TCP |
5. 应用层协议
应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文:
- 交换的报文类型,例如请求报文和响应报文。
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
- 字段的语义,即这些字段中的信息的含义。
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则。
应用层协议只是网络应用的一部分。Web应用有很多组成部分:
- 文档格式的标准(HTML)
- Web浏览器
- Web服务器
- 应用层协议(HTTP),定义了在浏览器和Web服务器之间传输的报文格式和序列。
二、Web和HTTP
1. HTTP概况
Web的应用层协议是 超文本传输协议(HyperText Transfer Protocol,HTTP) 。
HTTP由两个程序实现:一个客户程序和一个服务器程序,运行在不同的端系统中,通过交换HTTP报文进行会话。
HTTP定义了报文的结构以及客户和服务器进行报文交换的方式。
Web术语
- Web页面(Web Page)(也叫文档)由对象组成。
- 一个 对象(object) 只是一个文件,如
- HTML文件
- JPEG图形
- Java小程序
- 视频片段
- HTML基本文件(base HTML file),多数Web页面含有一个HTML基本文件以及几个引用对象。
- URL地址,HTML基本文件通过对象的URL地址引用页面中的其他对象。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。
http://www.someSchool.edu/someDepartment/picture.gif
www.someSchool.edu 就是主机名
/someDepartment/picture.gif就是路径名
- Web浏览器(Web browser) 实现了HTTP的客户端
- Web服务器(Web server) 实现了HTTP的服务器端,用于存储Web对象,每个对象由 URL 寻址。
HTTP定义了Web客户向Web服务器请求Web页面的方式,以及服务器向客户传送Web页面的方式。当用户请求一个Web页面(如点击一个超链接)时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收到请求并用包含这些对象的HTTP响应报文进行响应。
HTTP使用TCP作为它的支撑运输协议。
服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。HTTP是一个无状态协议(stateless protocol)。
Web服务器总是打开的,具有一个固定的IP地址,且它服务于数以百万计的不同浏览器的请求。
2. 非持续连接和持续连接
- 非持续连接(non-persistent connection) ,每个请求/响应对经一个单独的TCP连接发送
- 持续连接(persistent connection) ,所有的请求及其响应经相同的TCP连接发送
采用非持续连接的HTTP
每个TCP连接在服务器发送一个对象后关闭,即该连接并不为其他的对象而持续下来。每个TCP连接只传输一个请求报文和一个响应报文。
往返时间(Round-Trip Time,RTT) 该时间是指一个短分组从客户到服务器然后再返回客户所花费的时间。
总的响应时间就是两个RTT加上服务器传输HTML文件的时间。
采用持续连接的HTTP
如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。
3. HTTP报文格式
HTTP报文有两种:请求报文和响应报文。
HTTP请求报文
GET /somedir/page.html HTTP/1.1
HOST: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
报文用普通的ASCII文本书写的。
HTTP请求报文的第一行叫作请求行(request line),其后继的行叫作首部行(header line)。
- 请求行有三个字段:方法字段,URL字段和HTTP版本字段。绝大部分的HTTP请求报文使用GET方法。当浏览器请求一个对象时,使用GET方法,在URL字段带有请求对象的标识。
- 首部行Host指明了对象所在的主机。首部
Connection: close告诉服务器发送完被请求的对象后就关闭这条连接。 - POST方法
- HEAD方法
- PUT方法
- DELETE方法
HTTP响应报文
HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ...)
- 初始状态行(status line):协议版本字段、状态码和相应状态信息
- 200 OK 请求成功,信息在返回的响应报文中。
- 301 Moved Permanently 请求的对象已经被永久转移了,新的URL定义在响应报文的Location首部行中。客户软件将自动获取新的URL。
- 400 Bad Request 一个通用差错代码,指示该请求不能被服务器理解。
- 404 Not Found 被请求的文档不在服务器上
- 505 HTTP Version Not Supported 服务器不支持请求报文使用的HTTP协议版本
- 首部行(header line)
- Date 首部行指示服务器产生并发送该响应报文的日期和时间
- Server 首部行指示该报文由一台Apache Web服务器产生
- Last-Modified 对象创建或者最后修改的日期和时间
- Content-Length 首部行指示了被发送对象的字节数
- Content-Type 首部行指示了实体体中的对象是HTML文本
- 实体体(entity body)
Windows10使用telnet
4. 用户与服务器的交互:cookie
cookie技术有4个组件
- 在HTTP响应报文中的一个 cookie 首部行
- 在HTTP请求报文中的一个 cookie 首部行
- 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理
- 位于 Web 站点的一个后端数据库
例子
Susan 首次访问 Amazon.com,HTTP响应报文的Set-cookie首部行可能是
Set-cookie: 1678
Susan 再次浏览 Amazon.com 时,HTTP请求报文的 Cookie 首部行
Cookie: 1678
5. Web缓存
Web缓存器(Web cache)也叫代理服务器(proxy server)
配置用户的浏览器,可以使用户的所有HTTP请求首先指向Web浏览器。
过程
- 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求
- Web缓存器进行检查,查看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用HTTP响应报文返回该对象
- 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器的TCP连接。Web缓存器则在这个缓存器到服务器的TCP连接上发送一个对该对象的HTTP请求。收到该请求后,初始服务器向该Web缓存器发送具有该对象的HTTP响应。
- 当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本。
Web缓存器既是服务器也是客户。
好处
- Web缓存器可以大大减少对客户请求的响应时间
- Web缓存器能够大大减少一个机构的接入链路到因特网的通信量(不用增加带宽,从而降低费用)
- Web缓存器能从整体上大大减低因特网上的Web流量,从而改善了所有应用的性能
6. 条件GET方法
条件GET(conditional GET)方法:HTTP协议的一种机制,允许缓存器证实它的对象是最新的。报文满足:
- 请求报文使用GET方法
- 请求报文包含一个
If-Modified-Since首部行。
首先,代理缓存器代表一个请求浏览器,向某Web服务器发送一个请求报文
GET /fruit/kiwi.gif HTTP/1.1
HOST: www.exotiquecuisine.com
其次,该Web服务器向缓存器发送具有被请求的对象的响应报文
HTTP/1.1 200 OK
Date: Sat, 3 Oct 2015 15:39:29
...
Last-Modified: Wed, 9 Sep 2015 09:23:24
...
(data data data ...)
缓存器发送一个条件GET方法执行最新检查
GET /fruit/kiwi.gif HTTP/1.1
HOST: www.exotiquecuisine.com
If-modified-since: Wed, 9 Sep 2015 09:23:24
Web服务器向该缓存器发送一个响应报文
HTTP/1.1 304 Not Modified
...
(empty entity body)
该响应报文不包含所请求的对象,包含则会浪费带宽。
三、因特网中的电子邮件
电子邮件是一种异步通信媒介。
因特网电子邮件系统的三个主要组成部分
- 用户代理 (user agent)
- 邮件服务器 (mail server)
- 简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP)
1. SMTP
情景再现:Alice给Bob发送一封简单的ASCII报文
- Alice调用她的邮件代理程序并提供Bob的邮件地址,撰写报文,然后指示用户代理发送该报文
- Alice的用户代理把报文发送给她的邮件服务器,在那里该报文被放在报文队列中
- 运行在Alice的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接
- 在经过一些初始SMTP握手后,SMTP客户端通过该TCP连接发送Alice的报文
- 在Bob的邮件服务器上,SMTP的服务器端接收该报文。Bob的邮件服务器然后将该报文放入Bob的邮箱中
- 在Bob方便的时候,他调用用户代理阅读该报文
Telnet
telnet serverName 25
2. 与HTTP的对比
- 相同点:都使用持续连接
- 区别
- HTTP是拉协议(pull protocol),TCP连接是由想接收文件的机器发起的;SMTP是推协议(push protocol),TCP连接是由要发送该文件的机器发起的。
- SMTP要求每个报文采用7比特的ASCII码格式,HTTP数据则不受这种限制
- HTTP把每个对象封装到它自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文之中
3. 邮件报文格式
From: alice@crepes.fr
To: bob@hamburger.edu
Subject: Searching for the meaning of life.
4. 邮件访问格式
Bob的代理不能使用SMTP得到报文,因为取报文是一个拉操作!
- 第三版的邮局协议(Post Office Protocol — Version 3, POP3)
- 因特网邮件访问协议(Internet Mail Access Protocol, IMAP)
- HTTP,用户代理就是普通的浏览器,用户和他远程邮箱之间的通信则通过HTTP进行。