Skip to content

应用层

概述

  • 进程:指在计算机系统中正在运行的程序的实例。每个进程都有自己的内存空间和执行环境,可以与其他进程进行通信。
  • 进程间通信:是指在同一个主机上运行的两个进程之间进行通信的方式。操作系统提供了一种机制来支持进程间的数据传输和交互。
  • 应用层协议(App-layer protocol):用于在不同主机上运行的进程之间进行通信的协议。不同的应用程序(如Web、电子邮件、流媒体)使用不同的应用层协议来实现数据交换和通信。
  • 用户代理:是介于应用程序和网络之间的接口。它实现了用户界面和应用层协议,使用户能够与应用程序进行交互,同时通过网络与其他主机上的进程进行通信
  • 用户层协议的内容
  • 消息交换的类型:应用层协议规定了在不同进程之间交换的消息类型。
  • 消息类型的语法:应用层协议规定了消息类型的语法。它定义了消息中的字段以及如何划分字段。
  • 消息中的字段和字段的语义:应用层协议规定了消息中字段的含义。它确定了字段中包含的信息的含义和解释。
  • 进程何时以及如何发送和响应消息的规则:应用层协议定义了进程发送和接收消息的规则。它规定了进程何时发送消息、如何构造消息、如何发送消息以及如何对收到的消息做出响应。
  • 分类
  • client-server
    • client向server发送请求,开启会话,通常具有动态ip
    • server始终开机,等待client的信息并进行服务,通常具有固定ip
  • peer-to-peer (P2P)
    • 不是一直可用,分布式,不一定一直开机
    • 节点之间是动态链接的
    • 新的节点加入既会索求资源,也会加入服务资源
    • BitTorrent, Skype
  • image-20230531142252748

DNS

  • 位于应用层
  • 功能:实现从域名到ip的映射
  • 使用UDP进行传输
  • 内容
  • 分发数据库:
  • 应用层协议:host和服务器沟通获得信息进行映射
  • 负载均衡:同一个域名可能被映射到不同ip
  • 分布式系统
  • 目标:
  • 唯一性:域名不能有冲突
  • 可扩展性:系统或网络具有应对不断增长的负载和需求的能力,可以频繁进行更新。
  • 分布式、自治性管理
    • 可以更改自己的信息
    • 不需要跟踪(记录)全世界的所有信息
  • 高可用性
  • 迅速
  • 不追求强一致性(可以偶尔出错)

域名层次结构

  • 将命名空间进行划分,即将系统中的命名空间分成多个部分。每个分区的管理将被分配给不同的实体,这样每个实体就可以自主更新自己的机器名称,而不需要追踪其他人的更新

  • 关键思想:层次结构

  • 层次化的命名空间
  • 层次化管理

  • image-20230531143430492

  • 从根节点向下划分域名

  • 完整域名是从根节点从下向上

  • 通常最深128层

  • 使用树形结构可以避免域名冲突

  • 每个节点各自管理自己为根的子树

  • 每个服务器存储总DNS数据库的一个(小)子集:这意味着DNS数据库被分割成多个部分,并分布在不同的服务器上。每个服务器只存储与其具有管理权限的域相关的资源记录。

  • *.nju.edu.cn

