POP3协议详解

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

POP3协议分析

第1章POP3概述

POP3全称为Post Office Protocol version3,即邮局协议第3版。它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通信模型,对应的RFC 文档为RFC1939。该协议非常简单,所以我们只重点介绍其通信过程,而相关的一些概念和术语请参考RFC文档或另外一篇文章《SMTP协议分析》

第2章.POP3详解

2.1通信过程

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

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

2)用户代理(以下简称客户端)与邮件服务器(以下简称服务器端)

的110端口建立TCP连接。

3)客户端向服务器端发出各种命令,来请求各种服务(如查询邮箱

信息,下载某封邮件等)。

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

应。

5)3)和4)交替进行,直到接收完所有邮件转到步骤6),或两者的

连接被意外中断而直接退出。

6)用户代理解析从服务器端获得的邮件,以适当地形式(如可读)

的形式呈现给用户。

其中2)、3)和4)用POP3协议通信。可以看出命令和响应是POP3通信的重点,我们将予以重点讲述。

2.2命令和响应

2.2.1.格式

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

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

2.2.2.三个状态

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

客户机与服务器刚与服务器建立连接时,它的状态为认证状态;一旦客户

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

---建立连接---|认可|--认证成功--|处理|--执行QUIT--|更新|

|_______ -QUIT结束_________________|

图 1 POP3的状态转移图

⏹认可状态

⏹处理状态

⏹更新状态

⏹建立连接

⏹执行QUIT

⏹QUIT完毕

⏹执行QUIT,释放连接

⏹认证成功

2.2.

3.一个例子

命令和响应的格式是语法,各命令和响应的意思则是语义,各命令和各响

应在时间上的关系则是同步。我们还是通过以个简单的POP3通信过程来说明协议的这三个要素。

C:telnet 110 /* 以telnet方式连接126邮件服务器*/

S:+OK Welcome to coremail Mail Pop3 Server (126coms[3adb99eb4207ae5256632eecb8f8b4855]) /* +OK,代表命令成功,其后的信息则随服务器的不同而不同*/

C:USER bripengandre /* 采用明文认证 */

S:+OK core mail

C:PASS Pop3world /* 发送邮箱密码 */

S:+OK 654 message(s) [30930370 byte(s)] /* 认证成功,转入处理状态 */

C:LIST 1 /* 显示第一封邮件的信息 */

S:+OK 1 5184 ./* 第一封邮件的大小为5184 字节 */

C:UIDL 1 /* 返回第一封邮件的唯一标识符 */

S:+OK 1 1tbisBsHaEX9byI9EQAAsd /* 数字1 后的长字符串就是第一封邮件的唯一标志符 */

C:RETR 1 /* 下载第一封邮件 */

S:+OK 5184 octets /* 第一封邮件的大小为5184字节 */

S:Receive… /* 第一封邮件的具体内容 */

S:…

C:QUIT /* 转入更新状态,接着再转入认证状态 */

S:+OK

C: QUIT /* 退出连接 */

S:+OK core mail /* 成功地退出了连接 */

对于上述的过程,补充如下几点内容。

1)“C:”开头的行(不包括"C:")是客户端的输入,而以“S:”

开头的行(不包括"S:")则是服务器的输出。

2)上述的命令并不一定会一次性成功,服务器会返回错误响应(以

“-ERR”开头),客户端应该按照协议规定的时序,来输入后续的命令

(或重复执行失败的命令,或重置会话,或退出会话等等)。

3)上述过程是示意性的,实际过程可能与其有较大不同。例如,实

际过程中可能使用加密认证(MD5摘要认证)。

4)RETR下载下来的邮件可能会难以看懂,这是因为其可能使用了

quoted-printable编码或base64编码,我们可用Foxmail等用户代理软件来解码它。

2.2.4.常用命令和响应

相关文档
最新文档