电子邮件原理.docx
《电子邮件原理.docx》由会员分享,可在线阅读,更多相关《电子邮件原理.docx(19页珍藏版)》请在冰豆网上搜索。
电子邮件原理
第一章电子邮件的工作原理
1.互联网TCP/IP的基本结构
2.SMTP的基本结构
2.1SMTP的模型
2.2SMTP的基本命令
3.电子邮件的工作原理
4.电子邮件的信头结构及分析
4.1邮件的结构
4.2邮件的信头
第二章OPENRELAY的原理及测试
1.OPENRELAY的原理
2.如何确认邮件服务器是否RELAY
第三章垃圾邮件的文化与历史
1.什么是垃圾邮件
2.垃圾邮件的起源与历史
3.垃圾邮件的分类
4.我们为什么要反对垃圾邮件
5.世界垃圾邮件状况
6.世界著名的反垃圾邮件组织
7.垃圾邮件支持者
第一章电子邮件的工作原理
1.互联网TCP/IP的基本结构
今天的互联网(Internet)的原形是1969年建立的APARNET。
在互联网发展史上具有决定意义的一件事是在1983年1月1日,APARNET正式转换成TCP/IP协议的网络。
正是TCP/IP的出现,才使得互联网得以在全世界的范围内迅速发展并具有今天的规模。
根据TCP/IP协议,互联网分为4层,加上最底层的硬件层一共是5层:
物理层:
对应于网络的基本硬件,这也是Internet物理构成,即我们可以看得见的硬件设备,如PC机、互连网服务器、网络设备等,必须对这些硬件设备的电气特性作一个规范,使这些设备都能够互相连接并兼容使用。
网络接口层:
它定义了将数据组成正确帧的规程和在网络中传输帧的规程,帧是指一串数据,它是数据在网络中传输的单位。
互联网层:
本层定义了互联网中传输的“信息包”格式,以及从一个用户通过一个或多个路由器到最终目标?
quot;信息包"转发机制。
传输层:
为两个用户进程之间建立、管理和拆除可靠而又有效的端到端连接。
应用层:
它定义了应用程序使用互联网的规程。
电子邮件的SMTP协议就建立在这一层。
Internet的核心层是网络层和传输层,相应的核心协议是IP协议和TCP协议。
IP协议的主要功能包括无连结数据报传送﹑数据报寻径以及差错处理三部分。
IP协议的特点是点到点的,IP对等实体间的通信不经过中间机器,对等实体所在的机器位于同一物理网络,对等机器之间有直接的物理连接。
IP层的主要功能是屏蔽下面物理层的差别,向上一层提供一致的数据格式。
所有要传输的数据,被按照一定的格式分组封装层IP数据报,数据报单元通过寻径等机制进行传输,在接收方数据报进行重组,得到最初要传送的数据。
由于IP协议是不可靠的数据传输协议,由于网络的拥塞而发生的数据丢失等情况是不可避免的,因此Internet还必须有一定的控制重传机制,这就是差错与控制报文协议(ICMP)。
尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收数据,但IP协议还不能解决数据分组在传输过程中可能出现的问题。
因此,若要解决可能出现的问题,还需要TCP协议来提供可靠的并且无差错的通信服务。
TCP协议被称作一种端对端协议。
这是因为它为两台计算机之间的连接起了重要作用:
当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收数据以及终止连接。
传输控制协议TCP协议利用重发技术和拥塞控制机制,向应用程序提供可靠的通信连接,使它能够自动适应网上的各种变化。
即使在Internet暂时出现堵塞的情况下,TCP也能够保证通信的可靠.Internet是一个庞大的国际性网络,网路上的拥挤和空闲时间总是交替不定的,加上传送的距离也远近不同,所以传输数据所用时间也会变化不定。
TCP协议具有自动调整"超时值"的功能,能很好地适应Internet上各种各样的变化,确保传输数值的正确。
IP协议只保证计算机能发送和接收分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。
虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的。
只有两者的结合,才能保证Internet在复杂的环境下正常运行。
凡是要连接到Internet的计算机,都必须同时安装和使用这两个协议,因此在实际中常把这两个协议统称作TCP/IP协议。
TCP/IP协议除了TCP协议和IP协议,还包含物理接口和IP层之间的ARP/RARP协议,应用层的FTP协议﹑SMTP协议和BOOTP协议等,所用的这些协议构成Intenet的TCP/IP协议族。
2.SMTP的基本结构
SMTP(SimpleMailTransferProtocol)协议是为了保证电子邮件的可靠和高效传送。
TCP/IP协议的应用层中包含有SMTP协议,但事实上它与传输系统和机制无关,仅要求一个可靠的数据流通道。
它可以工作在TCP上,也可以工作在NCP,NITS等协议上。
在TCP上,它使用端口25进行传输。
SMTP的一个重要特点是可以在可交互的通信系统中转发邮件。
2.1SMTP的模型
SMTP提供了一种邮件传输的机制,当收件方和发件方都在一个网络上时,可以把邮件直传给对方;当双方不在同一个网络上时,需要通过一个或几个中间服务器转发。
SMTP首先由发件方提出申请,要求与接收方SMTP建立双向的通信渠道,收件方可以是最终收件人也可以是中间转发的服务器。
收件方服务器确认可以建立连接后,双发就可以开始通信。
下面是SMTP的模型示意图。
发件方SMTP向收件方发处MAIL命令,告知发件方的身份;如果收件方接受,就会回答OK。
发件方再发出RCPT命令,告知收件人的身份,收件方SMTP确认是否接收或转发,如果同意就回答OK;接下来就可以进行数据传输了。
通信过程中,发件方SMTP与收件方SMTP采用对话式的交互方式,发件方提出要求,收件方进行确认,确认后才进行下一步的动作。
整个过程由发件方控制,有时需要确认几回才可以。
为了保证回复命令的有效,SMTP要求发件方必须提供接收方的服务器及邮箱。
邮件的命令和答复有严格的语法定义,并且回复具有相应的数字代码。
所有的命令由ASCII码组成。
命令代码是大小写无关的,如MAIL和mail﹑mAIL是等效的。
2.2SMTP的基本命令
SMTP定义了14个命令,它们是:
HELO
MAILFROM:
RCPTTO:
DATA
RSET
SENDFROM:
SOMLFROM:
SAMLFROM:
VRFY
EXPN
HELP[]
NOOP
QUIT
TURN
其中使得SMTP工作的基本的命令有7个,分别为:
HELO﹑MAIL﹑RCPT﹑DATA﹑REST﹑NOOP和QUIT.下面分别介绍如下。
HELO--发件方问候收件方,后面是发件人的服务器地址或标识。
收件方回答OK时标识自己的身份。
问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。
MAIL--这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。
它也用来当邮件无法送达时,发送失败通知。
为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的。
这个命令会清空有关的缓冲区,为新的邮件做准备。
RCPT--这个命令告诉收件方收件人的邮箱。
当有多个收件人时,需要多次使用该命令,每次只能指明一个人。
如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。
如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。
DATA--收件方把该命令之后的数据作为发送的数据。
数据被加入数据缓冲区中,以单独一行是"."的行结束数据。
结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。
如果传送接受,接收方回复OK。
REST--这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据,发件人数据和待传送的数据都必须清除,接收放必须回答OK.
NOOP--这个命令不影响任何参数,只是要求接收放回答OK,不会影响缓冲区的数据。
QUIT--SMTP要求接收放必须回答OK,然后中断传输;在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。
发件方在发出这个命令并收到OK答复前,也不得中断连接。
下面是SMTP答复中用到的代码和含义:
500Syntaxerror,commandunrecognized
[Thismayincludeerrorssuchascommandlinetoolong]
501Syntaxerrorinparametersorarguments
502Commandnotimplemented
503Badsequenceofcommands
504Commandparameternotimplemented
211Systemstatus,orsystemhelpreply
214Helpmessage
[Informationonhowtousethereceiverorthemeaningofa
particularnon-standardcommand;thisreplyisusefulonlytothehumanuser]
220Serviceready
221Serviceclosingtransmissionchannel
421Servicenotavailable,closingtransmissionchannel
[Thismaybeareplytoanycommandiftheserviceknowsitmustshutdown]
250Requestedmailactionokay,completed
251Usernotlocal;willforwardto
450Requestedmailactionnottaken:
mailboxunavailable
[E.g.,mailboxbusy]
550Requestedactionnottaken:
mailboxunavailable
[E.g.,mailboxnotfound,noaccess]
451Requestedactionaborted:
errorinprocessing
551Usernotlocal;pleasetry
452Requestedactionnottaken:
insufficientsystemstorage
552Requestedmailactionaborted:
exceededstorageallocation
553Requestedactionnottaken:
mailboxnamenotallowed
[E.g.,mailboxsyntaxincorrect]
354Startmailinput;endwith.
554Transactionfailed
最后,让我们看一个RFC821中给出的例子。
这封信是Smith在主机Alpha.ARPA发给主机Beta.ARPA上的
Jones,Green和Brown.并且假定两台主机在同一个网络上。
S:
MAILFROM:
R:
250OK
S:
RCPTTO:
R:
250OK
S:
RCPTTO:
R:
550Nosuchuserhere
S:
RCPTTO:
R:
250OK
S:
DATA
R:
354Startmailinput;endwith.
S:
Blahblahblah...
S:
...etc.etc.etc.
S:
.
R:
250OK
邮件最后被对方接受。
3.电子邮件的工作原理
电子邮件与普通邮件有类似的地方,发信者注明收件人的姓名与地址(即邮件地址),发送方服务器把邮件传到收件方服务器,收件方服务器再把邮件发到收件人的邮箱中。
如下图所示:
更进一步的解释涉及到以下几个概念:
MUA--MailUserAgent,邮件用户代理,帮助用户读写邮件;
MTA--MailTransportAgent,邮件传输代理,负责把邮件由一个服务器传到另一个服务
器或邮件投递代理;
MDA--MailDeliveryAgent,邮件投递代理,把邮件放到用户的邮箱里。
整个邮件传输过程如下:
目前使用的SMTP协议是存储转发协议,意味着它允许邮件通过一系列的服务器发送到最终目的地。
服务器在一个队列中存储到达的邮件,等待发送到下一个目的地。
下一个目的地可以是本地用户,或者是另一个邮件服务器,如下图所示。
如果下游的服务器暂时不可用,MTA就暂时在队列中保存信件,并在以后尝试发送。
4.电子邮件的信头结构及分析
4.1邮件的结构
在最高层,邮件的结构是非常简单的,用户从终端机上看到的邮件格式一般为:
1.From:
user1@
2.To:
user2@
3.Subject:
Explainationofmailformat
4.Date:
Thu,1Apr1999.10:
00:
00GMT
5.Hi,Jack
7.Thismailistoexplainyouthemailformat
8.----
9.Thanks
10.Bob
其中,1~~4行称作信件信头(messageheader)6~~10行描述信件要表达的内容,称为信体(messagebody)。
第5行是空行,根据RFC822的要求,信头和信体之间必须加入一空行。
[i]信头通常包含字段From,To,Subject和Date,有的邮件还包含cc,bcc等字段。
4.2邮件的信头
事实上,邮件在传输过程中,服务器要把它打包成一个数据对象,包括上面的信件和一个信封。
邮件的投递是依靠信封上的地址或信封信头(envelopaddress或envelopheader),而不是上面讲的信件上的地址。
从表面上看,一封邮件是从发件人的机器直接传送到收件人的机器,但通常这并不正确,一封邮件发送和接受过程至少要经过四台计算机。
参考下图所示。
用户通常在自己的电脑前编写阅读邮件,我们把它叫做客户端(client1~~4)。
大部分组织里,都是用一台专门的机器处理邮件,称作邮件服务器(SMTP1,SMTP2).如果用户是从家里拨号上网,那末邮件服务器是ISP提供的。
当某个用户在自己的电脑Client1前编写完一个邮件,然后把它发送到他的ISP的邮件服务器SMTP1。
此时她的机器已经完成了所有的工作,但邮件服务器SMTP1还必须想法把邮件发送到目的地。
SMTP1通过阅读信头或信封上的地址,找到收件认得邮件服务器SMTP2,然后与该服务器建立连接,把邮件发到收件人的服务器上,等待收件人来取阅。
下面我们将通过一个例子说明整个邮件传送过程及邮件的信头变化。
假设发件人的名字叫Sender,email地址是sender@使用的电脑名字叫client1,IP地址是[111.11.1.1](假设的地址)。
收件人的名字叫receipt,email地址是receipt@,使用的电脑的名字叫client2,IP地址是[222.22.2.2](假设的地址)。
当邮件编辑完传送给其邮件服务器时,邮件的信头格式为:
From:
sender@
To:
receipt@
Date:
Tue,Mar18199815:
36:
24GMT
X-mailer:
Sendmail8.9.0
Subject:
Greetings
当邮件服务器把邮件传到接收方的服务器时,接受方服务器会在信头上记录下有关的计算机信息,邮件的信头变成:
Received:
from([111.11.1.1])by(8.8.5)id004A21;Tue,Mar18199815:
37:
24GMT
From:
sender@
To:
receipt@
Date:
Tue,Mar18199815:
36:
24GMT
Message-Id:
X-mailer:
Sendmail8.9.0
Subject:
Greetings
当收件人服务器把邮件接收并存初下来,等待收件人来阅读时,邮件的信头将会再加入一条记录:
Received:
from([111.11.1.0])by(8.8.5/8.7.2)withESMTPidLAA20869;Tue,Mar18199815:
39:
44GMT
Received:
from([111.11.1.1])by(8.8.5)id004A21;Tue,Mar18199815:
37:
24GMT
From:
sender@
To:
receipt@
Date:
Tue,Mar18199815:
36:
24GMT
Message-Id:
X-mailer:
Sendmail8.9.0
Subject:
Greetings
上面整个记录就将是收件人看到的完整的邮件信头。
让我们逐行看一下信头中各行的含义:
Received:
from([111.11.1.0])by(8.8.5/8.7.2)withESMTPidLAA20869;Tue,Mar18199815:
39:
44GMT
这封信是从一台自称为的机器上接收的;这台机器的IP地址是[111.11.1.0],真实名字就是标称名字;接收方的机器名称是,运行的邮件服务器是Sendmail,版本(8.8.5/8.7.2)。
接收方机器给邮件的编号是ESMTPidLAA20869,接收到的时间是Tue,Mar18199815:
39:
44GMT。
Received:
from([111.11.1.1])by(8.8.5)id004A21;Tue,Mar18199815:
37:
24GMT
这条记录表明信件是由机器(IP地址是[111.11.1.1])在Tue,Mar18199815:
37:
24GMT交给,并赋给编号id004A21。
From,TO,Date和Subject都易于理解,分别指明发件人,收件人,信件编辑日期及信件主题。
Message-Id:
这是由发件方邮件服务器赋给这封邮件的编号。
与其它编号不同,这个编号自始至终跟随邮件。
第二章OPENRELAY的原理及测试
1.OPENRELAY的原理
由于技术的原因,在80年代前,网络还不是很健全,机器之间很少能直接对话发送邮件,人们必须得找出一条有效的连接通路来,然后信件沿着通路一步一步传送到目的地。
SMTP协议中就明确指出当邮件在不同的网络间传送时,需要借助中间服务器的RELAY。
邮件在收件方和发件方之间会经过毫不相干的第三方服务器,这就是邮件转发(RELAY)。
如下图所示:
图中的MAILSERVER是可以对要求转发的邮件进行限制的,如只转发来自某个域的邮件或来自于某些IP得邮件。
如果转发没有任何限制,就被称为OPENRELAY或THIRDPARTYRELAY。
从历史上看,relay曾经发挥过重要作用。
而且当时这些工作主要靠手工来做,就像我们今天通过邮局发一封信一样。
假如我想从沈阳发一封信件到深圳,我再信封上写好收信地址深圳,邮局就需要找到定义的运送路线:
沈阳,北京,郑州,长沙,广州,深圳。
甚至还要长一些。
其中很重要一点是每一个中继站都能很好的理解这封信将被送到哪里,下一个接收站是谁。
在电子邮件里,这就相当于每个中继服务器清楚下一个服务起是谁,这就是邮件的转发。
目前,正常邮件转发已经不再必要,相反,无限制转发常常被发送垃圾邮件的人利用,隐藏真实的邮件来源,让别人以为是从另外的ISP发出的信件;同时,也把大量的处理工作转移到别人机器上。
由于前面提到的历史的原因,最初的绝大多数邮件服务器都允许OPENRELAY的。
今天,大部分邮件服务器升级版本已经在缺省设置中关闭了OPENRELAY,如Sendmail从8.9.3版本开始,ExchangeServer从5.5版本开始关闭了openrelay。
有的服务器虽然没有相应的升级版本,也都提供了关闭openrelay的方法,如在NOTESSERVER的配置文件notes.ini中加入一行:
SMTPMTA_REJECT_RELAYS=1。
但由于很多服务器管理员的疏忽而没能及时的修补这些安全漏洞,被利用来转发垃