应用层协议原理
- 网络应用程序的核心是写出运行在不同端系统和通过网络批次通信的程序。
- 不需要研发网络核心设备(路由器或链路交换机)上运行的软件。
- 网络核心设备并不在应用层起作用
- 而在较低层起作用,特别是网络层及下面层次
- 将应用软件限制在端系统的分层设计,促进了大量网络应用程序的研发和部署。
2.1.1
网络应用程序体系结构
- 应用程序的体系结构不同于网络体系结构。
- 网络体系结构是固定的,为应用程序提供了特定的服务集合。
应用程序体系结构 (application architecture) 由应用开发者设计,规定了如何在各种端系统上组织应用程序。
常用程序结构体系
1. 客户 - 服务器体系结构 (client-server architecture)
有一个7/24开启的服务器,服务于其他客户主机的请求。
- 客户 - 服务器体系结构中,客户之间不互相通信。
- 服务器具有固定的,周知的地址,加上7/24开启,这样客户就能通过该服务器的 IP 地址发送分组。
- Web
- FTP
- Telnet
- 电子邮件
- 仅一台服务器并不能承受大量客户请求的情况,配备大量主机的数据中心 (data center) 常被用于创建强大的虚拟服务器。
2. 对等体系结构 (P2P architecture)
- 对位于数据中心的专用服务器几乎没有依赖。
- 应用程序在间断连接的主机之间使用直接通信(这些主机被称为对等方)
- 对等方并不为服务提供商所有,为用户控制的主机所有。
- 对等方通信不必通过专门的服务器。
- 文件共享(BitTorrent)
- 迅雷
- Skype
- …
- 服务器被用于跟踪用户的 IP 地址,但是用户到用户的报文在主机之间 (无需通过中间服务器) 直接发送。
- P2P特性:自扩展性 (self-scalability)
- P2P 文件分享,每个对等方都因请求文件产生工作负载
- 但是每个对等方通过向其他对等方分发文件也为系统增加服务能力。
- P2P 体系结构通常不需要庞大的服务器基础设施和服务器带宽
2.1.2
进程通信
- 进行通信的实际上是进程 (process) 而不是程序。
- 一个进程可以被认为是运行在端系统中的一个程序。
- 当多个程序运行在相同的端系统上时,他们使用进程间通信机制相互通信。
- 进程间通信的规则为由端系统上的操作系统确定。
- 需要关注运行在不同端系统 (可能不同的 OS, Operating System 操作系统) 上的进程间的通信情况。
- 两个不同端系统上的进程,通过跨越计算机网络交换报文 (message) 而相互通信。
- 发送进程生成报文,并通过网络向目的主机发送
- 接收进程接收报文并可能回送报文进行响应。
1. 客户和服务器进程
- 网络应用程序由成对的通信进程组成,这些进程通过网络相互发送报文。
- 一个被标识为客户 (client)
- 另一个被标识为服务器 (server)
- 定义:在一对进程之间的通信会话场景中,发起通信 (即在该会话开始时与其他进程的联系) 的进程被标识为客户
- 在会话开始时,等待联系的进程被定义为服务器。
2. 进程与计算机网络之间的接口
- 从一个进程向另一个进程发送的报文必须通过网络。
- 进程通过一个称为套接字 (socket) 的软件接口向网络发送报文和从网络接收报文。
- 套接字是同一台主机内应用层与运输层之间的接口。
- 套接字是建立网络应用程序的可编程接口,也被称为应用程序编程接口 (Application Programming Interface, API)。
- 应用程序开发者可以控制套接字在应用层端的一切,但是对于套接字的运输层几乎没有控制权。
- 应用程序开发者对于运输层的控制仅限于:
- 选择运输层协议
- 能设定几个运输层参数(最大缓存和最大报文段长度)
- 一旦应用程序开发者选择了一个运输层协议,应用程序就建立在 由该协议提供的运输层服务上。
3. 进程寻址
- 在一台主机上运行的进程为了向另一台主机上运行的进程发送分组,接收进程需要有一个地址。
- 为了标识该接收进程,需要定义两种信息:
- 主机的地址
- 在目的主机中指定接收进程的标识符。
- 在因特网中,主机由 IP 地址 (IP address) 标识。
- IP 地址是一个 32-bit 的量而且是唯一能够标识该主机的数据。
- 除了报文发送的目的主机的地址之外,发送进程还必须指定运行在接收主机上的接收进程(接收套接字)。
- 目的地端口号 (port number) ,已经给流行的应用分配了特定的端口号。查找端口号
2.1.3
可供应程序使用的运输服务
- 套接字是应用程序进程和运输层协议之间的接口。
- 在发送端的应用程序将报文推进该套接字。
- 运输层协议负责从接收进程的套接字得到该报文。
- 包括因特网在内的很多网络由很多运输层协议的选择,在开发的时候需要确定一种可用的运输层协议。
- 运输层协议为调用它的程序提供4种服务:
- 可靠数据传输
- 吞吐量
- 定时
- 安全性
1. 可靠数据传输
- 分组在计算机网络中可能丢失。
- 路由器中的缓存溢出
- 分组中的某些bit损坏后被丢弃
- 必须确保源主机的分组正确,完整地交付给目的主机,可靠数据传输 (reliable data transfer)。
- 当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些数据可能到达不了接收进程。
- 但是这问题可能被容忍丢失的应用 (loss-tolerant application) 所接受。
- 音频,视频可以有小瑕疵,而非致命损伤
2. 吞吐量
- 在沿着一条网络路径上的两个进程之间的通信会话场景中,可用吞吐量就是发送进程能够向接收进程交付 bit 的速率。
- 其他会话将共享沿着该网络路径的宽带,并且因为这些会话将会到达和离开。
- 该可用吞吐量将随时间波动。
- 导致另一种服务,运输层协议能够以某种特定的速率提供确保的可用吞吐量。
- 应用程序能够请求 r bit/s 的确保吞吐量
- 该运输协议能够确保可用吞吐量至少 r bit/s
- 如果不能达到预期的确保吞吐量,程序或以低速率维持传输或放弃发送
- 具有吞吐量要求的应用程序被称为带宽敏感应用 (bandwidth-sensitive application)
- 弹性应用 (elastic application) 能够根据当时可用的带宽或多或少的利用可使用的吞吐量。
3. 定时
- 运输层协议也能提供定时保证。
- 发送方注入进套接字中的每个 bit 到达接收方的套接字不迟于 xxx ms。
- 所有这些提供定时保证的服务为了有效性而要求数据交付必须有严格的时间限制。
- 电话延迟,游戏延迟等。
4. 安全性
- 运输协议能够为应用程序提供一种或多种安全性服务。
- 发送主机中,运输层协议能够加密由发送进程传输的所有数据
- 接收主机中,运输层协议能够在将数据交付给接收进程之前解密这些数据。
- 这种服务将在发送和接收进程之间提供机密性,以防该数据以某种方式在这两个进程之间被观察到。
- 运输协议还能提供其他安全性服务,数据完整性和端点鉴别。
2.1.4
因特网提供的运输服务
面向连接的服务
- 应用层数据报文开始流动之前,TCP 让客户和服务器相互交换运输层控制信息。
- 这就是传说中的握手过程提醒客户和服务器,让他们为大量分组的到来做好准备。
- 握手阶段后,一个 TCP 连接 (TCP connection) 就在两个进程的套接字之间建立了。
- 这条链接是全双工的,连接双方的进程可以在此连接上同时进行报文收发。
- 当应用程序结束报文发送时,必须拆除该连接。
可靠的数据传输服务
- 通信进程能够依靠 TCP,完美交付所有数据。
- 当应用程序的一端将字节流传进套接字时,能够依靠 TCP 将相同的字节流交付给接收方的套接字。
- TCP 协议还具有拥塞控制机制
- 当发送方和接收方之间的网络出现拥塞,TCP的拥塞控制机制会抑制发送进程 (客户或服务器)
- TCP 拥塞控制也试图限制每个 TCP 连接,使他们达到公平共享网络带宽的目的。
TCP 安全
TCP 和 UDP 都没有提供任何加密机制
- 发送进程传输其套接字的数据与通过网络传送到目的接收进程的数据相同。
- 如果某发送进程以明文方式 (未经过加密) 发送一个口令进入套接字。
- 该铭文口令经过的所有发送方和接收方之间的所有链路任何一点都能被嗅探和发现。
- 发送进程传输其套接字的数据与通过网络传送到目的接收进程的数据相同。
所以 TCP 加强版安全套接字层 (Secure Sockets Layer, SSL) 被研发出来了。
- 并非与 TCP/UDP 一样的第三种因特网运输协议
- 不仅能够完成 TCP 所有功能
提供关键的进程到进程的安全服务
- 加密
- 保证数据完整性
- 端点鉴别
如果一个程序使用 SSL 服务,需要在该应用程序的客户端和服务端都拥有 SSL 代码。
- SSL 有自己的 套接字 API,类似于传统 TCP 套接字 API。
- 如果一个应用使用SSL,发送进程向 SSL 套接字传输明文数据
- 发送主机中的 SSL 加密数据并将加密后的数据传递给 TCP 套接字。
- 加密的数据经因特网传送到接收进程中的TCP 套接字。
- 该接收套接字将加密数据传递给 SSL 并由其解密。
- SSL 通过 SSL 套接字将明文数据传递给接收进程。
2. UDP 服务
- UDP 是一种不提供不必要服务的轻量级运输协议,仅提供最小服务。
- UDP 是无连接的,两个进程通信之间没有握手过程。
- UDP 协议提供一种不可靠数据传输服务
- 当进程将一个报文发送进 UDP 套接字时, UDP 协议并不保证该报文将到达接收进程。
- 到达接收进程的报文也可能是乱序到达的。
- UDP没有拥塞控制机制
- UDP 发送端可以用它选定的任何速率向其下层 (网络层) 注入数据。
- 实际端到端吞吐量可能小于该速率
- 可能是因为中间链路的带宽受限或因为拥塞导致的。
3. 因特网运输协议所不提供的服务
运输协议服务:可靠数据,吞吐量(带宽保证),定时和安全性。
- TCP 提供可靠的端到端数据传送
- TCP 利用 SSL 加强安全性
- 定时?吞吐量?
今天的因特网通常能够为时间敏感应用提供满意的服务(好的设计),不能提供任何定时或带宽保证。
若能够容忍某些丢失,运行在 UDP 上能够设法避开 TCP 的拥塞控制机制和分组开销。
- 但因为许多防火墙被配置成阻挡 UDP 流量,还是用 TCP 做备份
2.1.5
应用层协议
应用层协议 (application-layer protocol) 定义了运行在不同端系统上的应用程序进程如何相互传递报文。
- 交换的报文类型
- 请求报文和响应报文
- 各种保温类型的语法
- 报文中各个字段以及这些字段是如何描述的
- 字段的语义
- 字段中的信息的含义
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则。
- 交换的报文类型
有些应用层协议是由 RFC 文档定义额,因此位于公共域中。
- Web 层协议 HTTP (超文本传输协议) 作为一个 RFC 使用
- 如果遵守 HTTP RFC 开发一个浏览器,能够访问任何遵从该文档标准的 Webc 服务器并获取相应界面。
应用层协议只是网络应用的一部分。
- Web 是一种 客户 - 服务器应用,允许客户按照需求从 Web 服务器获得文档。
- Web 包括 文档格式标准 HTML,Web浏览器 ,Web 服务器和一个应用层协议
- Web 应用层协议是 HTTP
- 定义了在浏览器和 Web 服务器之间传输的报文格式和序列。
2.1.6
5 种重要应用
- Web
- FTP 文件传输
- 电子邮件 SMTP
- 目录服务 DNS
- 流式视频
- P2P