运作原理

  • 根域名服务器:这些服务器是DNS系统的顶级服务器,它们保存了顶级域名的信息,例如.com、.org、.net、.edu等,以及所有顶级国家域名,如.cn、.uk、.fr等。当本地名称服务器无法解析某个名称时,它会向根域名服务器发送请求。
  • 顶级域名服务器(TLD):这些服务器负责管理顶级域名,如.com、.org、.net、.edu等。它们也管理所有顶级国家域名,如.cn、.uk、.fr等。
  • 授权DNS服务器:这些服务器属于组织或机构,提供对应用程序的域名到IP地址的授权映射。它们维护着特定域名的权威信息,当有其他DNS服务器查询特定域名时,授权DNS服务器提供正确的映射。
  • 授权DNS服务器存储某个域中所有DNS名称的“资源记录”:授权DNS服务器负责存储其具有管理权限的域中所有DNS名称的资源记录。这包括该域中每个主机名对应的IP地址等信息。
  • 授权DNS服务器是组织自己的DNS服务器,用于提供对该组织命名主机的权威域名到IP地址的映射。这些服务器可以由组织自行维护,也可以由服务提供商来维护。
  • 本地名称服务器:每个住宅ISP、公司、大学都维护着自己的本地名称服务器。当主机发起DNS查询时,查询被发送到本地名称服务器,它负责处理查询并尝试解析域名。如果本地名称服务器无法解析域名,它会向更高级的DNS服务器发送查询请求。(负责向上查询
  • 本地名称服务器不严格属于DNS层次结构:本地名称服务器不直接属于DNS的层次结构,它是每个ISP(住宅ISP、公司、大学)都拥有的一个服务器。它也被称为“默认名称服务器”。
  • 当主机进行DNS查询时,查询发送到其本地名称服务器。
  • 本地名称服务器具有最近的名称到地址转换对的本地缓存(但可能过期):本地名称服务器会缓存最近的名称到地址转换对,以提高查询的性能。但是,这些缓存可能会过期,因此可能不是最新的。
  • 本地名称服务器充当代理,将查询转发到层次结构中:本地名称服务器充当代理,将主机的查询转发到DNS层次结构中的其他服务器,以获取所需的解析结果
  • 每个服务器需要知道负责其他层次结构部分的其他服务器:为了能够正确解析域名并提供准确的资源记录,每个服务器都需要了解负责其他层次结构部分的其他服务器的存在。这样,当某个服务器无法解析特定域名时,它可以向负责该域名的服务器发送查询请求
  • 每个服务器都知道根服务器:为了建立整个DNS层次结构,每个服务器都需要了解根服务器的存在和位置。根服务器保存了所有顶级域名的信息,并可以提供对其他DNS服务器的查询引导。
  • 查询过程
  • image-20230531145856274
  • DNS记录
  • image-20230531144825261
  • name为字符串
  • value为ip值
  • type表示类型
  • ttl表示生命周期
  • 保存在cache中
  • 可靠性
  • 复制的DNS服务器(主/备份):主服务器是主要的服务器,而备份服务器是在主服务器不可用时提供备份服务的服务器。
    • 只要至少有一个复制服务器正常工作,服务就可用
    • 查询可以在复制服务器之间进行负载均衡:查询可以在多个复制服务器之间进行负载均衡,以分担服务器的负载和提高性能。
  • 如果需要可靠性,必须在UDP上实施可靠性机制,例如通过重试和超时处理来确保查询的可靠传输。
  • 如果在查询过程中发生超时,可以尝试使用备用服务器进行查询。
  • 在重试相同服务器时,可以使用指数退避策略,逐渐增加重试的间隔时间,以避免对服务器造成过大的负载。
  • 对于同一个查询,所有的复制服务器都使用相同的标识符,以便可以识别和跟踪查询的状态和结果。
  • 对于发起查询的客户端来说,并不关心哪个复制服务器响应查询,只要能够获得有效的解析结果即可。
  • 快速查询
  • 进行所有这些查询需要时间:执行所有的DNS查询需要一定的时间。这些查询包括从根服务器到顶级服务器再到授权DNS服务器的一系列查询,这可能导致下载之前的延迟。
  • 缓存可以大大减少开销:DNS缓存可以大大减少DNS查询的开销。因为顶级服务器很少更改,并且访问频率较高的常用网站的信息通常被本地DNS服务器缓存。
  • DNS缓存的工作原理:DNS服务器会缓存对查询的响应结果。响应结果中包括一个“存活时间”(TTL)字段,它指示了该条目在缓存中的有效期。当TTL到期后,服务器会删除缓存中的条目。

email

  • 常见协议
  • SMTP(简单邮件传输协议):用于传递简单文本消息的协议。它是电子邮件系统中用于发送邮件的主要协议。
  • MIME(多用途互联网邮件扩展):用于传递各种类型的数据,例如声音、图像、视频剪辑等,扩展了SMTP协议的功能。
  • POP(邮局协议):用于从服务器中检索邮件的协议,包括授权和下载邮件。当用户通过邮件客户端下载邮件时,通常使用POP协议。
  • IMAP(互联网邮件访问协议):用于在服务器上操作存储的邮件的协议。IMAP允许用户在不下载邮件到本地计算机的情况下,在邮件服务器上直接管理和操作邮件。
  • 用户代理(客户端)(User Agent):用户代理是指用于组织、编辑和阅读邮件消息的软件应用程序。例如,Eudora、Outlook、Foxmail、Netscape Messenger等都是常见的用户代理。用户可以使用用户代理来编写、编辑、发送和接收邮件消息。发送的邮件消息和接收的邮件消息都存储在邮件服务器上。
  • 邮件服务器(Mail Servers):邮件服务器是指用于处理电子邮件的服务器。它包括两个主要组件:邮箱(Mailbox)和消息队列(Message Queue)。
  • 邮箱(Mailbox)包含了用户接收的邮件消息。当其他用户向该用户发送邮件时,邮件服务器会将这些邮件消息存储在相应的邮箱中,以便用户可以检索和阅读。
  • 消息队列(Message Queue)包含了等待发送的邮件消息。当用户发送邮件时,邮件服务器会将这些邮件消息存储在消息队列中,以便逐一发送到目标地址。邮件服务器之间使用SMTP协议进行邮件消息的传输。
  • 邮件的构成
  • image-20230531152556619

传输过程

  • email从本地用户端发送到SMTP服务器
  • 本地用户作为SMTP客户端,本地服务器作为SMTP服务器
  • 本地服务器发送到远程SMTP服务器
  • 本地服务器作为SMTP客户端
  • 远程服务器使用access protocol to access the mailbox on remote server POP3 or IMAP4
  • image-20230531151455819
  • image-20230531151659978
  • Alice使用用户代理(UA)撰写一封邮件消息,并发送给bob@someschool.edu
  • Alice的用户代理通过SMTP协议将邮件发送到她的邮件服务器,并将邮件放置在消息队列中。
  • SMTP客户端在客户端与Bob的邮件服务器之间建立TCP连接。
  • SMTP客户端通过TCP连接发送Alice的邮件。
  • Bob的邮件服务器将邮件放置在Bob的邮箱中。
  • Bob使用他的用户代理(UA),例如通过POP3协议,来读取邮件。

SMTP传输协议

  • 使用ASCII码文字作为交互命令

  • RFC 821:

  • 使用TCP协议的25号端口进行通信。
  • 直接传输:将电子邮件消息从客户端直接传输到服务器。
  • 需要在邮件信封(即消息头)上写入相关信息,以确定邮件的传递路径。
  • 可以在消息头中添加日志信息,以显示邮件的传递路径。
  • RFC 821并不涵盖邮件消息或数据的格式。邮件消息的格式定义在RFC 822或MIME中。
  • 邮件消息必须采用7位ASCII编码。
  • 过程
  • 握手
  • 传输数据
  • 关闭连接
  • image-20230531152141365
  • 可靠性
  • 使用TCP进行传输,依赖于TCL的可靠性
  • 不保证可以找回丢失的邮件
  • 没有端到端的确认(回执,确认收到已读)
    • 可能只是传输到了服务器,而没有到用户手中(可能未读)
  • 通常是比较可靠的

邮件获取协议

  • 从服务器获取收到的邮件
  • image-20230531152728808
  • POP(邮局协议):POP是一种用于电子邮件系统的协议,定义在RFC 1939中。它用于用户代理(邮件客户端)与邮件服务器之间的授权验证和邮件下载过程。使用POP协议,用户可以授权访问邮件服务器上的邮件,并将邮件下载到本地计算机进行阅读和处理。
  • IMAP(互联网邮件访问协议):IMAP是一种用于电子邮件系统的协议,定义在RFC 1730中。IMAP相比于POP具有更多的功能。除了授权验证和邮件下载外,IMAP还提供了操作邮件服务器上存储的邮件的能力。用户可以在邮件服务器上直接管理和操作邮件,例如创建文件夹、移动邮件、标记已读或未读等。IMAP协议适用于需要在多个设备上同步邮件状态的场景。
  • HTTP(超文本传输协议):HTTP是一种用于在互联网上传输超文本文档的协议,广泛用于网页浏览器和服务器之间的通信。某些电子邮件服务提供商(如Gmail、Hotmail、Yahoo!等)使用HTTP协议作为访问其电子邮件服务的接口。通过HTTP,用户可以使用网页浏览器访问电子邮件服务提供商的网页界面,进行邮件的发送、接收和管理操作。

pop3

  • 过程image-20230531152858761
  • 用户身份认证
  • 获取数据/操作
  • 可以选择下载并从服务器删除/继续保留
  • IMAP可以在线观看/编辑,邮件都保存再服务器上,服务器可以记录邮件阅读状态(在线修改)
  • 编码
  • image-20230531153224075

MIME多媒体拓展

  • 所有数据内容使用文本(base64)进行编码,为了兼容其他的早期协议
  • 以7位ASCII编码:MIME将邮件内容和附件中的所有数据都编码为7位ASCII字符集,以确保兼容性和可靠的传输。这意味着MIME邮件可以在任何支持ASCII字符集的系统上正确显示。
  • 忽略非MIME邮件系统的头部和分隔符:非MIME邮件系统无法解析MIME邮件的头部和分隔符,因此会将其忽略。这样做可以确保MIME邮件在非MIME系统中的传递和显示。
  • MIME是可扩展的:MIME提供了一种可扩展的机制,允许定义和支持各种不同类型的数据和附件。通过使用适当的MIME类型和子类型,发送方和接收方可以约定一致的编码方案,以确保正确解析和显示邮件中的数据。
  • 增加头部
  • image-20230531153512241
  • image-20230531153649849
  • 多文件image-20230531153711873

FTP

  • RFC 959, use TCP, port 21/20
  • 同样使用ascii作为控制命令
  • image-20230531154044273
  • 客户端/服务器模型,相互传递文件
  • 由客户端发起文件下载/上传请求
  • 过程
  • 建立两条信道:数据(tcp20)/控制(tcp21)
  • 进行客户端身份认证
  • 客户端收到文件列表,查看
  • 客户端选择文件进行处理,服务端收到指令后开始执行(传输)
  • image-20230531154423721

Web

  • "World Wide Web (WWW)" 万维网,它是由许多互连的文档(称为“页面”)组成的分布式数据库。这些页面通过超文本传输协议(HTTP)进行链接。
  • "分布式数据库" 指的是万维网上存储的大量页面,这些页面可以由全球范围内的多个服务器托管和提供。
  • "页面" 是包含文本、图像、音频、视频和其他媒体的文档,可以在浏览器中显示和访问。通过超链接,页面可以相互连接,形成一个网状结构。用户可以通过点击链接在页面之间进行导航。
  • HTTP(Hypertext Transport Protocol)是用于在万维网上进行通信的协议。它定义了客户端和服务器之间的请求和响应规范。当用户在浏览器中访问一个页面时,浏览器会向服务器发送一个HTTP请求,服务器会响应并返回所请求的页面。

  • 架构:client-servers

  • 内容:
  • URL:为内容命名
  • HTML:页面内容
  • 协议http

URL

  • 每个页面都有一个唯一的地址,称为统一资源定位符(URL),可以通过浏览器访问
  • 格式<protocol>://<host>:<port>/<path>?<query_string>
  • 协议(Protocol):用于传输或解释对象的方法,例如 HTTP、FTP、Gopher 等。协议指定了客户端和服务器之间通信的规则和约定。
  • 主机(Host):指对象所在的主机的 DNS 名称或 IP 地址。主机表示托管或提供对象的服务器的位置。
  • 端口(Port):可选项,指定服务器上用于与客户端通信的端口号。如果未指定端口,则会使用默认的协议特定端口(例如 HTTP 的默认端口为 80)。
  • 路径(Path):指对象所在文件的路径名,用于定位服务器上包含该对象的文件。路径可以包含文件夹和子文件夹的名称。
  • 查询字符串(Query String):可选项,用于将参数以名称/值对的形式发送到服务器上的应用程序。查询字符串通常用于向服务器提供额外的参数或数据。

HTTP

  • image-20230607141354498
  • 认为服务器总是开放,并且知名(公网ip)
  • 客户端向服务器请求,初始化对话
  • request/reply 使用TCP:80
  • 无状态性
    • 每个请求-响应独立处理:
    • 每个客户端请求和服务器的响应都被独立地处理,服务器不需要保留先前请求的状态。
    • 这意味着服务器在处理每个请求时不需要考虑之前的请求或响应,它可以按需处理每个请求而无需维护连接状态。
    • 服务器不需要保留状态:
    • 服务器不需要保留客户端请求的状态信息,因为每个请求都被视为独立的事件。
    • 这提高了服务器的可伸缩性,因为它不需要为每个连接保留大量的状态信息。
    • 优点:
    • 独立处理请求-响应使得故障处理更加容易。
    • 服务器能够处理更高速率的请求,因为每个请求都是独立处理的。
    • 请求的顺序对服务器来说不重要,因为每个请求都是独立的。
    • 缺点:
    • 某些应用程序需要保持持久状态,例如购物车、用户配置文件、使用情况跟踪等。
    • 对于这些需要持久状态的应用程序,需要一种方式来唯一标识用户或存储临时信息。
  • 使用ascii文本指令
  • image-20230607141554554

HTTP1.1

  • 分类
  • GET获取资源(页面)
  • HEAD获取响应头
  • POST提交内容(表单)
  • PUT上传文件
  • DELETE删除
  • image-20230607142107876
  • image-20230607142238388

HTTPS

  • HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。
  • 先使用非对称传输对称密钥,之后使用费对称加密
  • image-20230607142955072

  • 状态存储在客户端

  • image-20230607143348642
  • 功能:
  • 身份认证
  • 信息存储(如购物车)
  • 个性化推荐

  • 问题:cookie可能会泄露信息,发送给网页服务器

  • 如页面上的广告会根据信息推荐(如内嵌携程广告)
  • 跨网站传输cookie

网页传输

  • 目标
  • 用户:速度快,高可用性
  • 内容提供者:满意的用户,高效性(减少开销)
  • 网络提供商:让网络性能满足需求、稳定
  • 改进:
  • 改进协议:http、tcp...
  • 缓存,在多处存储内容,减少远距离传输
  • CDN等专用服务

http性能提升

  • 网页上有很多object,图片等各种信息,早期http一次一个,效率很低(tcp传输大量小文件!)
  • image-20230607150433496
  • image-20230607150340832
  • image-20230607150523131
  • 早期暴力解决:同时发送多个请求
  • image-20230607151109203
  • 最终改进:一个TCP传输更多信息,不再需要建立那么多的连接,并且传输时间长,TCP更稳定到达更大速率
    • 多个请求组合在一起发送,减少数据包数量
  • &&小文件延时(传输时间忽略)
  • 逐个获取(One-at-a-time):
    • 当每个小对象都是逐个获取时,时间主要由网络延迟所主导。
    • 在这种情况下,获取 n 个小对象所需的时间大约是 2nRTT
  • 并发获取(Concurrent):
    • 如果能够并发获取多个小对象,可以减少获取时间。
    • 当使用 m 个并发连接时,获取 n 个小对象所需的时间大约是 2[n/m]RTT
  • 持久连接(Persistent):
    • 当使用持久连接时,可以减少连接建立的开销。
    • 在持久连接下,获取 n 个小对象所需的时间大约是 (n+1) RTT。第一个对象的获取需要一个额外的 RTT 用于建立连接,后续的对象可以在同一个连接上进行获取。(在同一个TCP上发送,但是一次发送一个)
  • 流水线传输(Pipelined):
    • 在使用流水线传输时,可以一个TCP同时发送多个请求并减少等待时间。
    • 使用流水线传输,获取 n 个小对象所需的时间大约是 2 个 RTT。
  • 流水线传输与持久连接(Pipelined/Persistent):
    • 当结合流水线传输和持久连接时,首次获取可能需要 2 个 RTT 的时间,之后的获取只需要一个 RTT 的时间。
  • &&大文件延时(忽略RTT)
  • 逐个获取(One-at-a-time):
    • 当每个大对象都是逐个获取时,时间主要由带宽所主导。
    • 在这种情况下,获取 n 个大对象所需的时间大约是 nF/B,其中 B 是每个连接的带宽。
  • 并发获取(Concurrent):
    • 如果能够并发获取多个大对象,可以减少获取时间。
    • 当使用 m 个并发连接时,获取 n 个大对象所需的时间大约是 [n/m]F/B。
    • 假设带宽是与大量用户共享的,并且每个 TCP 连接都获得相同的带宽。(个人总带宽会变化)
  • 流水线传输和/或持久连接:
    • 在流水线传输和/或持久连接下,获取 n 个大对象所需的时间大约是 nF/B。

缓存

  • 引入原因
  • 生成不必要的服务器和网络负载:
    • 当多个客户端同时请求相同的信息时,服务器需要为每个请求生成相同的响应。这会导致不必要的服务器负载和网络负载,因为相同的信息被多次传输。
  • 客户端经历不必要的延迟:

    • 当多个客户端同时请求相同的信息时,每个客户端都需要等待自己的响应。这可能导致不必要的延迟,因为客户端在获取相同的信息时需要等待其他客户端的响应。
  • 引用局部性指的是在一段时间内,访问的数据往往具有较高的相关性,即相邻的数据项更有可能被多次访问。

  • 缓存利用了这种引用局部性,将频繁访问的数据存储在快速访问的缓存中,从而加快数据的访问速度。
  • 缓存的效果非常好,但是存在一定的限制。
  • 缓存的效果取决于内容的重叠程度。虽然有大量内容重叠,但请求的内容也有很多是唯一的。缓存的有效性随着缓存的大小呈对数增长。
  • image-20230607152345828
  • 请求时提供上一次的请求时间,询问是否发生了变化
  • 如果资源的最后修改时间早于或等于指定的时间,则服务器返回 "Not Modified" 的响应。
  • 如果资源的最后修改时间晚于指定的时间,表示资源已经发生了修改,服务器将返回 "OK" 的响应,并提供最新版本的资源。
  • Expires: 指示了资源在缓存中的有效期限,即缓存的过期时间。
    • 当客户端再次发起请求时,如果当前时间已超过 Expires 字段指定的时间,则缓存的副本将被视为过期,客户端需要向服务器请求最新的资源。
  • No-cache:
    • No-cache 字段用于禁止缓存服务器对资源进行缓存。
    • 当服务器返回带有 No-cache 字段的响应时,客户端和中间缓存服务器都会忽略缓存,每次都直接从服务器获取最新的资源。
    • 这样可以确保客户端获取的是最新的资源,而不是缓存副本。
  • 分类
  • 客户端缓存
  • 转发代理(Forward proxies):
    • Forward proxies位于客户端和目标服务器之间,客户端发送请求时,请求首先发送到转发代理,然后由代理服务器转发请求到目标服务器。
    • 转发代理还可以缓存响应以提高性能,减少对目标服务器的请求。
    • image-20230607153154448
  • 反向代理(Reverse proxies):
    • 使用反向代理进行缓存可以将文档缓存在靠近服务器的位置。
    • Reverse proxies的作用是代表目标服务器处理请求,并将响应返回给客户端。
    • 这样做可以减少服务器的负载,因为对于经常请求的文档,反向代理可以直接提供缓存的副本,而无需每次都从服务器获取。
    • image-20230607153142953
    • Forward proxies位于客户端和目标服务器之间,代表客户端发送请求。
    • Reverse proxies位于目标服务器和客户端之间,代表目标服务器处理请求。
    • Forward proxies用于代表客户端发送请求、隐藏IP地址、提供访问控制和内容过滤等功能。
    • Reverse proxies用于代表目标服务器处理请求、负载均衡、缓存内容等功能。
  • 内容分发网络(Content Distribution Network,CDN)

CDN

  • 起因
  • 大量向单一服务器请求,不堪重负
  • 防御DDOS
  • 解决方案:
  • 使用内容分发服务器,与内容生产(源)服务器区分
  • 复制源服务器的内容
  • 内容提供商(如视频网站)是CDN服务的客户
  • CDN服务器会复制服务器的内容,并保持更新
  • 实现
  • DNS转接到CDN的地址(重定向)
    • 一个域名会映射到多个ip
    • (路由)转接到最近的、负载最小的服务器
    • CDN通过创建一个“地图”,标示出与末端ISP和CDN服务器之间的距离。当查询到达权威DNS服务器时,服务器确定查询起源的ISP,并使用“地图”来确定最佳的CDN服务器。CDN服务器创建一个应用层覆盖网络。
  • URL重定向

  • image-20230607154603722