signed

QiShunwang

“诚信为本、客户至上”

第 6 章 应用层

2020/12/30 21:34:41   来源:

第 6 章 应用层

1、思维导图

image-20201230135624778

2、网络应用模型

2.1、应用层概述

应用层对应用程序的通信提供服务。

image-20201230140249488


应用层协议定义的内容:

  1. 应用进程交换的报文类型,请求还是响应?
  2. 各种报文类型的语法,如报文中的各个字段及其详细描述。
  3. 字段的语义,即包含在字段中的信息的含义。
  4. 进程何时、如何发送报文,以及对报文进行响应的规则。

应用层的功能应用层的重要协议
文件传输、访问和管理FTP
电子邮件SMTP、POP3
虚拟终端HTTP
查询服务和远程作业登录DNS

2.2、网络应用模型

两种网络应用模型

  1. 客户/服务器模型(Client/Server)
  2. P2P 模型(Peer-to-Peer)

2.2.1、C/S 模型

服务器:提供计算服务的设备。

  1. 永久提供服务
  2. 永久性访问地址/域名

客户机:请求计算服务的主机。

  1. 与服务器通信,使用服务器提供的服务
  2. 间歇性接入网络
  3. 可能使用动态IP地址
  4. 不与其他客户机直接通信

应用:Web,文件传输FTP,远程登录,电子邮件

image-20201230141205148

2.2.2、P2P 模型

P2P 模型的特点:

  1. 不存在永远在线的服务器
  2. 每个主机既可以提供服务,也可以请求服务
  3. 任意端系统/节点之间可以直接通讯
  4. 节点间歇性接入网络
  5. 节点可能改变IP地址

优势:

  1. 可扩展性好
  2. 网络健壮性强

image-20201230141242938


P2P 模型可以应对大量主机涌入网络的情况,因为加入网络的主机既可以请求服务,也可以提供服务。但是 C/S 模型由于服务器资源以及带宽等问题限制,只能接收一定数量的客户端请求

3、域名解析系统 DNS

3.1、DNS 系统

域名服务器

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

把域名翻译成IP地址的软件称为域名系统,即DNS。它是一种管理名字的方法。这种方法是:分不同的组来负责各子系统的名字。系统中的每一层叫做一个域,每个域用一个点分开。所谓域名服务器(即Domain Name Server,简称Name Server)实际上就是装有域名系统的主机。它是一种能够实现名字解析(name resolution)的分层结构数据库。

3.2、域名

域名的举例

以王道考研论坛为例:www.cskaoyan.com

像 com、cskaoyan 和 www 这种以 . 分隔开的称为标号,标号一般不超过 63 个字符,为了记忆方便,一般不超过 12 个字符,并且不区分大小写。标号中可出现 -,除此之外不能有其他标点符号。有多个标号组成的完整域名总共不超过255个宇符。

域名级别最低的域名写在最左边,级别最高的域名写在最右边。域名由两组或两组以上的ASCII或各国语言字符构成,各组字符间由点号分隔开,最右边的字符组称为顶级域名或一级域名(com)、倒数第二组称为二级域名(cskaoyan)、倒数第三组称为三级域名(www)、以此类推。

域名的分类

根域名:

根域名是最顶级的域名,也就是一个点(.)


顶级域名

域名级数是指一个域名由多少级组成,域名的各个级别被“.”分开,最右边的那个词称为顶级域名。顶级域名又分为三类:

  1. 一是国家和地区顶级域名(country code top-level domains,简称ccTLDs),目前200多个国家都按照ISO3166国家代码分配了顶级域名,例如中国是cn,日本是jp等;
  2. 二是通用顶级域名(generic top-level domains,简称gTLDs),例如表示工商企业的.com,表示网络提供商的 .net,表示非盈利组织的 .org等。
  3. 三是新顶级域名(New gTLD)如通用的.xyz、代表“高端”的.top、代表“红色”的.red、代表“人”的.men等一千多种。

二级域名

