TELNET協(xié)議規范
(RFC874——TELNET PROTOCOL SPECIFICATION)
本RFC指定了一個(gè)ARPA互聯(lián)網(wǎng)社區的標準。在A(yíng)RPA互聯(lián)網(wǎng)上的主機應該采納與實(shí)
現該標準。
目錄
簡(jiǎn)介 1
一般性的考慮 1
網(wǎng)絡(luò )虛終端 4
數據的傳輸 4
控制功能的標準表示 5
TELNET中的“同步(SYNCH)"信號 7
NVT打印機和鍵盤(pán) 8
TELNET命令結構 11
簡(jiǎn)介
TELNET協(xié)議的目的是提供一個(gè)相對通用的,雙向的,面向八位字節的通信機制。它的主要
目標是允許界面終端設備和面向終端的過(guò)程能通過(guò)一個(gè)標準過(guò)程進(jìn)行互相交互。另外,可以
預想,該協(xié)議可以應用到終端到終端通信(“連接”)和過(guò)程到過(guò)程通信(分布計算)中。
一般性的考慮
一個(gè)TELNET連接就是一個(gè)用來(lái)傳輸帶有TELNET控制信息數據的傳輸控制協(xié)議(TCP)的
連接。
TELNET協(xié)議的建立基于這樣三個(gè)主要想法:一,網(wǎng)絡(luò )虛終端的概念;二,可談判的選項
的原理;三,對終端和過(guò)程進(jìn)行均衡看待的觀(guān)點(diǎn)。
1.一旦一個(gè)TELNET連接建立后,通信的兩端被假設為在一個(gè)”網(wǎng)絡(luò )虛擬終端”,或
者NVT上開(kāi)始和終止操作。一個(gè)NVT可以被想象為一個(gè)能提供標準的,網(wǎng)絡(luò )范圍的規范終
端的中間代表者。這消除了”服務(wù)者”和”用戶(hù)”之間需要保存對方終端和終端處理協(xié)定的
信息的必要。所有的主機,包括用戶(hù)和服務(wù)器,把他們本地的設備屬性和協(xié)定映射為就象一
個(gè)在網(wǎng)絡(luò )上的NVT,而且每一方都可以假設對方也有一個(gè)類(lèi)似的映射。NVT有意地使過(guò)度
受限(沒(méi)有提供給主機足夠的詞匯來(lái)映射到他們的本地字符集)和過(guò)度包含(使用適當的終止
來(lái)處罰用戶(hù))達到了平衡。
注意:”用戶(hù)”機通常指那些進(jìn)行連接的物理終端,”服務(wù)器”提出指的是那些能夠提供
一些服務(wù)的機器。從終端到終端或過(guò)程到過(guò)程的可應用的平等性來(lái)看,”用戶(hù)”指的是初始
化通信連接的機器。
2.可談判的選項的觀(guān)點(diǎn)基于這樣一個(gè)事實(shí):許多主機都希望能夠在NVT之上提供更多
的服務(wù),而許多用戶(hù)將會(huì )擁有一個(gè)更復雜的終端,并且希望能夠得到一流的,而不是極少的
一點(diǎn)服務(wù)。盡管相互獨立,但建立在TELNET協(xié)議中的是許許多多的”選項”,這些選項將
被用來(lái)認可及同”DO,DON’T,WILL,WON’T”結構(下面將會(huì )討論)一起使用去允許用戶(hù)
和服務(wù)器同意在他們的TELNET連接上使用更精致的(或者可能是完全不同的)協(xié)議集合。這
些選項包括改變字符集,回顯,等等。
建立選項使用的基本策略,是讓每一方(或雙方)初始化一個(gè)使一些選項有效的請求,另
一方可以接受或拒絕該請求。如果該請求被接受了,選項立即生效;如果該請求被拒絕,連
接的另一端仍然保留NVT的特性。很顯然,一方經(jīng)??梢酝ㄟ^(guò)拒絕來(lái)使能,而從來(lái)不能通
過(guò)拒絕來(lái)取消一些選項,因為這些選項是雙方為了支持NVT而準備的。
我們已經(jīng)建立了一套談判選項的規則,使得雙方在同時(shí)請求一個(gè)相同選項的時(shí)候,每一
方都可以把對方的請求當作對自己的請求的肯定回應。
3.談判句法的對稱(chēng)性可能會(huì )導致無(wú)窮盡的應答循環(huán)--每一方都把對方發(fā)送過(guò)來(lái)的命令
當作必須回答的請求而不是對方的應答。為防止這種循環(huán),可以應用下面這些規則:
a.一方只能請求改變選項的狀態(tài)。也就是一方不能只發(fā)送宣布它所使用的模式的請求。
b.如果一方所接收到的請求是要求它進(jìn)入當前它所在的狀態(tài),那么該請求將不會(huì )被應
答。這種不應答對防止無(wú)窮盡的循環(huán)是非常重要的。對于那些改變模式的請求,都需要一個(gè)
應答--盡管該模式不一定改變。
C.無(wú)論何時(shí),只要一方向第二方發(fā)送一個(gè)選項命令,不管該命令是請求還是應答,而
且使用該選項將會(huì )對從第一方發(fā)送到第二方的數據進(jìn)行處理時(shí)生產(chǎn)影響,那么必須把該命令
插到數據流中它希望開(kāi)始起作用的點(diǎn)上。(要注意到在傳送請求和接收到可能是否定的應答
的過(guò)程需要一些時(shí)間。因此,一臺主機可能在發(fā)出請求一個(gè)選項的請求后希望緩沖要發(fā)送的
數據,直到它知道該請求是被接受還是被拒絕,來(lái)隱藏這段對用戶(hù)來(lái)說(shuō)是"不確定"的時(shí)間。)
選項請求在TELENT連接剛剛建立起的時(shí)候要在在連接的兩端來(lái)來(lái)回回傳送許多次,
每一方都試圖從對方獲取盡可能好的服務(wù)。然而,在另一方面,選項可以用來(lái)動(dòng)態(tài)地改變連
接的特性,使它與對本地狀態(tài)的改變相一致。例如,NVT(后面將要解釋)使用的傳輸方式比
較適合一個(gè)用BASIC語(yǔ)言編的應用,這類(lèi)應用在傳輸數據時(shí)是每次一行,而對那些每次傳
輸一個(gè)字符的應用(比如NLS)就不是很適合。當對本地的處理來(lái)說(shuō)是合適的,一個(gè)服務(wù)器可
能會(huì )忍受這種“臨時(shí)的特征”所需的巨大的處理器開(kāi)銷(xiāo),并且會(huì )談判一個(gè)合適的選項。然而,
當不再需要詳盡的控制時(shí),處理開(kāi)銷(xiāo)可以(通過(guò)談判)切換回NVT下的狀態(tài)。
如果一個(gè)過(guò)程在收到一個(gè)拒絕回應后,僅僅是重新請求該選項,那么由一個(gè)過(guò)程發(fā)起的
請求將會(huì )導致不停的請求循環(huán)。 為了防止出現這樣的循環(huán),不能重復被拒絕的請求,除非
已經(jīng)改變了某些選項。在運行中,這可能意味著(zhù)該過(guò)程運行一個(gè)不同的程序,或者用戶(hù)已經(jīng)
發(fā)出了另外的命令,或者出現了其他所有可以影響一個(gè)過(guò)程及其選項的上下文的東西。根據
經(jīng)驗,重新請求只能是一個(gè)連接的另外一端在后來(lái)又提交了某些信息,或者本地用戶(hù)的交互
的需要。
選項的設計者不應該拘泥于選項談判中有限的一些語(yǔ)法。使用簡(jiǎn)單的語(yǔ)法的本意是希望
使得選項易于使用 – 因為要忽略它們是很容易的。如果有一些特殊的選項需要一個(gè)比
“DO,DON’T,WILL,WON’T”更完整的談判結構,一個(gè)比較好的方法是用"DO, DON‘T,
WILL, WON‘T"使雙方都能理解該選項,一旦這個(gè)過(guò)程已經(jīng)完成,就可以自由地使用一個(gè)更
為特別的語(yǔ)法。比如,一方可以發(fā)送一個(gè)請求來(lái)通知(建立)一行的長(cháng)度。如果這個(gè)請求被
另一方所接受,那么可以用另外一個(gè)不同的語(yǔ)法來(lái)進(jìn)行實(shí)際的對一行的長(cháng)度的談判 – 如一
個(gè)”子談判“可能包括可以允許的最小值,可以允許的最大值,以及最合適的行的長(cháng)度等字
段。一個(gè)較為重要的原理是,這樣的擴展談判只有在前面的一些(標準)談判已經(jīng)建立,并
且雙方都可以解釋這些擴展語(yǔ)法的情況下才能開(kāi)始。
總之,WILL XXX由雙方發(fā)送出去,表示該方希望(提出)開(kāi)始對選項XXX進(jìn)行處理。
DO XXX和DON‘T XXX表示它的肯定和否定回應;類(lèi)似地,DO XXX發(fā)送出去指示(請求)
對方(也即DO的接收者)開(kāi)始對選項XXX進(jìn)行處理,WILL XXX和WON‘T XXX表示肯
定和否定回應。
由于在沒(méi)有使用任何的選項的情況下,NVT通過(guò)使用DON‘T和WON‘T回應來(lái)保證連
接在連接的雙方都可以處理的狀態(tài)中。因此,所有主機都應該這樣實(shí)現它們的TELNET進(jìn)
程:在完全不知道一個(gè)不支持的選項的情況下,只需要簡(jiǎn)單地拒絕任何無(wú)法了解的該選項請
求。
TELNET協(xié)議盡可能地使服務(wù)器和用戶(hù)之間是對稱(chēng)的,以便比較容易和自然地包含用
戶(hù)到用戶(hù)(連接)和服務(wù)器到服務(wù)器(協(xié)作處理)這兩種情況。盡管不是完全需要,但我們
也希望選項能夠加強這個(gè)目的。在任何情況下,我們更傾向于明確承認對稱(chēng)性是一個(gè)操作上
的原則,而不是一個(gè)不變的標準。
請參考相關(guān)文檔“TELNET選項規范”來(lái)得到關(guān)于如何建立新的選項的信息。
網(wǎng)絡(luò )虛終端
網(wǎng)絡(luò )虛終端(NVT)是一個(gè)雙向的字符設備。NVT有一個(gè)打印機和一個(gè)鍵盤(pán)。打印機
負責進(jìn)來(lái)的數據,而鍵盤(pán)負責產(chǎn)生通過(guò)TELNET連接發(fā)送出去的數據,并且在需要"回顯“時(shí),
同時(shí)在NVT的打印機上回顯這些數據。”回顯“并不要求數據一定要經(jīng)過(guò)網(wǎng)絡(luò )(盡管有一個(gè)
選項可以控制該操作的”遠程“模式,但并不要求主機實(shí)現該選項)。
除了在這里說(shuō)明的外,所有的編碼集合都是有八位的,但只使用其中的七位的USASCII
碼。所有的代碼轉換和時(shí)區方面的問(wèn)題都是本地的事情,而不影響NVT。
數據的傳輸
盡管一個(gè)通過(guò)網(wǎng)絡(luò )連接的TELNET連接本質(zhì)上是全雙工的,但通常把NVT看作在線(xiàn)性
緩沖模式下的半雙工設備。也就是說(shuō),除非已經(jīng)和對方談判好,以下情形 對應于通過(guò)
TELNET連接進(jìn)行數據傳輸。
1) 在本地緩沖空間允許的可用范圍內,可以在產(chǎn)生數據的機器上匯集數據,直到完整的一
行數據已經(jīng)準備好傳輸,或者某些在局部定義的信號明確地要求傳輸數據。這些信號既可以
有進(jìn)程產(chǎn)生,也可以有用戶(hù)發(fā)出。
定義這個(gè)規則的動(dòng)機是,對于一些主機,處理網(wǎng)絡(luò )輸入中斷的代價(jià)是很高的,另外,缺省的
NVT規范指定“回顯”操作的數據不經(jīng)過(guò)網(wǎng)絡(luò )的傳輸。因此,有理由在產(chǎn)生數據的源上緩
沖一些數據。許多系統都會(huì )在輸入一行結束后進(jìn)行一些動(dòng)作(行式打印機或者卡片打孔機經(jīng)
常都是這樣子的),因此數據傳輸可以在一行數據結束時(shí)觸發(fā)。另外,有時(shí)候一個(gè)用戶(hù)或者
進(jìn)程會(huì )發(fā)現有必要或者應該提供一些不在一行的結尾結束的數據;因此實(shí)現者要注意,提供
的局部信號機制要確保所有的緩沖數據都能夠被立即發(fā)送出去。
2) 當一個(gè)過(guò)程已完成向一個(gè)NVT打印機發(fā)送數據,并且輸入隊列中也沒(méi)有來(lái)自NVT鍵盤(pán),
需要進(jìn)一步進(jìn)行處理的數據(就是說(shuō),當一個(gè)在TELNET連接的一端的過(guò)程無(wú)法在另一端
沒(méi)有數據輸入的情況下進(jìn)行處理),該過(guò)程必須傳輸TELNET 的繼續(Go Ahead,GA)命
令。
這個(gè)規則并不要求在一個(gè)連接的兩端上的終端都發(fā)送TELNET GA命令,因為服務(wù)器
開(kāi)始進(jìn)行處理時(shí),一般情況下都不需要一個(gè)特別的信號(以及斷開(kāi)連接信號和其他在本地定
義的特性)。況且,TELNET GA被設計來(lái)幫助一個(gè)具有“可鎖定”鍵盤(pán)的本地計算機(如
IBM2741)建立一個(gè)物理上的半雙工終端。這種終端的一個(gè)說(shuō)明可能對解釋GA命令的正確
用法有幫助。
終端到計算機的連接總是在用戶(hù)或者計算機的控制之下。任何一方都不能單方面地奪取
另一方的控制;而且取得控制的一方必須明確地放棄它地控制。在終端這一方,硬件上就支
持在每次一個(gè)“連接”終止的時(shí)候(也就是在用戶(hù)按下“新連接”的鍵時(shí)),它就放棄控制。
當這種情況發(fā)生時(shí),連接的(本地)計算機處理輸入的數據,決定是否要產(chǎn)生輸出,如果不
需要的話(huà),就把控制返回給終端。如果要產(chǎn)生輸出,計算機維持控制,直到所有的輸出都被
傳輸完畢。
通過(guò)網(wǎng)絡(luò )使用這種類(lèi)型的終端,困難是顯而易見(jiàn)的。“本地”計算機在看到一個(gè)結束連
線(xiàn)信號后,無(wú)法決定是否要保持控制,這個(gè)決定只能由處理這些數據的“遠程”計算機作出。
因此,TELNET中的GA命令提供了一個(gè)機制,使“遠程”計算機(服務(wù)器)如何給“本地”
計算機(用戶(hù))發(fā)送信號,告訴對方現在是給用戶(hù)終端傳遞控制的時(shí)間。當用戶(hù)需要獲得對
終端的控制時(shí),它應該并且只能在這段時(shí)間傳遞。 注意,過(guò)早地傳遞GA命令將導致輸出
阻塞,由此用戶(hù)可能會(huì )認為傳輸系統已經(jīng)被暫停,因此將導致用戶(hù)手工轉向連接時(shí)失敗。
當然,前面所說(shuō)的這種情況不會(huì )在通訊過(guò)程中用戶(hù)到服務(wù)器這個(gè)方向上出現。在這個(gè)方
向上,盡管沒(méi)有必要,但在任何時(shí)候都可能發(fā)送出GA。同樣,如果TELNET連接被應用在
過(guò)程到過(guò)程的通訊中,在兩個(gè)方向上都不需要發(fā)送GA。最后,對于終端到終端的通訊,在
兩個(gè)方向上可能都需要GA。如果一個(gè)主機打算支持終端到終端的通訊,建議主機在需要通
過(guò)TELNET連接發(fā)送GA的時(shí)候,提供一個(gè)手工發(fā)信號給用戶(hù)的方法。然而,在實(shí)現TELNET
過(guò)程中,這一點(diǎn)并不是必需的。
注意:由于TELNET模型的對稱(chēng)性,從理論上來(lái)說(shuō),在一個(gè)TELNET連接的每一端,都必
須有一個(gè)NVT。
控制功能的標準表示
就象我們在本文檔的簡(jiǎn)介中所說(shuō),TELENT協(xié)議的主要目標是在通過(guò)網(wǎng)絡(luò )連接的終端
設備和面向終端的過(guò)程之間提供一個(gè)標準的接口。早期具有這種互聯(lián)性質(zhì)的實(shí)驗表明,大部
分的服務(wù)器都實(shí)現了某些功能,但調用這些功能的方式卻差別很大。對于一個(gè)要與多個(gè)服務(wù)
器系統交互的用戶(hù)來(lái)說(shuō),這些差別是一個(gè)非常大的障礙。因此,TELNET協(xié)議定義了這些
功能中的下面5種的標準表示。這些標準表示包括標準,含義 --- 盡管不是必需的(除了
中斷進(jìn)程(IP)功能,使用TELENT協(xié)議的其他協(xié)議可能需要該功能)。因此,一個(gè)沒(méi)有給
本地用戶(hù)提供某種功能的系統也沒(méi)有必要給網(wǎng)絡(luò )上的其他用戶(hù)提供該功能,并且可以把該功
能的標準表示當作No操作。在另一方面,如果一個(gè)系統已經(jīng)給本地用戶(hù)提供了該功能,那
么它必須給網(wǎng)絡(luò )上那些傳該功能的標準表示的用戶(hù)提供同樣的功能。
中斷進(jìn)程 – Interrupted Process(IP)
許多系統提供掛起,中斷,中止,終止用戶(hù)進(jìn)程的操作的功能。當用戶(hù)確信他的進(jìn)程已
經(jīng)進(jìn)入了無(wú)窮盡的循環(huán),或者不小心激活了一個(gè)并不希望激活的進(jìn)程時(shí),就要經(jīng)常使用該功
能。IP就是調用該功能的標準表示。該功能的實(shí)現者需要注意,其他使用TELNET協(xié)議的
協(xié)議可能要使用IP,因此實(shí)現時(shí)要支持這些協(xié)議。
中斷輸出 -- Abort Output (AO)
許多系統提供了允許一個(gè)產(chǎn)生輸出的進(jìn)程在不向用戶(hù)的終端發(fā)送輸出的情況下完成運行
(或者達到在完成運行的過(guò)程中將會(huì )達到的某一個(gè)停止點(diǎn))的功能。
另外,該功能一般還清除那些已經(jīng)生成但還沒(méi)有實(shí)際打?。ɑ蛘唢@示)到用戶(hù)的終端上的
輸出。AO是調用該功能的標準表示。 比如,許多子系統通常會(huì )接受一個(gè)用戶(hù)的命令,然
后以一個(gè)發(fā)送到用戶(hù)終端的長(cháng)的字符串作為回應,最后,給用戶(hù)的終端發(fā)送一個(gè)“提示”字
符(前面跟著(zhù)<CR><LF>)來(lái)表示準備接受下一個(gè)命令。如果是在傳輸字符串的過(guò)程中接收
到AO,一個(gè)合理的實(shí)現應該停止繼續傳輸字符串,而轉向發(fā)送提示符和跟在前面的
<CR><LF>。(這可能同接收到IP所進(jìn)行的動(dòng)作有一些差別。在接收到IP時(shí),將導致停止
字符串的傳輸并且從子系統中退出。
同時(shí)還需要注意到,對那些提供這種功能的服務(wù)器,可能還需要清除那些存在于系統外
的緩沖機制(在網(wǎng)絡(luò )中或者在用戶(hù)的本地機器上)中的內容。完成這個(gè)過(guò)程的一個(gè)合適的方
法是給用戶(hù)的系統發(fā)送“同步”信號(將在下面描述)。
你在那里嗎? -- Are You There (AYT)
許多系統提供了給用戶(hù)提供系統仍然在運行的一些可見(jiàn)的(如可打印的)跡象。這個(gè)功
能可以在系統在一個(gè)想象不到的很長(cháng)一段時(shí)間里都沒(méi)有動(dòng)靜時(shí)(可能是由于用戶(hù)沒(méi)有想象到
的計算時(shí)間,或者不正常的巨大系統負荷等導致。)由用戶(hù)調用。 AYT是調用該功能的標
準表示.
消除一個(gè)字符 - - Erase Character (EC)
許多系統提供了刪除在未刪除字符前面或者用戶(hù)提供的數據流中的“打印位置” 最后
面的一個(gè)字符的功能。該功能通常在鍵盤(pán)輸入時(shí)輸入了錯誤的字符時(shí)使用。EC是調用該功
能的標準表示。
*注意 :一個(gè)“打印位置”可能包含相互覆蓋的幾個(gè)字符,或者象下面的字符系列:
<char1> BS <char2>...
消除一行 -- Erase Line (EL)
許多系統提供了刪除輸出設備上的當前一行的全部數據的功能。該功能經(jīng)常在用鍵盤(pán)進(jìn)
行輸入編輯時(shí)使用。EL是調用該功能的標準表示。
TELNET中的“同步(SYNCH)"信號
許多系統提供了一種機制,可以允許一個(gè)終端的用戶(hù)對一個(gè)“失控“的進(jìn)程重新獲得控
制權。上面描述的IP和AO功能就是這種機制的例子。當在本地使用時(shí),這樣的系統可以
訪(fǎng)問(wèn)由用戶(hù)提供的所有信號,而不管這些信號是一些普通字符或者是由電傳打字機中的
"BREAK"鍵或IBM 2741中的"ATTN"鍵發(fā)送的”帶外“信號。然而當通過(guò)網(wǎng)絡(luò )把系統聯(lián)結
起來(lái)時(shí),這可能是不正確的。網(wǎng)絡(luò )的流程控制機制可能導致把這些信號緩沖到其他地方,比
如用戶(hù)的機器中。
為了解決這個(gè)問(wèn)題,提出了TELNET中的"同步" 機制。
一個(gè)同步信號包含一個(gè)同TELNET命令DATA MARK結合在一起的TCP緊急通知。該
緊急通知與TELNET連接中的流程控制沒(méi)有關(guān)系,接收它的進(jìn)程用它來(lái)調用數據流的特殊
處理過(guò)程。在這種模式中,立即對數據流進(jìn)行掃描,查找下面定義的一些“有趣“的信號,
而把那些干涉的數據丟棄。
TELNET命令DATA MARK (DM)是數據流中的同步標記,表示所有特殊的信號都已經(jīng)
產(chǎn)生,接受者可以繼續對數據流進(jìn)行一般的處理。
同步信號通過(guò)TCP中的發(fā)送操作發(fā)送,在發(fā)送過(guò)程中需要把緊急標志設為“真“,并
且把DM作為最后(或者唯一的)一個(gè)字節。
當許多同步信號快速地連續不斷地發(fā)送時(shí),可以合并緊急通知。不可能去計算緊急通知
的次數,因為接收到的緊急通知的次數可能等于或者少于發(fā)送次數。在普通模式中,一個(gè)
DM是沒(méi)有任何操作的,但在緊急模式中,它表示緊急處理過(guò)程的結束。
如果在發(fā)現DM之前,TCP已經(jīng)指示緊急數據的結束,TELNET應該繼續對數據流進(jìn)
行特殊的處理,直到發(fā)現DM。
如果在發(fā)現DM之后,TCP指示有更多的緊急數據,它只能是另外同步信號。TELNET
應該繼續對數據流進(jìn)行特殊的處理,直到發(fā)現另外一個(gè)DM。
定義的“有趣的“信號為:TELNET中的IP, AO, 和 AYT (沒(méi)有EC 或EL)的標準
表示;與這些標準表示類(lèi)似的本地表示(如果有的話(huà));所有的其他TELNET命令;其他在
不延遲數據流的掃描并且能夠起作用的自定義信號。
由于SYNCH機制的一個(gè)影響是丟棄本來(lái)在發(fā)送者和接收者之間要傳輸的所有字符(除
了TELNET命令),如果需要,這個(gè)機制可以作為清除數據路徑的一種標準方式。例如,在
一個(gè)終端上的用戶(hù)需要傳輸一個(gè)AO,接收到該AO的服務(wù)器應該給該用戶(hù)返回一個(gè)同步信
號(如果它提供該功能的話(huà))。
最后,就象在TELNET層,需要把一個(gè)TCP緊急通知當作一個(gè)帶外信號,因此其他使
用TELNET的協(xié)議可能需要從不同層次來(lái)看可以當作帶外信號的TELNET命令。
通過(guò)約定系列[IP, Synch] 可以把它作為這樣的信號。例如,假設有一個(gè)使用
TELNET協(xié)議的其他協(xié)議定義了一個(gè)類(lèi)似于TELNET命令AO的字符串STOP。想象
用戶(hù)使用該協(xié)議的目的是希望服務(wù)器處理STOP字符串,但由于服務(wù)器在處理其他的命令,
導致連接被阻塞。用戶(hù)應該引導他的系統:
a) 發(fā)送出TELNET IP字符;
b) 發(fā)送出TELNET SYNC系列,也就是:在一個(gè)緊急模式的TCP發(fā)送操作中把Data Mark
(DM)作為唯一的字符發(fā)送出去。
c) 發(fā)送出字符串STOP;接著(zhù)
d) 如果有的話(huà),把其他協(xié)議中類(lèi)似于TELNET DM的命令發(fā)送出去。
用戶(hù)(或者代表該用戶(hù)的進(jìn)程)必須傳輸上面步驟2中的TELNET SYNCH 系列,以確保
TELNET IP已經(jīng)到達服務(wù)器的TELNET 解釋器。
緊急通知將激活TELNET進(jìn)程,而IP將激活隨后級別較高的進(jìn)程。
NVT打印機和鍵盤(pán)
NVT打印機有一個(gè)沒(méi)有指定寬度的走紙器,并且每一頁(yè)的長(cháng)度也沒(méi)有指定。NVT打印
機可以產(chǎn)生所有95個(gè)USASCII編碼的圖形表示(從32到126的編碼)。在33個(gè)USASCII
編碼(0到31及127)和未包含的其他128個(gè)編碼(128到255)中,下面幾個(gè)編碼對NVT
打印機有確定意義:
名稱(chēng) 編碼 意義
NULL (NUL) 0 沒(méi)有操作
Line Feed (LF) 10 打印頭移到下一個(gè)打印行,但不改變打印
頭的水平位置。
Carriage Return (CR) 13 把打印頭移到當前行的左邊 。
另外,在NVT打印機上,盡管不是必需的,同時(shí)應該定義下面這些編碼。TELNET連
接的雙方,都不會(huì )假設另一方在接收到或傳輸下面這些編碼時(shí)將會(huì ),或者已經(jīng)實(shí)施某種特殊
動(dòng)作:
BELL (BEL) 7 產(chǎn)生一個(gè)可以看到或可以聽(tīng)到的信號(而不
移動(dòng)打印頭。)
Back Space (BS) 8 向左移動(dòng)打印頭一個(gè)字符位置。
Horizontal Tab (HT) 9 把打印頭移到下一個(gè)水平制表符停止的位置。
它仍然沒(méi)有指定每一方如何檢測或者設定如
何定位這樣的制表符的停止位置。
Vertical Tab (VT) 11 把打印頭移到下一個(gè)垂直制表符停止的位置。它
仍然沒(méi)有指定每一方如何檢測或者設定如何
定位這樣的制表符的停止位置。
Form Feed (FF) 12 把打印頭移到下一頁(yè)的頂部,保持打印頭在
相同的水平位置上。
剩下的其他編碼都不會(huì )導致NVT打印實(shí)施任何動(dòng)作。
在定義中,系列"CR LF"將導致NVT打印頭移動(dòng)到下一行的左邊(與系列 "LF CR"的
效果是一樣的)。然而,許多系統和終端并不獨立處理CR和LF,為了模擬它們的效果,需
要進(jìn)行一些處理。 (比如,許多終端沒(méi)有獨立于LF的CR,但是在這樣的終端上可以用退
格鍵來(lái)模擬一個(gè)CR。)因此,必須把系列CR LF"當作一個(gè)單獨的“新行”字符看待,并且
在需要把它們結合在一起的時(shí)候使用它們。必須在只需要一個(gè)單獨的回車(chē)鍵時(shí)使用系列"CR
NUL";在其他的場(chǎng)境中必須避免使用CR字符。這個(gè)規則可以確保系統在發(fā)現一個(gè)TELNET
流中有一個(gè)字符的后面跟有CR的情況下,可以作出合理的選擇:是進(jìn)行“換行”功能還是
進(jìn)行多次的退格操作。
注意,在兩個(gè)方向上(在缺省的ASCII模式下)都需要"CR LF"或者"CR NUL",以確
保NVT模式的對稱(chēng)性。
盡管在某種情況下(如當遠程回顯和禁止超前選項同時(shí)起作用時(shí)),可以認為字符并不
被發(fā)送到一個(gè)實(shí)際的打印機上,然而,為了保證一致,在一個(gè)數據流中,如果一個(gè)CR的后
面沒(méi)有跟著(zhù)一個(gè)LF,該協(xié)議要求把一個(gè)NUL插到CR的后面。
相反,在接收方,如果從數據流中接收到一個(gè)跟在CR的后面的NUL(在沒(méi)有用談判
選項顯式指定其他選擇的情況下),在把NVT轉換成本地字符集之前,應該把NUL去掉。
NVT鍵盤(pán)有鍵或者鍵的組合,或者鍵系列來(lái)產(chǎn)生所有128格USAACII編碼。要注意盡
管一些在NVT打印機上沒(méi)有什么用處,NVT鍵盤(pán)還是可以生成。
除了這些編碼,NVT鍵盤(pán)還可以生成下面這些附加的編碼,除注明外,還定義了這些
編碼的意義(盡管不是必需的)。
對這些“字符”的實(shí)際代碼分配在TELNET命令這一節,因為從某種意義上來(lái)講,我
們可以認為這些編碼是固有的,甚至在把數據流中的數據都解釋為屬于另外的一個(gè)字符集的
時(shí)候,都可以使用這些編碼。
Synch
這個(gè)鍵允許一個(gè)用戶(hù)清空到另一方的數據通道。激活該鍵將導致發(fā)送一個(gè)帶有TCP緊
急通知的DM(參看命令這一節)。一對DM-緊急通知具有在前面定義的一些意義。
Break (BRK)
之所以提供這個(gè)編碼,是因為在當前的許多系統中,它是USASCII集合之外的一個(gè)
信號,并且具有本地意義。 可以用它來(lái)表示Break鍵或Attention鍵已被按下。然而,需
要注意的是,它的目的是給需要它的系統提供第129個(gè)編碼,而不等同于IP的標準表示。
Interrupt Process (IP)
掛起,中斷,中止,終止一個(gè)NVT連接的進(jìn)程。另外,它也是那些使用TELNET的其他協(xié)
議的帶外信號的一部分。
Abort Output (AO)
允許當前的進(jìn)程繼續運行直到結束,但不給用戶(hù)發(fā)送它的輸出信息。并且把一個(gè)同步信
號發(fā)送給用戶(hù)。
Are You There (AYT)
給NVT發(fā)送回一些可見(jiàn)的(也就是可打印的)信息以表明已經(jīng)收到AYT。
Erase Character (EC)
接收者將刪除數據流中最后一個(gè)未被刪除的前導字符或者“打印位置”。
Erase Line (EL)
接收方將刪除由TELNET連接發(fā)送的數據流中最后一個(gè)“CR LF”系列(但不包括該系列)
后面的全部?jì)热荨?br>
這些“額外”的鍵,也就是打印機的格式控制字符的本質(zhì)是,它們是對從“NVT”到“本
地”這個(gè)必須進(jìn)行的映射過(guò)程的一個(gè)自然的擴展。
就象NVT中的字節68(八進(jìn)制104),可以映射為本地中代表“大寫(xiě)D”的任何一個(gè)編碼,
字符EC也可以映射為本地中代表“刪除一個(gè)字符”功能。
另外,就象在一個(gè)沒(méi)有“垂直線(xiàn)”字符的環(huán)境下,對編碼124(八進(jìn)制174)的映射是
任意的,如果在本地沒(méi)有“刪除一個(gè)字符”這種機制,對EL的映射也是任意的(甚至不映
射)。
類(lèi)似地,對格式控制字符,如果終端確實(shí)有一個(gè)“垂直制表鍵”,那么對VT地映射就
是顯而易見(jiàn)的,只有在終端沒(méi)有一個(gè)垂直制表鍵的情況下,VT的作用才是無(wú)法預測的。
TELNET命令結構
所有的TELNET命令至少包含一個(gè)兩個(gè)字節的序列:跟在命令的代碼的后面,"當作命令
來(lái)解釋(Interpret as Command)"(IAC)的轉義字符。處理選項談判的命令有三個(gè)字節系列,
第三個(gè)字節就成了被選項引用的編碼。之所以選擇這種格式,是這種格式能夠更大范圍地使
用"數據空間"---當然,是通過(guò)基本NVT的談判來(lái)進(jìn)行。數據字節與保留的命令值的沖突被
大大減少了,而所有這些沖突都需要復雜,低效的方法來(lái)把數據字節轉換為流。使用現在的
方法,只有在需要把IAC當作數據發(fā)送時(shí)才需要把相同的數據發(fā)送兩次,其他255個(gè)代碼
都可以透明地傳輸。
下面是所有已定義的TELNET命令。需要注意的是,這些代碼和代碼序列只有在前面
跟有一個(gè)IAC時(shí)才有意義。
名稱(chēng) 代碼 意義
SE 240 子談判參數的結束
NOP 241 空操作
Data Mark 242 一個(gè)同步信號的數據流部分。該
命令的后面經(jīng)常跟著(zhù)一個(gè)TCP緊急
通知
Break 243 NVT的BRK字符
Interrupt Process 244 IP功能.
Abort output 245 AO功能.
Are You There 246 AYT功能.
Erase character 247 EC功能.
Erase Line 248 EL功能.
Go ahead 249 GA信號.
SB 250 表示后面所跟的是對需要的選項的子談
判
WILL (option code) 251 表示希望開(kāi)始使用或者確認所使用的是
指定的選項。
WON‘T (option code) 252 表示拒絕使用或者繼續使用指定的選項。
DO (option code) 253 表示一方要求另一方使用,或者確認
你希望另一方使用指定的選項。
DON‘T (option code) 254 表示一方要求另一方停止使用,或者確
認你不再希望另一方使用指定的選項。
IAC 255 Data Byte 255.
連接的建立
TELNET TCP連接是在用戶(hù)端口U和服務(wù)器端口L之間建立的。服務(wù)器在用于這種類(lèi)型的
連接的一個(gè)眾所周知的端口L上監聽(tīng)客戶(hù)請求。由于一個(gè)TPC連接是全雙工的,并且通過(guò)
雙方的端口來(lái)標識,服務(wù)器可以對不同的用戶(hù)端口U和端口L的之間的許多并發(fā)連接進(jìn)行
應答。
端口分配
當用來(lái)給遠程用戶(hù)提供訪(fǎng)問(wèn)服務(wù)主機的服務(wù)(也就是遠程終端訪(fǎng)問(wèn)),這個(gè)協(xié)議分配了服務(wù)端
口23(把進(jìn)制27)。也就是L=23。
本RFC指定了一個(gè)ARPA互聯(lián)網(wǎng)社區的標準。在A(yíng)RPA互聯(lián)網(wǎng)上的主機應該采納與實(shí)
現該標準。
給TELNET協(xié)議提供一些選項的目的是,使相互通信的主機在解決不同設備之間的通
信問(wèn)題時(shí)獲得比由網(wǎng)絡(luò )虛擬終端(NVT)提供的可能框架有更好的方案。它可以讓主機自由
地創(chuàng )建,測試或者丟棄某些選項。當然,可以想象,那些普遍有用的選項最終大部分的主機
都應該支持。因此,應該仔細地設計這些選項的文檔,并且盡可能地公布它們。另外,確保
不在不同地選項中使用相同的選項代碼也是必要的。
本文檔指定了一個(gè)選項代碼的分配和選項的文檔標準方面的方法。在進(jìn)行試驗時(shí),可能只需
要選項代碼分配而不需要完整的文檔,不過(guò)一般來(lái)說(shuō),在分配選項代碼之前都需要一個(gè)文檔。
我們通過(guò)把一個(gè)選項的文檔作為一個(gè)RFC文檔來(lái)發(fā)布,從而發(fā)布該選項。當然,選項的創(chuàng )
建者也可以用其他的方式發(fā)布選項。
選項代碼由下面人員分配:
Jonathan B。 Postel
University of Southern California
Information Sciences Institute (USC-ISI)
4676 Admiralty Way
Marina Del Rey, California 90291
(213) 822-1511
Mailbox = POSTEL@USC-ISIF
選項的文檔至少要包含下面幾個(gè)小節:
第1節 - - 命令的名稱(chēng)和選項的代碼
第2節 - - 命令的意義
應該描述同該選項相關(guān)的每一個(gè)TELNET命令的意義。需要注意的是,對于復雜的選
項,“子談判”是必需的,因此可能有許多相關(guān)的命令。“子談判”的原理在下面有更詳細的
描述。
第3節 - 缺省的規范
對那些沒(méi)有實(shí)現,或者沒(méi)有使用該選項的主機,必須描述這些選項在這些主機中的缺省
假定值。
第4節 - 動(dòng)機
對創(chuàng )建一個(gè)特殊的選項,或者對某種選項選擇一種特殊的格式的動(dòng)機進(jìn)行詳細的描述,
對那些還沒(méi)有碰到(或者雖然已經(jīng)碰到,但沒(méi)有認識到)該選項設計來(lái)解決的問(wèn)題的人,是
非常有用的。
第5節 - 描述(或者實(shí)現規則)
為了確保一個(gè)命令的兩個(gè)不同實(shí)現相互之間能夠通訊,僅僅定義命令的意義和對該命令的意
圖進(jìn)行說(shuō)明有時(shí)候是遠遠不夠的。因此,在許多情況下,我們需要給一個(gè)命令提供一個(gè)完整
的描述。這個(gè)描述可以用文本來(lái)表示,也可以是一個(gè)示例性的實(shí)現,或者是實(shí)現的線(xiàn)索等等。
對“子談判”的解釋
在主機之間傳遞選項時(shí),除了一個(gè)選項編碼外可能還需要更多其他信息。例如,要求一個(gè)參
數的那些選項就屬于這種情況。在主機之間傳遞除了選項代碼外的其他信息的策略包含兩個(gè)
步驟:雙方都同意去”商討“該參數,第二,對參數進(jìn)行”商討“。
在第一步中,同意去討論參數以一種普通的方式來(lái)進(jìn)行。一方通過(guò)發(fā)送一個(gè)帶有選項代碼的
DO(或WILL)命令來(lái)建議使用選項,另一方發(fā)送一個(gè)帶有選項代碼的DO(或WILL)命令來(lái)表
示接受這個(gè)建議。一旦雙方都同意使用這選項,通過(guò)在SB命令的后面跟上相應的選項代碼,
參數和命令SE來(lái)開(kāi)始子談判。每一方都被假設為能夠解析該參數。因為在最初通過(guò)交換
WILL和DO命令,雙方都表明可以支持該選項。另外,即使接收方不能解析該參數,接收
方也可以通過(guò)搜索SE命令(如字符串IAC SE)來(lái)定位參數字符串的結束位置。當然,在
任何時(shí)候,任何一方都可以給另一方發(fā)送WON‘T或DON‘T來(lái)拒絕繼續進(jìn)行進(jìn)一步的子談
判。
聯(lián)系客服