应用层:协议原理

如何创建一个新的网络应用?

  1. 编程
    • 应用在不同的端系统上运行:网络应用只在用户的设备或服务器上执行。
    • 通过网络基础设施提供的服务,应用进程之间进行通信。例如,Web服务器软件与浏览器进行交互,传递网页数据。
  2. 网络核心没有应用层软件
    • 网络核心只负责数据传输:它不执行任何应用层软件,也不处理应用层功能。
    • 网络应用只存在于端系统:所有应用功能和逻辑都在端系统中实现,不需要对网络核心进行改动。
    • 快速的开发和部署:由于网络核心无需处理应用层逻辑,网络应用的开发和部署过程更为高效。

网络应用的体系结构

可能的应用架构:

  • 客户-服务器模式 (C/S: Client/Server)
  • 对等模式 (P2P: Peer-to-Peer)
  • 混合模式:客户-服务器和对等体系结构的组合

C/S模式

服务器:

  • 一直运行
  • 固定的IP地址和周知的端口号(约定)
  • 扩展性: 服务器场
    • 数据中心进行扩展
    • 扩展性差

客户端:

  • 主动与服务器通信
  • 与互联网有间接性的连接
  • 可能是动态IP地址
  • 不直接与其他客户端通信

问题:

  1. 传统的单一服务器架构可能存在扩展性限制。当负载增加时,单一服务器可能无法应对大量请求(达到一定阈值,性能断崖式下降)。
  2. 可靠性差:一台服务器负责大量客户端,一旦宕机,大量请求无法响应。
  3. 注意与P2P模式对比:随着用户规模增加,请求服务的节点增加,但是提供服务的节点也在增加,所以很容易扩容。

P2P

对等体(P2P)体系结构:

  • 几乎没有一直运行的服务器:对等体体系结构中,节点通常不依赖于持续运行的中央服务器。
  • 任意端系统之间可以进行通信:所有节点可以直接互相通信,无需中央控制。
  • 每一个节点既是客户端又是服务器:每个节点同时承担请求和提供服务的功能。
    • 自扩展性:新的Peer节点可以带来新的服务能力,并且也会引入新的服务请求。
  • 参与的主机可能连接且可以改变IP地址:节点的IP地址可能会变化,网络连接情况也可能会变化。
    • 难以管理:由于节点的动态性和分布性,对等体网络难以集中管理。
  • 例子:Gnutella, 迅雷

混合模式(C/S+P2P)

Napster

  • 文件搜索:集中

    • 主机在中心服务器上注册其资源(主机的IP)。
    • 主机向中心服务器查询资源位置。
  • 文件传输:P2P

    • 任意Peer节点之间进行文件传输。

即时通信

  • 在线检测:集中

    • 当用户上线时,向中心服务器注册其IP地址。
    • 用户与中心服务器联系,以找到其在线好友的位置。
  • 两个用户之间聊天:P2P

进程通信

  • 进程:主机上运行的应用程序

    • 在同一主机内,使用操作系统定义的进程间通信机制进行通信。
    • 在不同主机上,通过交换报文(Message)来进行通信。
      • 使用OS提供的通信服务。
      • 按照应用协议交换报文。
        • 依赖传输层提供的服务进行通信。
  • 客户端进程

    • 负责发起通信请求。
  • 服务器进程

    • 等待连接的进程。
  • 注意

    • P2P架构的应用也使用客户端进程和服务器进程之分。

      在某个会话上,有请求和响应之分,因此也有客户端进程和服务器进程之分。当然,跨会话来说,一个进程可能是客户端进程,也可能是服务器进程。