二级域名(Second Level Domain,SLD)在国际顶级域名或国家顶级域名之下的意义不同。

  1. 国际顶级域名下二级域名, 二级域名一般是指域名注册人选择使用的网上名称,如“yahoo.com”;上网的商业组织通常使用自己的商标、商号或其他商业标志作为自己的网上名称,如“microsoft.com”。
  2. 国家顶级域名下二级域名,在国家顶级域名之下二级域名一般是指类似于国际顶级域名的表示注册人类别和功能的标志。例如,在“.com.cn”域名结构中,“.com”此时是置于国家顶级域名“.cn”下的二级域名,表示商业性组织,以此类推。

目前,中国“.cN”的注册量为13455541个,在顶级域名“.CN下”,采用层次结构设置“类别域名”和“行政区域名”两类。

  1. 类别域名,中国互联网络的二级域名分类的类别域名最初为以下6个:
    1. “.gov”适用政府部门;
    2. “.ac”适用科研机构;
    3. “.edu”适用教育科研机构;
    4. “.com”适用工商金融企业;
    5. “.net”适用互联网络、接入网络的信息中心(NIC)和运行中心(NOC);
    6. “.org”适用各种非营利性组织。后来,又增加了“adm.cn”和“mil.cn”。
  2. 行政区域名
    1. 中国行政区域名有34个,对应于省、自治区、直辖市,如“.bj”一北京市;“.sh”一上海市;“.tj”一天津市;“.cq”一重庆市;“.he”一河北省;“.sx”一山西省,等等。

三级域名

三级域名是形如“youa.baidu.com”的域名,可以当做是二级域名的子域名,特征为域名包含两个“.”(dot)。对于域名所有者/使用者而言,三级域名都是二级域名的附属物而无需单独费用。

一个完整的域名(*.com、*.net、*.edu、*.gov等)由二个或二个以上部分组成,各部分之间用英文的句号".“来分隔,最后一个”."的右边部分称为顶级域名 (Top-level Domain Name),顶级域名“.”的左边部分称为二级域名 (Second-level Domain Name),二级域名的左边部分称为三级域名,以此类推,每一级的域名控制它下一级域名的分配。


四级域名

四级域名是形如“new.book.cirno.site”的域名,可以当做是三级域名的子域名,特征为域名包含三个“.”(dot)。对于域名所有者/使用者而言,四级域名都是三级域名的附属物而无需单独费用。


域名树

将域名树自下而上书写,便可组成一个域名

image-20201230152159296

3.3、域名服务器

参考资料

百度百科:根域名服务器

DNS入门:域名结构与域名服务器

1、根域名服务器

根服务器主要用来管理互联网的主目录,最早是IPV4,全球只有13台(这13台IPv4根域名服务器名字分别为“A”至“M”,网域名称格式为字母.root-servers.org),1个为主根服务器在美国。其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本。

这13台根域名服务器由12个组织独立运营。其中,Verisign 公司管理两台根域名服务器:A 和 J。每家公司为了保证根域名服务器的可用性,会部署多个节点,比如单单 Verisign 一家公司就部署了104台根域名服务器(2016年1月数据)。所以,根域名服务器其实不止13台。据统计,截止2016年1月,全世界共有 517 台根域名服务器。你可以在 http://root-servers.org 这个网站查到所有根域名服务器的信息。

从DNS协议(域名解析协议)说起。DNS协议使用了端口上的UDP和TCP协议,UDP通常用于查询和响应,TCP用于主服务器和从服务器之间的传送。由于在所有UDP查询和响应中能保证正常工作的最大长度是512字节,512字节限制了根服务器的数量和名字。要让所有的根服务器数据能包含在一个512字节的UDP包中,IPv4根服务器只能限制在13个,而且每个服务器要使用字母表中的单个字母命名,这也是IPv4根服务器是从A~M命名的原因。

