這部分內(nèi)容相對其它部分來說具有更多原理性內(nèi)容,主要討論郵件是如何從一點傳輸?shù)搅硗庖稽c的細(xì)節(jié)。你不需要理解每一句話,但是熟悉這方面的內(nèi)容有助于在郵件傳輸出現(xiàn)奇怪現(xiàn)象時弄明白問題所在。由于垃圾電子郵件發(fā)送者常常故意制造一些奇怪的情況以掩飾自己的身份,因此能理解這些奇怪的現(xiàn)象對對付這些家伙是非常有用的。
為了在網(wǎng)絡(luò)上傳輸數(shù)據(jù), 計算機網(wǎng)絡(luò)協(xié)議使用了稱為端口的訪問入口,你可以將端口看做是一個通道,通過它計算機可以監(jiān)聽網(wǎng)絡(luò)通信以提供服務(wù)。為了同時監(jiān)聽多個通信,計算機需要有使用端口號碼標(biāo)識多個不同的端口以區(qū)別這些通信。而和電子郵件傳輸相關(guān)的端口是25。
MAIL FROM命令標(biāo)識開始郵件傳輸,含義是'我有從某人發(fā)送來的郵件',該命令后跟的地址就是所謂的u201c信封地址u201d(在后面我們將深入討論),信封from地址不一定是發(fā)送者自己的地址。這個明顯的安全漏洞是不可避免的(因為接收者并不知道發(fā)送者機器上有哪些地址),但是在特定的情況下這又是一個有用處的特色。
RCPT TO和MAIL FROM是相輔相成的。其指定郵件接收者。通過多個RCPT TO命令一個郵件可以被發(fā)送給多個接收者。(在后面的郵件中繼部分將解釋該特色可能針對某些不安全的系統(tǒng)濫用)。該命令后跟的地址稱為'envelope to'地址。其指定了郵件將被投遞給哪些用戶,而和信件中的To:指定的地址沒有關(guān)系。
DATA命令指示開始實際的郵件內(nèi)容傳輸。DATA命令后輸入的任何內(nèi)容都被看做是郵件的一部分。而格式并沒有任何限制。以一個英文單詞加冒號開始的行一般被郵件程序看做是郵件頭。以英文句號符號(.)開始的行被認(rèn)為是郵件內(nèi)容結(jié)束。
QUIT命令終止連接。
SMTP協(xié)議規(guī)范定義在RFC 821中。
非正常情況
上面的例子有些過于簡單。上面的例子有一個假設(shè)前提:兩個組織的郵件服務(wù)器相互之間能直接訪問,而不需要經(jīng)過代理、 防火墻等安全設(shè)備。這在當(dāng)前Internet環(huán)境下情況往往是這樣的。但由于安全對于某些組織來說非常重要,而且網(wǎng)絡(luò)或組織可能變得越來越龐大,情況就不那么簡單了。對于具有代理型 防火墻系統(tǒng)的郵件傳輸來說,區(qū)別就在于在郵件的頭中多了一次轉(zhuǎn)發(fā)過程的記錄,也就是郵件首先從發(fā)送者郵件服務(wù)器發(fā)送到防火墻上,然后再從防火墻發(fā)送到目的郵件服務(wù)器。
四、郵件中繼
出現(xiàn)郵件中繼是由于歷史的原因,使用郵件中繼是有它的好處的。到八十年代末期,很多網(wǎng)絡(luò)中的計算機都不是直接通信來傳輸郵件。而是通過郵件路由來傳遞郵件,通過郵件路由服務(wù)器一步一步地進行郵件傳輸。這樣做是非常麻煩的,發(fā)送者往往需要手工指定一封郵件需要經(jīng)過哪些郵件路由服務(wù)器,比如需要從San Francisco發(fā)送一封郵件到New York,則需要在信封中添加如下內(nèi)容:
San Francisco,Sacramento,Reno,Salt Lake City,Rock Springs,Laramie,North Platte,Lincoln,Omaha,Des Moines,Cedar Rapids,Dubuque,Rockford,Chicago,Gary,Elkhart,Fort Wayne,Toledo,Cleveland,Erie,Elmira,Williamsport,Newark,New York City,Greenwich Village,#12 Desolation Row,Apt. #35,R.A. Zimmermann
如果從郵局工作人員的角度來考慮,這種模型是非常有用的。在Gary的郵局只需要知道如何和臨近的郵局Chicago和Elkhart通信,而無需消耗資源計算如何將郵件發(fā)送到New York(這時候就很清楚為什么這種模式對于郵件發(fā)送者來說非常糟糕,為什么這種方法被拋棄了)。但是這就是郵件被傳輸?shù)倪^程。因此服務(wù)器具有這樣的中繼的能力在那時是很重要的。