Network Working Group M. Horton
Request for Comments: 1036 AT&T Bell Laboratories
Obsoletes: RFC-850 R. Adams
Center for Seismic Studies
December 1987
USENET消息交換標(biāo)準(zhǔn)
備忘錄地位
這份文檔定義了在USENET主機(jī)間交換網(wǎng)絡(luò)新聞消息的標(biāo)準(zhǔn)格式。它更新并替換了RFC850,參照了新聞程序B2.11。這份備忘錄以RFC形式發(fā)布是為了使因特網(wǎng)社區(qū)更容易的得到這個(gè)信息。它沒(méi)有指出一種因特網(wǎng)標(biāo)準(zhǔn)。備忘錄的發(fā)行沒(méi)有任何限制。
1. 介紹
這份文檔定義了在USENET主機(jī)間交換網(wǎng)絡(luò)新聞所用到的標(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)在Internet網(wǎng)絡(luò)中存在多年了,它適合USENET系統(tǒng)絕大部份的需求。因?yàn)镮nternet網(wǎng)絡(luò)格式是可以擴(kuò)展的,所以在Internet網(wǎng)絡(luò)標(biāo)準(zhǔn)中進(jìn)行一些擴(kuò)展使之適合USENET系統(tǒng)額外的需求是很容易的。因此,所有的USNNET新聞系統(tǒng)被排版成和由RFC822標(biāo)準(zhǔn)所定義的Internet網(wǎng)絡(luò)中的有效的郵件格式一樣。這份標(biāo)準(zhǔn)在對(duì)每一篇消息發(fā)布一些額外的需求和禁止使用特定的Internet特性上比ARPA網(wǎng)絡(luò)標(biāo)準(zhǔn)有更多的限制。無(wú)論如何,它應(yīng)該總是可以使用一種工具使得一條Internet網(wǎng)絡(luò)消息能處理一篇新聞消息。無(wú)論在什么情況下,當(dāng)這份格式標(biāo)準(zhǔn)和Internet標(biāo)準(zhǔn)發(fā)生沖突時(shí),RFC822被認(rèn)為是正確的。
用于舉例說(shuō)明的一個(gè)樣例:
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.ATT.COM>
Date: Fri, 19 Nov 82 16:14:55 GMT
Followup-To: news.misc
Expires: Sat, 1 Jan 83 00:00:00 -0500
Organization: AT&T Bell Laboratories, Murray Hill
接下來(lái)是一個(gè)空行,然后是消息的主體。
這里有一個(gè)使用老的格式(在這份標(biāo)準(zhǔn)存在以前)的消息。建議具體的實(shí)現(xiàn)也能接受這種消息格式使得轉(zhuǎn)換更加的容易。
From: cbosgd!mhuxj!mhuxt!eagle!jerry (Jerry Schwarz)
Newsgroups: news.misc
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
news.misc
cbosgd!mhuxj!mhuxt!eagle!jerry
Fri Nov 19 16:14:55 1982
Usenet Etiquette - Please Read
接下來(lái)直接是消息的主體。
標(biāo)準(zhǔn)的USENET消息有很多頭部行,接下來(lái)是一個(gè)空行,接著是消息主體消息。每一個(gè)頭部行包括一個(gè)關(guān)鍵字,一個(gè)冒號(hào),一個(gè)空行,和一些附加信息。這是Internet網(wǎng)絡(luò)標(biāo)準(zhǔn)的子集,可以使簡(jiǎn)單的軟件輕松的處理它。”from”行可以隨意的以上面例子中給出的格式,或則使用Internet的<>符號(hào)。為了使實(shí)現(xiàn)簡(jiǎn)單,一些格式(比如:圓括號(hào)后面緊跟機(jī)器地址)是不允許出現(xiàn)的。
一些頭部是必需的,一些是可選的。所有的自定義頭部都是允許的,并且會(huì)被原樣傳送。必需的頭部有"From", "Date", "Newsgroups", "Subject", "Message-ID", 和 "Path"。可選的頭部有"Followup-To", "Expires", "Reply-To", "Sender", "References", "Control", "Distribution", "Keywords", "Summary", "Approved", "Lines", "Xref", 和 "Organization"。
2.1 必需的頭部
2.1.1 From
這行包含了發(fā)送這個(gè)消息的人的Internet格式的郵箱地址。在郵箱地址后面可以跟著一對(duì)()符號(hào),里面是一個(gè)全名。郵箱地址和現(xiàn)實(shí)中一樣由消息的作者確定,除非使From行不再被檢查的Sender頭部被使用。注意在所有的站點(diǎn)和域名中,大小寫(xiě)是一樣的,因此,mark@cbosgd.ATT.COM, mark@cbosgd.att.com,和mark@CBosgD.ATt.COm是一個(gè)地址。用戶名可能大小寫(xiě)敏感,也可能不敏感。比如,Billy@cbosgd.ATT.COM 也許會(huì)和BillY@cbosgd.ATT.COM不一樣。程序在傳輸郵件或新聞時(shí)應(yīng)當(dāng)避免改變電子郵件的語(yǔ)法。
RFC822指出在()中的文字都是注釋。在Internet網(wǎng)絡(luò)中郵件也使用這種方法把用戶的全名作為注釋放在From行的結(jié)尾。這份標(biāo)準(zhǔn)作一個(gè)嚴(yán)格的規(guī)定。全名不是一個(gè)注釋,它是頭部行可選的一個(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.2 Data
Date行(以前稱”Posted”)是一個(gè)可以被RFC822和USENET軟件中的日期程序接受的日期。當(dāng)消息在網(wǎng)路中傳播時(shí),日期不會(huì)被改變。一個(gè)可以接受的Date格式如下
Wdy, DD Mon YY HH:MM:SS TIMEZONE
在前面的樣例中出現(xiàn)了很多日期格式。注意C(譯者注:原文為ctime,即c語(yǔ)言的時(shí)間格式)時(shí)間格式
Wdy Mon DD HH:MM:SS YYYY
是不允許的,因?yàn)樗皇荝FC822中有效的時(shí)間格式。然而,因?yàn)槔系能浖耘f支持這種格式,建議新版本的程序也支持這種格式,并且將它轉(zhuǎn)化成一種可以接受的格式
不期待有一個(gè)我完整的TIMEZONE域列表。國(guó)際時(shí)間(GMT),北美時(shí)間(PST, PDT, MST, MDT, CST, CDT, EST, EDT)和在RFC822被說(shuō)明的+/-hhmm(這里作為一個(gè)名詞沒(méi)有翻譯)偏移都應(yīng)當(dāng)被支持。
2.1.3 Newsgroups
Newsgroups行確定消息屬于哪個(gè)新聞組。可能會(huì)出現(xiàn)多個(gè)新聞組,相互間用逗號(hào)隔開(kāi)。新聞組的詳細(xì)描述必須是所有已經(jīng)存在的新聞組的名稱,沒(méi)有新聞組會(huì)因?yàn)楸缓?jiǎn)單的發(fā)布而被建立。
通配符(比如單詞”all”)在Newsgroups中是不允許出現(xiàn)的。例如,新聞組”net.all”是無(wú)效的,但是新聞組名稱”net.sport.football”是允許的。
如果一個(gè)接收到的消息中即有有效的新聞組,也有無(wú)效的新聞組,那么站點(diǎn)會(huì)忽略掉無(wú)效的新聞組,而不是將他們移除。比如,站點(diǎn)A訂閱了”btl.net”和”comp.all”,它和一個(gè)訂閱了”btl.net”但沒(méi)有訂閱”comp.all”的站點(diǎn)B交換新聞消息。假設(shè)A收到了一篇Newsgroups項(xiàng)為“Newsgroups: comp.unix,btl.general“的消息。
這個(gè)消息會(huì)發(fā)給B,因?yàn)锽接受” comp.unix”,但是不接受”btl.general”。A必須要保持消息的Newsgroups不變。如果它移除”btl.general”,編輯后的頭部可能是最后一次進(jìn)入”btl.general”,導(dǎo)致很多訂閱了”btl.general”的用戶無(wú)法看到消息。此外,所有定閱了”btl.net”的用戶將不會(huì)再看到這種類(lèi)型的消息。
2.1.4 Subject
Subject行(過(guò)去稱為”Title”)告訴我們這個(gè)消息的內(nèi)容摘要。它應(yīng)當(dāng)包含足夠的消息內(nèi)容使得讀者可以僅僅根據(jù)摘要來(lái)決定是否閱讀這個(gè)消息。如果這個(gè)消息僅僅是對(duì)另外一個(gè)消息的應(yīng)答(比如:跟帖),默認(rèn)的Subject為”Re: ”并且引用行是必需的。因?yàn)槭歉酝扑]使用”Summary”行。
2.1.5 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í)符@full_domain_name>
full_domain_name為消息第一次進(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.EDU的站點(diǎn)ucbvax提交到網(wǎng)絡(luò)的消息的有效的Message-ID為<4123@ucbvax.Berkeley.EDU>。程序員被要求不要假設(shè)Message-ID是來(lái)自其他主機(jī)的,而是將它們看作未知字符串處理。這是不安全的,例如,假設(shè)Message-ID會(huì)少于14個(gè)字符,而前14個(gè)字符不是唯一的也不要認(rèn)為不會(huì)含有”/”。
尖括號(hào)被認(rèn)為是Message-ID的一部分。因此,在如ihave/sendme和cancel控制消息的Message-ID中包含空格鍵。空字符(如空格或者TAB)在Message-ID中是不允許出現(xiàn)的,盡可能不要使用”/”。所有在”<>”中的ASCII字符必須是可打印的。
2.1.6 Path
這行顯示了信息到達(dá)當(dāng)前系統(tǒng)的路徑。當(dāng)一個(gè)系統(tǒng)傳遞信息時(shí),它會(huì)在Path行加上它的特有的名稱。不同的名稱可以被任意的標(biāo)點(diǎn)符號(hào)或者空格隔開(kāi)。因此,下面的是有效的:
cbosgd!mhuxj!mhuxt
cbosgd, mhuxj, mhuxt
@cbosgd.ATT.COM,@mhuxj.ATT.COM,@mhuxt.ATT.COM
teklabs, zehntel, sri-unix@cca!decvax
(最后來(lái)的那個(gè)路徑顯示信息傳遞的順序?yàn)閐ecvax, sri-unix, zehntel, teklabs)后來(lái)的名稱會(huì)被加在Path行的左邊,如,在第三個(gè)例子中,最近加入Path行的站點(diǎn)為”teklabs”。站點(diǎn)名稱可以包含字母,數(shù)字,點(diǎn)號(hào),連字符;其他的標(biāo)點(diǎn)符號(hào)被認(rèn)為是名稱間的分隔符號(hào)。
一般來(lái)說(shuō),最右邊的主機(jī)名稱被認(rèn)為是這篇信息的起始站點(diǎn)。然而,也允許在最右邊加上發(fā)送信息的人的名字。這是為了與其他的系統(tǒng)兼容。
Path行不會(huì)被用于回復(fù)中,并且不應(yīng)當(dāng)被弄成郵件地址的形式。它是用來(lái)顯示將信息傳遞到本地主機(jī)的路徑。這是一個(gè)很有用的信息。一方面可以監(jiān)控USENET系統(tǒng)的執(zhí)行情況。另一方面可以建立一條到達(dá)新主機(jī)的路徑。或許最重要的作用是檢測(cè)多余的無(wú)用通路,并且刪除它。特別的是,當(dāng)主機(jī)A將信息傳輸給主機(jī)B,這時(shí)Path中就含有A,因此B就不會(huì)將信息反傳給A了。定義本主機(jī)的主機(jī)名時(shí)應(yīng)該注意要能被它的鄰居主機(jī)所熟知,使得上述的優(yōu)化得以實(shí)現(xiàn)。
當(dāng)主機(jī)收到一篇消息時(shí),它會(huì)在Path前面加上自己特有的名稱。因此,如果一條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主機(jī)還沒(méi)有使用郵件的人有能力懂得Internet的格式,所以它會(huì)完全切斷Path和回復(fù)功能之間的聯(lián)系以破壞回復(fù)能力。在早期的實(shí)現(xiàn)中,Path并不總是被認(rèn)為是有效的回復(fù)串,并且這個(gè)問(wèn)題沒(méi)有明確要求被實(shí)現(xiàn)。然而,一般約定是把主機(jī)名和一個(gè)”!”號(hào)放在Path前面,并且Path以主機(jī)名,和一個(gè)”!”號(hào),并且要盡可能的保持。
2.2 可選頭部
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ā)表一個(gè)消息,則消息會(huì)是這樣的
From: smith@ucbvax.Berkeley.EDU (John Smith)
Sender: jones@cca.COM (Sarah Jones)
如果網(wǎng)關(guān)程序?qū)⒁环鈦?lái)自站點(diǎn)unix.SRI.COM的郵件發(fā)往網(wǎng)絡(luò),則
From: John.Doe@A.CS.CMU.EDU
Sender: network@unix.SRI.COM
這個(gè)選項(xiàng)的只要目的是給消息留下個(gè)記號(hào)以確定它是怎樣被放入網(wǎng)絡(luò)中的。全名會(huì)隨意的出現(xiàn)在From行的圓括號(hào)<()>中
2.2.3 Followup-To
這一行和Newsgroups行的格式一樣。如果有這個(gè)頭部,跟帖的消息會(huì)被發(fā)布到這里列出的新聞組中。如果沒(méi)有被選中,跟貼的消息會(huì)被發(fā)送到”Newsgroups”行列出的新聞組中。
如果有發(fā)布者的關(guān)鍵字,跟帖消息不不被允許的。這個(gè)消息應(yīng)該被郵件郵寄到消息的發(fā)送者。
2.2.4 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)限制),所以用戶給消息一個(gè)日期限制也沒(méi)什么用,除非這個(gè)消息的主題有一個(gè)默認(rèn)的日期限制。系統(tǒng)軟件幾乎從不提供Expires行。它允許使用本地限制策略,除非有一個(gè)很好的理由不用它。
2.2.5 References
這個(gè)選項(xiàng)列出了所有在提交這個(gè)消息時(shí)參考到的消息的Message-ID。所有的跟帖都需要這個(gè)選項(xiàng),當(dāng)一個(gè)新主題出現(xiàn)時(shí),禁止使用這個(gè)選項(xiàng)。具體的實(shí)現(xiàn)需要提供一個(gè)跟帖命令,以使用戶可以發(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è)組,則用戶程序就可以在組中進(jìn)行交流了。它允許一個(gè)新聞組中的會(huì)話保持在一起。潛在的用會(huì)可以只關(guān)閉整個(gè)會(huì)話,而不需要到新聞組中取消預(yù)訂。這個(gè)選項(xiàng)可能對(duì)用戶界面無(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)。
如果前面的”References”行太長(zhǎng)了,則允許不包含全部的引用。需要嘗試包含合理數(shù)量的后面的引用。
2.2.6 Control
如果文章含有Control行,則文章就是控制消息。控制信息用于USENET主機(jī)間通訊,不會(huì)被用戶讀到。控制消息和一般消息一樣分布在各個(gè)新聞組之間。控制航的內(nèi)容是給主機(jī)的消息。
因?yàn)榧嫒菪缘脑颍ヅ湫侣劷M樣式”all.all.ctl”的信息也是控制信息。如果這樣的控制消息沒(méi)有Control項(xiàng),則消息頭部中的主題作為控制消息。然而,匹配這種樣式的新聞組的消息和本標(biāo)準(zhǔn)是不一致的。
也是兼容性原因,如果"Subject:"行的前4個(gè)字母是"cmsg",則剩下的"Subject:"行的內(nèi)容被認(rèn)為是一個(gè)控制消息。
2.2.7 Distribution
這行可以改變發(fā)布消息的范圍。它和Newsgroup的格式一樣。用戶是否訂閱仍舊被Newsgroup選項(xiàng)控制,但是消息除了” Newsgroup”之外,還發(fā)給所有在Distribution中列出的訂閱了這個(gè)消息新聞組系統(tǒng)。一旦這個(gè)消息被傳輸,接收站點(diǎn)必須正常的將這個(gè)消息接收到” Newsgroup”中指出的一個(gè)新聞組外還要將之接收到” Distribution”中的一個(gè)組中。因此,一個(gè)在新澤西販賣(mài)汽車(chē)的文章會(huì)有這樣的頭部:
Newsgroups: rec.auto,misc.forsale
Distribution: nj,ny
因而,消息僅會(huì)發(fā)給那些在新澤西訂閱了”net.auto”或” misc.forsale”的個(gè)人。這個(gè)頭部項(xiàng)的目的是進(jìn)一步限制文章在新聞組中的發(fā)布,而不是擴(kuò)大。一個(gè)本地新聞組,如nj.crazy-eddie,在新澤西外面且認(rèn)為這個(gè)新聞組無(wú)效的主機(jī)將不會(huì)被發(fā)布。Distribution行中允許出現(xiàn)通配符。跟帖文章默認(rèn)和原先的文章有一樣Distribution。用戶可以給他增加更多的限制,如果原文由很多限制,但是需要更加廣泛的回復(fù),則需要放寬這個(gè)限制。
2.2.8 Organization
這一行的文本簡(jiǎn)短的描述了文章發(fā)送者,或者機(jī)器所屬的組織機(jī)構(gòu)。這個(gè)選項(xiàng)的主要目的是確定文章發(fā)送者的身份,因?yàn)橹鳈C(jī)名常常是比較秘密的,以至于很難通過(guò)電子郵件地址確認(rèn)組織。
2.2.9 Keywords
一些被很好選擇的消息的標(biāo)識(shí)符會(huì)出現(xiàn)在這行。它用于幫助讀者確定這篇文章是否有興趣去讀。
2.2.10 Summary
這一行是消息的大概摘要。它經(jīng)常被作為其它消息跟帖的一部分。此外,它對(duì)于讀者確定是否讀這個(gè)消息也是很有用的。
2.2.11 Approved
任何發(fā)布到中介新聞組(譯者注:這里的意思是這個(gè)新聞組的新聞需要審查)的消息都需要這一行。它由中介人添加,內(nèi)容是中介人的電子郵件地址。控制信息也需要這一行。
2.2.12 Lines
這一行為消息內(nèi)容的行數(shù)。
2.2.13 Xref
這行為一個(gè)主機(jī)名(省略域名),一個(gè)空格,一個(gè)用冒號(hào)<:>隔開(kāi)的列表,列表中的信息分別為在”Newsgroups”中列出的新聞組中的號(hào)碼。
這個(gè)值僅用于本地系統(tǒng),所以他不會(huì)被傳播。如下:
Path: seismo!lll-crg!lll-lcc!pyramid!decwrl!reid
From: reid@decwrl.DEC.COM (Brian Reid)
Newsgroups: news.lists,news.groups
Subject: USENET READERSHIP SUMMARY REPORT FOR SEP 86
Message-ID: <5658@decwrl.DEC.COM>
Date: 1 Oct 86 11:26:15 GMT
Organization: DEC Western Research Laboratory
Lines: 441
Approved: reid@decwrl.UUCP
Xref: seismo news.lists:461 news.groups:6378
這里的”Xref”指出在主機(jī)seismo上的文章在新聞組”news.lists”中的號(hào)碼是641,在新聞組”news.groups”上的號(hào)碼是63778。
3 控制消息
這個(gè)部分列出了當(dāng)前定義的一些控制消息。控制頭部的主體是控制消息。控制消息是一串有0個(gè)或多個(gè)單詞,并且單詞相互間以空格(空格或TaB)隔開(kāi)的字符串。第一個(gè)單詞是控制信息的名稱,接下來(lái)一個(gè)是消息參數(shù)。剩余的串是消息主體,同時(shí)也是潛在的參數(shù);如”From”行會(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è)消息允許用戶刪除一篇已經(jīng)進(jìn)入網(wǎng)絡(luò)的消息。
如果系統(tǒng)不能刪除被請(qǐng)求的消息,它將不會(huì)把該cancel消息傳遞給它的鄰居主機(jī)。
只允許消息的作者或是本地超級(jí)用戶被允許使用這個(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é)議部分。它允許主機(jī)A告訴另外一個(gè)主機(jī)B,它收到一條特別的消息。假設(shè)A收到消息”<1234@ucbvax.Berkeley.edu>”,并且想把它傳送給主機(jī)B。
A首先會(huì)傳送控制消息”ihave <1234@ucbvax.Berkeley.edu>”給B(以發(fā)給“新聞組B”的形式發(fā)送)。如果B沒(méi)有收到過(guò)這篇文章,則返回一個(gè)控制消息”sendme <1234@ucbvax.Berkeley.edu> B”(發(fā)給“新聞組A”)。一旦A收到這條消息,它會(huì)把消息發(fā)給B。
這個(gè)協(xié)議可以切斷兩個(gè)主機(jī)間的通道。它是可選的并且只有在某些值得去做的情況下才可以使用這條消息。一般的情況是,大部分的消息是很短的,但是突然間需要用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> [moderated]
這條控制消息創(chuàng)建一個(gè)給定名稱的新聞組。因?yàn)樾侣劷M被創(chuàng)建前不會(huì)有消息被發(fā)布或者跟帖,所以這條消息在新聞組被使用前必需被使用。消息的主體應(yīng)該是關(guān)于新聞組使用的一段簡(jiǎn)短的描述。
如果有第二個(gè)參數(shù)并且是模板的關(guān)鍵字,這個(gè)新聞組將會(huì)以”moderated”中指明的模板而不是默認(rèn)的模板創(chuàng)建。除非newgroup消息中有”Approved”行,否則消息將會(huì)被忽略。
3.4 Rmgroup
rmgroup <groupname>
這個(gè)消息刪除一個(gè)給定名稱的新聞組。因?yàn)檫@個(gè)命令會(huì)刪除所有站點(diǎn)中的選中的新聞組,所以管理員要十分小心的使用它。除非rmgroup消息中有”Approved”行,否則消息將會(huì)被忽略。
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)的名稱,第二個(gè)是發(fā)送給鄰居的新聞組的樣式,第三個(gè)和第四個(gè)在這個(gè)標(biāo)準(zhǔn)中沒(méi)有定義。一個(gè)簡(jiǎn)單的應(yīng)答如下:
From: cbosgd!mark (Mark Horton)
Date: Sun, 27 Mar 83 20:39:37 -0500
Subject: response to your sendsys request
To: mark@cbosgd.ATT.COM
Responding-System: cbosgd.ATT.COM
cbosgd:osg,cb,btl,bell,world,comp,sci,rec,talk,misc,news,soc,to,test
ucbvax:world,comp,to.ucbvax:L:
cbosg:world,comp,bell,btl,cb,osg,to.cbosg:F:/usr/spool/outnews/cbosg
cbosgb:osg,to.cbosgb:F:/usr/spool/outnews/cbosgb
sescent:world,comp,bell,btl,cb,to.sescent:F:/usr/spool/outnews/sescent
npois:world,comp,bell,btl,ug,to.npois:F:/usr/spool/outnews/npois
mhuxi:world,comp,bell,btl,ug,to.mhuxi:F:/usr/spool/outnews/mhuxi
3.6 Version
version (no arguments)
運(yùn)行在本地系統(tǒ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)輸入中的消息<1>)
雖然USENET上的系統(tǒng)不需要有能力去懂得互聯(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”。
在UUCP中新聞會(huì)伴隨著命令:
” uux -remote!rnews”
在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)傳送
在一些系統(tǒng)中,直接的捆綁遠(yuǎn)程命令是不可以的,但是,絕大系統(tǒng)都郵件功能,并且新聞消息可以以郵件的形式發(fā)送。一種方法是發(fā)送一封和新聞消息一樣的郵件消息:郵件頭是新聞?lì)^,郵件主體是新聞主題。我們約定這種郵件是發(fā)給遠(yuǎn)程機(jī)器上的用戶”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ī)器上的用戶”rnews”。在新聞文章每一行的頭部加上一個(gè)字母’N’,再產(chǎn)生附加的郵件頭部,這樣就構(gòu)成了一個(gè)郵件消息。加上’N’是為了防止消息中特殊的行妨礙郵件的傳送,也是方式在成為郵件的一部分時(shí)被插入額外的行(頭部,空行等等)。接收機(jī)器上的程序接收發(fā)給”rnews”的郵件并提取消息,然后調(diào)用”rnew”程序。消息郵件的一個(gè)例子為:
Date: Mon, 3 Jan 83 08:33:47 MST
From: news@cbosgd.ATT.COM
Subject: network news message
To: rnews@npois.ATT.COM
NPath: cbosgd!mhuxj!harpo!utah-cs!sask!derek
NFrom: derek@sask.UUCP (Derek Andrew)
NNewsgroups: misc.test
NSubject: necessary test
NMessage-ID: <176@sask.UUCP>
NDate: Mon, 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)樾侣勏⑼呛芏痰模⑶以谝惶熘袃蓚€(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 239
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Usenet Etiquette -- Please Read
Message-ID: <642@eagle.ATT.COM>
Date: Fri, 19 Nov 82 16:14:55 EST
Approved: mark@cbosgd.ATT.COM
這里是重要的USENET禮節(jié)信息。
#! rnews 234
From: jerry@eagle.ATT.COM (Jerry Schwarz)
Path: cbosgd!mhuxj!mhuxt!eagle!jerry
Newsgroups: news.announce
Subject: Notes on Etiquette message
Message-ID: <643@eagle.ATT.COM>
Date: Fri, 19 Nov 82 17:24:12 EST
Approved: mark@cbosgd.ATT.COM
這里有一些我在文章末尾忘記提及的內(nèi)容。
因?yàn)橄⒌牡谝粋€(gè)字符是”#”,所以它被認(rèn)為是一個(gè)批處理消息。這個(gè)消息隨后會(huì)被傳遞并且被解釋成非批處理的形式。
第二個(gè)參數(shù)(樣例rnew中)決定了使用哪種其處理機(jī)制。共同運(yùn)作的主機(jī)會(huì)選擇任何合適的機(jī)制。
新聞傳播算法
這個(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ā)布給新聞組misc。misc,它的文章會(huì)自動(dòng)匹配”misc.all”(“all”是通配符,并且匹配任何傳),并且會(huì)被發(fā)布給訂閱了”misc.all”的所有站點(diǎn)(由他們的鄰居發(fā)送給他們的信息決定)。這些站點(diǎn)構(gòu)成了子網(wǎng)”misc”。所有發(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)。
注意:
<1> UNIX是AT&T的注冊(cè)商標(biāo)
譯者注:所有的個(gè)人,媒體,和其他機(jī)構(gòu)都可以無(wú)償轉(zhuǎn)發(fā)或者修正我的文章,但是任何的修正都要事先通知我,我的郵箱是:ghbxx2004@yahoo.com.cn。