随着互联网+、物联网和工业互联网等网络应用融合发展,原有IPv4 体系已经不能满足需求。基于IPv6的新型地址结构为新增根服务器提供了契机。下一代互联网国家工程中心于2013 年联合日本和美国相关运营机构和专业人士发起“雪人计划”,提出以IPv6 为基础、面向新兴应用、自主可控的一整套根服务器解决方案和技术体系。亚太互联网络信息中心预测,10年内IPv4将全面退出历史舞台,互联网将全面转向IPv6。最后的 IPv4 地址储备池已于2019年11月25日完全耗尽。

2、顶级域名服务器

就好像国家总理下面的各个省长,管辖省级单位。在DNS中,它们负责管理在该顶级域名服务器注册的下一级域名(二级域名)。所有顶级域名服务器的名称和IP地址是在根服务器注册的,也就是说,根域名服务器知道所有的顶级域名服务器的名称和IP地址。

3、权限域名服务器

负责一个区的域名服务器,就好像省长以下的那些市长、镇长、乡长等行政官。顶级域名服务器也可以算作是权威域名服务器,只不过由于其特殊性,我们专门把它划分为一类。因此权威域名服务器通常是指顶级域名以下的管理二级、三级、四级等域名的服务器。

上面三种服务器的关系可以用这张图表示:

image-20201230155009101

4、本地域名服务器

这类服务器不属于上面的层次结构,当一个主机(个人电脑)发出DNS请求时,查询请求就被发送到本地域名服务器,本地域名服务器负责回答这个查询,或者代替主机向域名空间中不同层次的权威域名服务器查询,再把查询的结果返回给主机。

域名解析的过程

下面的图示表示了一个域名的解析过程以及各个类型的域名服务器所处的位置。

image-20201230155210757

3.4、域名解析过程

域名解析的两种方式:

  1. 递归查询:靠别人
  2. 迭代查询:靠自己

域名解析的举例

image-20201230155547567

DNS高速缓存

  1. 什么是DNS的高速缓存?

    服务器可以高速缓存从其他 DNS 服务器收到的 DNS 记录。 也可以在 DNS 客户服务中使用高速缓存, 将其作为 DNS 客户端保存在最近的查询过程中得到的信息高速缓存的方法。 总的来说就是提高解析速度。

  2. DNS高速缓存有什么作用?

    当某个访问请求解析过一个域名以后,该解析记录就放置在缓存中,以后再有同样的解析请求, 就直接从缓存中提供结果,加快了访问者的应答速度。

  3. dig命令

    dig(域信息搜索器)命令是个用于询问 DNS 域名服务器的灵活的工具。 他执行 DNS 搜索,显示从受请求的域名服务器返回的答复

4、CDN

4.1、什么是 CDN?

CDN 全称是内容分发网络。其目的是让用户能够更快速的得到请求的数据。简单来讲,CDN 就是用来加速的,他能让用户就近访问数据,这样就更更快的获取到需要的数据。

举个例子,现在服务器在北京,深圳的用户想要获取服务器上的数据就需要跨越一个很远的距离,这显然就比北京的用户访问北京的服务器速度要慢。但是现在我们在深圳建立一个 CDN 服务器,上面缓存住一些数据,深圳用户访问时先访问这个 CDN 服务器,如果服务器上有用户请求的数据就可以直接返回,这样速度就大大的提升了。

4.2、CDN 的整个工作过程

当用户请求一个文件时,cdn的工作过程如下:

  1. dns请求当地local DNS
  2. 当地local DNS递归的查询服务器的gslb
  3. 服务器根据 local DNS 分配最佳节点,返回ip
  4. .用户获得最佳接入ip,访问最佳节点。
  5. 如果该节点没有用户想要获取的内容,则通过内部路由访问上一节点,直到找到文件或到达源站为止。
  6. cdn节点缓存该数据,下次请求该文件时可以直接返回。

image-20201230204611411

5、文件传输协议 FTP

5.1、文件传送协议

FTP 协议

FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。

相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(21 + PASV端口范围)的TCP协议即可。

