你要问我应用层?我就和你扯扯扯(三)

本文涉及的产品
云解析 DNS,旗舰版 1个月
.cn 域名,1个 12个月
全局流量管理 GTM,标准版 1个月
简介: 网络应用是计算机网络存在的理由,一批早期的网络应用主要有电子邮件、远程访问、文件传输等,但是随着计算机网络的发展和人类无穷无尽的需求,越来越多的网络应用被开发出来,例如即时通讯和对等(P2P)文件共享,IP 电话、视频会议等。

因特网中的电子邮件

自从有了因特网,电子邮件就在因特网上流行起来。与普通邮件一样,电子邮件是一种异步通信媒介,即人们方便的情况下就可以和他人进行邮件往来,而不必与他人进行沟通后在发送。现代电子邮件具有许多强大的特性,包括具有附件、超链接、HTML 格式文本和图片的报文。下面是电子邮件系统的总体概览

微信图片_20220412205332.jpg

从图中我们可以看到它有三个主要组成部分:用户代理(user agent)邮件服务器(mail server)、和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。下面我们就来描述一下邮件收发的过程。

用户代理允许用户阅读、回复、转发、保存和撰写报文。微软的 OutlookApple Mail 是电子邮件用户代理的例子。当用户编写完邮件时,他的用户代理向邮件服务器发送邮件,此时用户发送的邮件会放在邮件服务器的外出消息队列(Outgoing message queue)中,当接收方用户想要阅读邮件时,他的用户代理直接从外出消息队列中去取得该报文。

邮件服务器构成了整个邮件系统的核心。每个接收方在其中的邮件服务器上会有一个邮箱(mailbox) 存在。用户的邮箱管理和维护发送给他的报文。一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。用接收方的用户想要从邮箱中读取邮件时,他的邮件服务器会对用户进行认证。如果发送方发送的邮件无法正确交付给接收方的服务器,那么发送方的用户代理会把邮件存储在一个报文队列(message queue)中,并在以后尝试再次发送,通常每30分钟发送一次,如果一段时间后还发送不成功,服务器就会删除报文队列中的邮件并以电子邮件的方式通知发送方。

SMTP 是因特网电子邮件中的主要的应用层协议。SMTP 也使用 TCP 作为运输层协议,保证数据传输的可靠性。

SMTP 协议传输过程

为了描述 SMTP 的基本操作,我们观察一下下面这种常见的情景。

微信图片_20220412205336.jpg

我们假设 Alice 想给 Bob 发送一封简单的 ASCII 报文

  • Alice 调用她的邮件代理程序并提供 Bob 的邮件地址 (例如 bob@someschool.edu),编写邮件报文,然后指示用户代理发送该报文
  • Alice 的用户代理把报文发送给她的邮件服务器,在那里该报文被放在消息队列中。
  • 运行在 Alice 的邮件服务器上的 SMTP 客户端发现了报文队列中的邮件,它就创建一个到运行在 Bob 邮件服务器上的 SMTP 服务器的 TCP 连接
  • 在经过一些初始化 SMTP 握手后,SMTP 客户端通过该 TCP 连接发送 Alice 的邮件。
  • 在 Bob 的邮件服务器上,SMTP 的服务端接收该邮件,Bob 的邮件服务器将邮件放在 Bob 的邮箱中
  • 在 Bob 想要看邮件时,他会调用用户代理阅读该邮件

上面说的邮件其实就是报文,指的就是一系列 ASCII 码,SMTP 传输邮件之前,需要将二进制多媒体数据编码为 ASCII 码进行传输。

SMTP 一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样的。TCP 连接通常直接连接 Alice 的邮件服务器和 Bob 的邮件服务器。

