国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

郵局協議 (版本2)

2019-11-04 10:52:19
字體:
來源:轉載
供稿:網友

一:提要:

這篇RFC文檔提供了一種使工作站動態的從郵件服務器獲取郵件的簡單方法.它著重闡
述了符合ARPA標準的因特網的郵件協議,并為它的進一步發展提供了建議和討論.它是
RFC918的更新.你可以自由傳播這個文檔.
二:引言

郵局協議(版本2)的目的是為了讓用戶的工作站從郵件服務器獲取郵件.它也應該答應郵
件從工作站通過簡單郵件傳遞協議(SMTP)發送到郵件服務器.更多內容請參考POP2821[1]
和POP2822[2].
這個協議假定已經存在了一個可靠的數據流,比如由TCP協議或其它協議提供的數據流.
假如是TCP協議,則POP2協議服務器從109端口進行監聽.

三:系統模型和分析

當我們給一工作站分配一個ip地址從而把它當作一個因特網主機時,我們并不希望它包
含用戶的郵箱.我們希望有一個專門的有服務器來提供郵箱服務.
當然我們知道提供這種服務的機器的最重要的要求是它要健壯.一臺經常宕機的機器是
不適合作郵件服務器的.
POP2協議是為局域網(比如Ethernets)上工作站和服務器之間的短時延,高傳輸率的通訊
而設計的.POP2協議也可以工作在其它類型的網絡上.但假如網絡環境有了很大的改變,一個
新的協議可能是必要的.
  設想有一個用戶叫JohnSmith,它的計算機叫FIDO,它的郵件服務器叫DOG-HO
USE .則它的郵件地址是JSmith@DOG-HOUSE.ARPA( 而非JS
mith @FIDO.ARPA)
  這也就是說,郵件是在郵件服務器的郵箱中存放.!!!協議只不過提供了一種瀏覽郵箱
中郵件的機制.
用戶的工作站和服務器之間沒有任何的關系,用戶的工作站也不作為郵件地址的一部
分.
這是一個非常簡單的協議.它不是一個用戶界面.我們希望我們的計算機上有一個友好
的程序.但事實上,該協議一點也不友好.它的一個基本規則是:假如存在任何錯誤就斷開
連接.
POP2協議根本不對消息做任何處理,它也部分析消息頭(Date:,From:,To:,Cc:,or
Subject:).POP2協議之間的將消息從服務器傳到客戶工作站.

四: POP2協議

POP2協議是一系列命令和回答的集合.它來自ARPA網絡的其
它許多已經存在的協議.
   
   服務器必須監聽一個連接.當一個連接被建立時,服務器發送一個
greeting消息并等待用戶的其它命令.當命令到達時,服務器進行處理,
并給與用戶答復.
   客戶打開一個連接,等待greeting 消息,然后發送HELO命令,
包括用戶的姓名和密碼的參數給服務器進行認證從而獲取郵件.服務器返回默認
郵箱的郵件數目給用戶.
   用戶可以閱讀默認郵箱的郵件,也可以用FOLD 命令來選擇郵箱.
同樣,服務器將返回用戶所選擇的郵箱的郵件數.
用戶用READ命令開始閱讀郵件.READ命令應該包含一個參數,用來指定要
閱讀的郵件序號,默認值是當前郵件(即一個新文件夾打開時的第一條郵件).然后
,服務器開始向用戶發送郵件的內容.
用戶可以用RETR命令來請求獲得消息的目錄.

當所有的數據都被接收時,用戶發送確認消息.這就是ACKS,ACKD和NACK.

ACKS意味著"我已經成功的收到了消息,請將它保存在郵箱中".
ACKD意味著"我已經成功的收到了消息,請將它從郵箱中刪除".
NACK意味著"我沒有受到消息,請將它保存在郵箱中".
接收到ACKS和ACKD命令后,服務器將消息指針指向下一條消息;接收到NACK
命令后,消息指針保持不變.
所有情況下,服務器返回當前消息的內容.
用戶用QUIT命令關閉一個對話,服務器返回一個消息---OK.

正常的對話過程如下表示:

用戶服務器
等待連接
打開連接-->
<--服務器進入就緒狀態,等待命令
HELO命令和賬號.密碼-->
<--發送#13消息,等待命令
讀取#13消息-->
<--=537charactersinthatmessage
等待命令
RETR命令-->
<--(發送數據)
等待命令
ACKS消息-->
<--=0數據傳輸完畢
WaitforCommand
QUIT-->
<--+OK
關閉連接--><--關閉連接
等待連接(回到初始狀態)