SFTP 协议

SFTP(Secure File Transfer Protocol):安全文件传送协议。可以为传输文件提供一种安全的加密方法。sftp 与 ftp 有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。

5.2、FTP 服务器和客户端

FTP是基于客户/服务器(C/S)的协议。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。

  1. 服务器:依照 FTP 协议提供服务,进行文件传送的计算机就是 FTP 服务器。
  2. 客户端:连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows 自带 ftp 命令,这是一个命令行的 FTP 客户程序,另外常用的 FTP 客户程序还有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。

5.3、FTP 登录方式

1、FTP用户授权

1)、用户授权

要连上 FTP 服务器(即“登陆”),必须要有该 FTP 服务器授权的帐号,也就是说你只有在有了一个用户标识和一个口令后才能登陆FTP服务器,享受FTP服务器提供的服务。

2)、FTP地址格式

FTP地址如下: ftp://用户名:密码@FTP服务器IP或域名:FTP命令端口/路径/文件名

上面的参数除FTP服务器IP或域名为必要项外,其他都不是必须的。如以下地址都是有效FTP地址:

  1. ftp://foolish.6600.org
  2. ftp://list:list@foolish.6600.org
  3. ftp://list:list@foolish.6600.org:2003
  4. ftp://list:list@foolish.6600.org:2003/soft/list.txt

2、匿名FTP

互连网中有很大一部分 FTP 服务器被称为“匿名”(Anonymous)FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”登陆FTP服务,就可访问远程主机上公开的文件。许多系统要求用户将Emai1地址作为口令,以便更好地对访问进行跟综。匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息,数据和软件。人们只要知道特定信息资源的主机地址,就可以用匿名FTP登录获取所需的信息资料。虽然目前使用WWW环境已取代匿名FTP成为最主要的信息查询方式,但是匿名FTP仍是 Internet上传输分发软件的一种基本方法。如red hat 、autodesk等公司的匿名站点。

5.4、FTP 工作原理

FTP 工作原理图

注意:

  1. 控制连接始终保持,数据连接只在发送数据时保持
  2. 是否使用TCP 20端口建立数据连接与传输模式有关:
    1. 主动方式使用TCP 20端口
    2. 被动方式由服务器和客户端自行协商决定(端口>1024)

image-20201230162357452

1、PORT(主动)方式

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。

PORT方式,服务器会主动连接客户端的指定端口,那么如果客户端通过代理服务器链接到internet上的网络的话,服务器端可能会连接不到客户端本机指定的端口,或者被客户端、代理服务器防火墙阻塞了连接,导致连接失败

2、PASV(Passive被动)方式

PASV(Passive被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。

PASV方式,服务器端防火墙除了要放开21端口外,还要放开PASV配置指定的端口范围

5.5、FTP的传输模式

1、ASCII传输方式

ASCII模式,以文本序列传输数据;

2、二进制传输模式

Binary模式,以二进制序列传输数据。

6、电子邮件

6.1、参考资料

  1. 电子邮件系统的组成
  2. 百度百科:电子邮件系统
  3. 电子邮件系统Email
  4. 电子邮件基本格式(MIME格式)
  5. 电子邮件系统的介绍
  6. 简单邮件传送协议SMTP
  7. 简单邮件传输协议SMTP
  8. MIME协议详解
  9. 邮局协议POP3
  10. POP3协议分析
  11. imap协议
  12. 百度百科:imap

6.2、电子邮件系统概述

电子邮件的优点

电子邮件系统可以说是因特网上最早流行的一种应用,并且至今仍有重要的地位。原因主要是实时通信存在着两大缺陷:

  1. 通信双方必须同时在场。
  2. 一些不是很重要的实时通信会不必要的打扰人们正常的工作或休息。

而电子邮件就像寄信一样,既可以传达信息又不至于打扰人们正常或休息,而且如今的电子邮件还可以附上声音和图像等等,功能十分强大。

电子邮件系统概念

电子邮件系统(Electronic mail system,E-mail)由用户代理MUA(Mail User Agent)以及邮件传输代理MTA(Mail Transfer Agent),和邮件投递代理MDA(Mail Delivery Agent)组成。

MUA指用于收发Mail的程序,MTA指将来自MUA的信件转发给指定用户的程序,MDA就是将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱)。