分布式进程通信需要解决的问题

  • 问题1:进程标识和寻址问题(服务用户)

    应用进程需要标识自己(唯一的),而且需要具备寻址的作用。

    • 措施:对进程进行编址

      进程标识:为了接收报文,进程必须有一个标识,即服务接入点(SAP)。发送报文也需要标识,以便正确地发送到目标进程。

      • 主机标识:每台主机都有一个唯一的32位IP地址。
      • 协议:所采用的传输层协议
      • 进程标识:仅有IP地址无法标识单个进程,因为在端系统上可能有许多应用进程在同时运行。为了区分不同进程,需要使用TCP/UDP的端口号(Port Numbers)。

      传输层协议

      • TCP或UDP:进程间的通信依赖于传输层协议,如TCP(传输控制协议)或UDP(用户数据报协议)。
      • 端口号:通过端口号来进一步区分在同一主机上的不同进程。端口号帮助将数据正确地路由到目标进程。
      • 一些知名端口号的例子:
        • HTTP: TCP 80
        • Mail: TCP 25
        • FTP: TCP 21

      进程标识的组合:一个进程通过IP地址和端口号的组合来标识,这样可以唯一地指定端系统上的一个进程。

      • 端节点(end point):本质上,两个主机之间的通信由两个端节点组成,每个端节点由主机的IP地址和端口号标识。
  • 问题2:传输层-应用层提供服务的方式(服务)

    应用层的下层提供的服务是什么形式?具体来说,就是socket和对应api。

    • 位置:层间界面的服务接入点(SAP,例如 TCP/IP 的 socket)

    • 形式:应用程序接口(API,例如 TCP/IP 的 socket API)

    • 措施:传输层提供的服务-需要穿过层间的信息

      层间接口必须携带的信息

      • 要传输的报文(对本层来说:SDU)

      • 谁传的:对方的应用进程的标识(IP+TCP/UDP PORT)

      • 传给谁:对方的应用进程的标识(同上)

      • 层间接口:用于通信的层间接口通常需要明确的标识,以确保数据的正确传输。接口定义了如何通过网络协议传递信息。

      传输层实体(TCP或UDP实体)

      • 根据这些信息进行报文段的封装

      • 源端口号,目标端口号,数据等

      • 将IP地址往下交给IP实体,用于封装IP数据报(源IP、目标IP)

      Socket API 传输报文信息

      • 如果每次通过Socket API传输报文时都附加额外的信息,可能会导致操作复杂、容易出错,并且不便于管理。

      • Socket 标识通信

      • 使用一个代号来标识通信的双向或单向连接,称为socket。

      • 类似于操作系统打开文件时返回的句柄,socket也可以被视为对通信端点的标识符。

      • TCP Socket

      • 连接建立:在TCP服务中,两个进程之间的通信需要在开始之前建立连接。进程间通信会持续一段时间,通信关系稳定。

      • 连接标识:可以使用一个唯一标识符(一个整数)来表示两个通信实体之间的连接。之后使用这个整数就表示了这样一个socket。

      • 传输信息:通过层间接口传输的信息较少,简化了数据传输过程。

      • TCP Socket 细节

      • IP 地址和端口:TCP socket使用源IP地址、目标IP地址、源端口号和目标端口号来标识通信的端点。(四元组)

      TCP 之上的套接字(Socket)

      • 4元组标识:对于使用面向连接服务(TCP)的应用而言,套接字是四元组的一个具有本地意义的标识。
      • 会话标识:这个4元组唯一指定了一个会话,即两个进程之间的通信关系。
      • 通信使用:通过这个4元组,应用程序可以与远程应用进程进行通信,而不需要在每次发送报文时都指定这4元组。
      • 简化管理:使用这种标识方式使得通信管理更加简便和高效。
  • 问题3:如何使用传输层提供的服务,实现应用进程之间的报文交换(服务用户使用)

    收到报文时应该做出什么动作?因此要定义协议、编程实现。

    • 定义应用层协议:报文格式、解释、时序等
    • 编写程序,使用操作系统提供的 API,调用网络基础设施提供的通信服务传输报文,实现应用时序等
    • 措施:

Web-and-HTTP

web是应用,HTTP是支持应用的协议

术语

  • Web页:由多个对象组成。

    • 对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等。
  • 基本HTML文件:包含对若干对象的引用(链接)。

  • URL(统一资源定位符):通过URL引用每个对象。

    • 访问协议、用户名、口令、端口等信息。
  • URL格式

    1
    protocol://user:password@www.someschool.edu/someDept/pic.gif:port
    • 协议名用户名口令主机名路径端口

      协议名:如http

      用户名和口令:如果没有,说明是匿名访问

      port:协议有默认端口,一般不需要提供

