SMTP协议浅析

一、协议介绍

    邮件传输协议由SMTP(邮件发送协议)和POP3、IMAP(邮件读取协议)等协议组成,采用C/S(客户端/服务器)架构使用25端口监听TCP连接实现可靠通信,基本流程与邮政系统的寄信类似,具体的过程如下。

  1. 发件人将邮件发送到自己使用的邮件服务器。
  2. 发件人的邮件服务器将收到的邮件转发到收件人邮件服务器中的收件人邮箱。
  3. 收件人访问邮件服务器中自己的邮箱,获取发件人发送的电子邮件。
  4. 邮件发送流程如下图1.1所示。

1>发件人需要将自己的邮件内容“推给”己方的SMTP服务器(类似于你去邮局寄信)。

2>己方STMP服务器将邮件“推给”对方的SMTP服务器(类似于邮递员将你的邮局发送到对方分属的邮局)

3>收件人从本地SMTP服务器侧 “拉回”发给自己的邮件(类似于收件人从邮局将自己的信件取回)。

图1.1:邮件发送过程

二、SMTP的基本工作原理

SMTP基本的交互过程如图2.1所示.

图2.1:SMTP基本交互过程

三、以QQ邮箱为例的报文解析

1、DNS解析

(1)DNS解析是每次发送邮件必经的一个过程,先要在域名服务器处获取域名相关的IP地址。

(2)域名服务器主要分为四种:本地域名服务器;根域名服务器;顶级域名服务器;权威域名服务器。

(3)若本地域名服务器无相关域名的缓存IP,则向上级域名服务器寻求帮助。

(4)如下图3.1所示,设备发起解析请求,需要先拿到域名对应的IP地址。

图3.1:DNS解析

2、三次握手

(1)SMTP是以TCP为基础的可靠协议,在报文交互之前需要先进行三次握手。如下图3.2所示。

(2)设备侧与DNS解析后拿到的地址(smtp.qq.com所属的IP地址)建立三次握手。为之后的邮件发送做准备。

图3.2:三次握手

3、建立连接阶段

(1)接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421(服务器不可用)。

(2)客户发送HELO报文,并使用它的域名地址标志自己。目的是要把客户的域名通知服务器。

(3)服务器响应代码250(请求命令完成)或根据情况的其他一些代码

(4)具体交互过程如下图3.3及图3.4所示。

图3.3:建立连接

图3.4:建立连接-流追踪

4、认证阶段

(1)设备侧发送请求认证AUTH LOGTH。

(2)服务器侧回复334,表示认证服务已经就绪。

(3)设备侧发送用户名User。

(4)服务器侧回复334,表示收到用户名。

(5)设备侧发送密码PASS。

(6)服务器侧回复235表示认证通过。

(7)具体交互过程如下图3.5及3.6所示。

图3.5:认证阶段

图3.6:认证阶段-流追踪

5、邮件发送阶段

(1)设备侧指定发件人邮箱。

(2)服务器侧回复250OK表示收到。

(3)设备侧指定发件人邮箱。

(4)服务器侧回复250OK表示收到。

(5)设备侧表示准备发送数据。

(6)服务器回复354提示发送‘.’表示邮件结束。

(7)设备侧发送邮件数据。

(8)服务器侧回复250OK表示已经发送。

(9)具体交互过程如下图3.7及图3.8所示。

图3.7:邮件发送阶段

图3.8:邮件发送阶段-流追踪

5、退出阶段

(1)设备侧回复QUIT表示退出。

(2)服务器侧发送221表示知晓。

(3)具体交互过程如下图3.9及图3.10所示。

图3.9:退出阶段

图3.10:退出阶段-流追踪

6、四次挥手

(1)SMTP是以TCP为基础的可靠协议,在报文交互结束后需要进行四次挥手断开连接,释放服务资源。

图3.11:四次挥手

四、附录

1、如何开启第三方客户端登录服务

(1)邮箱需要开启第三方客户端登录服务(如下以QQ邮箱为例)

第一步:登录 QQ 邮箱;

第二步:点击进入设置——账户界面,如图 4.1 所示;

第三步:分别开通 1、2、3、4 处所对应的服务;

第四步:点击 5 处,生成授权码;

图4.1:QQ邮箱开启第三方登录服务

2、SMTP常见响应码

501——参数格式错误

502——命令不可实现

503——错误的命令序列

504——命令参数不可实现

211——系统状态或系统帮助响应

214——帮助信息

220<domain>——服务器就绪

221<domain>——服务关闭

421<domain>——服务器未就绪,关闭传输信道

250——要求的邮件操作完成

251——用户非本地,将转发向<forward-path>

450——要求的邮件操作未完成,邮箱不可用

550——要求的邮件操作未完成,邮箱不可用

451——放弃要求的操作,处理过程中出错

551——用户非本地,请尝试<forward-path>

452——系统存储不足,要求的操作未执行

552——过量的存储分配,要求的操作未执行

553——邮箱名不可用,要求的操作未执行

354——开始邮件输入,以“.”结束

554——操作失败

响应码用三位数字编码表示。第一个数字给出了命令状态的一般性指示,比如响应成功、失败或不完整。总共有五种不同的状态:

1 表示服务器正确接收信息,还未处理,需要一个确认的信息。

2 表示服务器已经正确处理信息。

3 表示服务器正确接收信息,正在处理,需要进一步的信息完成该请求。

4 表示信息临时错误(比如系统繁忙),过一会再重试即可。

5 表示信息永久错误,相关的请求无法完成。

第二个数字是响应类型的分类,会提供进一步的信息:

0 表示语法。

1 表示系统状态和信息。

2 表示连接状态。

3 表示与用户认证有关的信息。

4 表示未定义。

5 表示与文件系统有关的信息。

第三个数字提供了更加详细的信息。

3、DNS解析流程

DNS解析的基本过程如下图4.1所示。

https://images2015.cnblogs.com/blog/464291/201707/464291-20170703113844956-354755333.jpg

图4.1 DNS解析过程

(1)网络客户端就是我们平常使用的电脑,打开浏览器,输入一个域名。比如输入www.163.com,这时,你使用的电脑会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般是你设备填写的DNS地址。

(2)查询www.163.com的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果。如果没有,本地DNS服务器还要向DNS根服务器进行查询

(3)根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。

(4)本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。

(5)最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。

  • 25
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值