当用户从 MUA 中发送一份邮件时,该邮件会被发送送到MTA,而后在一系列MTA中转发,直到它到达最终发送目标为止。

专业术语解释

  1. MUA:“邮件用户代理”,用于用户端,主要功能是接收邮件主机的电子邮件,并提供浏览访问的功能
  2. MDA:“邮件投送代理” ,将MTA 接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),或者再经由MTA将信件送到下个MTA
  3. MTA(Mail Transfer Agent):MTA是用在邮件主机上的软件,主要的邮件服务器。MTA就是“邮件传送代理”,负责用户寄信与收信
  4. MRA(Mail Retrieval Agent):负责实现IMAP与POP3协议,与MUA进行交互 (Dovecot)协议

6.3、电子邮件基本格式(MIME格式)

总的来说,参照rfc4021标准,mime格式分为消息头和消息体两部分(邮件头和邮件体)。

邮件头

邮件头包含了发件人、收件人、主题、时间、MIME版本、内容的类型、内容的传输编码方式等重要信息。每条信息称为一个域,由域名后加冒号(“ : ”)和信息内容构成,可以是一行,也可以占用多行。域的首行必须顶头写(即左边不能有空白字符(空格和制表符));续行则必须以空白字符打头,且第一个空白字符不是信息本身固有的,解码时要过滤掉。另外,邮件头中不允许出现空行。例如

Date: Wed, 15 Aug 2017 10:09:00 +0800
From: simba@www.simba.com
To: "simba" <simba@www.simba.com>
Cc: "simba" <simba@www.simba.com>
BCC: "simba" <simba@www.simba.com>
Subject: test
Message-ID:  <20170815100900.0E67523E1438@www.test3.com>
X-mailer: Foxmail 6, 15, 201, 21 [cn]
X-Spam: yes
X-Rmilter-Greylist: Sender IP ::1 is whitelisted by configuration
Mime-Version: 1.0

包含内容解释及其他信息如下:

邮件头:

域名                        |         含义              |       添加者  
Received                    |       传输路径            |   各级邮件服务器
Return-Path                 |       回复地址            |   目标邮件服务器
Delivered-To                |       发送地址            |   目标邮件服务器
Reply-To                    |       回复地址            |   邮件的创建者
From                        |       发件人地址          |    邮件的创建者
To                          |       收件人地址          |    邮件的创建者
Cc                          |       抄送地址            |   邮件的创建者
Bcc                         |       暗送地址            |   邮件的创建者
Date                        |       日期和时间          |    邮件的创建者
Subject                     |       主题               |    邮件的创建者
Message-ID                  |       消息ID             |    邮件的创建者
MIME-Version                |       MIME版本           |    邮件的创建者
Content-Type                |       内容的类型          |    邮件的创建者
Content-Transfer-Encoding   |       内容的传输编码方式   |    邮件的创建者

-----------------------------------------------------------------------------
段头:

域名                                  含义
Content-Type                    |   段体的类型
Content-Transfer-Encoding       |   段体的传输编码方式
Content-Disposition             |   段体的安排方式
Content-ID                      |   段体的ID
Content-Location                |   段体的位置(路径)
Content-Base                    |   段体的基位置

邮件体

邮件内容有各种各样的(既纯文本,超文本,内嵌资源(比如内嵌在超文本中的图片),附件的组合),服务器通过第一个content-type判断邮件内容,如果包含了其他内容,邮件体被分为多个段,段中可包含段,每个段又包含段头和段体两部分。