现在你知道了两台邮件服务器邮件发送的大体过程,那么,SMTP 是如何将邮件从 Alice 邮件服务器发送到 Bob 的邮件服务器的呢?主要分为下面三个阶段

  • 建立连接:在这一阶段,SMTP 客户请求与服务器的25端口建立一个 TCP 连接。一旦连接建立,SMTP 服务器和客户就开始相互通告自己的域名,同时确认对方的域名。
  • 邮件传送:一旦连接建立后,就开始邮件传输。SMTP 依靠 TCP 能够将邮件准确无误地传输到接收方的邮件服务器中。SMTP 客户将邮件的源地址、目的地址和邮件的具体内容传递给 SMTP 服务器,SMTP 服务器进行相应的响应并接收邮件。
  • 连接释放:SMTP 客户发出退出命令,服务器在处理命令后进行响应,随后关闭 TCP 连接。

下面我们分析一个实际的 SMTP 邮件发送过程,以下统称为SMTP客户(C)SMTP服务器(S)。客户的主机名为 crepes.fr,服务器的主机名为 hamburger.edu。以 C: 开头的 ASCII 码文本就是客户交给 TCP 套接字的那些行,以 S: 开头的 ASCII 码则是服务器发送给其 TCP 套接字的那些行。一旦创建了连接,就开始了如下过程

S: 220 hamburger.edu
C: HELO crepes.fr
S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: <alice@crepes.fr>
S: 250 alice@crepes.fr ... Sender ok
C: RCPT TO: <bob@hamburger.edu>
S: 250 bob@hamburder.edu ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection

在上述例子中,客户从邮件服务器 crepes.fr 向邮件服务器 hamburger.edu 发送了一个报文 (" Do you like ketchup? How about pickles? ") 。作为对话的一部分,该客户发送了 5 条命令: HELO(是 HELLO 的缩写)MAMIL FROMRCPT TODATA 以及 QUIT。这些命令都是自解释的。

什么是自解释,就是不需要再进行解释了,命令自己就能解释自己所要表述的功能。

上面是一个简单的 SMTP 交换过程,包括了连接建立、邮件传送和连接释放三个具体过程

首先建立 TCP 连接、SMTP 调用 TCP 协议的25号端口监听连接请求,然后客户端发送 HELO 指令用来表明自己是发送方的身份,然后服务端作出响应。然后,客户端发送 MAIL FROM 命令,表明客户端的邮件地址是 <alice@crepes.fr>,服务器以 OK 作为响应,表明准备接收。客户端发送 RCPT TO 表明接收方的电子邮件地址,可以有多个 RCPT 行,即一份邮件可以同时发送给多个收件人。服务器端则表示是否愿意为收件人接收邮件。协商结束后,客户端用 DATA 命令发送信息,结束标志是CRLF.CRLF ,也就是 回车换行.回车换行。最后,控制交互的任一端可选择终止会话,为此它发出一个 QUIT 命令,另一端用命令221响应,表示同意终止连接,双方将关闭连接。

上述过程中会涉及几个类似 HTTP 的状态码。250 就表示 OK ,类似 HTTP 的 200。在命令成功时,服务器返回代码250,如果失败则返回代码550(命令无法识别)、451(处理时出错)、452(存储空间不够)、421(服务器不可用)等,354则表示开始信息输入。

SMTP 的报文会有局限性,SMTP 的局限性表现在只能发送 ASCII 码格式的报文,不支持中文、法文、德文等,它也不支持语音、视频的数据。通过 MIME协议,对 SMTP 补充。MIME 使用网络虚拟终端(NVT)标准,允许非ASCII码数据通过SMTP传输。

SMTP 与 HTTP 的对比

HTTP 是我们学习的第一个应用层协议,SMTP 是我们学习的第二个应用层协议,那么我们就对这两个协议进行比对。

这两个协议都用于从一台主机向另一台主机传送文件:HTTP 从 Web 服务器向 Web 客户端(通常是浏览器)传送文件,SMTP 是从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文)。