參數
下面的參數有確定的含義:
user–用戶賬號
passWord–賬號密碼

mailbox–郵箱名(或文件夾名)
默認郵箱

TOPS-20系統
MAIL.TXT.1-fromloginDirectory
UNIX系統

/usr/spool/mail/user

/usr/user/Mail/inbox/*

"user"是由HELO命令提供的參數.

文件結束標志
文件結束標志是由一個回車符(CR)和換行符(LF)表示的.在文件中用"CRLF"表示.
這個標志在在命令和回答中都會用到.

消息長度
對READ命令和確認命令(ACKS,ACKD,NACK)的回答是下一個要傳遞的消息的長度,
包括所有消息字符.CRLF被認為是兩個字符.長度為零的消息意味著消息不存在或為
空.請求傳遞一個零長度的消息意味著關閉連接.這是在因特網標準RFC822和NVT-
ASCII中定義的.

郵件數
對HELO和FOLD命令的回答是被選郵箱中郵件的數目的統計.READ命令需要一個
參數來指定要閱讀的郵件.所有的數都用十進制來表示,并且從一開始.這意味著郵箱中
第一條郵件用"1"來表示.
這篇文檔中的所有數字都用十進制來表示.

轉義引用
一些情況下,參數中需要用非凡的字符,二這是語法所不答應的.例如:密碼中的一
個空格.為了做到這一點,我們需要用轉義會話.不幸的是,我們不得不采用讓人討厭的
字符.在本協議中,我們用反斜杠"/".參數中的一個空格字符需要用兩個字符來表示"/
空格".這種轉義引用只用在命令參數中,回答RETR命令的郵件數據不需要這種方法.

回答串
第一個字符必須時非凡指定的(如"+","-","=","#").緊跟的選項串可以是任意
值.


命令和回答的定義

命令和回答總匯

命令回答
---------------
HELOuserpassword+OK
FOLDmailbox-Error
READ[n]#xxx
RETR=yyy
ACKS
ACKD
NACK
QUIT

命令解釋

HELOuserpassword
HELO命令用來認證用戶.它的信息被服務器用來確定用戶對郵箱的使用權.
該命令的要害字是HELO,后面是用戶的賬號和密碼,然后是CRLF.
可能的應答:
"#nnn"nnn是默認郵箱的郵件數.
"-errorreport"錯誤報告并斷開連接.
FOLDmailbox
該命令選擇一個郵箱或一個文件夾.服務器必須判定用戶是否有權限訪問
該郵箱或文件夾.假如郵箱為空或不存在,消息數為0.該命令的要害字時"FOLD",
后面跟mailbox參數,然后是CRLF.
可能的應答:
"#nnn"nnn是郵箱中郵件總數.
READ[nnn]
READ命令開始傳遞數據.假如READ命令中未給參數,意味著讀取當前郵件.
一個READ命令首先設置郵件指針為參數值,然后服務器返回郵件長度.假如沒有郵件可讀,
返回的郵件長度等于零.假如郵件已經被ACKD命令刪除,也返回零長度.跟在READ命令后的
是RETR命令,READ命令,FOLD命令或QUIT命令.不要企圖用RETR命令來操作一個零長度的
郵件.該命令的要害字是"READ".接在后面的是郵件數參數和CRLF.
可能的應答:
"=ccc"ccc是對應的郵件的長度
RETR
該命令確定用戶已經做好接收郵件的預備.它必須跟一個確認命令.服務器
會斷開連接,假如發送一個長度為零的消息(例如一個不存在的消息).該命令的要害字是"
RETR",后面跟一個CRLF.
可能的應答:
數據流或關閉連接

ACKS
該命令確認用戶已經接收到郵件.該命令結束郵件數據的傳輸.郵件數據被保
存在郵箱中,郵件指針增加1.服務器返回下一個郵件數據長度或零(假如下一個郵件不存在
或已經被刪除).該命令的要害字是"ACKS",后跟CRLF
可能的應答:
"=ccc"ccc是下一個郵件的長度

ACKD
該命令確認用戶已經接收到郵件,結束郵件數據的傳輸,假如用戶有對郵箱的
寫權限則將對應的郵件從郵箱中刪除.事實上,只有在會話結束,郵箱被釋放或用戶選擇另
外一個郵箱時才會發生改變.假如用戶沒有對郵箱的寫權限,則郵箱不發生改變.服務器的應
答是相同,不管郵件是否被刪除.然后,服務器將郵件指針指向下一個郵件,并返回它的長度.
相應的,假如郵件不存在或已經被刪除,則返回零長度.該命令的要害字是"ACKD"然后是
CRLF.
可能的應答:
"=ccc"ccc是下一個郵件的長度

NACK
用戶用該命令向服務器報告它未收到數據.該命令結束郵件數據的傳送.將郵件數
據保存在郵箱中,保持郵件指針不變.服務器返回當前郵件的長度.因為當前郵件必然存在,
所以郵件長度是一個大于零的數.該命令的要害字是"NACK",然后是CRLF.
可能的應答:
"=ccc"ccc是當前郵件的長度.

QUIT
該命令表明用戶已經完成會話.服務器將發送一個"OK"應答給用戶,并關閉連接.
該命令的要害字是"QUIT",然后是CRLF.
可能的應答:
"+OK"并關閉連接



服務器回答

GREETING
任何一個連接被建立時,服務器都將發送該應答給用戶.該消息由一個加號,然后
是協議的名字(POP2),服務器的名字,文本,CRLF組成.
"+"
加號意味著成功的連接.后面跟文本和CRLF.
"-"
減號意味著連接失敗.和加號一樣,后面跟文本和CRLF.
"="
等號返回命令中指定的郵件的長度.后面跟一個數字,然后是文本和CRLF.
"#"
該符號返回指定郵箱或文件夾中的郵件總數.后面跟一個數字,然后是文
本和CRLF.


TIMEOUTS
任何一個類似的協議中都有TIMEOUTS.假如不想讓其中一方陷入無窮的等待
中.用戶希望較快的應答,因此應該由一個短的超時時間.它被稱作T1.
對一些服務器來說,應該有時間計算郵箱中的郵件數或郵件的長度或重整存
儲的數據以用來傳輸.因此,超時時間應該大于這些時間.在命令RETR中也應該考慮這個問
題.
服務企業不希望無期地等待用戶的下一個命令,因此服務企業由一個超時時間
T2.
當一個用戶給客戶機編一段程序,使它自動的給服務器發送命令時,可以很合理
的想象,此時服務器的T2時間應該很小.
相應的,假如是一個人在給服務器發送命令,服務器的T2時間應該很大.


討論

TOPS-20上的服務器的評價:
該情況下,郵箱是一個簡單的文件.信郵件被鏈接在文件后面.不同郵件間有
一個分割行.
這種服務器的非凡之處是它的刪除操作.只有當用戶擁有對文件的寫權限時,
才能進行該操作.要注重避免兩個問題:(1)阻止其它用戶對文件的寫操作;(2)防止意外刪除
用戶為看的郵件.


一個建議

當一個郵箱被選中時,假如用戶有寫權限,給郵箱重新起一個臨時名.這樣新郵件就
會被放在臨時文件中.對臨時郵箱進行所有的POP2操作.這樣當POP2會話結束或大卡另一個
郵箱時,任何為刪除的郵件會存在信郵箱文件夾中.

命令行和回答行的大小
命令行的最大長度時512字符(包括命令字和CRLF).
回答行的最大長度時512字符(包括+,-,=,#和CRLF).
郵件數據行的最大長度時1000字符(包括CRLF).
ISI已經將POP2協議作為服務器用于TOPS-20和Berkeley4.2Unix系統;作為客戶
機用于IBM-PC和Berkeley4.2Unix系統.

不足之處

POP2協議不檢查數據的內容,甚至不分析數據頭.
服務器中部存在郵件的任何狀態信息(例如:我們不從一個會話到另一個都發生了什
么)這樣服務器不知道那一個郵件是新郵件.

五:例子
例子1:
ClientServer
------------
Waitforconnection
Openconnection-->
<--+POP2USC-ISIF.ARPAServer
HELOPOSTELSECRET-->
<--#2messagesinyourmailbox
READ-->
<--=537charactersinmessage1
RETR-->
<--[dataofmessage1]
ACKD-->
<--=234charactersinmessage2
RETR-->
<--=234charactersinmessage2
RETR-->
<--[dataofmessage2]
ACKD-->
<--=0nomoremessages
QUIT-->
<--+OK,bye,bye
Closeconnection--><--Closeconnection
Gobacktostart

例子2:

ClientServer
------------
Waitforconnection
Openconnection-->
<--+POP2ISI-VAXA.ARPAserverhere
HELOsmithsecret-->
<--#35messages
FOLD/usr/spool/mail/smith-->
<--#27messages
READ27-->
<--=10123charactersinthatmessage
RETR-->
<--[dataofmessage27]
ACKS-->
<--=0nomoremessages
QUIT-->
<--+bye,callagainsometime.
Closeconnection--><--Closeconnection
Gobacktostart

例子3:

ClientServer
------------
Waitforconnection
Openconnection-->
<--+POP2ISI-VAXA.ARPAserverhere
HELOJonessecret-->
<--#0messages
READ-->
<--Closeconnection
Closeconnection-->
Gobacktostart



六:形式語法
1.選項及參數
<digit>=0123456789
<letter>=ABC...Z
abc...z
<punct>=!"#$%&'()*
+,-/:<=>?@
[]^_`{}~
<quote>=/
<any>=anyoneofthe128ASCIIcodes
<CR>=carriagereturn,code10
<LF>=linefeed,code13
<SP>=space,code32
<CRLF>=<CR><LF>
<PRint>=<letter><digit><punct><quote><any>
<char>=<print><SP>
<word>=<print><print><word>
<string>=<char><char><string>
<ld>=<letter><digit>
<ldh>=<letter><digit>-
<ldhs>=<ldh><ldh><ldhs>
<name>=<letter>[[<ldhs>]<ld>]
<host>=<name><name>.<host>
<user>=<word>
<password>=<word>
<mailbox>=<string>
<number>=<digit><digit><number>
<helo>=HELO<SP><user><SP><password><CRLF>
<fold>=FOLD<SP><mailbox><CRLF>
<read>=READ[<SP><number>]<CRLF>
<retr>=RETR<CRLF>
<acks>=ACKS<CRLF>
<ackd>=ACKD<CRLF>
<nack>=NACK<CRLF>
<quit>=QUIT<CRLF>
<ok>=+[<SP><string>]<CRLF>
<err>=-[<SP><string>]<CRLF>
<count>=#<number>[<SP><string>]<CRLF>
<greet>=+<SP>POP2<SP><host>[<SP><string>]<CRLF>
<length>==<number>[<SP><string>]<CRLF>
<command>=<helo><fold><read><retr>
<acks><ackd><nack><quit>
<reply>=<ok><err><count><length><greet>

2.用戶流程圖

^+BYE
Open-----
GreetClose
V-----
+-------+QUIT+-------+
CALL-------------->EXIT
+-------++-------+
^
Greet
-----
HELO
+---->+
#NNN^#NNN
----VV----
FOLD+-------+QUIT
+<---NMBR--------------------->+
+-------+^
^
#NNN
----
=CCCREAD
----
FOLD=CCC
V----
=CCC+--->+-------+QUIT
----^SIZE--------------------->+
READ+<---+-------+
^
=CCC
data----
----RETR
ack
V
+-------+
XFER
+-------+



3.服務器流程圖



+<----------------------+Close
-----
ListenClose
V
+-------++-------+
LSTNDONE
+-------++-------+
^
Open
-----
Greet

QUIT
V-----
+-------++BYE
AUTH--------------------->+
+-------+^

HELO
----
#NNN

QUIT
V-----
FOLD+--->+-------++BYE
----^MBOX--------------------->+
#NNN+<---+-------+^
^
READ
FOLD----
----=CCC
#NNNQUIT
V-----
READ+--->+-------++BYE
----^ITEM--------------------->+
=CCC+<---+-------+
^
RETR
ack----
----data
=CCC
V
+-------+
NEXT
+-------+
4.通信流程圖


+----+
CALL<------------------------------------------------------------+
LSTN^
+----+
Greet

+----------------------------------------------------->+
^QUIT
VV
+----++----++----+
CALLHELONMBREXIT
AUTH------->AUTHAUTH
+----++----++----+
#NNN+Bye

+------------------------------------>+
^QUIT
VV
+--->+----++----++----+
FOLD^NMBRREADSIZEEXIT
----MBOX------->MBOXMBOX
#NNN+<---+----++----++----+
^=CCC+Bye

FOLD+<--------++------------------->+
----^^QUIT
#NNNVV
+--->+-----++----++----+
READ^SIZERETRXFEREXIT
----ITEM------->ITEMITEM
=CCC+<---+-----++----++----+
^data

=CCCV+Bye
+----++----+
SIZEAckXFER
NEXT<-------NEXT
+----++----+


VVV
+-------+
EXIT-->+
DONE
+-------+


5.用戶策略表


STATE
-------+----------------------------------
INPUTCALLNMBRSIZEXFEREXIT
-------+----------------------------------
Greet21116
-------+----------------------------------
#NNN13116
-------+----------------------------------
=CCC11416
-------+----------------------------------
data11156
-------+----------------------------------
+Bye11116
-------+----------------------------------
Close11116
-------+----------------------------------
other11116
-------+----------------------------------
Timeout11116
-------+----------------------------------

用戶行為
1. 這是一個無用信息.發送"QUIT"命令,進入EXIT狀態.
2. (a)假如greeting成功,發送"HELO",進入NMBR狀態.
(b)否則,發送"QUIT",進入EXIT狀態.
3. 假如用戶選定文件夾且NNN>0,發送"READ",并進入SIZE狀態..
假如用戶選定文件夾且NNN=0,發送"QUIT",并進入EXIT狀態.
假如用戶重新選定文件夾,發送"FOLD",并返回NMBR狀態.
4. 假如用戶選定郵件且CCC>0,發送"RETR",并進入XFER狀態.
假如用戶選定郵件且CCC=0,發送"QUIT",并進入EXIT狀態.
假如用戶重新選定郵件,發送"READ",并進入SIZE狀態.
5. 假如用戶想保存郵件,發送"ACKS",并進入SIZE狀態.
假如用戶想刪除郵件,發送"ACKD",并進入SIZE狀態.
假如用戶想重發郵件,發送"NACK",并進入SIZE狀態.
6.關閉連接.

6.服務器策略表
STATE
-------+-----------------------------------------
INPUTLSTNAUTHMBOXITEMNEXTDONE
-------+-----------------------------------------
Open211111
-------+-----------------------------------------
HELO131111
-------+-----------------------------------------
FOLD115511
-------+-----------------------------------------
READ116611
-------+-----------------------------------------
RETR111711
-------+-----------------------------------------
ACKS111181
-------+-----------------------------------------
ACKD111181
-------+-----------------------------------------
NACK111181
-------+-----------------------------------------
QUIT144411
-------+-----------------------------------------
Close111119
-------+-----------------------------------------
other111111
-------+-----------------------------------------
Timeout11111
-------+-----------------------------------------
服務器行為
1. 這是一個無用信息.發送"-error",并斷開連接.
2. 發送greeting,進入AUTH狀態.
3. 假如是認證用戶,發送"#nnn",進入MBOX狀態.
否則,發送"-error",并斷開連接.
4.發送“+Bye”,進入DONE狀態.
5.發送"+NNN",進入MBOX狀態.
6. 發送"=CCC",進入ITEM狀態.
7. 假如郵件存在,傳輸數據,進入NEXT狀態.否則,斷開連接.
8. 回答命令ACKS/ACKD/NACK,進入ITEM狀態.
9. 斷開連接.
七:感謝
非常感謝RFC918的郵局協議的第一版和愛好小組提供的POP2協議的草案.
八:參考文獻:
[1]Postel,J.,"SimpleMailTransferProtocol",RFC821,
USC/InformationSciencesInstitute,August1982.

[2]Crocker,D.,"StandardfortheFormatofARPA-InternetText
Messages",RFC822,UniversityofDelaware,August1982.
[3]Reynolds,J.K.,"PostOfficeProtocol",RFC918,USC/Information
SciencesInstitute,October1984.

[4]Reynolds,J.K.,andJ.Postel,"AssignedNumbers",RFC923,
USC/InformationSciencesInstitute,October1984.




發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柘城县| 石景山区| 修文县| 凤阳县| 红安县| 武夷山市| 四川省| 佛教| 曲松县| 桦川县| 宽城| 佛坪县| 洛宁县| 德化县| 施甸县| 常德市| 仪陇县| 渭源县| 甘肃省| 延长县| 合川市| 惠来县| 图片| 崇义县| 始兴县| 花莲县| 上蔡县| 雷州市| 合山市| 滦南县| 宜宾市| 吉木萨尔县| 南城县| 郓城县| 罗平县| 焦作市| 米泉市| 虹口区| 东兰县| 溆浦县| 岳池县|