如果在邮件中要添加附件,必须定义multipart/mixed段;如果存在内嵌资源,至少要定义multipart/related段;如果纯文本与超文本共存,至少要定义multipart/alternative段。什么是“至少”?举个例子说,如果只有纯文本与超文本正文,那么在邮件头中将类型扩大化,定义为multipart/related,甚至multipart/mixed,都是允许的。

+----------------------------------------multipart/mixed----------------------------------------+
|                                                                                               |
|                                                                                               |
|   +---------------------------multipart/related---------------------------+                   |
|   |                                                                       |                   |
|   |                                                                       |                   |
|   |   +---------mutipart/alternative--------------+   +-------------+     |   +-------+       |
|   |   |                                           |   |   内嵌资源   |     |   |  附件  |      |
|   |   |                                           |   +-------------+     |   +-------+       |
|   |   |   +---------------+   +---------------+   |                       |                   |
|   |   |   |   纯文本正文   |   |   超文本正文    |   |                       |                  |
|   |   |   +---------------+   +---------------+   |   +-------------+     |   +-------+       |
|   |   |                                           |   |   内嵌资源   |     |   |  附件  |      |
|   |   |                                           |   +-------------+     |   +-------+       |
|   |   +-------------------------------------------+                       |                   |
|   |                                                                       |                   |
|   |                                                                       |                   |
|   +-----------------------------------------------------------------------+                   |
|                                                                                               |
|                                                                                               |
+-----------------------------------------------------------------------------------------------+

6.4、电子邮件系统的组成结构

电子邮件系统的组成

  1. 用户接口:用户接口是本地运行的程序,又称用户代理(UA),主要是撰写、显示、处理邮件。UA的任务是创建和显示报文,并且 在UA和本地的MAT之间传递报文
  2. 邮件传输程序:这个部分又称报文传送代理(MTA),它将邮件通过网络发送给对方主机,并从网络接收邮件。它包括如下两个功能:
    1. 传送和接收:电子邮件按照c/s方式工作。用户编写好邮件,通过UA将邮件交给MTA。发送邮件时,MTA作为远程 目的计算机服务器的客户,与目的主机建立TCP连接,并将邮件发送到目的主机。接收方收到邮件后,存放在接收方的 邮箱中,等待阅读
    2. 报告:将邮件传送情况(已交付、被拒、丢失等)向发信人报告

另外,邮件在发送过程中要经过很多结点,因此每个结点都要安装邮件传输程序(MTA),以便对邮件存储转发。Internet上的MTA集合构成了报文传送系统(MTS)。

image-20201230172354757


发送电子邮件的具体过程

  1. 发邮件的人调用自己主机中的用户代理撰写和编辑要发送的邮件。
  2. 发件人点击发送按钮邮件开始发送:
    1. 用户代理的 SMTP客户把邮件发送给 发送邮件服务器 的 STMP服务器。
    2. 发送方邮件服务器的STMP客户把邮件发给接收方邮件服务器的SMTP服务器。
  3. 由图中可以看出,每一段的邮件发送都是在一对SMTP客户和SMTP服务器之间进行的。SMTP客户负责发邮件,而SMTP服务器接收邮件。
  4. 接收方的邮件服务器中的SMTP服务器进程收到邮件以后,就把邮件放入收件人的用户邮箱中,等待收件人在他方便的时候进行读取。
  5. 收件人开机上网准备接收邮件时候,打开主机中的用户代理,使用POP3协议读取发送给自己的邮件。具体就是:
    1. 用户代理中的POP3客户程序发起通信,即与 接收方邮件服务器中的POP3服务器程序进行通信,如果有邮件则请求把邮件取回。
    2. 在上图中POP3服务器和POP3客户之间的箭头表示邮件传送的方向,但它们之间的通信是POP3客户发起的。
  6. 请注意这里两种通信方式。
    1. 推:SMTP客户把邮件推给SMTP服务器。
    2. 拉:POP3客户(通信发起者)把邮件从POP3服务器拉过来。

