對(duì)于Telnet連接的三方考慮
Telnet連接可以完成遠(yuǎn)程登錄。那么在很多應(yīng)用中,這個(gè)協(xié)議的目的并非僅僅局限于此。我們可以將之用于更為廣泛的領(lǐng)域,例如終端到終端的通信以及處理通信等目的。那么現(xiàn)在讓我們?cè)敿?xì)地講述一下這方面的考慮。
Telnet協(xié)議規(guī)范
ARPA Internet上的主機(jī)被要求采用并實(shí)現(xiàn)此標(biāo)準(zhǔn)。Telnet Protocol的目的是提供一個(gè)相對(duì)通用的,雙向的,面向八位字節(jié)的通信方法。它主要的目標(biāo)是允許接口終端設(shè)備的標(biāo)準(zhǔn)方法和面向終端的相互作用??梢灶A(yù)見到,此協(xié)議也可被用于終端到終端的通信和處理到處理的通信(分布式計(jì)算)。
一般考慮
一個(gè)Telnet連接是一個(gè)用于傳輸控制協(xié)議的傳送數(shù)據(jù)的。Telnet協(xié)議是建立在以下三個(gè)想法上的:首先是網(wǎng)絡(luò)虛擬終端的概念;其次是對(duì)話選項(xiàng)的方法;***是終端和處理的協(xié)調(diào)。
當(dāng)一個(gè)Telnet連接被初次建立時(shí),每一端都被假設(shè)使用了網(wǎng)絡(luò)虛擬終端,也就是NVT。NVT是一個(gè)想象中的標(biāo)準(zhǔn)設(shè)備通用設(shè)備的代表。這就消除了“服務(wù)器”和“用戶”機(jī)要了解對(duì)方機(jī)器終端的特點(diǎn),而終端可以直接處理對(duì)話。所有的主機(jī),用戶端的和服務(wù)器端的,它們自己本地的設(shè)備特點(diǎn)因此在網(wǎng)絡(luò)上可以作為一種NVT處理,任何一個(gè)都可以認(rèn)為對(duì)方使用的是相同特點(diǎn)的設(shè)備。NVT傾向于不過多地限制(提供了一個(gè)相應(yīng)比較豐富的映射到本地設(shè)備的字符集),也不是包括一切的(它要求用戶使用適當(dāng)?shù)慕K端)。注意:用戶機(jī)通常是與處理終端連接的主機(jī),服務(wù)器機(jī)通常是提供某種服務(wù)的機(jī)器。從另一點(diǎn)看,在終端到終端或進(jìn)程到進(jìn)程的通信上,用戶機(jī)是發(fā)起通信的機(jī)器。
規(guī)定選項(xiàng)的原理將以下事實(shí)考慮在內(nèi),許多機(jī)器希望在現(xiàn)在的NVT上提供另外的服務(wù),多數(shù)用戶有比較復(fù)雜的終端,它們也就希望一種比較完整的而不是最小的服務(wù)。獨(dú)立的,但是存在于Telnet協(xié)議的不同選項(xiàng)支持這些需求,它們使用"DO, DON'T, WILL, WON'T" 結(jié)構(gòu)允許用戶機(jī)和服務(wù)器建立建立一種更加精巧的Telnet會(huì)話連接。這種選項(xiàng)包括改變字符集,響應(yīng)模式等等。設(shè)置選項(xiàng)的基本策略是任一方(或者兩者)初始化要求一個(gè)選項(xiàng)生效的請(qǐng)求。另一方可以接受也可以拒絕這一請(qǐng)求。如果接受請(qǐng)求,此選項(xiàng)立刻生效;如果被拒絕,連接仍然保持基本的NVT的連接屬性。很明顯,一方可以拒絕另一方關(guān)于啟用某一選項(xiàng)的請(qǐng)求,但是不能拒絕另一方關(guān)于使一選項(xiàng)失效的請(qǐng)求,因?yàn)殡p方必須準(zhǔn)備支持NVT。對(duì)話選項(xiàng)語法的建立使在雙方都發(fā)出請(qǐng)求某一選項(xiàng)生效的請(qǐng)求時(shí),另一方可以直接認(rèn)為收到對(duì)方的確認(rèn)信息。
這種對(duì)稱式的對(duì)話語法潛在地引起了一個(gè)不可終止的確認(rèn)環(huán)--任何一方都將收到的確認(rèn)信息看作是請(qǐng)求,而不是一個(gè)確認(rèn)信息。為了防止這種循環(huán)的出現(xiàn),有下面的規(guī)則:
任何一方僅可以要求對(duì)選項(xiàng)狀態(tài)的變化:例如,一方不可以發(fā)出請(qǐng)求,僅僅說明它在什么樣的選項(xiàng)狀態(tài)下。 如果一方接收到好象是請(qǐng)求的信息,請(qǐng)求進(jìn)入一個(gè)已經(jīng)進(jìn)入的狀態(tài),此信息將被看作是一個(gè)確認(rèn)消息。這種非響應(yīng)從本質(zhì)上防止了不可終止的對(duì)話的循環(huán)。如果要求發(fā)送一個(gè)要求改變狀態(tài)的請(qǐng)求,即使?fàn)顟B(tài)并未改變。
無論何時(shí),一方發(fā)送選項(xiàng)命令到另一方,無論作為一個(gè)請(qǐng)求或者是一個(gè)確認(rèn)消息,選項(xiàng)的使用將對(duì)發(fā)送的數(shù)據(jù)處理有影響,這樣命令應(yīng)該被插入到希望發(fā)生作用的數(shù)據(jù)流中的數(shù)據(jù)點(diǎn)之前。(應(yīng)該注意,傳送請(qǐng)求和收到確認(rèn)消息之間有一定的時(shí)間間隔,這是被動(dòng)方式的。因此,一個(gè)主機(jī)希望在要求一個(gè)選項(xiàng)后緩存數(shù)據(jù),直到它知道它的請(qǐng)求是否被接受,這樣就可以使這段不不確定時(shí)間對(duì)用戶不可見。)選項(xiàng)的請(qǐng)求可以在建立Telnet連接時(shí)十分頻繁地來往交換,因?yàn)槊恳环蕉枷M麖膶?duì)方得到更好的服務(wù)。 #p#
選項(xiàng)設(shè)置
選項(xiàng)也可以在連接持續(xù)過程中動(dòng)態(tài)改變來適應(yīng)本地機(jī)器條件的變化。例如,NVT(它將以后被詳細(xì)解釋)對(duì)于許多“一次一行”的應(yīng)用程序,如BASIC是十分適用的,而對(duì)于如NLS的“一次一字”的應(yīng)用程序卻不怎么好用。服務(wù)器可能被選擇作為“一次一字”法則來適應(yīng)在其上運(yùn)行的本地進(jìn)程,它將發(fā)起對(duì)話以達(dá)到合適的選項(xiàng)狀態(tài)。然而,相對(duì)于***地負(fù)責(zé)這種多余的處理負(fù)擔(dān);它可以通過會(huì)話,在不需要這樣的選項(xiàng)狀態(tài)下回到NVT狀態(tài)。由一個(gè)進(jìn)程發(fā)起的請(qǐng)求可以導(dǎo)致一個(gè)不可終止的請(qǐng)求循環(huán),如果此進(jìn)程對(duì)一個(gè)拒絕請(qǐng)求的響應(yīng)是再次要求此選項(xiàng)。為了防止這樣循環(huán)的發(fā)生,被拒絕的請(qǐng)求在其它事情發(fā)生變化之前不能被重復(fù)請(qǐng)求。這可能意味著,進(jìn)程運(yùn)行另外一個(gè)程序,或者用戶發(fā)送另外的命令,或者用戶對(duì)于環(huán)境或選項(xiàng)的改變。
比較好的方法是,預(yù)請(qǐng)求應(yīng)該作為由另一端發(fā)送信息的結(jié)果而發(fā)生,或者由于人為介入而發(fā)生。選項(xiàng)的設(shè)計(jì)者不應(yīng)該因?yàn)閷?duì)于選項(xiàng)會(huì)話的種種限制而感覺到伸不開手腳。一般語法的目的是更容易地?fù)碛羞x項(xiàng)--因?yàn)楸硎緦?duì)它們的忽視也是容易的。
如果特定的選項(xiàng)需要除"DO, DON'T, WILL, WON'T"以外的更豐富的結(jié)構(gòu),正確的方針是使用"DO, DON'T, WILL, WON'T"來建立連接解釋這種新結(jié)構(gòu),當(dāng)這一解釋工作完成時(shí),就可以自由地使用這一新結(jié)構(gòu)了。例如,一方可能發(fā)送請(qǐng)求改變(或建立)每行的長(zhǎng)度。如果接受了這些,對(duì)于對(duì)話的不同行長(zhǎng)度可以使用不同的語法來表示--“子對(duì)話”可以包括一個(gè)域表示***允許的,最小允許的和希望的長(zhǎng)度。重要概念是這樣的擴(kuò)充的會(huì)話應(yīng)該直到雙方建立了標(biāo)準(zhǔn)的會(huì)話并且能夠解釋這種擴(kuò)充的語法之后再進(jìn)行??偟膩碚f,WILL XXX發(fā)送時(shí)說明一方希望執(zhí)行選項(xiàng)XXX,DO XXX 和 DON'T XXX作為確定的不確定的響應(yīng);同樣,DO XXX被作為一種請(qǐng)求發(fā)送給另一方來啟動(dòng)選項(xiàng)XXX,WILL XXX 和WON'T將被作為確定和不確定的響應(yīng)。因?yàn)镹VT是沒有任何選項(xiàng)時(shí)的結(jié)果, DON'T和WON'T響應(yīng)將保證使連接最終保持于這種沒有任何選項(xiàng)的狀態(tài)。因此,所有主機(jī)可以不支持不理解的選項(xiàng),它僅僅需要返回這種選項(xiàng)的請(qǐng)求即可。
盡可能的,Telnet協(xié)議被用作服務(wù)器-用戶的對(duì)稱,這樣,它就可以更容易而自然地處理用戶-用戶和服務(wù)器-服務(wù)器的情況。用選項(xiàng)來擴(kuò)展這一功能是被希望實(shí)現(xiàn)的,但不是必要的。在任何情況下,對(duì)稱是一個(gè)運(yùn)行的準(zhǔn)則而不是固定的準(zhǔn)則多次被明確提出。一個(gè)比較文檔,“Telnet選項(xiàng)說明”,可以被用于對(duì)建立新選項(xiàng)過程信息的參考。
網(wǎng)絡(luò)虛擬終端網(wǎng)絡(luò)虛擬終端(NVT)是一個(gè)雙向字符設(shè)備。NVT有一個(gè)顯示設(shè)備和一個(gè)鍵盤。顯示設(shè)備響應(yīng)到達(dá)的數(shù)據(jù),鍵盤負(fù)責(zé)通過Telnet連接發(fā)送數(shù)據(jù),如果需要回顯,也應(yīng)該在NVT的顯示設(shè)備上顯示。對(duì)于網(wǎng)絡(luò)上的回顯并不要求(雖然確實(shí)存在這個(gè)“遠(yuǎn)程”回顯選項(xiàng),但是主機(jī)必不是必須實(shí)現(xiàn)此選項(xiàng))。字符集是由七位ASCII碼組成的,而保存在八位的域中。任何字符的轉(zhuǎn)換和計(jì)時(shí)方面的考慮都是本地的問題,這不影響NVT的工作。#p#
數(shù)據(jù)傳送
雖然Telnet連接是全雙工的,NVT卻是在線緩沖狀態(tài)下的半雙工設(shè)備。傳送數(shù)據(jù) 雖然Telnet連接是全雙工的,在線緩沖模式下,NVT卻被當(dāng)作半雙工的設(shè)備。此信號(hào)可以由進(jìn)程或者用戶產(chǎn)生。對(duì)于一些主機(jī)處理網(wǎng)絡(luò)輸入中斷,或與默認(rèn)的不進(jìn)行遠(yuǎn)程回顯的NVT說明的主機(jī)來說,此規(guī)則的代價(jià)是高昂的。因此,在源點(diǎn)緩存一些數(shù)據(jù)是有理由的。一些系統(tǒng)在每個(gè)輸入行未采用一些操作(即使是行打印機(jī)或打卡機(jī)也經(jīng)常采用這種方法),這樣可以在每行未開始發(fā)送。在另一方面,用戶或者進(jìn)程可以有時(shí)發(fā)覺提供在行未不中斷的數(shù)據(jù)是有用的而且是必須的;因此,也應(yīng)該在實(shí)現(xiàn)在本地能夠識(shí)別這種信號(hào)并把這些數(shù)據(jù)立刻發(fā)送的方法和機(jī)制。當(dāng)一個(gè)進(jìn)程已經(jīng)完成將數(shù)據(jù)發(fā)送到對(duì)方的顯示設(shè)備而且也沒有緩存的輸入數(shù)據(jù)時(shí)時(shí),進(jìn)程必須發(fā)送Telnet Go Ahead (GA)命令。
這個(gè)規(guī)則并不是要求 Telnet GA命令必須由雙方終端發(fā)送,因?yàn)榉?wù)器主機(jī)通常不要求特定的信號(hào)來繼續(xù)進(jìn)程。但是,此命令的設(shè)計(jì)可以幫助用戶的本地主機(jī)操作一個(gè)物理上半雙工的終端,它如果IBM2741一樣擁有可鎖定的鍵盤。對(duì)此種類型終端的描述有助于解釋GA命令的正確使用。終端和計(jì)算機(jī)的連接總是在計(jì)算機(jī)或用戶的控制之下。任何一方都不能夠隱式地從另一方獲得控制權(quán);控制權(quán)必須顯式地從一方轉(zhuǎn)移到另一方。
在終端一方,設(shè)置硬件在每一行結(jié)束時(shí)放棄控制權(quán)(例如,當(dāng)用戶按下回車鍵時(shí))。當(dāng)這種情況發(fā)生時(shí),本地計(jì)算機(jī)處理輸入數(shù)據(jù),決定是否輸出,如果不需要,將控制權(quán)回送給終端。如果需要產(chǎn)生輸出,計(jì)算機(jī)將保有控制權(quán)直到輸出數(shù)據(jù)發(fā)送完畢。在網(wǎng)絡(luò)上使用這種終端的困難是顯而易見的。“本地”計(jì)算機(jī)不知道在讀到行未符號(hào)時(shí)是否應(yīng)該繼續(xù)保持控制權(quán);這個(gè)問題的決定權(quán)在遠(yuǎn)地處理此數(shù)據(jù)的計(jì)算機(jī)。因此,Telnet GA命令提供了一種機(jī)制讓遠(yuǎn)程計(jì)算機(jī)能夠通知本地計(jì)算機(jī),讓它將控制權(quán)轉(zhuǎn)交給用戶終端。在用戶需要控制權(quán)時(shí),此信號(hào)應(yīng)該也只能在此時(shí)發(fā)送。注意:過早地發(fā)送GA命令會(huì)使輸出數(shù)據(jù)阻塞,因?yàn)橛脩艨梢约俣▊魉拖到y(tǒng)暫停,因此不能將一行結(jié)束。當(dāng)然,前述內(nèi)容不能夠用于用戶到服務(wù)器方面的通信方面。在這個(gè)方面,GA命令可以在任何時(shí)候發(fā)送,可以根本不用發(fā)送。同樣,如果Telnet連接被用于進(jìn)程到進(jìn)程的通信,也不需要發(fā)送GA命令。
***,對(duì)于終端到終端的通信,可以在兩端都需要GA命令,也可以在一端,也可以兩端都需要。如果主機(jī)希望支持終端到終端的通信主機(jī)應(yīng)該提供一種讓用戶自由發(fā)送GA命令的方法;然而,對(duì)于一個(gè)Telnet進(jìn)程而言,這并不是必須的。注意:Telnet模式的對(duì)稱性要求在概念上,兩端中的一端至少是一個(gè)NVT??刂坪瘮?shù)的標(biāo)準(zhǔn)表示 如要本文的介紹中所說的,Telnet協(xié)議的目的是提供一種網(wǎng)絡(luò)上面向終端進(jìn)程和終端設(shè)備的標(biāo)準(zhǔn)接口。
這種類型互連的先前的經(jīng)驗(yàn)告訴我們,在許多主機(jī)上已經(jīng)實(shí)現(xiàn)了類似的功能,但它們的實(shí)現(xiàn)方法卻差別很大。對(duì)于接觸這些系統(tǒng)的用戶而言,這些差別將是令人頭痛的。因此,Telnet定義了以下功能的五種標(biāo)準(zhǔn)表示。這種標(biāo)準(zhǔn)表示有一定的標(biāo)準(zhǔn)的意義,但這也不是必須的(例外是中斷處理函功能要其它使用Telnet的協(xié)議執(zhí)行);這也就是說,系統(tǒng)不提供給本地用戶的功能也不可以不提供給遠(yuǎn)程用戶,它可以將標(biāo)準(zhǔn)表示作為非操作的功能。在另一方面,給本地用戶提供此功能的系統(tǒng)必須也向傳送此功能標(biāo)準(zhǔn)表示的遠(yuǎn)程用戶提供此功能。