SMTP、POP协议简析
作者:李鹏博
时间:2016/06
1.SMTP协议与POP协议说明
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
POP(Post Office Protocol)即邮局协议,用于电子邮件的接收。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。本文只介绍POP3。
2.SMTP协议简析
通过抓包,可以看到清晰的服务器与客户端的交流过程。如下图。
如上图,将整个流程分为三部分:握手阶段、认证阶段、发送数据阶段。其中TCP三次握手在上图中未体现,握手成功后,进入认证阶段。
SMTP命令字说明
HELO客户端为标识自己的身份而发送的命令(通常带域名)
EHLO使服务器可以表明自己支持扩展简单邮件传输协议(ESMTP) 命令。
MAIL FROM标识邮件的发件人;以MAIL FROM: 的形式使用。
RCPT TO标识邮件的收件人;以RCPT TO: 的形式使用。
DATA客户端发送的、用于启动邮件内容传输的命令。
RSET使整个邮件的处理无效,并重置缓冲区。
QUIT终止会话。
对于服务器的每个回复,都有一个返回码,这个返回码标志着上次的请求操作完成状态。如果第一个数字是2表示操作成功;3表示操作正在进行;5表示操作失败。
握手阶段
认证阶段
握手成功后,邮件服务器(上面示例是163的邮件服务器)会发送欢迎连接信息。然后是客户端HELO(或EHLO),向服务器标识用户身份;接下来进行认证操作。认证成功后,客户端告诉服务器这封邮件从哪个邮箱来,到哪个邮箱去,mail from只有一个,但是recpt to 后面可以跟多个收件人地址。成功后,客户端请求发送邮件数据。
数据发送阶段
服务器回复DATA命令后,会有一个结束符说明。如上图,就是以
数据内容规格一般是按照MIME协议生成,具体参见《MIME协议的内容分析及解析说明》。
数据发送完成后客户端以QUIT命令主动退出。邮件发送完成,流程结束。
3.POP协议简析
POP命令字说明
USER <用户名> 用户登录。
PASS <密码> 发送用户密码。
STAT返回邮箱列表(邮件数量、字节)。
LIST 返回邮件数量和每个邮件的大小。
UIDL 返回邮件的唯一标识符,pop3会话的每个标识符都将是唯一的。
RETR <邮件编号> 传回指定的邮件,以只有一个“.”号的行结束。
QUIT关闭连接。
服务器命令回应的第一行以“+OK”或“-ERR”(+OK指成功,-ERR指失败)指出相应的操作状态是成功还是失败。
握手阶段
邮件客户端与服务器的110端口(POP默认端口)三次握手连接。
认证阶段
客户端以USER和PASS关键字带参数完成认证。如果不勾选SSL,认证过程为明文。检查阶段
认证结束后,客户端发起STAT请求,服务器返回邮件总数量和总大小。(该处总数不包括已归档的邮件)
客户端发起LIST请求,服务器返回每封邮件的大小。以
之后,客户端发送UIDL 请求,服务器返回每封邮件的唯一ID,此时,客户端会对本地已有邮件和收到的邮件列表进行比较。发现没有的,会收取该邮件。
收取阶段
如上图,客户端发送RETR 192来收取第192封邮件。
需要说明的是,有时,客户端还会发送TOP命令来获取某封邮件的包头信息。具体作用不明。
收取完成后,客户端主动退出,断开连接。
4.其他说明
SMTP协议服务器默认监听端口是25,POP协议服务器默认监听端口是110。
SMTP和POP在不勾选SSL的情况下,都是明文传递,有泄密风险。