HTTP概况

  • HTTP:超文本传输协议

    • Web的应用层协议。

    • 客户/服务器模式

      • 客户端:浏览器,负责请求、接收和显示Web对象。
      • 服务器:Web服务器,负责响应请求并发送对象。
  • HTTP版本

    • HTTP 1.0:定义于RFC 1945。
    • HTTP 1.1:定义于RFC 2068。
  • 使用TCP

    • 客户发起与服务器的TCP连接(建立套接字),使用端口号80。

      服务器端总是有一个waiting socket

    • 服务器接受客户的TCP连接。

    • 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP报文(应用层协议报文)。

    • TCP连接关闭。

  • HTTP是无状态的

    • 服务器不维护关于客户端的任何信息

      因为维护状态的协议比较复杂,必须维护历史信息,如果C/S死机,可能导致两者的状态信息不一致,且无状态能支持更多客户端。

  • HTTP连接

    非持久HTTP

    • 每个TCP连接最多只传送一个对象。
    • 下载多个对象需要建立多个TCP连接。
    • HTTP/1.0使用非持久连接。

    持久HTTP

    • 相同客户端、服务器之间的后续请求和响应报文通过相同的连接进行传送。

    • 多个对象可以在一个TCP连接上传输。

    • HTTP/1.1使用非持久连接。

    • 流水/非流水方式

      流水方式的持久HTTP

      • 客户端必须在收到前一个响应后才能发出新的请求。
      • 每个引用对象都需要一个RTT。

      流水方式的持久HTTP

      • HTTP/1.1的默认模式。

      • 客户端遇到引用对象时立即发出请求。

        发出一个对象请求,在对象还没收到时,就发下一个对象的请求。

      • 所有引用的小对象可能只需一个RTT。

  • 请求报文

    HTTP报文的两种类型

    • 请求报文响应报文

    HTTP请求报文

    • 请求报文为ASCII格式(人类可读)。

    • 请求行:包含HTTP方法(如GET、POST、HEAD)。

      • 示例:GET /somedir/page.html HTTP/1.1

        GET:请求文件(head + body),也可以通过URL字段进行上载

        POST:上载文件

        HEAD:搜索引擎、爬虫等用,请求HTML对象的头部

        DELETE:删除URL字段指定的文件

    • 首部行(每一行是key-value):

      • Host: www.someschool.edu
      • User-agent: Mozilla/4.0用户代理程序
      • Connection: close对象回来之后关闭连接
      • Accept-language: fr
    • Entity Body:如果是POST则需要这部分

    • 换行回车符:表示报文的结束(一个额外的换行回车符标志结束)。

  • 响应报文

    • 状态行

      协议版本、状态码(如404)、相应状态信息

      200:ok

      301:moved permanently

      400:bad request

      404:not found

      505:version not supported

    • 首部行

    • 实体

响应时间模型

往返时间 (RTT,round-trip time)

  • RTT是指一个小分组从客户端到服务器并返回客户端的时间(忽略传输时间,因为是小分组)。

响应时间

非持久HTTP的情况,客户端请求一个对象需要的时间。

image-20240922152550528

  • 一个RTT用于发起TCP连接。

  • 一个RTT用于发送HTTP请求并等待响应。

  • 加上文件传输时间

    总共为:2 RTT + 传输时间

用户-服务器状态:Cookies

大多数主要门户网站使用Cookies的组成部分

  1. 在HTTP响应报文中包含一个Cookie的首部行。
  2. 在HTTP请求报文中包含一个Cookie的首部行。
  3. 在用户端系统中保留一个Cookie文件,由用户的浏览器管理。
  4. 在Web站点有一个后端数据库,存储与该Cookie关联的信息。

例子

  • Susan总是用同一台PC使用Internet Explorer上网。
  • 她第一次访问了一个使用Cookie的电子商务网站。
  • 当最初的HTTP请求到达服务器时,Web站点生成一个唯一的ID,并作为索引在其后端数据库中创建一个项。

Web缓存(代理服务器)

目标:不访问原始服务器,就满足用户的请求。

  • 原理

    • 用户设置浏览器:通过缓存访问Web。

    • 浏览器将所有的HTTP请求发给缓存。

    • 如果请求的对象在缓存中,缓存直接返回该对象。

    • 如果对象不在缓存中,缓存向原始服务器请求该对象,再将其返回给客户端。

  • 优点

    • 缓存可以降低客户端的请求响应时间。
    • 可以大幅减少一个机构内部网络与Internet接入链路上的流量。
    • 互联网大量采用缓存技术:即使是较弱的ICP(互联网内容提供商)也能够有效提供内容。
  • 其他

    • 缓存既是客户端又是服务器

      在某项资源没有而需要向原始服务器请求时,它是客户端。

    • 通常由ISP安装(大学、公司、居民区ISP)

条件GET方法

解决代理服务器和原始服务器中文件一致性的问题。


  • 目标:如果缓存器中的对象仍然是最新的,就不需要发送该对象。
  • 代理服务器:在HTTP请求中指定缓存副本的过期时间,使用首部行 If-modified-since: <date>
  • 原始服务器
    • 如果对象没有修改,则在响应报文中不包含对象,返回状态码 HTTP/1.0 304 Not Modified
    • 如果对象修改过,则返回HTTP/1.0 200 OK <data>

FTP

概述

  • 文件传输:用于向远程主机上传输文件或从远程主机接收文件。

  • 客户/服务器模式

    • 客户端:发起文件传输的应用程序。
    • 服务器:远程主机,负责接收或发送文件。
  • 协议:FTP(文件传输协议),依据 RFC 959 标准。

  • FTP 服务器:使用的默认端口号为 21。

