介绍
- 应用层为用户提供服务
- 通信由逻辑连接提供
提供服务
- 如果将一个协议增加到一层中,那么这个协议应当被设计成使用底层协议提供的服务;如果从一层中取出一个协议,那么应该注意去改写它的上一层协议,高层协议可能使用了它提供的服务。
- 由于应用层是协议簇的最高层,它与其他层有些不同。这层中的协议不为任何其他协议提 供服务,它们只接收来自传输层协议的服务。这意味着,可以从这层中轻易地去除协议。只要新的 协议可以使用传输层协议提供的服务,那么就可以把它加入到这一层。
应用层模式
传统模式:客户-服务器模式
服务提供者是一 个称为服务进程的应用程序,它不断地运行着,等待另一个称为客户进程的应用程序通过因特网建 立连接并请求服务。通常有一些服务进程可以提供特定类型的服务,但是有很多客户向这些服务进 程请求服务。服务进程必须一直运行,当需要接受服务时客户进程就被打开。
- 通信符合集中在服务器上
- 必须存在服务提供商
新模式:对等模式(P2P)
不需要一个不断运行且等待客户进程连接的服务器进程。责任在对等结点(peer)之 间分担。连接到因特网的计算机可以在这一次提供服务却在下一次接受服务。一台计算机甚至可以 同时接受和提供服务。 - 无需一直运行和维护服务器,经济划算
- 安全问题和适用性存在争议
混合模式
比如轻量级的客户-服务器通 信可以用来寻找可以提供服务的对等结点(peer)的地址。当找到这个地址时,实际服务可以通过 使用对等模式从对等结点中获得。
客户-服务器模式
- 应用层的通信在两个运行的应用程序之间进行,这两个应用程序被称为进程:客户和服务器。
- 服务器进程要在客户端程序运行前开启。
应用程序接口
- 指令集:告诉计算机要做什么,我们需要一个新的指令集告知 TCP/IP 协议簇的低四层打开连接,发送数据,从另一个终端接收数据, 以及关闭连接。这样的指令集通常称为应用程序接口(API)
- 常见通信API:套接字接口,传输层接口以及STREAM。
套接字
- 套接字是供应用程序创建和使用的数据结构
套接字地址
- 由于客户-服务器模式的通信是在套接字之间的,我们需要一对套接字地址:一个本地,一个远程
- 套接字地址是一个IP地址和一个端口号组合(IP地址32位,端口号16位)
寻找套接字地址
- 服务器站点:需要一个本地(服务器)和一个远程(客户)套接字地址来通信
- 本地套接字地址:本地(服务器)套接字地址由操作系统提供
- 远程套接字地址:客户套接字地址包含在发送给服务器的请求报文中,它成为远程套接字地 址来给客户提供响应。
- 客户站点:同样需要一个本地(客户)和一个远程(服务器)套接字地址来通信
- 本地套接字地址:本地(客户)套接字地址由操作系统提供
- 远程套接字地址:两种情况:
- 开启客户进程的用户知道运行着服务器进程的计算机端口号和IP地址。
- 不知道IP地址,通过DNS解析获得IP,端口号是熟知端口号,客户进程通常知道。
使用传输层的服务
UDP协议
- 提供无连接的,不可靠的数据包服务。
- 无连接服务意味着两个交换报文的终端你之间没有逻辑连接,每个报文都是独立的实体,被封装在一个称为数据报的分组中,UDP看不到来自同一个源端并去往同一个目的短的数据报之间的关系(连接)。
- 不可靠意味着尽管它可能在传输中检查数据是否被破坏,但是它并不要求发送端重传 被破坏的或丢失的数据。它保留报文边界
TCP协议
- 提供面向连接的可靠的字节流传输
- 不面向报文,不保留报文边界
SCTP协议
- 提供前面两个协议组合的功能
- 可以通过提供多媒体网络层连接提供多媒体流服务
标准客户-服务器应用
万维网和HTTP
万维网
网络客户(浏览器):控制程序(接收老子键盘和鼠标的输入并使用客户端程序范文文档),解释程序(显示文档,如HTML,JS,Java),客户协议
网络服务器:发送被请求的文档
同一定位符(URL)
为了定义一个网页,我们需要3个标识符:主机,端口,路径,在定义网页前我们需要告知浏览器我们要获取那个客户-服务器应用,这称为协议,所以我们需要四个标识符定义网页,第一个获取网页的运载工具形式,后三项定义了网页。静态文档:在服务器中创建和储存的固定内容的文档,客户得到的只是一个文档副本。(HTML,XML,XSL,XHTML)
动态文档:当浏览器请求文档时动态文档被网页服务器创建。(CGI,JSP,ASP,SQL)
活动文档:在客户站点运行一个程序或脚本。(Java applets,JS)
超文本传输协议
是一种用来定义客户服务器程序如何编 写和如何从万维网获取网页的协议。
客户发送请求,服务器返回相应,服务器使用80端口号,客户使用一个临时端口号,HTTP使用TCP服务。
请求在一个服务器中的对象有两种选择:
- 每次使用一个新的TCP连接获取一个对象,被称为非持续连接
- 创建一个TCP连接获取全部对象,被称为持续连接
在HTTP1.1之前指定的是非持续连接,1.1版中默认的事持续连接,可以被用户改变
- 非持续连接步骤:
- 客户开启一个TCP连接并发送请求
- 服务器发送相应并关闭连接
- 客户读取数据知道它遇到了文件结束标记,然后关闭连接
- 持续连接
- 服务器可以在客户请求下或者在超时情况下将连接关闭
- 发送方通常在每次相应中发送数据长度,偶尔发送方不知道数据的长度,在这种情况下,服务器通知客户长度未知并在发送数据后关闭连接,因此客户知道数据已接收完毕。
报文格式
请求报文
请求行
- 方法
- URL
- 版本
- 方法
首部行
在请求行之后我们可以有一个或多个请求头部(request header)行。每一个头部行都从客户端 向服务器 发送额外的信息。例如,客户可以请求以某种特定格式发送文档。每个头部行有头部名字、 一个冒号、一个 空格和一个头部值(见图 2-12)。表 2-2 列出了一些请求中常用的头部名字。值字 段定义了与每个头部名字相 关的值。值列表可以在相应的 RFC 中查找到。主体
主体可以出现在请求报文中。通常,当使用POST或PUT方法时,它包含要发送的评论或要发布到网站 上的文档。
响应报文
- 状态行
- 版本
- 状态码
在 100 范围内的代码只代表一个报告,在 200 范围内的代码表示这是一个成功的请求。 在 300 内的
代码表示把客户端重定向到另一个 URL,在 400 范围内的代码表示在客户端发生错误。最后,在 500 范围 内的代码表示错误发生在服务器端。 - 短语
状态短语以文本格式解释了状态码。
- 头部行
- 主体
主体包含了从服务器发送给客户的文档。除非响应是一个错误报文,否则主体是存在的。
- 状态行
条件请求
客户可以在请求中加入条件。在这种情况下,如果条件满足,服务器将会发送被请求的网页或 者通知用户。客户加入的最常见的一种条件是网页被修改的时间和日期。客户可以在发送请求时附 带头部行 If-Modified-Since,这样来告知服务器客户只需要在指定日期之后更新的页面。Cookie
- 创建和储存Cookie
- 当服务器从客户端接收到请求后,它将客户端的信息存储在文件或字符串中。这些信息可
能包含客户端的域名、cookie 内容(服务器收集到的关于客户端的信息,如主机名、注册号等)、 时间戳, 以及与实现有关的其他信息。 - 服务器在响应中包含了它发送给客户端的 cookie。
- 当客户端接收到响应后,浏览器在 cookie 目录中存储 cookie,并根据服务器域名进行分类。
- 当服务器从客户端接收到请求后,它将客户端的信息存储在文件或字符串中。这些信息可
- 使用Cookie
当客户向服务器发送请求时,浏览器在 cookie 目录中查询是否有从那个服务器≤发送过来的 cookie。如果有, 则在请求中包含这个 cookie。当服务器接收到这个请求后,它就知道 了这是一个老客户,而不是新的。注
意,cookie 的内容从来不让浏览器读取或者透露给用户,只由 服务器创建并回收 cookie。现在让我们分析如 何使用 cookie 来实现上面提到的四个功能。万维网高速缓存:代理服务器
- 创建和储存Cookie
代理服务器是一台计算机,能够保存最近请求的响应 的副本。HTTP 客户端向代理服务器发送请求。代理服务器检查本地高速缓存。如果高速缓存中不 存在响应报文,代理服务器就向相应的服务器发送请求。返回的响应会发送到代理服务器中,并且 进行存储,以用于其他客户端将来的请求。
优点:代理服务器降低了原服务器负载,减少通信量并且降低了延迟
为了使用代理服务器,必须配置客户端访问代理服务器而不是目标服务器。
代理服务器位置:
HTTP本质上不提供安全,然而HTTP可以在安全套接层(SSL)上运行,在这种情况下,HTTP称为HTTPS
HTTPS提供保密性、客户和服务器鉴别,以及数据完整性。
FTP
文件传输协议是TCP/IP提供的标准机制,用于将文件从一个主机复制到另一个主机。
客户有三个组件:用户接口、客户控制进程和客户数据传输进程。
服务器有两个组件:服务器控制进程和服务器数据传输进程。
将命令和数据传输分开使得FTP效率更高,因为控制进程比较简单,而传输进程比较复杂。
两种连接的寿命
在整个交互的FTP会话期间
控制连接始终处于连接状态
数据连接则在每次传输文件时开启然后关闭
FTP端口:端口21用于控制连接,端口20用于数据连接。
控制连接
对于控制通信,FTP使用与TELNET相同的方法。它与TELNET一样使用NVT ASCII字符集。通信是通过命令和相应来完成的。
每一条命令或相应都是一个短行,因此不比担心他的文件格式或文件结构,每一行结束处是两个字符(回车和换行)的行结束标记。
![](http://image.zhchy.info
/计算机网络章2-6.png)每个FTP命令至少产生一个响应。一个响应有两个部分:跟随在文本后的一个三位数字,数字部分定义了编码;文本部分定义了需要的参数或进一步的结束。
数据连接
步骤:
- 客户,不是服务器,使用临时端口发起一个被动打开。这必须由客户完成,因为正是客户 发出命令要求传输文件的。
- 客户使用 PORT 命令发送这个端口号到服务器。
- 服务器接收到端口号,使用熟知端口 20 发出主动打开并且接收临时端口号。
通过数据连接的通信:
数据连接的目的和实现与控制连接是不同的。我们通过数据连接来传输文件。客户必须定义传输文件的类型、数据结构以及传输模式。在通过数据连接发送文件之前,我们通过控制连接进行准备。异构性问题可以通过定义三个通信属性来解决:文件类型、数据结构和传输方式。- 数据结构:文件结构、记录结构和页面结构
- 文件结构没有结构,是连续的字节流
- 记录结构把文件划分成一些记录,这只能用于文本文件。
- 页面结构吧文件划分成页面,每一个页面有一个页面号和页面头部,页面可以随机地或顺序地存储访问。
- 文件类型
ASCII文件、EBCDIC文件和图像文件 - 传输方式:流方式、块方式和压缩方式
- 流方式:默认方式,数据作为连续的字节流从FTP传递给TCP
- 块方式:数据可以按块从FTP传递给TCP
- 数据结构:文件结构、记录结构和页面结构
文件传输
密码明文
数据连接明文
为了安全可以把安全套接层加入到FTP应用层和TCP层之间,这种情况下FTP称为SSL-FTP
电子邮件
#各种原理/计算机网络