电子邮件的传输协议

  1. SMTP(Simple Mail Transfer Protocol)传输发送邮件所使用的标准协议,使用 TCP 25 端口
  2. IMAP(Internet Message Access Protocol)接收邮件使用的标准协议之一,使用 TCP 143 端口
  3. POP3(Post Office Protocol 3) 接收邮件使用的标准协议之一,使用 TCP 110 端口

电子邮件系统采用客户/服务器体系结构

原因就是用户代理所在的计算机不可能每天24小时在线(就像你在给一个没电池的手机打电话)。

而将发送、接受和缓存邮件的功能交给24小时开机的邮件服务器,当用户方便时候从邮件服务器的用户信箱中读取邮件是一种比较合理的方法。

总结以上的内容,电子邮件系统的体系结构粗糙一画是这样子的:

A用户<------>邮件服务器<------>B用户

6.5、简单邮件传送协议 SMTP

SMTP 协议的概念

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是由源地址到目的地址传送邮件的一组规则,用来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它使每台计算机在发送或中转信件时能找到下一个目的地。通过使用指定的服务器,把Email寄到收信人的服务器上。

SMTP服务器是遵循SMTP协议的邮件服务器,用来发送或中转电子邮件。首先, 客户端需要建立一个与SMTP服务器的TCP连接 , 端口一般为25 。在连接建立之后,客户端和服务器先执行一些应用层的握手操作,让SMTP服务器知道客户端的信息,并且对客户端需求做出响应等。

在SMTP握手阶段,客户端向SMTP服务器分别指定发件人和收件人的电子邮件地址。握手阶段完毕,SMTP服务器把客户端发出的邮件消息添加到发信队列中,通过TCP提供的可靠数据传输服务把该消息准确地传送到收件人的服务器。

SMTP 通信的三个阶段:连接建立、邮件传送和连接释放

  1. 连接建立:

    SMTP客户每隔一定时间对邮件缓存扫描一次。如发现有邮件,就使用SMTP的熟知端口号码25与接收方邮件服务器的SMTP服务器建立TCP连接。在建立连接后,接收方SMTP服务器要发出“220 Service ready”(服务就绪)。然后SMTP客户向SMTP服务器发送HELO命令,附上发送方的主机名。SMTP服务器若有能力接收邮件,则回答:“250 OK”,表示已准备好接收。

  2. 邮件传送

    1. 邮件的传送从MAIL命令开始。MAIL命令后面有发件人的地址。如MAIL FROM:test@163.com 。服务器给出响应回应;
    2. 接下来便是一个或多个RCPT命令,取决于把同一个邮件发送给一个或多个收件人,其格式为RCPT TO:<收件人地址>
    3. 再接下来就是DATA命令,表示要开始传送邮件的内容了。SMTP服务器返回的信息是:354 Start mail input;end with . ;这里是回车换行的意思。发送完毕后,在发送.表示邮件内容结束。
  3. 连接释放:邮件发送完毕后,SMTP客户发送QUIT命令。SMTP服务器返回的信息是:221 服务关闭,表示SMTP同意释放TCP连接。邮件传送的全部过程即结束。

SMTP 的缺点

  1. SMTP不能传送可执行文件或者其他二进制对象。
  2. SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字。
  3. SMTP服务器会拒绝超过一定长度的邮件。

6.6、MIME 协议

RFC822协议

RFC822 文档定义了邮件内容的主体结构和各种邮件头字段的详细细节,但是,它没有定义邮件体的格式,RFC822文档定义的邮件体部分通常都只能用于表述一段普通的文本,而无法表达出图片、声音等二进制数据。另外,SMTP服务器在接收邮件内容时,当接收到只有一个“.”字符的单独行时,就会认为邮件内容已经结束,如果一封邮件正文中正好有内容仅为一个“.”字符的单独行,SMTP服务器就会丢弃掉该行后面的内容,从而导致信息丢失。