原理

  • FTP 客户端与 FTP 服务器

    • 通过端口 21 建立联系,使用 TCP 作为传输协议。
  • 控制连接

    • 客户端通过控制连接获取身份确认。

      告知对方自己的用户名和对应口令

    • 通过控制连接发送命令以浏览目录和文件。

    • 带外(out of band)传送方式。

  • 数据连接

    • 服务器收到文件传输命令时,会打开一个到客户端的数据连接

      与控制连接分离

    • 文件传输完成后,服务器关闭数据连接。

    • 服务器可以打开第二个 TCP 数据连接,用于传输另一个文件。

  • 用户状态信息

    • FTP 服务器维护用户的状态信息,包括当前路径、用户账户以及与连接对应的其他信息。

      与TCP无状态的连接进行区分

命令与响应

  • 控制连接上以 ASCII 文本方式传送的命令

    • USER username:发送用户名以进行身份验证。
    • PASS password:发送密码以进行身份验证。
    • LIST:请求服务器返回当前目录的文件列表。
    • RETR filename:从服务器的当前目录检索文件(获取文件gets)。
    • STOR filename:向服务器的当前目录存放文件(上传文件puts)。
  • 状态码和状态信息(与 HTTP 类似):

    • 331 Username OK, password required:用户名有效,需要密码。
    • 125 Data connection already open; transfer starting:数据连接已经打开,传输开始。
    • 425 Can't open data connection:无法打开数据连接。
    • 452 Too many errors waiting for file:等待文件时出现过多错误。

Email

组成部分

  1. 用户代理

    • 又名“邮件阅读器”,负责用户与邮件系统之间的交互。
    • 功能包括撰写、编辑和发送邮件。
    • 常见的用户代理有 Outlook、Foxmail 等。
    • 输出和输入的邮件通常保存在服务器上。
  2. 邮件服务器

    • 邮件存储与管理

      • 管理用户的邮件箱,确保所有邮件安全存储。
      • 维护发送和接收邮件的队列,确保邮件的顺利传递。
    • 邮件发送

      • 通过 SMTP 协议发送邮件,确保邮件从发送方到接收方的可靠传输。
      • 将发送的邮件存储在输出报文队列中,等待发送。
    • 客户端与服务器的关系

      • 客户端:发送方的邮件程序,负责撰写和发送邮件。

      • 服务器:接收方的邮件服务器,负责接收并存储邮件,最终将其转发给接收者的邮件客户端。

        把发给某个用户的邮件放到该用户对应的邮箱中,该用户的代理在到时从邮箱中拉取邮件。

  3. 简单邮件传输协议 (SMTP)

    • 用于在邮件服务器之间传输邮件的协议。
    • 确保邮件从发件人到收件人的可靠发送。

协议包括发送的协议(SMTP)和拉取的协议(POP3、IMAP、HTTP),HTTP既可以发又可以收。

SMTP 传输过程概述

  1. 使用 TCP 传输

    • 在客户和服务器之间通过 TCP 协议传送报文,使用端口号 25。
  2. 直接传输

    • 邮件直接从发送方服务器传输到接收方服务器。
  3. 传输的三个阶段

    • 握手:建立连接,客户端与服务器之间确认连接状态。
    • 传输报文:发送方服务器发送邮件内容,包括发件人、收件人及邮件正文。
    • 关闭:完成邮件传输后,双方关闭连接。
  4. 命令与响应交互

    • 命令:使用 ASCII 文本格式进行命令发送,例如发送邮件的命令。
    • 响应:服务器返回状态码和状态信息,指示操作的结果。
  5. 报文格式

    • 所有传输的报文必须使用 7 位 ASCII 码格式。

