網(wǎng)絡(luò)協(xié)議基礎(chǔ)知識SMTP協(xié)議和UDP協(xié)議

字號:

SMTP協(xié)議的命令和應(yīng)答
    從前面的通訊模型可以看出SMTP協(xié)議在發(fā)送SMTP和接收SMTP之間的會話是靠發(fā)送SMTP的SMTP命令和接收SMTP反饋的應(yīng)答來完成的。在通訊鏈路建立后,發(fā)送SMTP發(fā)送MAIL命令指令郵件發(fā)送者,若接收SMTP此時可以接收郵件則作出OK的應(yīng)答,然后發(fā)送SMTP繼續(xù)發(fā)出RCPT命令以確認郵件是否收到,如果接收到就作出OK的應(yīng)答,否則就發(fā)出拒絕接收應(yīng)答,但這并不會對整個郵件操作造成影響。雙方如此反復(fù)多次,直至郵件處理完畢。SMTP協(xié)議共包含10個SMTP命令,列表如下:
    SMTP命令命令說明
    HELLO<domain><CRLF>識別發(fā)送方到接收SMTP的一個HELLO命令
    MAILFROM:<reverse-path><CRLF><reverse-path>為發(fā)送者地址。此命令告訴接收方一個新郵件發(fā)送的開始,并對所有的狀態(tài)和緩沖區(qū)進行初始化。此命令開始一個郵件傳輸處理,最終完成將郵件數(shù)據(jù)傳送到一個或多個郵箱中。
    RCPTTO:<forward-path><CRLF><forward-path>標(biāo)識各個郵件接收者的地址
    DATA<CRLF>
    接收SMTP將把其后的行為看作郵件數(shù)據(jù)去處理,以<CRLF>.<CRLF>標(biāo)識數(shù)據(jù)的結(jié)尾。
    REST<CRLF>退出/復(fù)位當(dāng)前的郵件傳輸
    NOOP<CRLF>要求接收SMTP僅做OK應(yīng)答。(用于測試)
    QUIT<CRLF>要求接收SMTP返回一個OK應(yīng)答并關(guān)閉傳輸。
    VRFY<string><CRLF>驗證指定的郵箱是否存在,由于安全因素,服務(wù)器多禁止此命令。
    EXPN<string><CRLF>驗證給定的郵箱列表是否存在,擴充郵箱列表,也常禁止使用。
    HELP<CRLF>查詢服務(wù)器支持什么命令
    注:<CRLF>為回車、換行,ASCII碼分別為13、10(十進制)。
    SMTP協(xié)議的每一個命令都會返回一個應(yīng)答碼,應(yīng)答碼的每一個數(shù)字都是有特定含義的,如第一位數(shù)字為2時表示命令成功;為5表失?。?表沒有完成。一些較復(fù)雜的郵件程序利用該特點,首先檢查應(yīng)答碼的首數(shù)字,并根據(jù)其值來決定下一步的動作。下面將SMTP的應(yīng)答碼列表如下:
    應(yīng)答碼說明
    501參數(shù)格式錯誤
    502命令不可實現(xiàn)
    503錯誤的命令序列
    504命令參數(shù)不可實現(xiàn)
    211系統(tǒng)狀態(tài)或系統(tǒng)幫助響應(yīng)
    214幫助信息
    220<domain>服務(wù)就緒
    221<domain>服務(wù)關(guān)閉
    421<domain>服務(wù)未就緒,關(guān)閉傳輸信道
    250要求的郵件操作完成
    251用戶非本地,將轉(zhuǎn)發(fā)向<forward-path>
    450要求的郵件操作未完成,郵箱不可用
    550要求的郵件操作未完成,郵箱不可用
    451放棄要求的操作;處理過程中出錯
    551用戶非本地,請嘗試<forward-path>
    452系統(tǒng)存儲不足,要求的操作未執(zhí)行
    552過量的存儲分配,要求的操作未執(zhí)行
    553郵箱名不可用,要求的操作未執(zhí)行
    354開始郵件輸入,以"."結(jié)束
    554操作失敗
    UDP協(xié)議的幾個基礎(chǔ)特性
    (1) UDP是一個無連接協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應(yīng)用程序生成數(shù)據(jù)的速度、計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應(yīng)用程序每次從隊列中讀一個消息段。
    (2) 由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務(wù)機可同時向多個客戶機傳輸相同的消息。
    (3) UDP信息包的標(biāo)題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包的額外開銷很小。
    (4) 吞吐量不受擁擠控制算法的調(diào)節(jié),只受應(yīng)用軟件生成數(shù)據(jù)的速率、傳輸帶寬、源端和終端主機性能的限制。