由于 Internet的迅猛发展,人们已不满足于电子邮件仅仅是用来交换文本信息,而希望使用电子邮件来交换更为丰富多彩的多媒体信息,例如,在邮件中嵌入图片、声音、动画和附件。但是,由于图片和声音等内容是非ASCII码的二进制数据,而RFC822邮件格式只适合用来表达纯文本的邮件内容,所以,要使用 RFC822邮件格式发送这些非ASCII码的二进制数据时,必须先采用某种编码方式将它们“编码”成可打印的ASCII字符后再作为RFC822邮件格式的内容。邮件阅读程序在读取到这种经过编码处理的邮件后,再按照相应的解码方式解码出原始的二进制数据,这样就可以借助RFC822邮件格式来传递多媒体数据了。这种做法需要解决以下两个技术问题:

  1. 邮件阅读程序如何知道邮件中嵌入的原始二进制数据所采用的编码方式;
  2. 邮件阅读程序如何知道每个嵌入的图像或其他资源在整个邮件内容中的起止位置。

针对这个问题,人们后来专门为此定义了MIME(Multipurpose Internet MailExtension,多用途Internet邮件扩展)协议。

MIME 协议

MIME,全称为“Multipurpose Internet Mail Extensions”,比较确切的中文名称为“通用互联网邮件扩充

MIME协议用于定义复杂邮件体的格式,它可以表达多段平行的文本内容和非文本的邮件内容,例如,在邮件体中内嵌的图像数据和邮件附件等。另外,MIME 协议的数据格式也可以避免邮件内容在传输过程中发生信息丢失。MIME协议不是对RFC822邮件格式的升级和替代,而是基于RFC822邮件格式的扩展应用。一言以蔽之,RFC822定义了邮件内容的格式和邮件头字段的详细细节,MIME协议则是定义了如何在邮件体部分表达出的丰富多样的数据内容。

一个采用了 MIME协议的电子邮件就叫做MIME邮件,MIME邮件在RFC822文档中定义的邮件头字段的基础上,扩充了一些自己专用的邮件头字段,例如,使用 MIME-Version头字段指定MIME协议的版本,使用Content-Type头字段指定邮件体的MIME类型,使用Content- Transfer-Encoding头字段指定编码方法,如下所示:

6.7、邮局协议 POP3

POP3 协议的概念

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

POP3 协议的通信流程

用户从邮件服务器上接收邮件的典型通信过程如下。

  1. 用户运行用户代理(如Foxmail, Outlook Express)。

  2. 用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)的110端口建立TCP连接。

  3. 客户端向服务器端发出各种命令,来请求各种服务(如查询邮箱信息,下载某封邮件等)。

  4. 服务端解析用户的命令,做出相应动作并返回给客户端一个响应。

    1. 和4)交替进行,直到接收完所有邮件转到步骤6),或两者的连接被意外中断而直接退出。
  5. 用户代理解析从服务器端获得的邮件,以适当地形式(如可读)呈现给用户。

POP3 命令格式

POP3的命令不多,它的一般形式是:COMMAND [Parameter] 。其中COMMANDASCII形式的命令名,Parameter是相应的命令参数,是回车换行符(0DH, 0AH)

服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行“+OK”或“-ERR”开头,然后再加上一些ASCII文本。“+OK”和“-ERR”分别指出相应的操作状态是成功的还是失败的。

POP3 协议的三个状态

POP3协议中有三种状态,认正状态,处理状态,和更新状态。 命令的执行可以改变协议的状态,而对于具体的某命令,它只能在具体的某状态下使用,这些请参看表1RFC193

客户机与服务器刚与服务器建立连接时,它的状态为认证状态;一旦客户机提供了自己身份并被成功地确认,即由认可状态转入处理状态; 在完成相应的操作后客户机发出QUIT命令(具体说明见后续内容),则进入更新状态,更新之后又重返认可状态;当然在认可状态下执行QUIT命令,可释放连接。状态间的转移如图 1所示。

6.8、网际报文存取协议 IMAP

IMAP 协议概述

IMAP(Internet Message Access Protocol)以前称作交互邮件