这两个协议也会有几个重要的区别

  • 首先,HTTP 是一个 拉协议(pull protocol),客户端发送请求,请求获取服务端的资源,然后服务端进行响应,把需要下载的文件传输给客户端;而 SMTP 是一个 推协议(push protocol),SMTP 的客户端会主动把邮件推送给 SMTP 的服务端。
  • 第二个区别是,SMTP 要求每个报文都采用 7 比特的 ASCII 码格式,如果某报文包含了非 7 比特的 ASCII 字符或二进制数据,则该报文必须按照7比特 ASCII 码进行编码。HTTP 数据则不受这种限制。
  • 第三个区别是如何处理一个既包含文本又包含图形的文档,HTTP 把每个对象封装到它自己的 HTTP 响应报文中,而 SMTP 则把所有报文对象放在一个报文之中。

DNS 因特网目录服务协议

试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合。因特网上的主机和人类一样,可以使用多种识别方式进行标识。互联网上主机的一种标识方法是使用它的 主机名(hostname) ,如 www.facebook.com、 www.google.com 等。但是这是我们人类的记忆方式,路由器不会这么理解,路由器喜欢定长的、有层次结构的 IP地址,so,还记得 IP 是什么吗?

IP 地址现在简单表述一下,就是一个由 4 字节组成,并有着严格的层次结构。例如 121.7.106.83 这样一个 IP 地址,其中的每个字节都可以用 . 进行分割,表示了 0 - 255 的十进制数字。(具体的 IP 我们会在后面讨论)

然而,路由器喜欢的是 IP 地址进行解析,我们人类却便于记忆的是网址,那么路由器如何把 IP 地址解析为我们熟悉的网址地址呢?这时候就需要 DNS 出现了。

微信图片_20220412205341.png

DNS 的全称是 Domain Name System,DNS ,它是一个由分层的 DNS 服务器(DNS server)实现的分布式数据库;它还是一个使得主机能够查询分布式数据库的应用层协议。DNS 服务器通常是运行 BIND(Berkeley Internet Name Domain) 软件的 UNIX 机器。DNS 协议运行在 UDP 之上,使用 53 端口。

DNS 基本概述

与 HTTP、FTP 和 SMTP 一样,DNS 协议也是应用层的协议,DNS 使用客户-服务器模式运行在通信的端系统之间,在通信的端系统之间通过下面的端到端运输协议来传送 DNS 报文。但是 DNS 不是一个直接和用户打交道的应用。DNS 是为因特网上的用户应用程序以及其他软件提供一种核心功能。

DNS 通常不是一门独立的协议,它通常为其他应用层协议所使用,这些协议包括 HTTP、SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。

下面根据一个示例来描述一下这个 DNS 解析过程,这个和你输入网址后,浏览器做了什么操作有异曲同工之处

你在浏览器键入 www.someschool.edu/index.html 时会发生什么现象?为了使用户主机能够将一个 HTTP 请求报文发送到 Web 服务器 www.someschool.edu ,会经历如下操作

  • 同一台用户主机上运行着 DNS 应用的客户端
  • 浏览器从上述 URL 中抽取出主机名 www.someschool.edu ,并将这台主机名传给 DNS 应用的客户端
  • DNS 客户向 DNS 服务器发送一个包含主机名的请求。
  • DNS 客户最终会收到一份回答报文,其中包含该目标主机的 IP 地址
  • 一旦浏览器收到目标主机的 IP 地址后,它就能够向位于该 IP 地址 80 端口的 HTTP 服务器进程发起一个 TCP 连接。

