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

字號(hào):

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