SMTP 特性

  1. 持久连接

    • SMTP 使用持久连接,允许在同一连接上发送多个邮件,而无需为每封邮件建立新连接。
  2. 报文编码

    • SMTP 要求报文的首部和主体均为 7 位 ASCII 编码。
  3. 报文结束

    • SMTP 服务器使用 CRLF(回车换行)标识报文的尾部,表示报文的结束。
  4. 与 HTTP 的比较

    • HTTP
      • 使用拉取(pull)模型。
      • 每个对象都封装在各自的响应报文中。
    • SMTP
      • 使用推送(push)模型。
      • 所有命令和响应均为 ASCII 形式,包括状态码。
      • 多个邮件对象可以包含在一个报文中。
  5. 报文格式

    首部行:包含字段如 To:From:Subject:,用于描述邮件的基本信息。这些字段与 SMTP 命令不同。

    主体:邮件的实际内容,只能是 ASCII 字符串,确保在传输过程中的兼容性与可读性。

  6. 报文扩展:MIME(多媒体邮件扩展)

    • 定义

      • MIME(Multipurpose Internet Mail Extensions)是用于扩展电子邮件功能的标准,支持多种媒体类型的邮件内容。
    • RFC 2045 和 RFC 2056

      • MIME 的相关标准定义在 RFC 2045 和 RFC 2056 中。
    • 报文结构

      • 首部行示例

        1
        2
        3
        4
        5
        6
        From: aliced@crepes.fr
        To: bob@hamburger.edu
        Subject: Picture of yummy crepe.
        MIME-Version: 1.0
        Content-Type: image/jpeg
        Content-Transfer-Encoding: base64
      • 内容部分

        • Content-Type: 指定数据的媒体类型(如 image/jpeg)。
        • Content-Transfer-Encoding: 指定编码方式(如 base64),用于对多媒体数据进行编码。
        • 编码后的数据:多媒体数据经过 base64 编码的字符串。
    • 功能

      • 通过 MIME,电子邮件能够包含图像、音频、视频等多种媒体格式,使得邮件内容更加丰富和多样。

邮件访问协议

  1. SMTP(简单邮件传输协议)

    • 负责将电子邮件从发送方的邮件服务器传送到接收方的邮件服务器。
  2. 邮件访问协议

    • 用于从邮件服务器访问和管理存储的邮件。
  3. POP(邮局访问协议)

    • 定义:POP(Post Office Protocol),用于从邮件服务器下载邮件到本地客户端。

    • 标准:RFC 1939。

    • 特点

      • 用户身份确认:通过代理与邮件客户端进行身份验证。
      • 通常下载邮件后,从服务器上删除邮件。
    • 细节

      用户身份确认阶段

      1. 客户端命令
      • USER:用于指定用户名。
        • 示例:USER username
      • PASS:用于输入用户的密码。
        • 示例:PASS password
      1. 服务器响应
      • 成功响应+OK 表示身份确认成功。
      • 错误响应-ERR 表示身份确认失败或有错误。

      事务处理阶段

      1. 客户端命令
      • LIST:请求获取邮件列表,显示邮件编号及相关信息。
        • 示例:LIST
      • RETR:根据邮件编号拉取指定邮件内容。
        • 示例:RETR message_number
      • DELE:删除指定的邮件。
        • 示例:DELE message_number
      • QUIT:关闭连接

      模式与特性

      • “下载并删除”模式

      • 在这种模式下,邮件被下载到客户端后,服务器上的邮件会被删除。

      • 例如,如果Bob使用这种模式,他无法在其他客户端上阅读已下载的邮件,因为邮件已被删除。

      • “下载并保留”模式

      • 在这种模式下,邮件被下载到客户端,但服务器上的邮件保留一份拷贝。

      • 这使得用户可以在不同的客户端上访问同一封邮件。

      • 无状态特性(本地管理文件夹):

      • POP3 在会话中是无状态的,意味着每次会话之间没有保存的上下文信息。每次连接都是独立的。比如不允许用户在邮箱中建立目录并跳转。

  4. IMAP(互联网邮件访问协议)

    • 定义:IMAP(Internet Mail Access Protocol),允许用户在服务器上管理邮件。

    • 标准:RFC 1730。

    • 特点

      • 支持在服务器上存储和处理邮件,用户可以在多个设备上同步邮件。
      • 提供更多功能,如邮件文件夹管理、标记邮件等。
    • 细节

      • 文件夹管理

      • IMAP 服务器将每个邮件与特定的文件夹关联,允许用户通过文件夹来组织邮件。

      • 部分邮件读取

      • IMAP 允许用户读取邮件的特定部分,而不是下载整封邮件,提高了灵活性和效率。

      • 状态保持

      • IMAP 在会话过程中保持用户状态,这意味着用户的操作(如已读、未读、删除等)可以在服务器上进行管理。(远程管理文件夹)

      • 用户操作

      • IMAP 允许用户在多个设备上同步邮件状态,包括查看邮件、管理文件夹等。

      • 会话中的命令

      • 用户可以使用命令管理邮件,如:

        • LOGIN:用于用户身份验证。
        • SELECT:选择某个文件夹以进行操作。
        • FETCH:获取邮件的具体内容。
  5. HTTP与网页邮件

    • 通过 HTTP 协议访问邮件,如 Hotmail 和 Yahoo Mail,允许用户在网页上查看和管理邮件,而不需要专门的邮件客户端。