除了提供 IP 地址到主机名的转换,DNS 还提供了下面几种重要的服务

  • 主机别名(host aliasing),有着复杂的主机名的主机能够拥有一个或多个其他别名,比如说一台名为 relay1.west-coast.enterprise.com 的主机,同时会拥有 enterprise.com 和 www.enterprise.com 的两个主机别名,在这种情况下,relay1.west-coast.enterprise.com 也称为 规范主机名,而主机别名要比规范主机名更加容易记忆。应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及主机的 IP地址。
  • 邮件服务器别名(mail server aliasing),同样的,电子邮件的应用程序也可以调用 DNS 对提供的主机名进行解析。
  • 负载分配(load distribution),DNS 也用于冗余的服务器之间进行负载分配。繁忙的站点例如 cnn.com 被冗余分布在多台服务器上,每台服务器运行在不同的端系统之间,每个都有着不同的 IP 地址。由于这些冗余的 Web 服务器,一个 IP 地址集合因此与同一个规范主机名联系。DNS 数据库中存储着这些 IP 地址的集合。由于客户端每次都会发起 HTTP 请求,所以 DNS 就会在所有这些冗余的 Web 服务器之间循环分配了负载。

DNS 工作概述

DNS 是一个复杂的系统,我们在这里只是就其运行的主要方面进行学习,下面给出一个 DNS 工作过程的总体概述

假设运行在用户主机上的某些应用程序(如 Web 浏览器或邮件阅读器) 需要将主机名转换为 IP 地址。这些应用程序将调用 DNS 的客户端,并指明需要被转换的主机名。用户主机上的 DNS 收到后,会使用 UDP 通过 53 端口向网络上发送一个 DNS 查询报文,经过一段时间后,用户主机上的 DNS 会收到一个主机名对应的 DNS 回答报文。因此,从用户主机的角度来看,DNS 就像是一个黑盒子,其内部的操作你无法看到。但是实际上,实现 DNS 这个服务的黑盒子非常复杂,它由分布于全球的大量 DNS 服务器以及定义了 DNS 服务器与查询主机通信方式的应用层协议组成。

DNS 最早的一种简单设计只是在因特网上使用一个 DNS 服务器。该服务器会包含所有的映射。这是一种集中式的设计,这种设计并不适用于当今的互联网,因为互联网有着数量巨大并且持续增长的主机,这种集中式的设计会存在以下几个问题

  • 单点故障(a single point of failure),如果 DNS 服务器崩溃,那么整个网络随之瘫痪。
  • 通信容量(traaffic volume),单个 DNS 服务器不得不处理所有的 DNS 查询,这种查询级别可能是上百万上千万级
  • 远距离集中式数据库(distant centralized database),单个 DNS 服务器不可能 邻近 所有的用户,假设在美国的 DNS 服务器不可能临近让澳大利亚的查询使用,其中查询请求势必会经过低速和拥堵的链路,造成严重的时延。
  • 维护(maintenance),维护成本巨大,而且还需要频繁更新。

所以 DNS 不可能集中式设计,它完全没有可扩展能力,因此采用分布式设计,所以这种设计的特点如下

分布式、层次数据库

首先分布式设计首先解决的问题就是 DNS 服务器的扩展性问题,因此 DNS 使用了大量的 DNS 服务器,它们的组织模式一般是层次方式,并且分布在全世界范围内。没有一台 DNS 服务器能够拥有因特网上所有主机的映射。相反,这些映射分布在所有的 DNS 服务器上。

大致来说有三种 DNS 服务器:根 DNS 服务器顶级域(Top-Level Domain, TLD) DNS 服务器权威 DNS 服务器 。这些服务器的层次模型如下图所示

微信图片_20220412205346.jpg

假设现在一个 DNS 客户端想要知道 www.amazon.com 的 IP 地址,那么上面的域名服务器是如何解析的呢?首先,客户端会先和根服务器之一进行关联,它将返回顶级域名 com 的 TLD 服务器的 IP 地址。该客户则与这些 TLD 服务器之一联系,它将为 amazon.com 返回权威服务器的 IP 地址。最后,该客户与 amazom.com 权威服务器之一联系,它为 www.amazom.com 返回其 IP 地址。

