RFC850 1983年6月
USENET信息交換標(biāo)準(zhǔn)
Mark R. Horton
[這篇備忘錄以RFC格式發(fā)布只是為了能讓更多的使用ARPA網(wǎng)絡(luò)的研究者可以更容易的得到信息]
1. 導(dǎo)言
這篇文檔定義了一個(gè)在USENET間交換網(wǎng)絡(luò)新聞文章時(shí)用到的文章格式標(biāo)準(zhǔn)。它詳細(xì)描述了文章格式本身,也給出了部分的新聞傳輸標(biāo)準(zhǔn)。新聞的傳輸不需要完全按照標(biāo)準(zhǔn)格式以便于給個(gè)別的主機(jī)提供一個(gè)好的彈性去選擇傳輸?shù)挠布蛙浖h(huán)境,以及是否一次傳輸多個(gè)新聞等等。
文檔有五部分。第二部分定義了文章格式。第三部分定義了有效的控制信息。第四部分詳細(xì)說(shuō)明了一些有效的傳輸方法。第五部分描述了全部的新聞傳播算法。
2. 文章格式
選擇文章格式首先要考慮的是使這種格式能盡可能的適應(yīng)現(xiàn)有的一些工具。現(xiàn)有的工具包括各種郵件系統(tǒng)和新聞系統(tǒng)。(由伊利諾伊斯大學(xué)開(kāi)發(fā)的NOTEFILES(譯者注:作為一個(gè)特定的名詞沒(méi)有翻譯)系統(tǒng)被認(rèn)為是一種新聞系統(tǒng))一種標(biāo)準(zhǔn)的郵件消息格式已經(jīng)在ARPA(譯者注:ARPA網(wǎng)絡(luò)是Internet網(wǎng)絡(luò)的前身)網(wǎng)絡(luò)中存在多年了,它適合USENET系統(tǒng)絕大部份的需求。因?yàn)锳RPA網(wǎng)絡(luò)格式是可以擴(kuò)展的,所以在ARPA網(wǎng)絡(luò)標(biāo)準(zhǔn)中進(jìn)行一些擴(kuò)展使之適合USENET系統(tǒng)額外的需求是很容易的。因此,所有的USNNET新聞系統(tǒng)被排版成和由RFC822標(biāo)準(zhǔn)所定義的ARPA網(wǎng)絡(luò)中的有效的郵件格式一樣。這份標(biāo)準(zhǔn)在對(duì)每一篇文章發(fā)布一些額外的需求和禁止使用特定的ARPA特性上比ARPA網(wǎng)絡(luò)標(biāo)準(zhǔn)有更多的限制。無(wú)論如何,它應(yīng)該總是可以使用一種工具使得一條ARPA網(wǎng)絡(luò)消息能處理一篇新聞文章。無(wú)論在什么情況下,當(dāng)這份格式標(biāo)準(zhǔn)和ARPA標(biāo)準(zhǔn)發(fā)生沖突時(shí),ARPA標(biāo)準(zhǔn)被認(rèn)為是正確的。
用于舉例說(shuō)明的一個(gè)樣例:
Relay-Version: version B 2.10 2/13/83; site cbosgd.UUCP
Posting-Version: version B 2.10 2/13/83; site eagle.UUCP
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
From: jerry@eagle.uucp (Jerry Schwarz)
Newsgroups: net.general
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.UUCP>
Date: Friday, 19-Nov-82 16:14:55 EST
Followup-To: net.news
Expires: Saturday, 1-Jan-83 00:00:00 EST
Date-Received: Friday, 19-Nov-82 16:59:30 EST
Organization: Bell Labs, Murray Hill
接下來(lái)是一個(gè)空行,然后是文章的主體。
這里有一個(gè)使用老的格式(在這份標(biāo)準(zhǔn)存在以前)的消息。建議具體的實(shí)現(xiàn)也能接受這種文章格式使得轉(zhuǎn)換更加的容易。
From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz)
Newsgroups: net.general
Title: Usenet Etiquette -- Please Read
Article-I.D.: eagle.642
Posted: Fri Nov 19 16:14:55 1982
Received: Fri Nov 19 16:59:30 1982
Expires: Mon Jan 1 00:00:00 1990
接下來(lái)是一個(gè)空行,然后是文章的主體。
一些新聞系統(tǒng)使用一種”A”格式傳輸新聞,如下:
Aeagle.642
net.general
cbosgd!mhuxj!mhuxt!eagle!jerry
Fri Nov 19 16:14:55 1982
Usenet Etiquette - Please Read
接下來(lái)直接是文章的主體。
一篇文章首先是很多頭部行,接下來(lái)是一個(gè)空行,接著是文章主題消息。頭部行包括一個(gè)關(guān)鍵字,一個(gè)冒號(hào),一個(gè)空行,和一些附加信息。這是ARPA網(wǎng)絡(luò)標(biāo)準(zhǔn)的子集,可以使簡(jiǎn)單的軟件輕松的處理它。”from”行可以隨意的以上面例子中給出的格式,或則使用ARPA的<>符號(hào)。為了使實(shí)現(xiàn)簡(jiǎn)單,一些格式(比如:圓括號(hào)后面緊跟機(jī)器地址)是不允許出現(xiàn)的。
一些頭部是必需的,一些是可選的。所有的自定義頭部都是允許的,并且會(huì)被原樣傳送。必需的頭部有Relay-Version,Posting-Version,From,Date,Newsgroups,Subject,Message-ID,Path。可選的頭部有Followup-To,Date-Received,Expires,Reply-To,Sender,References,Control,Distribution,Organization。
2.1 必需的頭部
2.1.1 Relay-Version 這個(gè)頭部行依靠一個(gè)將文章直接傳輸過(guò)來(lái)的連接確定程序的版本,即將這篇文章傳輸給下一個(gè)站點(diǎn)的程序。比如,站點(diǎn)A將文章發(fā)給站點(diǎn)B,B再發(fā)給C。從站點(diǎn)A發(fā)給站點(diǎn)B的消息中就有一個(gè)Relay-Version確定了程序是在A上運(yùn)行的,從B發(fā)給C的消息中確定了程序是在在B上運(yùn)行的。這個(gè)頭部可以用一種統(tǒng)一的方式說(shuō)明一些老的頭部。Relay-Version選項(xiàng)必須出現(xiàn)在文章的開(kāi)始;因此,所有符合標(biāo)準(zhǔn)的文章將會(huì)以大寫(xiě)字母”R”開(kāi)始。除此以外,文章頭部出現(xiàn)的順序沒(méi)有任何限制
這一行包含兩部分,以冒號(hào)隔開(kāi)。分別是版本和站點(diǎn)全名。版本被定義為被使用的系統(tǒng)程序(比如使用字母”B”),版本號(hào),版本時(shí)間。舉個(gè)例子,這一行將包含以下內(nèi)容
Relay-Version: version B 2.10 2/13/83; site cbosgd.UUCP
這個(gè)頭部項(xiàng)不會(huì)傳送給其他的站點(diǎn)。當(dāng)一個(gè)傳播程序在傳輸文章時(shí),只能包含于自己有關(guān)的Relay-Version,而不是其他站點(diǎn)的Relay-Version。(為了與老的程序兼容,當(dāng)Relay-Version出現(xiàn)在文章除了開(kāi)始以外的地方時(shí),會(huì)被假定為一個(gè)更老版本的新聞并且被刪除)
2.1.2 Posting-Version 這個(gè)頭部行確定了將這個(gè)消息輸入網(wǎng)絡(luò)的軟件。它的格式和Relay-Version一樣。它通常確定的是和消息序列號(hào)一樣的站點(diǎn),除非發(fā)布消息的站點(diǎn)正在作為一個(gè)網(wǎng)關(guān)在傳輸一條已經(jīng)包含一個(gè)由郵件產(chǎn)生的消息序列號(hào)的消息。(當(dāng)網(wǎng)關(guān)允許使用一個(gè)外部產(chǎn)生的消息序列號(hào)時(shí),這個(gè)消息序列號(hào)會(huì)被檢查,確保它符合本標(biāo)準(zhǔn)和RFC822標(biāo)準(zhǔn)。)
2.1.3 From From行包含了發(fā)送這個(gè)消息的人的ARPA格式的郵箱地址。在郵箱地址后面可以跟著一對(duì)()符號(hào),里面是一個(gè)全名。郵箱地址和現(xiàn)實(shí)中一樣由文章的作者確定,除非使From行不再被檢查的Sender頭部被使用。注意在所有的站點(diǎn)和域名中,大小寫(xiě)是一樣的,因此,mark@cbosgd.UUCP,mark@cbosgd.uucp,和mark@CBosgD.UUcp是一個(gè)地址。用戶(hù)名可能大小寫(xiě)敏感,也可能不敏感。比如,Billy@cbosgd.UUCP 也許會(huì)和BillY@cbosgd.UUCP不一樣。程序在傳輸郵件或新聞時(shí)應(yīng)當(dāng)避免改變電子郵件的語(yǔ)法。
RFC822指出在()中的文字都是注釋。在ARPA網(wǎng)絡(luò)中郵件也使用這種方法把用戶(hù)的全名作為注釋放在From行的結(jié)尾。這份標(biāo)準(zhǔn)作一個(gè)嚴(yán)格的規(guī)定。全名不是一個(gè)注釋?zhuān)穷^部行可選的一個(gè)部分。全名可能被省略,或者先出現(xiàn)電子郵件地址,然后緊跟著(全名),或者先出現(xiàn)全名,然后緊跟著<電子郵件地址>。因此,以下三種格式都是允許的:
From: mark@cbosgd.UUCP
From: mark@cbosgd.UUCP (Mark Horton)
From: Mark Horton <mark@cbosgd.UUCP>
全名中會(huì)含有任何可以打印的ASCII字符(譯者注:這句可能有問(wèn)題,原文Full names may contain any printing ASCII characters from space through tilde),例外的是,里面沒(méi)有”(“或”)”符號(hào),也沒(méi)有”<”或”>”符號(hào)。郵件標(biāo)準(zhǔn)會(huì)對(duì)全名產(chǎn)生額外的限制,特別的是字母逗號(hào)”,”,冒號(hào)”:”,分號(hào)”;”在全名中不可取。
2.1.4 Date Date行(以前稱(chēng)”Posted”)是一個(gè)可以被ARPA網(wǎng)絡(luò)和日常生活所接受的日期格式,由文章發(fā)布到網(wǎng)路中的時(shí)間所決定。當(dāng)文章在網(wǎng)路中傳播時(shí),日期不會(huì)被改變。一個(gè)可以接受的Date格式如下
Weekday, DD-Mon-YY HH:MM:SS TIMEZONE
在前面的樣例中出現(xiàn)了很多日期格式。注意C(譯者注:原文為ctime,即c語(yǔ)言的時(shí)間格式)時(shí)間格式
Wdy Mon DD HH:MM:SS YYYY
是不允許的,因?yàn)樗皇茿RPA網(wǎng)絡(luò)中有效的時(shí)間格式。然而,因?yàn)槔系能浖耘f支持這種格式,建議新版本的程序也支持這種格式,并且將它轉(zhuǎn)化成一種可以接收的格式。
TIMEZONE域當(dāng)前是世界時(shí)間分區(qū)的縮寫(xiě),包括通常的美國(guó)時(shí)間,北美時(shí)間(從白令海峽到紐芬蘭),歐洲時(shí)間,澳大利亞時(shí)間,等等。因?yàn)楫?dāng)前缺少這樣一個(gè)列表(并且無(wú)法確定是否存在這樣一個(gè)列表),軟件的開(kāi)發(fā)者被鼓勵(lì)將處理TIMEZONE的代碼寫(xiě)得有彈性一點(diǎn),并且特別注意的是,不要假定時(shí)間分區(qū)名稱(chēng)都是只由三個(gè)字母組成的。在實(shí)現(xiàn)的時(shí)候可以自由處理這個(gè)域,在保持時(shí)間一致的情況下,將時(shí)間域轉(zhuǎn)換為一個(gè)大家都知道的分區(qū)(使用適當(dāng)?shù)墓ぞ咿D(zhuǎn)化本地時(shí)間)。
2.1.5 Newsgroups Newsgroups行確定文章屬于哪個(gè)新聞組。可能會(huì)出現(xiàn)多個(gè)新聞組,相互間用逗號(hào)隔開(kāi)。新聞組的詳細(xì)描述必須是所有已經(jīng)存在的新聞組的名稱(chēng),沒(méi)有新聞組會(huì)因?yàn)楸缓?jiǎn)單的發(fā)布而被建立。
通配符(比如單詞”all”)在Newsgroups中是不允許出現(xiàn)的。例如,新聞組”net.all”是無(wú)效的,但是新聞組名稱(chēng)”net.sport.football”是允許的。
如果一篇接收到的文章中即有有效的新聞組,也有無(wú)效的新聞組,那么站點(diǎn)會(huì)忽略掉無(wú)效的新聞組,而不是將他們移除。比如,站點(diǎn)A訂閱了”btl.net”和”net.all”,它和一個(gè)訂閱了”btl.net”但沒(méi)有訂閱”net.all”的站點(diǎn)B交換新聞。假設(shè)A收到了一篇Newsgroups項(xiàng)為“Newsgroups: net.micro,btl.general“的新聞,則它會(huì)把這篇新聞發(fā)給B,因?yàn)锽接受”net.micro”,但是不接受”btl.general”。A必須要保持文章的Newsgroups不變。如果它移除”btl.general”,編輯后的頭部可能是最后一次進(jìn)入”btl.general”,導(dǎo)致很多訂閱了”btl.general”的用戶(hù)無(wú)法看到文章。此外,所有定閱了”btl.net”的用戶(hù)將不會(huì)再看到這種類(lèi)型的文章。
2.1.6 Subject Subject行(過(guò)去稱(chēng)為”Title”)告訴我們這篇文章的內(nèi)容摘要。它應(yīng)當(dāng)包含足夠的文章內(nèi)容使得讀者可以?xún)H僅根據(jù)摘要來(lái)決定是否閱讀這篇文章。如果這篇文章僅僅是對(duì)另外一篇文章的應(yīng)答(比如:跟帖),默認(rèn)的Subject為”Re: ”并且引用行是必需的。(用戶(hù)也許會(huì)認(rèn)為編輯的主題和跟帖有關(guān),但是默認(rèn)的主題為”Re: ”(回復(fù)))
2.1.7 Message-ID Message-ID行給每個(gè)文章一個(gè)唯一的標(biāo)識(shí)符。一個(gè)同樣的Message-ID不會(huì)再這篇文章還存在于任一個(gè)新聞組的時(shí)候被再次生成。(建議一樣的Message-ID在兩年內(nèi)不要再次產(chǎn)生)Message-ID的語(yǔ)法格式如下
<不包含任何空格或”>”的字符串>
為了能和RFC822一致,Message-ID必需為以下的格式
<唯一的標(biāo)識(shí)符@全域名>
全域名為文章第一次進(jìn)入網(wǎng)絡(luò)時(shí)的主機(jī)全名,包括主機(jī)所在的域,和一個(gè)由不包含”<”,”>”或者”@”符號(hào)的可打印ASCII字符組成的唯一標(biāo)識(shí)串。如,主機(jī)的唯一標(biāo)識(shí)串可以是一個(gè)表示文章被放入網(wǎng)絡(luò)順序的整數(shù),或者一個(gè)表示文章寫(xiě)作時(shí)間和日期的字符串。例如,一篇從全域名為Berkeley.ARPA的站點(diǎn)ucbvax提交到網(wǎng)絡(luò)的文章的有效的Message-ID為<4123@ucbvax.Berkeley.ARPA>。程序員被要求不要假設(shè)Message-ID是來(lái)自其他主機(jī)的,而是將它們看作未知字符串處理。這是不安全的,例如,假設(shè)Message-ID會(huì)少于14個(gè)字符,而前14個(gè)字符不是唯一的。
尖括號(hào)被認(rèn)為是Message-ID的一部分。因此,在如ihave/sendme和cancel控制消息的Message-ID中包含空格鍵。空字符(如空格或者TAB)在Message-ID中是不允許出現(xiàn)的。所有在<>中的ASCII字符必須是可打印的。
2.1.8 Path 這行顯示了文章到達(dá)當(dāng)前系統(tǒng)的路徑。當(dāng)一個(gè)系統(tǒng)傳遞信息時(shí),它會(huì)在Path行加上它的特有的名稱(chēng)。不同的名稱(chēng)可以被任意的標(biāo)點(diǎn)符號(hào)或者空格隔開(kāi),如,”cbosgd!mhuxj!mhuxt”,“cbosgd, mhuxj, mhuxt",和"@cbosgd.uucp,@mhuxj.uucp,@mhuxt.uucp" 甚至"teklabs, zehntel, sri-unix@cca!decvax"都是有效的。(最后來(lái)的那個(gè)路徑顯示文章傳遞的順序?yàn)閐ecvax, sri-unix, zehntel, teklabs)后來(lái)的名稱(chēng)會(huì)被加在Path行的左邊,如,在第三個(gè)例子中,最近加入Path行的站點(diǎn)為”teklabs”。站點(diǎn)名稱(chēng)可以包含字母,數(shù)字,點(diǎn)號(hào),連字符;其他的標(biāo)點(diǎn)符號(hào)被認(rèn)為是名稱(chēng)間的分隔符號(hào)。
一般來(lái)說(shuō),最右邊的站點(diǎn)名稱(chēng)被認(rèn)為是這篇文章的起始站點(diǎn)。然而,也允許在最右邊加上發(fā)送文章的人的名字。這是為了與其他的系統(tǒng)兼容。
Path行不會(huì)被用于回復(fù)中,并且不應(yīng)當(dāng)被弄成郵件地址的形式。它是用來(lái)顯示將文章傳遞到本地站點(diǎn)的路徑。這是一個(gè)很有用的信息。一方面可以監(jiān)控USENET系統(tǒng)的執(zhí)行情況。另一方面可以建立一條到達(dá)新站點(diǎn)的路徑。或許最重要的作用是檢測(cè)多余的無(wú)用通路,并且刪除它。特別的是,當(dāng)站點(diǎn)A將文章傳輸給站點(diǎn)B,這時(shí)Path中就含有A,因此B就不會(huì)將文章反傳給A了。定義本站點(diǎn)的站點(diǎn)名時(shí)應(yīng)該注意要能被它的鄰居站點(diǎn)所熟知,使得上述的優(yōu)化得以實(shí)現(xiàn)。
當(dāng)站點(diǎn)收到一篇文章時(shí),它會(huì)在Path前面加上自己特有的名稱(chēng)。因此,如果一條Path項(xiàng)為”A!X!Y!Z”的消息由A傳給B,則B會(huì)在消息的Path前面加上B!,如”B!A!X!Y!Z”如果B將消息傳給C,消息中含有”B!A!X!Y!Z”,則C會(huì)把接受到的消息Path項(xiàng)變成”C!B!A!X!Y!Z”。
需要注意一些特殊的兼容性:因?yàn)镕rom,Sender和Reply-To是Internet(譯者注:互聯(lián)網(wǎng))的格式,很多的USENET站點(diǎn)還沒(méi)有使用郵件的人有能力懂得Internet的格式,所以它會(huì)完全切斷Path和回復(fù)功能之間的聯(lián)系以破壞回復(fù)能力。因此,站點(diǎn)被要求以工作答復(fù)的形式盡可能多的保留Path,直到1984年1月1日。在早期的實(shí)現(xiàn)中,Path并不總是被認(rèn)為是有效的回復(fù)串,并且這個(gè)問(wèn)題沒(méi)有明確要求被實(shí)現(xiàn)。然而,一般約定是把站點(diǎn)名和一個(gè)”!”號(hào)放在Path前面,并且Path以站點(diǎn)名,”!”號(hào),并且用戶(hù)名至少要保持到1984年。
2.2 Optional Headers
2.2.1 Reply-To 這一行的格式和From行一樣。如果被使用了,回復(fù)給作者時(shí)將從這里獲得作者名字。否則,回復(fù)給作者是將從From行得到作者名字。(譯者注:沒(méi)有翻譯This does not prevent additional copies from being sent to recipients named by the replier, or on To or Cc lines.)全名會(huì)隨便出現(xiàn)在From行的()中。
2.2.2 Sender 這個(gè)選項(xiàng)只有由文章提交者手動(dòng)加入到From行。它被用來(lái)記錄將文章提交到網(wǎng)絡(luò)中的一個(gè)實(shí)際證據(jù),并且由提交文章的主機(jī)上的軟件進(jìn)行檢測(cè)。
例如,如果John Smith訪問(wèn)CCA并且想使用名字Sarah Jones在網(wǎng)絡(luò)上發(fā)表一篇文章,則文章會(huì)是這樣的
From: smith@ucbvax.uucp (John Smith)
Sender: jones@cca.arpa (Sarah Jones)
如果網(wǎng)關(guān)程序?qū)⒁环鈦?lái)自站點(diǎn)sri-unix的郵件發(fā)往網(wǎng)絡(luò),則
From: John.Doe@CMU-CS-A.ARPA
Sender: network@sri-unix.ARPA
這個(gè)選項(xiàng)的只要目的是給文章留下個(gè)記號(hào)以確定它是怎樣被放入網(wǎng)絡(luò)中的。全名會(huì)隨便出現(xiàn)在From行的()中
2.2.3 Followup-To 這一行和Newsgroups行的格式一樣。如果被選中,跟帖的文章會(huì)被發(fā)布到這里列出的新聞組中。如果沒(méi)有被選中,跟貼的文章會(huì)被發(fā)送到Newsgroups行列出的新聞組中,例外的是,發(fā)往”net.general”的跟貼會(huì)代替發(fā)往”net.followup”的跟帖。
2.2.4 Date-Received 這一行(以前稱(chēng)為”Received”)是一個(gè)合法的USENET日期格式。它記錄了文章在本地系統(tǒng)中第一次傳送的時(shí)間和日期。如果使用了這個(gè)選項(xiàng)的文章被主機(jī)傳送給其他的機(jī)器,接收主機(jī)會(huì)忽略這個(gè)選項(xiàng),并且用當(dāng)前時(shí)間替換這個(gè)選項(xiàng)。因?yàn)檫@個(gè)選項(xiàng)只是在本地使用,所以沒(méi)有站點(diǎn)被要求支持它。然而,沒(méi)有站點(diǎn)應(yīng)當(dāng)將這個(gè)選項(xiàng)沒(méi)有改變的傳遞給其他站點(diǎn)。
2.2.5 Expires 這個(gè)選項(xiàng)如果被選中,則是一個(gè)合法的USENET日期格式。它暗示了一個(gè)文章應(yīng)該過(guò)期的日期。如果沒(méi)有被選中,使用本地默認(rèn)的過(guò)期日期。
這個(gè)選項(xiàng)被用于清除有條件限制的文章,或者使重要文章能保留更長(zhǎng)的時(shí)間。例如,一條通告某個(gè)研討會(huì)開(kāi)幕的消息有最遲為研討會(huì)結(jié)束日期的時(shí)間限制,因?yàn)檫@條信息在研討會(huì)結(jié)束后就沒(méi)用了。因?yàn)楸镜刂鳈C(jī)對(duì)新聞的過(guò)期時(shí)間有自己的限制(如有效的磁盤(pán)限制),所以用戶(hù)不得不給文章一個(gè)日期限制,除非這篇文章的主題有一個(gè)默認(rèn)的日期限制。系統(tǒng)軟件幾乎從不提供Expires行。它會(huì)允許本地限制策略使用,除非有一個(gè)很好的理由不用它。
2.2.6 References 這個(gè)選項(xiàng)列出了所有在提交這篇文章時(shí)參考到的文章的Message-ID。所有的跟帖都需要這個(gè)選項(xiàng),當(dāng)一個(gè)新主題出現(xiàn)時(shí),禁止使用這個(gè)選項(xiàng)。具體的實(shí)現(xiàn)需要提供一個(gè)跟帖命令,以使用戶(hù)可以發(fā)布跟帖。這個(gè)命令會(huì)產(chǎn)生和原文一樣的主題行,區(qū)別是原文主題行不以”Re: ”或者”re: ”開(kāi)頭,而跟帖會(huì)在主題前加上”Re: ”四個(gè)字符。如果原文中沒(méi)有References選項(xiàng),則跟帖中只會(huì)包含本文的Message-ID(在<>中)。如果原文中有References選項(xiàng),則跟帖的主題行會(huì)包含References,一個(gè)空格,原文的Message-ID。
這個(gè)選項(xiàng)的主要目的是使文章成為一個(gè)組,則用戶(hù)程序就可以在組中進(jìn)行交流了。它允許一個(gè)新聞組中的會(huì)話保持在一起。潛在的用會(huì)可以只關(guān)閉整個(gè)會(huì)話,而不需要到新聞組中取消預(yù)訂。這個(gè)選項(xiàng)可能對(duì)用戶(hù)界面無(wú)效,但是對(duì)于允許這個(gè)選項(xiàng)的系統(tǒng)來(lái)說(shuō),這個(gè)選項(xiàng)有益于產(chǎn)生自動(dòng)回復(fù),并且手動(dòng)的回復(fù)(已經(jīng)被打印的文章能被更好的輸入)也被鼓勵(lì)包含這個(gè)選項(xiàng)。
2.2.7 Control 如果文章含有Control行,則文章就是控制消息。控制信息用于USENET主機(jī)間通訊,不會(huì)被用戶(hù)讀到。控制消息和一般消息一樣分布在各個(gè)新聞組之間。控制航的內(nèi)容是給主機(jī)的消息。
因?yàn)榧嫒菪缘脑颍ヅ湫侣劷M樣式”all.all.ctl”的信息也是控制信息。如果這樣的控制消息沒(méi)有Control項(xiàng),則消息頭部中的主題作為控制消息。然而,匹配這種樣式的新聞組的消息和本標(biāo)準(zhǔn)是不一致的。
2.2.8 Distribution 這行可以改變發(fā)布消息的范圍。它和Newsgroup的格式一樣。用戶(hù)是否訂閱仍舊被Newsgroup選項(xiàng)控制,但是消息會(huì)發(fā)給所有在Distribution中列出的訂閱了這個(gè)新聞組的系統(tǒng)。因此,一個(gè)在新澤西販賣(mài)汽車(chē)的文章會(huì)有這樣的頭部
Newsgroups: net.auto,net.wanted
Distribution: nj.all
因而,文章僅會(huì)發(fā)給那些在新澤西訂閱了”net.auto”或”net.wanted”的個(gè)人。這個(gè)頭部項(xiàng)的目的是進(jìn)一步限制文章在新聞組中的發(fā)布,而不是擴(kuò)大。一個(gè)本地新聞組,如nj.crazy-eddie,在新澤西外面且認(rèn)為這個(gè)新聞組無(wú)效的站點(diǎn)將不會(huì)被發(fā)布。Distribution行中允許出現(xiàn)通配符。跟帖文章默認(rèn)和原先的文章有一樣Distribution。用戶(hù)可以給他增加更多的限制,如果原文由很多限制,但是需要更加廣泛的回復(fù),則需要放寬這個(gè)限制。
2.2.9 Organization 這一行的文本簡(jiǎn)短的描述了文章發(fā)送者,或者機(jī)器所屬的組織機(jī)構(gòu)。這個(gè)選項(xiàng)的主要目的是確定文章發(fā)送者的身份,因?yàn)橹鳈C(jī)名常常是比較秘密的,以至于很難通過(guò)電子郵件地址確認(rèn)組織。
3 控制消息
這個(gè)部分列出了當(dāng)前定義的一些控制消息。控制頭部的主體是控制消息。控制消息是一串有0個(gè)或多個(gè)單詞,并且單詞相互間以空格(空格或TaB)隔開(kāi)的字符串。第一個(gè)單詞是控制信息的名稱(chēng),接下來(lái)一個(gè)是消息參數(shù)。剩余的串是消息主體,同時(shí)也是潛在的參數(shù);如,F(xiàn)rom行會(huì)指出一個(gè)用于應(yīng)答的地址。程序和管理員會(huì)選擇是將控制消息自動(dòng)的發(fā)出,還是手動(dòng)一個(gè)一個(gè)發(fā)出。然而,手動(dòng)處理控制消息往往是很有效的。
3.1 Cancel
cancel <message ID>
如果Message-ID所對(duì)應(yīng)的文章出現(xiàn)在本地系統(tǒng)中,則會(huì)刪除該文章。這個(gè)消息允許用戶(hù)刪除一篇已經(jīng)進(jìn)入網(wǎng)絡(luò)的文章。
只允許文章的作者或是本地超級(jí)用戶(hù)被允許使用這個(gè)命令。文章的發(fā)送者的校驗(yàn)首先在Sender選項(xiàng)中進(jìn)行,如果沒(méi)有這個(gè)選項(xiàng),則在From中校驗(yàn)。有效的Cancel消息的發(fā)送者必須是、原文章種Sender,或者From中的一個(gè)發(fā)送者。一個(gè)有效的發(fā)送者允許在原文中無(wú)效的From中出現(xiàn)。
3.2 Ihave/Sendme
ihave <message ID list> <remotesys>
sendme <message ID list> <remotesys>
這個(gè)消息屬于”Ihave/Sendme”協(xié)議部分。它允許站點(diǎn)A告訴另外一個(gè)站點(diǎn)B,它收到一條特別的消息。假設(shè)A收到文章”ucbvax.1234”,并且想把它傳送給站點(diǎn)B。A首先會(huì)傳送控制消息”ihave ucbvax.1234 A”給B(以發(fā)給“新聞組B”的形式發(fā)送)。如果B沒(méi)有收到過(guò)這篇文章,則返回一個(gè)控制消息”sendme ucbvax.1234 B”(發(fā)給“新聞組A”)。一旦A收到這條消息,它會(huì)把文章發(fā)給B。這個(gè)協(xié)議可以切斷兩個(gè)站點(diǎn)間的通道。只有在某些特殊情況下才可以使用這條消息。一般的情況是,大部分的消息是很短的,但是突然間需要用UUCP傳輸一個(gè)很長(zhǎng)的消息,這時(shí)發(fā)送“ihave”消息比直接發(fā)送文章要經(jīng)濟(jì)得多。
一個(gè)解決這種高消耗問(wèn)題的方法是批請(qǐng)求。很多的Message-ID被包含在一個(gè)消息中。如果在控制消息中沒(méi)有Message-ID,則需要掃描消息主體來(lái)尋找Message-ID,一個(gè)一行。
3.3 Newgroup
newgroup <groupname>
這條控制消息創(chuàng)建一個(gè)給定名稱(chēng)的新聞組。因?yàn)樾侣劷M被創(chuàng)建前不會(huì)有文章被發(fā)布或者跟帖,所以這條消息在新聞組被使用前必需被使用。消息的主體應(yīng)該是關(guān)于新聞組使用的一段簡(jiǎn)短的描述。
3.4 Rmgroup
rmgroup <groupname>
這個(gè)消息刪除一個(gè)給定名稱(chēng)的新聞組。因?yàn)檫@個(gè)命令會(huì)刪除所有站點(diǎn)中的選中的新聞組,所以管理員要十分小心的使用它。
3.5 Sendsys
sendsys (no arguments)
“sys”文件列出了所有的鄰居站點(diǎn),并且那些被發(fā)送給每個(gè)鄰居的新聞組將會(huì)被郵寄給控制信息中指出的作者(首先在Reply-to中找,沒(méi)有再在From中找)。這個(gè)信息被認(rèn)為是公開(kāi)的信息,并且在USENET網(wǎng)絡(luò)會(huì)員的要求下,被按照要求的提供(譯者注:這里可能有問(wèn)題,原文and it is a requirement of membership in USENET that this information be provided on request),或者是自動(dòng)作為這個(gè)消息的應(yīng)答信息,或者是手動(dòng)發(fā)一份郵件給這條信息的作者。這些信息用于USENET保持一份地圖以便更新數(shù)據(jù),并且決定哪些網(wǎng)絡(luò)新聞需要發(fā)布。
發(fā)給作者的郵件中的信息文件的格式和”sys”文件格式是一樣的。這種格式是每個(gè)鄰居站點(diǎn)一行(加上本地站點(diǎn)一行),包含以冒號(hào)隔開(kāi)的四個(gè)不同的區(qū)域。第一個(gè)是鄰居站點(diǎn)的名稱(chēng),第二個(gè)是發(fā)送給鄰居的新聞組的樣式,第三個(gè)和第四個(gè)在這個(gè)標(biāo)準(zhǔn)中沒(méi)有定義。一個(gè)簡(jiǎn)單的應(yīng)答如下:
From cbosgd!mark Sun Mar 27 20:39:37 1983
Subject: response to your sendsys request
To: mark@cbosgd.UUCP
Responding-System: cbosgd.UUCP
cbosgd:osg,cb,btl,bell,net,fa,to,test
ucbvax:net,fa,to.ucbvax:L:
cbosg:net,fa,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews/cbosg
cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb
sescent:net,fa,bell,btl,cb,to.sescent:F:/usr/spool/outnews/sescent
npois:net,fa,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois
mhuxi:net,fa,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi
3.6 Senduuname
senduuname (no arguments)
這個(gè)命令使得”uuname”程序被運(yùn)行,結(jié)果是給控制消息中指出的作者(首先在Reply-to中尋找,沒(méi)有的話在From中尋找)發(fā)一封郵件。這個(gè)程序列出了所有與本地站點(diǎn)相鄰的可以使用UUCP功能的主機(jī)。這個(gè)信息用于建立一個(gè)UUCP網(wǎng)路的地圖。sys文件和UUCP的L.sys文件不一樣。沒(méi)有那些口令被列出的站點(diǎn)的同意,L.sys文件不會(huì)把自己傳送給另外的作者。
站點(diǎn)提供這些信息是可選的。一些回復(fù)應(yīng)該給控制信息中提到的作者,以便使傳輸錯(cuò)誤變得不是不可饒恕。它也允許站點(diǎn)使用運(yùn)行uuname程序(或其他的方式?jīng)Q定UUCP鄰居),并且將回復(fù)郵寄給作者前自動(dòng)或手動(dòng)的編輯信息。這個(gè)文件每一行一個(gè)站點(diǎn),以UUCP站點(diǎn)名稱(chēng)開(kāi)頭。額外的信息可以加載站點(diǎn)名后面,兩者以空格或TAB鍵隔開(kāi)。電話號(hào)碼和密碼不應(yīng)該被包含在文件中,因?yàn)檫@個(gè)文件被認(rèn)為是公開(kāi)的信息(uuname程序只會(huì)傳送站點(diǎn)名稱(chēng),而非整個(gè)L.sys文件,因此,電話號(hào)碼和密碼不會(huì)被傳送)。
這個(gè)控制信息的目的是產(chǎn)生并且維持一個(gè)UUCP傳輸路徑圖。因此,連接可以通過(guò)那些可以發(fā)送電子郵件的站點(diǎn)!無(wú)論鏈接是否在物理層的UUCP鏈接,都因該包含一個(gè)用戶(hù)格式。如果一個(gè)郵件網(wǎng)關(guān)要用到它,也要包含它。因?yàn)樗羞@個(gè)信息的應(yīng)答都是可選的,所以站點(diǎn)可以自由的編輯這個(gè)列表,并決定是否公開(kāi)那些私有或秘密的行。
3.7 Version
version (no arguments)
運(yùn)行在本地系統(tǒng)上的軟件的名稱(chēng)和版本會(huì)被郵寄給控制消息中提到的作者(首先在Reply-to中尋找,沒(méi)有的話在From中尋找)。
傳輸方法
USENET系統(tǒng)不是一個(gè)物理級(jí)的網(wǎng)絡(luò),而是存在于多個(gè)物理級(jí)網(wǎng)絡(luò)上的邏輯網(wǎng)絡(luò)。這些網(wǎng)絡(luò)包括,但不僅限于,UUCP,ARPANET,Ethernet,BLICN網(wǎng),NSC Hyperchannel,和Berknet。重要的是在USENET兩個(gè)系統(tǒng)間有辦法交換文章,文章以這里列出的格式從一個(gè)系統(tǒng)到另外一個(gè)系統(tǒng),并且在接收系統(tǒng)上,可以使用網(wǎng)絡(luò)新聞軟件處理接收到的文章。(在UNIX系統(tǒng)中,這樣常常意味著”rnews”程序開(kāi)始處理在標(biāo)準(zhǔn)輸入中的文章)
雖然USENET上的系統(tǒng)不需要有能力去懂得ARPA互聯(lián)網(wǎng)上的郵件格式,但是我們強(qiáng)力建議具體的實(shí)現(xiàn)有這個(gè)能力。因?yàn)镕rom,Reply-To,和 Sender 行使用的是互聯(lián)網(wǎng)的格式,所以用非互聯(lián)網(wǎng)格式回復(fù)變得不可能。一個(gè)沒(méi)有互聯(lián)網(wǎng)郵件系統(tǒng)的站點(diǎn)可以使用Path行來(lái)回復(fù),但是這個(gè)選項(xiàng)不能確保是這個(gè)回復(fù)路徑是否還在工作中。在任何情況下,任何站點(diǎn)產(chǎn)生或者傳輸?shù)男侣勏⒍夹枰幸粋€(gè)互聯(lián)網(wǎng)地址,允許它們接受來(lái)自使用互聯(lián)網(wǎng)郵件格式的站點(diǎn)的郵件,并且他們必須在他們的From行中包含他們的互聯(lián)網(wǎng)地址。
4.1 遠(yuǎn)程執(zhí)行
一些網(wǎng)絡(luò)允許遠(yuǎn)程執(zhí)行命令。在這些系統(tǒng)中,新聞會(huì)以命令和標(biāo)準(zhǔn)輸入的文章捆綁的形式發(fā)送。例如,如果遠(yuǎn)程系統(tǒng)名叫”remote”,新聞會(huì)伴隨著命令” uux -remote!rnews”通過(guò)UUCP鏈接傳送,在Berknet中,命令為” net -mremote rnews”。因?yàn)槲恼率鞘褂每煽康臋C(jī)制傳輸?shù)模砸话惆衙詈臀恼吕墏魉停皇沁h(yuǎn)程直接執(zhí)行命令。這樣做的原因是,如果遠(yuǎn)程系統(tǒng)關(guān)閉了,遠(yuǎn)程命令就會(huì)失敗,并且文章也不會(huì)被傳送出去。如果文章被捆綁了,最后當(dāng)系統(tǒng)都啟動(dòng)后,它還是會(huì)被發(fā)送。
4.2 使用郵件傳送
在一些系統(tǒng)中,直接的捆綁遠(yuǎn)程命令是不可以的,但是,絕大系統(tǒng)的文章都郵件功能,并且新聞文章可以以郵件的形式發(fā)送。一種方法是發(fā)送一封和新聞消息一樣的郵件消息:郵件頭是新聞?lì)^,郵件主體是新聞主題。我們約定這種郵件是發(fā)給遠(yuǎn)程機(jī)器上的用戶(hù)”newsmail”。
這種方法可能遇到的問(wèn)題是郵件系統(tǒng)可能不認(rèn)為消息中的From行是有效的,因?yàn)檫@個(gè)郵件消息是被系統(tǒng)程序自動(dòng)產(chǎn)生的,和原文不一樣。還有一個(gè)問(wèn)題是在郵件傳輸中產(chǎn)生的錯(cuò)誤的消息會(huì)發(fā)給文章的作者,但是他不能控制文章在兩個(gè)協(xié)同工作主機(jī)間的傳送,也不知道應(yīng)該通知誰(shuí)。傳輸?shù)腻e(cuò)誤信息應(yīng)該發(fā)給發(fā)送機(jī)器上可靠的人。
解決這種問(wèn)題的方法是將文章壓縮為一個(gè)郵件消息,以至于整個(gè)文章(頭部和主體)成為郵件主體的一部分。我們約定這種郵件是發(fā)給遠(yuǎn)程機(jī)器上的用戶(hù)”rnews”。在新聞文章每一行的頭部加上一個(gè)字母’N’,再產(chǎn)生附加的郵件頭部,這樣就構(gòu)成了一個(gè)郵件消息。加上’N’是為了防止文章中特殊的行妨礙郵件的傳送,也是方式在成為郵件的一部分時(shí)被插入額外的行(頭部,空行等等)。接收機(jī)器上的程序接收發(fā)給”rnews”的郵件并提取文章,然后調(diào)用”rnew”程序。消息郵件的一個(gè)例子為:
Date: Monday, 3-Jan-83 08:33:47 MST
From: news@cbosgd.UUCP
Subject: network news article
To: rnews@npois.UUCP
NRelay-Version: B 2.10 2/13/83 cbosgd.UUCP
NPosting-Version: B 2.9 6/21/82 sask.UUCP
NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek
NFrom: derek@sask.UUCP (Derek Andrew)
NNewsgroups: net.test
NSubject: necessary test
NMessage-ID: <176@sask.UUCP>
NDate: Monday, 3-Jan-83 00:59:15 MST
N
NThis really is a test. If anyone out there more than 6
Nhops away would kindly confirm this note I would
Nappreciate it. We suspect that our news postings
Nare not getting out into the world.
N
使用郵件解決捆綁問(wèn)題是因?yàn)楫?dāng)目標(biāo)機(jī)器關(guān)閉的時(shí)候郵件必須被捆綁。然而,它增加了傳輸處理的消耗(為了壓縮和提取文章),并且使得軟件在給郵件和新聞不同的優(yōu)先權(quán)時(shí)產(chǎn)生了困難。
4.3 批處理
因?yàn)樾侣剢?wèn)斬往往是很短的,并且在一天之中兩個(gè)站點(diǎn)間會(huì)傳送大量的文章,所以感覺(jué)可以批處理文章。很多文章可以使用在兩個(gè)站點(diǎn)間約定的習(xí)慣結(jié)合成一篇大的文章。一種批處理策略在這里討論,并且它是經(jīng)過(guò)實(shí)驗(yàn)的。
新聞文章被組合成劇本一樣,使用下面的方式隔開(kāi):
##! rnews 1234
1234是文章的字節(jié)長(zhǎng)度。每一個(gè)這樣的行后面跟著一篇給定字節(jié)長(zhǎng)度的文章。文章的最后一個(gè)新行有意被作為一個(gè)字符,即使它是以CRFL的形式存儲(chǔ)的。如,文章的批處理看起來(lái)是這樣的:
#! rnews 374
Relay-Version: version B 2.10 2/13/83; site cbosgd.UUCP
Posting-Version: version B 2.10 2/13/83; site eagle.UUCP
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
From: jerry@eagle.uucp (Jerry Schwarz)
Newsgroups: net.general
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.UUCP>
Date: Friday, 19-Nov-82 16:14:55 EST
這里是重要的USENET禮節(jié)信息。
#! rnews 378
Relay-Version: version B 2.10 2/13/83; site cbosgd.UUCP
Posting-Version: version B 2.10 2/13/83; site eagle.UUCP
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
From: jerry@eagle.uucp (Jerry Schwarz)
Newsgroups: net.followup
Subject: Notes on Etiquette article
Message-ID: <643@eagle.UUCP>
Date: Friday, 19-Nov-82 17:24:12 EST
這里有一些我在文章末尾忘記提及的內(nèi)容。
因?yàn)橄⒌牡谝粋€(gè)字符是”#”,所以它被認(rèn)為是一個(gè)批處理消息。這個(gè)消息隨后會(huì)被傳遞并且被解釋成非批處理的形式。
5 . 新聞的傳播算法
這個(gè)部分要介紹整個(gè)的USENET系統(tǒng)和站點(diǎn)將新聞傳送到整個(gè)網(wǎng)絡(luò)的算法。因?yàn)樗械恼军c(diǎn)都可能被不正確的文章格式和錯(cuò)誤消息所影響,所以確定一個(gè)標(biāo)準(zhǔn)的方法是很重要的。USENET是一副有向圖。圖中的每個(gè)節(jié)點(diǎn)就是一臺(tái)主機(jī),每條邊就是一條從一個(gè)主機(jī)到另外一個(gè)主機(jī)的傳播路徑。每條邊都被表上了一個(gè)新聞組樣式,用于說(shuō)明在這個(gè)鏈接上傳輸?shù)男侣劷M類(lèi)。大部分的邊都是雙向的,那是因?yàn)槿绻鸄可以發(fā)送新聞組類(lèi)到B,B往往也可以發(fā)送一樣新聞組類(lèi)到A。這樣的雙向路徑不是必需的,但是不能沒(méi)有。
USENET有很多的子網(wǎng)組成。每個(gè)子網(wǎng)都有一個(gè)名字,如”net”或者”btl”。特殊的子網(wǎng)”net”被定義成USENET,雖然所有的子網(wǎng)合起來(lái)是USENET的超集(因?yàn)檎军c(diǎn)得到了本地的新聞組,但是沒(méi)有得到”net.all”)。沒(méi)一個(gè)子網(wǎng)都是一副連接圖,即在子網(wǎng)的兩個(gè)站點(diǎn)間至少存在一條路徑。額外的是,整個(gè)USENET圖(理論上)也是連接圖。(特別的是,一些政治上的考慮會(huì)使一些站點(diǎn)不能發(fā)布文章到網(wǎng)絡(luò)上的其他地方。)
一篇文章被發(fā)布到一篇公布了新聞組目錄的機(jī)器上。這臺(tái)機(jī)器的一些新聞組接受它,并且把它轉(zhuǎn)發(fā)給那些對(duì)它有興趣并且至少有一個(gè)新聞組的鄰居主機(jī)(站點(diǎn)A認(rèn)為B對(duì)新聞?dòng)信d趣,僅當(dāng)文章所屬的新聞組匹配從A到B的路徑上的新聞組)。這個(gè)站點(diǎn)接收傳來(lái)的文章,檢查它是否為想要得到的文章,然后把它放到相應(yīng)的新聞組,最后繼續(xù)將這篇文章傳遞給那些感興趣的鄰居主機(jī)。這個(gè)過(guò)程一直會(huì)持續(xù)到整個(gè)網(wǎng)絡(luò)都能看到這篇文章。
算法重要的一個(gè)部分就是防止文章在網(wǎng)絡(luò)中循環(huán)傳遞。上面的過(guò)程會(huì)導(dǎo)致消息在一個(gè)環(huán)中一直傳遞。特別的是,當(dāng)站點(diǎn)A將文章傳遞給站點(diǎn)B后,B會(huì)把文章在反傳給A,這樣不斷的重復(fù)傳遞。一種解決方法是進(jìn)行歷史記錄。每一個(gè)站點(diǎn)都將它已經(jīng)看到的文章記錄下來(lái)(記錄Message-ID),一旦它收到一篇它已經(jīng)看到過(guò)的文章,就會(huì)馬上丟棄這篇文章。這個(gè)方法足可以解決循環(huán)傳遞問(wèn)題了,但是還有更好的優(yōu)化避免將文章簡(jiǎn)單的丟棄。
一種優(yōu)化方法是文章不會(huì)傳遞給那些在文章Path選項(xiàng)中列出的站點(diǎn)。當(dāng)一個(gè)機(jī)器名字出現(xiàn)在Path行中時(shí),意味著文章已經(jīng)傳遞給這個(gè)機(jī)器了。還有一種優(yōu)化是,如果文章在站點(diǎn)A被創(chuàng)建,則認(rèn)為A已經(jīng)看到過(guò)它了。(創(chuàng)建主機(jī)可以由Posting-Version選項(xiàng)確定)
因而,一篇發(fā)布給新聞組”net,misc”的文章會(huì)自動(dòng)匹配”net.all”(“all”是通配符,并且匹配任何傳),并且會(huì)被發(fā)布給訂閱了”net.all”的所有站點(diǎn)(由他們的鄰居發(fā)送給他們的信息決定)。這些站點(diǎn)構(gòu)成了子網(wǎng)”net”。所有發(fā)給” btl.general”的文章都會(huì)到達(dá)接收”btl.all”的站點(diǎn),但是不會(huì)到達(dá)沒(méi)有”btl.all”的站點(diǎn)。結(jié)果是文章到達(dá)了子網(wǎng)”btl”,發(fā)給” net.micro,btl.general”的文章會(huì)到達(dá)所有訂閱了”net.all”,或者”btl.all”的站點(diǎn)。
譯者注:所有的個(gè)人,媒體,和其他機(jī)構(gòu)都可以無(wú)償轉(zhuǎn)發(fā)或者修正我的文章,但是任何的修正都要事先通知我,我的郵箱是:ghbxx2004@yahoo.com.cn。