網(wǎng)絡(luò)工作組 Brian Kantor (U.C. San Diego)
Request for Comments: 977 Phil Lapsley (U.C. Berkeley)
1986年2月
網(wǎng)絡(luò)新聞傳輸協(xié)議
網(wǎng)絡(luò)新聞傳輸?shù)幕緲?biāo)準(zhǔn)
備忘錄描述
NNTP定義了一個(gè)可以在ARPA網(wǎng)絡(luò)中進(jìn)行可靠的新聞傳輸?shù)幕緟f(xié)議,其中包括新聞的分發(fā),查詢新聞,獲取新聞,發(fā)布新聞等。在NNTP中,所有的新聞被存儲(chǔ)在一個(gè)中央數(shù)據(jù)庫(kù)中,并且允許訂閱用戶僅僅閱讀那些他們關(guān)心的新聞,此外,該協(xié)議還提供新聞的索引,前后文參照,刪除過(guò)期的文章等功能。這篇備忘錄僅僅提供了一個(gè)在ARPA網(wǎng)絡(luò)上傳輸新聞的協(xié)議草案,希望有更多的人能夠參與討論,并且提供更好的建議。本備忘錄可以被任意復(fù)制和修改。
1. 導(dǎo)言
多年以前,ARPA網(wǎng)絡(luò)就已經(jīng)支持公告,資料和數(shù)據(jù)在數(shù)以千計(jì)的網(wǎng)絡(luò)使用者中進(jìn)行及時(shí)的傳播,我們稱之為“新聞組”,它被用來(lái)及時(shí)的傳播那些共同感興趣的事物,比如軟件的錯(cuò)誤,新產(chǎn)品的討論,尖端技術(shù)和關(guān)鍵設(shè)計(jì),此外還可以討論那些專業(yè)的計(jì)算機(jī)工作者所關(guān)心的問(wèn)題。“新聞組”在它的使用者中正越來(lái)越流行。
現(xiàn)在有兩種實(shí)現(xiàn)“新聞組”的技術(shù):網(wǎng)絡(luò)郵件系統(tǒng),和USENET新聞組系統(tǒng)。
1.1 網(wǎng)絡(luò)郵件系統(tǒng)
網(wǎng)絡(luò)郵件系統(tǒng)中有一個(gè)已經(jīng)訂閱了這個(gè)新聞組的所有用戶的電子郵件地址列表和回復(fù)列表。系統(tǒng)會(huì)給列表上的每一個(gè)郵箱發(fā)送一份新聞的拷貝。當(dāng)列表中有過(guò)多的地址時(shí),這種方式是很低效的,因?yàn)榘l(fā)送給訂閱者郵件會(huì)占用大量的帶寬,CPU資源和目的主機(jī)的磁盤空間,并且系統(tǒng)自身的維護(hù)也是一個(gè)大問(wèn)題如:用戶從一個(gè)主題換到其他的主題;新用戶的加入和老用戶的離開;服務(wù)器服務(wù)內(nèi)容的增加,減少。
1.2 USENET新聞組系統(tǒng)
克服網(wǎng)絡(luò)郵件系統(tǒng)耗費(fèi)資源的方法就是將新聞存放在中央數(shù)據(jù)庫(kù)而不是訂閱者的郵箱里面。USENET系統(tǒng)正是這樣做的,它將新聞存放在一個(gè)中央存儲(chǔ)庫(kù)中(往往是一些分門別類的目錄),提供一個(gè)程序允許訂閱者僅僅閱讀那些他們關(guān)心的新聞,此外,還提供新聞的索引,前后文參照,刪除過(guò)期的文章等功能
1.3 中央存儲(chǔ)庫(kù)
因?yàn)橛写罅康闹鳈C(jī)同時(shí)通過(guò)快速局域網(wǎng)(往往是以太網(wǎng))連接上存儲(chǔ)庫(kù),所以它被設(shè)計(jì)成能跟好的把新聞發(fā)送到一個(gè)或多個(gè)主機(jī)上面,并且允許進(jìn)行服務(wù)器/客戶端模式的連接訪問(wèn)。
1.4 中央新聞服務(wù)器
要做到這樣高效的實(shí)現(xiàn)需要一個(gè)中央計(jì)算機(jī)系統(tǒng)為局域網(wǎng)上的其他系統(tǒng)提供新聞服務(wù)。這樣的一個(gè)系統(tǒng)就是新聞服務(wù)器,它所要做的就是進(jìn)行新聞和新的索引的搜集,使網(wǎng)絡(luò)上的每個(gè)讀者都能及時(shí)的讀到新聞公告。因?yàn)榇嬖诒姸嗟姆?wù)器,這種存儲(chǔ)方式是很有效的。同樣,這允許工作站用較少的存儲(chǔ)空間參與新聞組,不存在由于下載大量的消息而對(duì)磁盤空間造成的壓力。
我們聽到了使用IBIS,分布式或者網(wǎng)絡(luò)文件系統(tǒng)作為中央服務(wù)器的傳聞。當(dāng)分布式的服務(wù)器工作在一組運(yùn)行著相同操作系統(tǒng)的配置差不多的計(jì)算機(jī)上的時(shí)候確實(shí)表現(xiàn)良好,但是不同的客戶端,特別是不同操作系統(tǒng)上的客戶端要求連接時(shí),就不能接受了。現(xiàn)在幾乎沒有(或許有)分布或者網(wǎng)絡(luò)文件系統(tǒng)可以提供一般的TCP連接服務(wù),特別是考慮到存在很多不同硬件體系和不同操作系統(tǒng)的情況。
NNTP定義了一個(gè)基于可靠連接(使用TCP)的,客戶/服務(wù)器模式的,可以發(fā)送、查詢、獲取、發(fā)布新聞組文章的協(xié)議。新聞僅需存放在一個(gè)中央數(shù)據(jù)庫(kù)中,用戶在其他的主機(jī)上通過(guò)LAN連接到新聞組服務(wù)器主機(jī)上,就可以讀取新聞消息。
NNTP的新聞文章(文本)規(guī)范模型在RFC850中定義,那描述了USENET新聞組系統(tǒng)。無(wú)論如何,NNTP在組織結(jié)構(gòu)、內(nèi)容、新聞文章的存儲(chǔ)方面處理滿足了一些要求。因此我們相信他能夠輕易的匹配其他的非USENET新聞組系統(tǒng)。
具有特色的是,NNTP服務(wù)器在主機(jī)上以后臺(tái)模式運(yùn)行,而且可以接受來(lái)自LAN上其他主機(jī)的連接請(qǐng)求。并能工作在由幾個(gè)計(jì)算機(jī)組成的小系統(tǒng)(比如工作站),以及大的中心系統(tǒng)中。
1.5 輔助新聞服務(wù)器
在有很多用戶和機(jī)器的情況下(或許是大學(xué)或者大的工業(yè)機(jī)構(gòu)),輔助新聞服務(wù)器會(huì)被使用。這種服務(wù)器,或者叫做“奴隸”(譯者注:原文如此)服務(wù)器工作在各自的計(jì)算機(jī)系統(tǒng)中,為本地用戶提供可靠的新聞組閱讀請(qǐng)求的中轉(zhuǎn)和提供最新的新聞組文章緩存。
具有代表性的是,當(dāng)一個(gè)客戶端要獲得新聞組服務(wù)的時(shí)候,會(huì)首先和當(dāng)?shù)氐男侣劷M服務(wù)端口建立連接,如果連接失敗則表示這個(gè)服務(wù)器有問(wèn)題。這時(shí),輔助新聞服務(wù)器會(huì)選擇是關(guān)閉新聞服務(wù),還是允許局域網(wǎng)上的主機(jī)去和主新聞服務(wù)器進(jìn)行連接。
在工作站或者其他小的系統(tǒng)上,直接連接到主服務(wù)器也許是正常的操作方式。
這份規(guī)范并不適用于輔助新聞服務(wù)器,我們僅建議在大型的局域網(wǎng)上合理的增加NNTP服務(wù)器作為從屬服務(wù)器來(lái)提高系統(tǒng)運(yùn)轉(zhuǎn)性能
1.6 新聞組的發(fā)送
NNTP使用命令行提供一個(gè)在協(xié)作的多個(gè)主機(jī)間交換信息(文章項(xiàng)目)的簡(jiǎn)單方法。一個(gè)想得到新聞組文章的拷貝并且已經(jīng)與局域網(wǎng)或者其他高速網(wǎng)絡(luò)建立連接的主機(jī)會(huì)發(fā)現(xiàn)NNTP使用了比傳統(tǒng)的傳送方法(比如UUCP,譯者注:UNIX間的文件拷貝)更高效的新聞發(fā)送方法。
在傳統(tǒng)的新聞傳送方法中,新聞從一個(gè)主機(jī)發(fā)送給所有他知道的主機(jī),這些主機(jī)再把文章轉(zhuǎn)發(fā)給所有他知道的主機(jī),就像水流一樣。顯然,這種使已經(jīng)得到新聞的主機(jī)再次接收無(wú)用新聞的方法會(huì)浪費(fèi)時(shí)間和通信資源,但是因?yàn)檫@種傳送機(jī)制是基于單向事務(wù)而非交互式(比如UNIX世界中的UUCP),文章僅僅是單向的被發(fā)送,然后接收主機(jī)簡(jiǎn)單的丟棄掉重復(fù)的文章,所以發(fā)送時(shí)間被減少了。這在通信協(xié)議被限制的年代確實(shí)是一個(gè)正確的選擇。
使用NNTP,主機(jī)間交換新聞組文章使用一個(gè)交互機(jī)制以決定文章是否應(yīng)該傳送。當(dāng)主機(jī)希望得到最新的消息,或者要需要發(fā)送新消息時(shí),會(huì)使用NNTP向周圍的一個(gè)或多個(gè)主機(jī)進(jìn)行聯(lián)系。第一個(gè)動(dòng)作會(huì)詢問(wèn),在對(duì)方主機(jī)上是否有新的新聞組(使用NEWGROUPS命令創(chuàng)建),如果有新的新聞組,并且是適當(dāng)?shù)幕蛐枰S本地站點(diǎn)的規(guī)定而定)的群組,那么就建立新的同樣的新聞組。
客戶端會(huì)向服務(wù)器詢問(wèn)所有的或者那些它所關(guān)注的新聞組是否收到新文章,這使用NEWNEWS命令。它會(huì)收到一個(gè)從服務(wù)器發(fā)來(lái)的新文章的列表,并且客戶端可以請(qǐng)求服務(wù)器傳送那些客戶端選中的并且沒有的文章。
最后,客戶端告訴服務(wù)器那些它最近一次接收到的新文章,服務(wù)器會(huì)指出哪些文章它已經(jīng)有拷貝了,哪些文章需要客戶端傳輸給服務(wù)器,以增加服務(wù)器的收藏。
在這種方式中,只有那些沒有得到過(guò)副本的和希望請(qǐng)求得到的文章會(huì)被發(fā)送。
2. NNTP協(xié)議規(guī)范
2.1 總論
這個(gè)新聞組說(shuō)明文檔定義了使用TCP連接和類似于SMTP的指令和應(yīng)答的規(guī)范。它接受來(lái)自主機(jī)的連接,并為新聞組數(shù)據(jù)庫(kù)提供一個(gè)簡(jiǎn)單的操作界面。
這種服務(wù)器只有程序和新聞組數(shù)據(jù)庫(kù)間的一個(gè)界面,他不和任何用戶進(jìn)行交互,也沒有用戶層次的函數(shù),這種“用戶界面友好的”函數(shù)最好放在客戶端中,以便對(duì)它們的工作的環(huán)境有一個(gè)更好的理解。
在通過(guò)(使用)Internet TCP協(xié)議連接時(shí),為這個(gè)服務(wù)分配的端口是:119
2.2 字符編碼
命令和應(yīng)答都使用ASCII字符集,當(dāng)使用8比特字節(jié)傳送時(shí),低7位正常傳送數(shù)據(jù),最高位清0。
2.3 命令
命令由一系列命令單詞組成,有時(shí)候還要跟一些參數(shù)。命令參數(shù)必須由一個(gè)或多個(gè)空格或TAB鍵隔開。一個(gè)命令行必須包含完整包含所有必需的參數(shù),并且只能包含一個(gè)命令。
指令和參數(shù)都不區(qū)分大小寫。簡(jiǎn)單的說(shuō),就是一個(gè)指令和參數(shù)字符可以用大寫,也可以用小寫,或者大小寫混合。
每個(gè)命令行必須以一對(duì)回車換行符(CR-LF)結(jié)束。
每個(gè)命令行長(zhǎng)度不能超過(guò) 512個(gè)字符,包括空格、分隔符、標(biāo)點(diǎn)符號(hào),和回車換行符(因此命令和參數(shù)字符的長(zhǎng)度實(shí)際上最多只有510個(gè)字符)。不接受超出長(zhǎng)度規(guī)定的命令行。
2.4 應(yīng)答
應(yīng)答有兩種:文本和狀態(tài)。
2.4.1 文本應(yīng)答
文本只有在指出后面有文本跟隨的數(shù)字狀態(tài)應(yīng)答行被發(fā)送后發(fā)送。文本是按原文 內(nèi)容按行連續(xù)發(fā)送,用回車換行符(CR-LF)結(jié)束。一個(gè)僅包含一個(gè)句點(diǎn)(.)的單行表示文本結(jié)束(服務(wù)器將在文本最后一行后面發(fā)送一個(gè)回車換行符。一個(gè)句點(diǎn).和一個(gè)回車換行)。
如果該行文本原文的第一行是一個(gè).號(hào),那么會(huì)在.號(hào)前再加一個(gè).號(hào)然后發(fā)送。因此,客戶端必須檢查接收的每一行的第一個(gè)字符是否是句點(diǎn)符號(hào)(.),以判斷它是一個(gè)文本結(jié)束還是將兩個(gè)(多的)句點(diǎn)改成一個(gè)。
文本信息一般會(huì)在客戶終端上被顯示,然而命令/狀態(tài)應(yīng)答必須在客戶端程序處理后才能被按要求顯示。
2.4.2 狀態(tài)應(yīng)答
狀態(tài)應(yīng)答來(lái)自服務(wù)器,是服務(wù)器對(duì)上一條指令的執(zhí)行情況的反饋。
狀態(tài)應(yīng)答由3個(gè)足可以區(qū)別不同狀態(tài)應(yīng)答的數(shù)字組成,它們中的一些是后來(lái)發(fā)送的文本信息的先兆。
應(yīng)答的第一個(gè)數(shù)字廣泛的代表了,成功、錯(cuò)誤,和正在執(zhí)行上一條指令。
1xx - 資料消息
2xx - 指令正常
3xx - 指令至今為止正常,發(fā)送指令的其余部分
4xx - 指令正確,但由于一些原因不能完成功能
5xx - 指令不能執(zhí)行、錯(cuò)誤,或者發(fā)生了嚴(yán)重的程序錯(cuò)誤
應(yīng)答的第二個(gè)數(shù)字表示應(yīng)答種類的具體功能
x0x - 連接、設(shè)置,和各類其他信息
x1x - 新聞組(主題)選擇
x2x - 文章(條目)選擇
x3x - 發(fā)送功能
x4x - 上貼
x8x - 非標(biāo)準(zhǔn)的擴(kuò)展
x9x - 調(diào)試輸出
精確的狀態(tài)應(yīng)答是由具體的命令決定的。另外,下面將要列出一些常規(guī)的,被認(rèn)為在任何情況下都會(huì)收到的應(yīng)答編碼集合。
一些狀態(tài)應(yīng)答包含一些由字符或數(shù)字組成的參數(shù),這些參數(shù)是固定的,是對(duì)應(yīng)答代碼的簡(jiǎn)單解釋。
參數(shù)要被數(shù)字的響應(yīng)碼,或一個(gè)空格分隔開。所有的數(shù)字的參數(shù)都以十進(jìn)制表示,而且第一位可以是零。所有的文本參數(shù)在單獨(dú)的空格后面開始,并在下一個(gè)空格或一行結(jié)束的回車換行后結(jié)束(文本參數(shù)可以沒有,會(huì)包含空格)。所有的文本,即使在應(yīng)答中沒有參數(shù)也要在上一個(gè)參數(shù)由空格分隔。同樣,在一個(gè)應(yīng)答數(shù)字后面的文本記錄可以在不同的服務(wù)器上有不同。3 位數(shù)字代碼將決定應(yīng)該發(fā)送什么應(yīng)答。
對(duì)任何其他種類的附加指令響應(yīng)代碼在這個(gè)標(biāo)準(zhǔn)中不作詳細(xì)說(shuō)明。那些應(yīng)該選擇符合 x8x 定義的規(guī)范的范圍(注意:調(diào)試代碼是在 x9x應(yīng)答代碼中有明確的規(guī)定)。在標(biāo)準(zhǔn)指令中使用非標(biāo)準(zhǔn)的響應(yīng)代碼是被禁止的。
如果在調(diào)試中要使用x9x響應(yīng)模式。那么之后的調(diào)試輸出都?xì)w為“資料消息”一類,可以認(rèn)為,因此在從190到199的響應(yīng)中都可以使用來(lái)作為各種調(diào)試輸出。在本規(guī)范中對(duì)調(diào)試輸出沒有要求,但如果是對(duì)已連接的流測(cè)試,它們將用到這些代碼。如果需要適當(dāng)?shù)膱?zhí)行細(xì)節(jié),那么在調(diào)試時(shí)可以使用其他的x9x代碼。(有一個(gè)例子,代碼290將答復(fù)一個(gè)遠(yuǎn)程調(diào)試請(qǐng)求)
2.4.3基本應(yīng)答
下面列出了由 NNTP服務(wù)器發(fā)送的常規(guī)應(yīng)答代碼。它們不具體的針對(duì)某一個(gè)指令,但返回一個(gè)表示連接、錯(cuò)誤,或特殊情況的結(jié)果。
通常,1xx 代碼是可以不理會(huì)和不顯示的;代碼 200 或 201 是在首次連接到NNTP服務(wù)器確認(rèn)上貼許可時(shí)發(fā)送;代碼 400 將在NNTP服務(wù)器停止服務(wù)是發(fā)送(如,操作人員要求);5xx 代碼表示由于一些不尋常的原因,指令不能執(zhí)行。
100 幫助文本
190
through (譯者注:不知道什么意思,所以沒翻譯)
199 調(diào)試輸出
200 服務(wù)器準(zhǔn)備好 - 允許上帖
201 服務(wù)器準(zhǔn)備好 - 不允許上帖
400 服務(wù)器停止
500 指令不可辨認(rèn)
501 指令語(yǔ)法錯(cuò)誤
502 訪問(wèn)限制或拒絕許可
503 程序錯(cuò)誤 - 指令沒有執(zhí)行
3. 命令和應(yīng)答的詳細(xì)資料
在接下來(lái)的篇幅中會(huì)詳細(xì)介紹在NNTP服務(wù)中公認(rèn)的命令這些命令的應(yīng)答。
每一個(gè)命令都會(huì)有一個(gè)清楚的示例,雖然示例并不能很充分的說(shuō)明NNTP命令。任何參數(shù)都是小寫。如果一個(gè)參數(shù)包含在一個(gè)[]中,說(shuō)明這個(gè)參數(shù)是可選的,如:[GMT]說(shuō)明參數(shù)GMT可能會(huì)在命令中出現(xiàn),也可能不會(huì)。
在這里討論的每一個(gè)命令都可以被所有的NNTP服務(wù)器接受。
我們不反對(duì)增加額外的附加指令;但是推薦在任何一種附加指令前加入字母“X”以避免和本規(guī)范的后續(xù)版本沖突。
程序可以提示附加指令可以不重新定義狀態(tài)響應(yīng)代碼。但禁止對(duì)標(biāo)準(zhǔn)指令使用其他非標(biāo)準(zhǔn)響應(yīng)碼。
3.1 ARTICLE, BODY, HEAD, 和 STAT命令
ARTICLE有兩種格式(BODY, HEAD, 和 STAT命令也一樣),每一種格式用各自的方法對(duì)可以被檢索到的文章進(jìn)行了詳細(xì)說(shuō)明。當(dāng)ARTICLE命令后面跟著<message-id >形式的參數(shù)時(shí),使用的是第一種格式,當(dāng)ARTICLE命令后面只跟著一個(gè)數(shù)字參數(shù)或者沒有參數(shù)的時(shí)候,使用的是第二種格式。
這篇文章會(huì)以文本應(yīng)答的形式返回,文章的基本描述會(huì)出現(xiàn)在文檔的稍早處。
BODA和HEAD命令和ARTICLE是一樣的,只是他們分別返回文章的的標(biāo)題和正文。
STAT命令除了沒有文本返回以外和ARTICLE命令是相似的。當(dāng)選中一條新聞組中的消息號(hào)碼時(shí),STAT命令就會(huì)把這個(gè)消息號(hào)碼對(duì)應(yīng)的文章設(shè)置成“當(dāng)前文章”,但是不要求服務(wù)器返回這篇文章。服務(wù)器要返回的是一個(gè)message-id。使用STAT命令選擇一個(gè)message-id也是可以的,但是對(duì)于有問(wèn)題的message-id,這樣的選擇不會(huì)改變“當(dāng)前文章”。
3.1.1 ARTICLE(跟著message-id)
ARTICLE <message-id>
客戶終端上顯示的是:文章標(biāo)題,一個(gè)空行,文章的主體。Message-id是出現(xiàn)在文章頭部的關(guān)于這篇文章的一個(gè)序列號(hào)。它可以來(lái)自用戶使用NEWNEWS命令創(chuàng)建的一個(gè)列表中,也可以來(lái)自其他文章,或者其他命令所返回的應(yīng)答中。
請(qǐng)注意在內(nèi)部已經(jīng)確定的“當(dāng)前文章”在使用這個(gè)命令時(shí)是不會(huì)被改變的。這樣子做不但是為了使那些被其他文章引用的文章更容易被閱讀,而且解決了為了確定可能發(fā)送給多個(gè)新聞組的文章的正確的順序和資格所遇到的語(yǔ)義上的困難。
3.1.2 ARTICLE(跟著數(shù)字)
ARTICLE [nnn]
客戶終端上顯示的是:文章標(biāo)題,一個(gè)空行,文章的主體。Message-id是出現(xiàn)在文章頭部的關(guān)于這篇文章的一個(gè)序列號(hào)。參數(shù)nnn是當(dāng)前新聞組中一篇文章的序列號(hào),并且只能在被選中的新聞組中選擇,缺省的情況下默認(rèn)選擇當(dāng)前文章。
如果有效的文章號(hào)碼被指定,那么內(nèi)部的“當(dāng)前文章”可以由這個(gè)指令設(shè)定。
[下面的適用于所有的ARTICLE命令格式]返回的應(yīng)答中包含一個(gè)當(dāng)前文章號(hào)碼,一個(gè)message-id串,后面跟著返回的文本。
message-id串是被包含在”<>”中的一個(gè)驗(yàn)證串,來(lái)自文章本身的標(biāo)題。來(lái)自文章的message-id標(biāo)題行[在RFC850中定義]必須包含這些信息,如果沒有的話,在”<>”中用一個(gè)單獨(dú)的“0“代替。
因?yàn)閙essage-id對(duì)于每個(gè)文章來(lái)說(shuō)是唯一的,所以它被新聞閱讀程序用來(lái)跳過(guò)那些因?yàn)橹貜?fù)上傳或者上傳到了多個(gè)新聞組中的重復(fù)文章。
3.1.3 應(yīng)答
220 n <a> article retrieved - head and body follow
(n = 文章名稱, <a> = message-id)
221 n <a> article retrieved - head follows
222 n <a> article retrieved - body follows
223 n <a> article retrieved - request text separately
412 no newsgroup has been selected
420 no current article has been selected
423 no such article number in this group
430 no such article found
3.2 GROUP命令
3.2.1 GROUP
GROUP ggg
必須的參數(shù)ggg是被選中的新聞組的號(hào)碼(比如:"net.news"),一個(gè)正確的新聞組列表可以由LIST命令生成。
正確的選擇應(yīng)答會(huì)返回新聞組中第一篇和最后一篇文章的號(hào)碼,新聞組中文章數(shù)目的一個(gè)估計(jì)。這個(gè)估計(jì)不一定是正確的,雖然它和有用;估計(jì)值必須大于,等于新聞組中實(shí)際的文章數(shù)目。(一些程序的實(shí)現(xiàn)會(huì)去數(shù)新聞組中實(shí)際的文章數(shù)目,還有一些知識(shí)簡(jiǎn)單的將最后一篇文章的號(hào)碼減去第一篇文章的號(hào)碼的值作為文章數(shù))
當(dāng)選中了一個(gè)新聞組的時(shí)候,這個(gè)組中被內(nèi)部指定的”當(dāng)前文章“會(huì)被設(shè)置成這個(gè)組中的第一篇文章,如果又選中了一個(gè)組,那么先前被選中的組和”當(dāng)前文章“還是繼續(xù)處于選中狀態(tài)。如果一個(gè)空的組被選中,那么中被內(nèi)部指定的”當(dāng)前文章“處于不確定狀態(tài),并且不會(huì)被使用。
注意:新聞組的名稱不是隨意的,它必須和由LIST命令產(chǎn)生的列表中某個(gè)新聞組名稱匹配,否則會(huì)返回錯(cuò)誤。
3.2.2 應(yīng)答
211 n f l s group selected
(n=估計(jì)的組中的文章(帖)數(shù)量,
f=組中第一個(gè)文章的號(hào)碼,
l=組中最后一個(gè)文章的號(hào)碼
s=組名稱。)
411 no such news group(組不存在)
3.3 HELP命令
3.3.1 HELP
HELP
該命令提供了一個(gè)在新聞組服務(wù)器上可以被正確理解并執(zhí)行的命令列表。幫助文檔會(huì)問(wèn)文本應(yīng)答的方式返回。
3.3.2 應(yīng)答
100 help text follows
3.4 IHAVE命令
3.4.1 IHAVE
IHAVE <messageid>
客戶端使用IHAVE命令告訴服務(wù)器,它有一篇序列號(hào)為messageid的文章。如果服務(wù)器想要這篇文章的拷貝,它會(huì)返回一個(gè)應(yīng)答要求客戶端上傳完整的文章;如果服務(wù)器不需要(比如:服務(wù)器已經(jīng)存在這篇文章的拷貝了),它會(huì)返回一個(gè)應(yīng)答告訴客戶端不需要這篇文章。
如果文章被要求傳送,客戶端會(huì)把完整的文章發(fā)送給服務(wù)器,內(nèi)容包括標(biāo)題和主體,來(lái)自服務(wù)器的文章傳輸格式的詳細(xì)描述(譯者注:這就可能會(huì)有問(wèn)題,原文in the manner specified for text transmission from the server)。服務(wù)器會(huì)返回傳輸是否成功的應(yīng)答。
這個(gè)命令與POST命令的區(qū)別在于它是有意的在主機(jī)間進(jìn)行已發(fā)布的文章傳輸。一般情況下它不會(huì)再個(gè)人新聞閱讀程序中被使用。特別的是,這個(gè)命令會(huì)調(diào)用服務(wù)器的新聞發(fā)布程序進(jìn)行一些適當(dāng)?shù)脑O(shè)置(如:標(biāo)志,操作等等)以指出即將來(lái)臨的文章來(lái)自其他的主機(jī)。
如果服務(wù)器在后來(lái)對(duì)文章的檢查中發(fā)現(xiàn)不值得發(fā)布或傳輸一些文章,它會(huì)選擇停止發(fā)布或者傳輸這些文章。這個(gè)時(shí)候,它會(huì)返回436和437錯(cuò)誤。
造成這種拒絕的原因有很多種,如:錯(cuò)誤的新聞組和分類,磁盤限制;文章長(zhǎng)度限制;不清楚的標(biāo)題等等類似的錯(cuò)誤。這些限制(錯(cuò)誤)由主機(jī)的軟件所決定,而非NNTP本身。
3.4.2 應(yīng)答
235 article transferred ok
335 send article to be transferred. 以 <換行><.><換行>結(jié)束
435 article not wanted - do not send it
436 transfer failed - try again later
437 article rejected - do not try again
實(shí)現(xiàn)時(shí)應(yīng)該注意的:
因?yàn)橐恍┬侣劷M發(fā)布軟件無(wú)法實(shí)時(shí)的判定文章是否已經(jīng)不適于發(fā)布和傳送,它可能先返回一個(gè)傳輸成功的應(yīng)答,隔了點(diǎn)時(shí)間后再返回一個(gè)傳輸失敗的應(yīng)答。因此允許服務(wù)器首先返回235應(yīng)答,過(guò)了端時(shí)間后又返回傳輸失敗應(yīng)答。這也許不是問(wèn)題滿意的解決方法。一些實(shí)現(xiàn)希望發(fā)送一封郵件給文章的作者,以確定是否應(yīng)該失敗。
3.5 LAST命令
3.5.1 LAST
LAST
內(nèi)部指定的“當(dāng)前文章”被設(shè)置為當(dāng)前新聞組的上一篇文章,如果已經(jīng)是這個(gè)新聞組的第一篇文章了,服務(wù)器就會(huì)返回一個(gè)錯(cuò)誤應(yīng)答,并且當(dāng)前文章仍舊被選中。
這個(gè)命令可以設(shè)置內(nèi)部指定的“當(dāng)前文章”。
指令的應(yīng)答包括當(dāng)前文章的號(hào)碼,message-id。但是沒有文本應(yīng)答返回。
3.5.2 應(yīng)答
223 n a article retrieved - request text separately
(n = 文章號(hào)碼, a = 唯一的文章序列號(hào))
412 no newsgroup selected
420 no current article has been selected
422 no previous article in this group
3.6 LIST命令
3.6.1 LIST
LIST
命令返回一個(gè)新聞組及其相關(guān)信息的列表,每個(gè)新聞組作為一行文本被發(fā)送,格式如下:
group last first p
其中g(shù)roup為新聞組名稱,last為當(dāng)前新聞組已知的最后一篇文章的號(hào)碼,first為當(dāng)前新聞組已知的第一篇文章的號(hào)碼,p要么是’y’,要么是’n’,分別表示允許’y’/禁止’n’發(fā)布新聞組。
first和last選項(xiàng)都是數(shù)字,并且可能有前置0。如果last小于等于first的話表示在當(dāng)前新聞組中沒有文件存在。
注意:一些新聞組會(huì)禁止向一個(gè)客戶端發(fā)布新聞,即使LIST命令顯示這個(gè)新聞組是允許發(fā)布新聞的。具體的要查看POST命令對(duì)禁止向客戶端發(fā)布新聞的解釋。發(fā)布標(biāo)志存在于每個(gè)新聞組中,因?yàn)橐恍┬侣劷M有特殊的限制(譯者注:原文為are moderated or are digests),因此無(wú)法向這些新聞組發(fā)布新聞,為此,我們要發(fā)郵件給那些可以把新聞直接提交上去的人,讓他們?nèi)グl(fā)布新聞。NNTP服務(wù)器向客戶端發(fā)布新聞的許可不受限制。
注意:空的列表(比如:返回的文本僅包含結(jié)束符號(hào)<.>)也可能是有效的應(yīng)答,這表明當(dāng)前沒有有效的新聞組。
3.6.2 應(yīng)答
215 list of newsgroups follows
3.7 NEWGROUPS命令
3.7.1 NEWGROUPS
NEWNEWS newsgroups date time [GMT] [<distribution>]
命令會(huì)返回一個(gè)在date time時(shí)間后被創(chuàng)建的新聞組列表,表達(dá)格式和LIST命令返回的鏈表一樣。
data選項(xiàng)會(huì)以6位數(shù)字YYMMDD的格式被發(fā)送,YY是年份中最后的兩個(gè)數(shù)字,MM是可能包含前置0的月份信息。DD是這個(gè)月中的哪一天(可能會(huì)有前置0),最近的世紀(jì)被人問(wèn)是年份的一部分(如:86意味著1986,30意味著2030,99意味著1999,00是2000)
time也是以6位數(shù)字HHMMSS的格式被發(fā)送,其中HH是24小時(shí)制的時(shí)間,MM和SS都在0~59之間,當(dāng)后面沒有[GMT]參數(shù)的時(shí)候,以服務(wù)器本地時(shí)間為準(zhǔn),否則的話以格林威治時(shí)間為準(zhǔn)。
參數(shù)distribution是被包含在<>中的一串分類的新聞組。如果要將新聞組列出顯示出來(lái)中,需要先將參數(shù)中只有部分名稱的分類新聞組(比如:net在net.wombat中)與服務(wù)器上已有的同種類的新聞組進(jìn)行匹配,只有那些匹配成功的新的新聞組才能被列出。如果同時(shí)有多個(gè)符合條件的新聞組,需要將它們?nèi)苛谐觯⑶乙?lt;,>隔開。
注意:空的列表(比如:返回的文本僅包含結(jié)束符號(hào)<.>)也可能是有效的應(yīng)答,這表明當(dāng)前沒有有效的新聞組
3.7.2 應(yīng)答
231 list of new newsgroups follows
3.8 NEWNEWS命令
3.8.1 NEWNEWS
NEWNEWS newsgroups date time [GMT] [<distribution>]
命令會(huì)列出在data時(shí)間后被newsgroups新聞組發(fā)布和接收的新聞的message-id。每行一個(gè)message-id,格式和它們被發(fā)送的格式一樣,最后以只包含一個(gè)點(diǎn)號(hào)鍵和一個(gè)換行鍵的一行結(jié)束。
data和time參數(shù)的格式和NEWGROUPS命令一樣
newsgroups參數(shù)表示新聞組名稱,如果含有<*>串,意味著要在部分或者全部的新聞組中進(jìn)行搜索。當(dāng)newsgroups中部分的含有<*>時(shí)會(huì)被擴(kuò)展去進(jìn)行新聞組的匹配(如:net.macro*會(huì)被擴(kuò)展后去匹配net.micro.wombat, net.micro.apple等等),如果只含有<*>時(shí)意味著要與所有的新聞組名稱進(jìn)行匹配。
(請(qǐng)注意:<*>會(huì)被擴(kuò)展成任意的形式;但是特別的是,如net.*.unix的形式只會(huì)被擴(kuò)展成如net.wombat.unix或者net.whocares.unix的形式。)
相反的,如果newsgroups中沒有出現(xiàn)<*>號(hào),則只會(huì)在newsgroups中指定的新聞組中查找新聞。只能在服務(wù)器返回的有效新聞組列表中選擇新聞組。命令中可以含有多個(gè)新聞組名稱,它們以逗號(hào)<,>隔開。如果一個(gè)新聞組名稱后沒有逗號(hào)跟隨意味著這是命令中的最后一個(gè)新聞組了。[實(shí)現(xiàn)的時(shí)候要注意命令行最大長(zhǎng)度只有512字節(jié)的限制]
感嘆號(hào)<!>意味著不對(duì)某些特定的新聞組進(jìn)行匹配,如” net.*,mod.*,!mod.map.*”意味著要匹配net.*和mod.*,但是不對(duì)mod.map.*的形式進(jìn)行匹配。感嘆號(hào)必須出現(xiàn)在給定的不需要進(jìn)行匹配的新聞組部分或全部名稱的第一個(gè)字母的前面。
參數(shù)distribution是被包含在<>中的一串分類的新聞組。如果要將新聞組列出顯示出來(lái)中,需要先將參數(shù)中只有部分名稱的分類新聞組(比如:net在net.wombat中)與服務(wù)器上已有的同種類的新聞組進(jìn)行匹配,只有那些匹配成功的新的新聞組才能被列出。如果同時(shí)有多個(gè)符合條件的新聞組,需要將它們?nèi)苛谐觯⑶乙?lt;,>隔開
至此使用IHAVE,NEWNEWS和NEWGROUPS命令分發(fā)新聞已經(jīng)在前面的文檔中討論過(guò)了
注意:空的列表(比如:返回的文本僅包含結(jié)束符號(hào)<.>)也可能是有效的應(yīng)答,這表明當(dāng)前沒有有效的新聞組
3.8.2 應(yīng)答
230 list of new articles by message-id follows
3.9 NEXT命令
3.9.1 NEXT
NEXT
默認(rèn)的”當(dāng)前文章“會(huì)被更新為當(dāng)前新聞組的下一篇文章。如果新聞組中已經(jīng)沒有更多的文章的時(shí)候會(huì)返回一個(gè)錯(cuò)誤,但是當(dāng)前文章仍舊被選中。
這個(gè)命令可以設(shè)置默認(rèn)的”當(dāng)前文章“
指令的應(yīng)答包括當(dāng)前文章的號(hào)碼,message-id。但是沒有文本應(yīng)答返回。
3.9.2 應(yīng)答
223 n a article retrieved - request text separately
(n = 文章號(hào)碼, a = 一個(gè)唯一的文章序列號(hào))
412 no newsgroup selected
420 no current article has been selected
421 no next article in this group
3.10 POST命令
3.10.1 POST
POST
如果文章被語(yǔ)序發(fā)布,服務(wù)器會(huì)返回340,要求客戶端傳送文章。如果服務(wù)器返回的是440,則表示文章被過(guò)濾規(guī)則禁止發(fā)布了。
如果文章被允許發(fā)布,則這篇文章的格式必須符合RFC850中規(guī)定的標(biāo)準(zhǔn),并且文章必須包含有所得頭部項(xiàng)。當(dāng)文章的頭部和主體都被完全發(fā)送的時(shí)候,服務(wù)器會(huì)返回一個(gè)應(yīng)答,表示發(fā)送是否成功。
客戶端的文檔的頭部和主題的發(fā)送格式必須和服務(wù)器的發(fā)送格式一樣:一個(gè)只含有單個(gè)點(diǎn)號(hào)<.>的行意味著文章的結(jié)束;如果文章一行的開頭有點(diǎn)<.>號(hào),則在這個(gè)點(diǎn)號(hào)<.>前再加一個(gè)點(diǎn)號(hào)<.>。
服務(wù)器不會(huì)嘗試過(guò)濾字符,折疊或者限制文本行,或者其他的一些處理上傳文章的方法。我們建議服務(wù)器僅僅是將上傳的消息傳送給本文沒有討論的服務(wù)器新聞發(fā)布軟件。閱讀RFC850可以獲得更多的詳細(xì)資料。
因?yàn)楹芏鄬?shí)現(xiàn)要求客戶端新聞程序允許用戶使用一些文本編輯器編輯新聞,并且當(dāng)編輯完成以后再上傳給服務(wù)器,所以客戶端程序會(huì)關(guān)注連接剛剛建立時(shí)的命令消息,以確定客戶端是否允許向該服務(wù)器發(fā)布新聞,如果不允許發(fā)布,會(huì)向用戶發(fā)出警告,告訴他在該服務(wù)器上他只有讀的權(quán)限。這樣子,就能阻止用戶花了時(shí)間去編輯新聞卻發(fā)現(xiàn)無(wú)法發(fā)布的情況的發(fā)生。客戶端和主機(jī)間如何進(jìn)行發(fā)布的方法是由具體實(shí)現(xiàn)決定的,本文并沒有任何隱瞞。
3.10.2 應(yīng)答
240 article posted ok
340 send article to be posted. 以 <CR-LF><.><CR-LF>結(jié)束
440 posting not allowed
441 posting failed
(從前面可以知道,當(dāng)連接剛剛建立的時(shí)候,服務(wù)器會(huì)返回下面其中之一的一個(gè)應(yīng)答以確定服務(wù)器是否允許客戶端發(fā)布新聞:)
200 server ready - posting allowed
201 server ready - no posting allowed)
3.11 QUIT命令
3.11.1 QUIT
QUIT
服務(wù)器接受QUIT命令并且關(guān)閉和客戶端的連接。這是客戶端最好的完成連接事務(wù)并且關(guān)閉和服務(wù)器連接的方法。
如果客戶端只是簡(jiǎn)單的斷開連接(可能是超時(shí),或者發(fā)生其他錯(cuò)誤),服務(wù)器會(huì)正確的關(guān)閉它和客戶端的連接。
3.11.2 應(yīng)答
205 closing connection - goodbye!
3.12 SLAVE命令
3.12.1 SLAVE
SLAVE
這個(gè)命令是告訴服務(wù)器這個(gè)客戶端連接是一個(gè)輔助服務(wù)器而不是一個(gè)用戶。
這個(gè)命令用戶區(qū)分用戶連接和輔助服務(wù)器連接。當(dāng)服務(wù)器可能有多個(gè)客戶端連接的時(shí)候,這個(gè)命令會(huì)要求服務(wù)器給予某個(gè)服務(wù)器更高的優(yōu)先權(quán)。當(dāng)服務(wù)器負(fù)荷太大需要釋放部分連接時(shí),這個(gè)命令會(huì)使服務(wù)器優(yōu)先選擇輔助服務(wù)器。實(shí)際上,這個(gè)命令的使用完全取決具體的實(shí)現(xiàn),在一些沒有優(yōu)先權(quán)的NNTP服務(wù)器中,這個(gè)命令更本不會(huì)被接受。
3.12.2 應(yīng)答
202 slave status noted
4. 樣例
下面是一些可能的協(xié)議連接樣例。符號(hào)C:表示這個(gè)命令是從客戶端發(fā)往服務(wù)器端。符號(hào)S:表示這個(gè)是從服務(wù)器發(fā)往客戶端的應(yīng)答。
4.1 NEXT命令的連接
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 200 wombatvax news server ready - posting ok
(客戶端請(qǐng)求當(dāng)前新聞組列表)
C: LIST
S: 215 list of newsgroups follows
S: net.wombats 00543 00501 y
S: net.unix-wizards 10125 10011 y
(這里省略更多的信息)
S: net.idiots 00100 00001 n
S: .
(客戶端選擇新聞組)
C: GROUP net.unix-wizards
S: 211 104 10011 10125 net.unix-wizards group selected
(有104篇文章,從10011到10125)
(客戶端選擇一篇文章閱讀)
C: STAT 10110
S: 223 10110 <23445@sdcsvax.ARPA> article retrieved –
statistics only (選中了10110號(hào)文章,她的message-id是
<23445@sdcsvax.ARPA>)
(客戶端檢查標(biāo)題)
C: HEAD
S: 221 10110 <23445@sdcsvax.ARPA> article retrieved - head
follows (文章標(biāo)題)
S: .
(客戶端向查看文章主題)
C: BODY
S: 222 10110 <23445@sdcsvax.ARPA> article retrieved - body
follows (文章主體)
S: .
(客戶端選中了下一篇文章)
C: NEXT
S: 223 10113 <21495@nudebch.uucp> article retrieved – statistics only (號(hào)碼為10113 的文章是下一篇文章)
(客戶端完成會(huì)話)
C: QUIT
S: 205 goodbye.
4.2 ARTICLE命令
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 201 UCB-VAX netnews server ready -- no posting allowed
C: GROUP msgs
S: 211 103 402 504 msgs Your new group is msgs
(有103篇文章, 從402到504)
C: ARTICLE 401
S: 423 No such article in this newsgroup
C: ARTICLE 402
S: 220 402 <4105@ucbvax.ARPA> Article retrieved, text follows
S: (文章頭部和主體)
S: .
C: HEAD 403
S: 221 403 <3108@mcvax.UUCP> Article retrieved, header follows
S: (文章頭部)
S: .
C: QUIT
S: 205 UCB-VAX news server closing connection. Goodbye.
4.3 NEWSGROUPS命令
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 200 Imaginary Institute News Server ready (允許發(fā)布)
(客戶端 要求1985年4月3號(hào)以后建立的新聞組)
C: NEWGROUPS 850403 020000
S: 231 New newsgroups since 03/04/85 02:00:00 follow
S: net.music.gdead
S: net.games.sources
S: .
C: GROUP net.music.gdead
S: 211 0 1 1 net.music.gdead Newsgroup selected
(在新聞組中沒有文章,first和last無(wú)需理睬)
C: QUIT
S: 205 Imaginary Institute news server ceasing service. Bye!
4.4 上傳一篇新文章
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 200 BANZAIVAX news server ready, posting allowed.
C: POST
S: 340 Continue posting; Period on a line by itself to end
C: (文章以RFC850格式傳送)
C: .
S: 240 Article posted successfully.
C: QUIT
S: 205 BANZAIVAX closing connection. Goodbye.
4.5 因?yàn)椴僮髡?qǐng)求中斷
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 201 genericvax news server ready, no posting allowed.
(假設(shè)是一般的會(huì)話,并且新聞組已經(jīng)被選定)
C: NEXT
S: 223 1013 <5734@mcvax.UUCP> Article retrieved; text separate.
C: HEAD
C: 221 1013 <5734@mcvax.UUCP> Article retrieved; head follows.
S: (傳送文章頭部的過(guò)程因?yàn)橐粋€(gè)操作請(qǐng)求被中斷了。接下來(lái)的操作無(wú)需客戶端的干涉)
S: (一個(gè)只包含兩個(gè)<CR-LF>的行做為傳輸?shù)慕Y(jié)束)
S: .
S: 400 Connection closed by operator. Goodbye.
S: (closes connection)
4.6 使用新聞服務(wù)器在系統(tǒng)間傳輸數(shù)據(jù)
S: (監(jiān)聽TCP119端口)
C: (要求連接TCP119端口)
S: 201 Foobar NNTP server ready (拒絕發(fā)布)
(客戶端需要1985年5月15號(hào)2點(diǎn)以后創(chuàng)建的新聞組)
C: NEWGROUPS 850515 020000
S: 235 New newsgroups since 850515 follow
S: net.fluff
S: net.lint
S: .
(客戶端需要1985年5月15號(hào)2點(diǎn)以后所有新聞組發(fā)布的新聞)
C: NEWNEWS * 850515 020000
S: 230 New news since 850515 020000 follows
S: <1772@foo.UUCP>
S: <87623@baz.UUCP>
S: <17872@GOLD.CSNET>
S: .
(客戶端要查看文章<1772@foo.UUCP>)
C: ARTICLE <1772@foo.UUCP>
S: 220 <1772@foo.UUCP> All of article follows
S: (發(fā)送全部的信息)
S: .
(客戶端需要文章<87623@baz.UUCP>
C: ARTICLE <87623@baz.UUCP>
S: 220 <87623@baz.UUCP> All of article follows
S: (發(fā)送全部的信息)
S: .
(客戶端需要文章<17872@GOLD.CSNET>
C: ARTICLE <17872@GOLD.CSNET>
S: 220 <17872@GOLD.CSNET> All of article follows
S: (發(fā)送全部的信息)
S: .
(客戶端向服務(wù)器說(shuō)明最近收到的文章)
C: IHAVE <4105@ucbvax.ARPA>
S: 435 Already seen that one, where you been?
(客戶端向服務(wù)器說(shuō)明最近收到的文章)
C: IHAVE <4106@ucbvax.ARPA>
S: 335 News to me! <CRLF.CRLF> to end.
C: (發(fā)送文章)
C: .
S: 235 Article transferred successfully. Thanks.
(或者)
S: 436 Transfer failed.
(客戶端斷開連接)
C: QUIT
S: 205 Foobar NNTP server bids you farewell.
4.7 命令和應(yīng)答摘要
接下來(lái)是被NNTP服務(wù)器認(rèn)證的命令及服務(wù)器返回的應(yīng)答
4.7.1 命令
ARTICLE
BODY
GROUP
HEAD
HELP
IHAVE
LAST
LIST
NEWGROUPS
NEWNEWS
NEXT
POST
QUIT
SLAVE
STAT
4.7.2 應(yīng)答
100 help text follows
199 debug output
200 server ready - posting allowed
201 server ready - no posting allowed
202 slave status noted
205 closing connection - goodbye!
211 n f l s group selected
215 list of newsgroups follows
220 n <a> article retrieved - head and body follow 221 n <a> articleretrieved - head follows
222 n <a> article retrieved - body follows
223 n <a> article retrieved - request text separately 230 list of new articles by message-id follows
231 list of new newsgroups follows
235 article transferred ok
240 article posted ok
335 send article to be transferred. 以 <CR-LF><.><CR-LF>結(jié)束
340 send article to be posted. 以 <CR-LF><.><CR-LF>結(jié)束
400 service discontinued
411 no such news group
412 no newsgroup has been selected
420 no current article has been selected
421 no next article in this group
422 no previous article in this group
423 no such article number in this group
430 no such article found
435 article not wanted - do not send it
436 transfer failed - try again later
437 article rejected - do not try again.
440 posting not allowed
441 posting failed
500 command not recognized
501 command syntax error
502 access restriction or permission denied
503 program fault - command not performed
4.8 一份關(guān)于USENET新聞系統(tǒng)的文字摘要
在UNIX世界中,傳統(tǒng)上的網(wǎng)絡(luò)連接被建立在1200波特率的電話線上,USENET新聞系統(tǒng)被發(fā)展成能處理中央存儲(chǔ),索引,取回,和分發(fā)新聞。做為一個(gè)和UUCP根本上不一樣的傳輸機(jī)制,USENET是一個(gè)能為使用UNIX及其他不同系統(tǒng)的用戶提供新聞和公告服務(wù)的系統(tǒng)。USENET新聞系統(tǒng)已經(jīng)在RFC850中被詳細(xì)討論過(guò)了。它適用于幾乎全部的UNIX系統(tǒng)和很多其他操作系統(tǒng),并且可以被任意發(fā)布。
USNET文件系統(tǒng)使用UNIX主機(jī)的一個(gè)SPOOLING(譯者注:一種虛擬打印機(jī)算法)存儲(chǔ)池來(lái)存放新聞文章,每篇文章一個(gè)文件。每篇文章都有一個(gè)文章頭部,包含著文章發(fā)送者的簽名和他的組織關(guān)系,日期,回復(fù)電郵地址,主題,新聞組(按主題分類)等等。下面有一篇完整的文章的副本。請(qǐng)按靠RFC850以獲得更多的信息。
Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/85; sitesdcsvax.UUCP
Posting-Version: version B 2.10.1 6/24/83 SMI; site unitek.uucp
Path:sdcsvax!sdcrdcf!hplabs!qantel!ihnp4!alberta!ubc-vision!unitek!honman
From: honman@unitek.uucp (Man Wong)
Newsgroups: net.unix-wizards
Subject: foreground -> background ?
Message-ID: <167@unitek.uucp>
Date: 25 Sep 85 23:51:52 GMT
Date-Received: 29 Sep 85 09:54:48 GMT
Reply-To: honman@unitek.UUCP (Hon-Man Wong)
Distribution: net.all
Organization: Unitek Technologies Corporation
Lines: 12
I have a process (C program) which generates a child and waits for
it to return. What I would like to do is to be able to run the
child process interactively for a while before kicking itself into
the background so I can return to the parent process (while the
child process is RUNNING in the background). Can it be done? And
if it can, how?
Please reply by E-mail. Thanks in advance.
Hon-Man Wong
5. 參考文獻(xiàn)
[1] Crocker, D., "Standard for the Format of ARPA Internet Text
Messages", RFC-822, Department of Electrical Engineering,
University of Delaware, August, 1982.
[2] Horton, M., "Standard for Interchange of USENET Messages",
RFC-850, USENET Project, June, 1983.
[3] Postel, J., "Transmission Control Protocol- DARPA Internet
Program Protocol Specification", RFC-793, USC/Information
Sciences Institute, September, 1981.
[4] Postel, J., "Simple Mail Transfer Protocol", RFC-821,
USC/Information Sciences Institute, August, 1982.
6. 感謝
作者在這里要衷心感謝那些為本文提供意見和建議的人,特別是Erik Fair 和 Chuq von Rospach,沒有這些人的工作就不會(huì)有這篇文章。
7. 說(shuō)明
UNIX是貝爾實(shí)驗(yàn)室的注冊(cè)商標(biāo)。
注:這是我翻譯的第一篇RFC文檔,計(jì)算機(jī)網(wǎng)絡(luò)在中國(guó)越來(lái)越變的熱門。但是因?yàn)殛P(guān)鍵的技術(shù)文檔全是英文的,使很大一部分程序工程師不能進(jìn)入其中。本人翻譯RFC文章不僅是因?yàn)楣ぷ餍枰彩窍胧垢嗟娜肆私庥?jì)算機(jī)網(wǎng)絡(luò)技術(shù),任何人都可以轉(zhuǎn)載或者發(fā)布這篇文章,因?yàn)槭堑谝淮畏g,如有錯(cuò)誤,請(qǐng)通知我,我的郵箱是:ghbxx2004@yahoo.com.cn