我们现在来讨论一下上面域名服务器的层次系统

  • 根 DNS 服务器 ,有 400 多个根域名服务器遍及全世界,这些根域名服务器由 13 个不同的组织管理。根域名服务器的清单和组织机构可以在 https://root-servers.org/ 中找到,根域名服务器提供 TLD 服务器的 IP 地址。
  • 顶级域 DNS 服务器,对于每个顶级域名比如 com、org、net、edu 和 gov 和所有的国家级域名 uk、fr、ca 和 jp 都有 TLD 服务器或服务器集群。所有的顶级域列表参见 https://tld-list.com/ 。TDL 服务器提供了权威 DNS 服务器的 IP 地址。
  • 权威 DNS 服务器,在因特网上具有公共可访问的主机,如 Web 服务器和邮件服务器,这些主机的组织机构必须提供可供访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。一个组织机构的权威 DNS 服务器收藏了这些 DNS 记录。

一般域名服务器的层次结构主要是以上三种,除此之外,还有另一类重要的 DNS 服务器,它是 本地 DNS 服务器(local DNS server)。严格来说,本地 DNS 服务器并不属于上述层次结构,但是本地 DNS 服务器又是至关重要的。每个 ISP(Internet Service Provider) 比如居民区的 ISP 或者一个机构的 ISP 都有一台本地 DNS 服务器。当主机和 ISP 进行连接时,该 ISP 会提供一台主机的 IP 地址,该主机会具有一台或多台其本地 DNS 服务器的 IP地址。通过访问网络连接,用户能够容易的确定 DNS 服务器的 IP地址。当主机发出 DNS 请求后,该请求被发往本地 DNS 服务器,它起着代理的作用,并将该请求转发到 DNS 服务器层次系统中。

相关文章
|
6月前
|
缓存 网络协议 网络安全
计算机网络:应用层(上篇)
计算机网络:应用层(上篇)
|
域名解析 网络协议 数据安全/隐私保护
408计网应用层总结
P2P网络是指在互联网中由对等结点组成的一种覆盖网络( Overlay Network ),是一种动态的逻辑网络,不是物理网络。
343 3
|
5月前
|
网络协议
计算机网络学习记录 应用层 Day6(1)
计算机网络学习记录 应用层 Day6(1)
34 0
|
11月前
|
网络协议
【王道考研计算机网络】—分层结构 协议 接口 服务
【王道考研计算机网络】—分层结构 协议 接口 服务
|
域名解析 消息中间件 网络协议
计算机网络复习(二) 应用层 下
计算机网络复习(二) 应用层
63 0
|
缓存 网络协议 搜索推荐
计算机网络复习(二) 应用层 上
计算机网络复习(二) 应用层
95 0
|
域名解析 网络协议 算法
Linux网络原理与编程(4)——第十四节 传输层协议
客户端认为连接已经建立成功了,所以就正常发数据。但是这个时候服务器并未建立连接,在收到数据之后,会向客户端发送一个含有RST的报文(reset),即希望客户端重新建立连接。
248 0
Linux网络原理与编程(4)——第十四节 传输层协议
|
消息中间件 存储 网络协议
你要问我应用层?我就和你扯扯扯(三)
网络应用是计算机网络存在的理由,一批早期的网络应用主要有电子邮件、远程访问、文件传输等,但是随着计算机网络的发展和人类无穷无尽的需求,越来越多的网络应用被开发出来,例如即时通讯和对等(P2P)文件共享,IP 电话、视频会议等。
84 0
你要问我应用层?我就和你扯扯扯(三)
|
安全 算法 网络协议
【计算机网络】再谈应用层——电子邮件相关
电子邮件信息格式 RFC 5322(最基本的格式,the Internet Message Format) 形式: to Cc(抄送) Bcc(盲抄送,对方无法得知该消息还抄送给了谁)
134 0
|
缓存 网络协议
408王道计算机网络强化——传输层和应用层(上)
408王道计算机网络强化——传输层和应用层
222 0
408王道计算机网络强化——传输层和应用层(上)