熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows服務器 >> 正文

新手入門:了解郵件服務與相關協議

2013-11-23 22:19:53  來源: Windows服務器 

  電子郵件是因特網上最為流行的應用之一如同郵遞員分發投遞傳統郵件一樣電子郵件也是異步的也就是說人們是在方便的時候發送和閱讀郵件的無須預先與別人協同與傳統郵件不同的是電子郵件既迅速又易於分發而且成本低廉另外現代的電子郵件消息可以包含超鏈接HTML格式文本圖像聲音甚至視頻數據我們將在本文中查看處於因特網電子郵件核心地位的應用層協議但在深入討論這些協議之前讓我們先概覽一下因特網郵件系統及其重要部件
  
  下圖展示了因特網郵件系統的高層概貌我們看到該系統由三類主要部件構成:用戶代理郵件服務器利簡單郵件傳送協議(simple Mail Transfer Protocol簡稱SMTP)我們將在這樣的上下文中說明每類部件:發信人Aice給收傳人Bob發送一個電於郵件消息用戶代理允許用戶閱讀回復轉寄保存和編寫郵件消息(電子郵件的用戶代理有時稱為郵件閱讀器不過我們在本文中避免使用這個說法)Alice寫完電子郵件消息後她的用戶代理把這個消息發送給郵件服務器再由該郵件服務器把這個消息排入外出消息隊列中當Bob想閱讀電子郵件消息時他的用戶代理將從他在其郵件服務器上的郵箱中取得郵件世紀年代後期圖形用戶界面(GUI)的電子郵件用戶代理變得流行起來它們允許用戶閱讀和編寫多媒體消息當前流行的用戶代理包括Ootlookfoxmail等公共域中還有許多基於文本的電於郵件用戶代理包括mailpine和elm
  
 
  圖 因特網電子郵件系統概貌

  
  郵件服務器構成了電子郵件系統的核心每個收信人都有一個位於某個郵件服務器上的郵箱(mailbox)Bob的郵箱用於管理和維護已經發送給他的郵件消息一個郵件消息的典型旅程是從發信人的用戶代理開始游經發信人的郵件服務器中轉到收信人的郵件服務器然後投遞到收信人的郵箱中當Bob想查看自己的郵箱中的郵件消息時存放該郵箱的郵件服務器將以他提供的用戶名和口令認證他Alice的郵件服務器還得處理Bob的郵件服務器出故障酌情況如果Alice的郵件服務器無法把郵件消息立即遞送到Bob的郵件服務器Aice的服務器就把它們存放在消息隊列(message queue)中以後再嘗試遞送這種嘗試通常每分鐘左右執行一次:要是過了若干天仍未嘗試成功該服務器就把這個消息從消息隊列中去除掉同時以另一個郵件消息通知發信人(即Alice)
  
  簡單郵件傳送協議(SMTP)是因特網電子郵件系統首要的應用層協議它使用由TCP提供的可靠的數據傳輸服務把郵件消息從發信人的郵件服務器傳送到收信人的郵件服務器跟大多數應用層協議一樣SMTP也存在兩個端:在發信人的郵件服務器上執行的客戶端和在收信人的郵件服務器上執行的服務器端SMlP的客戶端和服務器端同時運行在每個郵件服務器上當一個郵件服務器在向其他郵件服務器發送郵件消息時它是作為SMTP客戶在運行當一個郵件服務器從其他郵件服務器接收郵件消息時它是作為SMTP服務器在運行
  
  SMTP
  
  SMTP在RFC 中定義它的作用是把郵件消息從發信人的郵件服務器傳送到收信人的郵件服務器SMIP的歷史比HTTP早得多其RFC是在年編寫的而SMTP的現實使用又在此前多年就有了盡管SMTP有許多奇妙的品質(它在因特網上的無所不在就是見證)但卻是一種擁有某些古老特征的傳統戰術例如它限制所有郵件消息的信體(而不僅僅是信頭)必須是簡單的位ASCII字符格式這個限制在世紀年代早期是有意義的當時因特網傳輸能力不足沒有人在電子郵件巾附帶大數據量酌圖像音頻或視頻文件然而到了多媒體時代的今天這個限制就多少顯得局促了——它迫使二進制多媒體數據在文由SMTP傳送之前首先編碼成位ASCII文本;SMTP傳送完畢之後再把相應的位ASCII文本郵件消息解碼成二進制數據HTTP不需要對多媒體數據進行這樣的編碼解碼操作
  
  下面我們通過查看一個常見的情形來說明SMTP的基本操作假設Alice給Bob發送一個簡單的ASCII文本郵件消息:
  
  ●Alice調用自己的電子郵件用戶代理給出Bob的電子郵件地址(譬如說bob@someschooledu)寫好郵件內容然後讓用戶代理發送本郵件消息
  
  ●Alice的用戶代理把該郵件消息發送到她的郵件服務器中由郵件服務器把該消息排人某個消息隊列中
  
  ●運行在Aice的郵什服務器上的SMTP客戶端看到消息隊列中的這個郵件消息後打開一個到運行在Bob的郵件服務器主機上的SMTP服務器端的TCP連接
  
  ●經過最初的一些SMTP握手之後SMTP客戶把Aice的郵件消息發送到TCP連接上
  
  ●在Bob的郵件服務器主機上SMTP服務器收到這個郵件消息後把這個消息投遞到Bob的郵箱中
  
  ●Bob在方便的時候調用自己的電子郵件用戶代理閱讀該郵件消息
  
  圖展示了上述情形
  
 
  圖 alice的郵件服務器把郵件消息傳送到Bob的郵件服務器

  
  需注意的是SMTP通常不使用中間的郵件服務器主機中轉郵件即便源端和目的端郵件服務器主機位於地球上相反的位置也一樣假設Aiice的郵件服務器主機在香港Bob的郵件服務器主機在阿拉巴馬州那麼所建立的TCP連接將是這兩台服務器主機之間的連接具體地說如果Bob的郵件服務器不工作了那麼Aice發給Bob的郵件消息將存留在Alice的郵件服務器中等待新的嘗試而不會存放到某個中間的郵件服務器中
  
  下面查看SWPT把郵件消息從發送端郵件服務器傳送到接收端郵件服務器的具體過程我們將看到SMTP協議與人們用於面對面交互的禮儀之間有許多相似之處首先運行在發送端郵件服務器主機上的SMTP客戶發起建立一個到運行在接收端郵件服務器主機上的SMTP服務器端口號之間的TCP連接如果接收郵件服務器當前不在工作SMTP客戶就等待一段時間後再嘗試建立該連接這個連接建立之後SMTP客戶和服務器先執行一些應用層握手操作就像人們在轉手東西之前往往先自我介紹那樣SMTP客戶和服務器也在傳送信息之前先自我介紹一下在這個SMTP握手階段SMTP客戶向服務器分別指出發信人和收信人的電子郵件地址彼此自我介紹完畢之後客戶發出郵件消息SMTP可以指望由TCP提供的可靠數據傳輸服務把該消息無錯地傳送到服務器如果客戶還有其他郵件消息需發送到同一個服務器它就在同一個TCP連接上重復上述過程;否則它就指示TCP關閉該連接
  
  讓我們看一個客戶(C)和服務器(S)交互的例子客戶所在主機名為crepesfr服務器所在主機名為hamburgeredu前面標以C:的ASCII文本行是客戶發送到它的TCP套接字中的完整文本行前面標以S:的ASCII文本行是服務器發送到它的TCP套接字中的完整文本行以下傳輸腳本在TCP連接建立之後馬上發生:
  
  S: hamburgeredu
  C:HELO crepesfr
  S: Hello crepesfrpleased to meet you
  C:MAIL FROM:
  S: alice@crepesfr Serder OK
  C:RCPT TO:
  S: bob@hamburgereduRecipient OK
  C:DATA
  S: Enter mailend with on a line by its self
  C:Do you like ketchup?
  C:How about pickles?
  C:
  S; Message accepted for delivery
  C:QUIT
  S: hamburgeredu cloing connection
  
  在這個例子中客戶發送了一個從郵件服務器主機crepesfr到hamburgeredu的郵件消息信體內容為:Do you like ketchup?How about pickles?客戶總共發出了個命令分別為:HELOMAIL FROMRCPT TODATA和QUIT這些命令的含義是不言自明的服務器給每個命令發回應答其中每個應答都由應答碼和一些英語解釋(可選)構成這裡需指出的是SMTP使用持久連接也就是說如果發送郵件服務器有多個郵件消息需發送到同一個接收郵件服務器那麼所有這些消息可以在同一個TCP連接中發送對於其中的每一個消息客戶以一個新的HELO crepesfr命令開始整個消息發送過程但是QUIT命令要等到所有消息都發送完之後才發出
  
  我們可以嘗試使用nc工具直接與SMTP服務器進行對話首先指定使用SMTP端口號連接到某台郵件服務器主機這樣就在本地主機和該郵件服務器主機之間建立了一個SMTP使用的TCP連接登錄完畢之後應該立即收到來服務器的應答接著就可以在合適的時刻依次發出現SMTP命令了如果你連接到你朋友的MTP服務器就可以用這種方式向你的朋友發送郵件了(也就是說不必使用郵件用戶代理)當然你也可以使用更常見的telnet工具不過我發現用telnet建立起連接後常會遇到一些輸入方面的問題
  
  與HTTP的比較
  
  我們簡單地比較一下SMTP和HTTP這兩個協議都是用於從一台主機向另一台主機傳送文件;HTTP用於從web服務器向Web用戶代理(即浏覽器)傳送文件(或對象)SMTP用於從一個郵件服務器向另一個郵件服務器傳送文件(也就是電子郵件消息)在傳送文件時SMTP和持久HTTP都使用持久連接可見這兩個協議具有一些共同的特征不過它們之間的差別也是顯著的首先HTTP基本上是一個內拉式協議(pull protocol)——有人把信息上傳到web服務器中用戶則在方便的時候使用HTTP把這些信息從服務器上拉過來更確切地說TCP連接是由想要接收文件的主機發起的SMIP則基本上是一個外推式協議(pushProtoco)——發送端郵件服務器把文件推送給接收端郵件服務器更確切地說TCP連接是由想要發送文件的主機發起的
  
  SMTP和HTTP的第二個重要差別是SMTP要求包括信體部分在內的每個郵件消息都是位ASCII文本格式另外SMT
From:http://tw.wingwit.com/Article/os/fwq/201311/29826.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.