TELNET協議規範(中文版) (轉)
規範
A Internet上的主機被要求採用並實現此標準。
介紹
TELNET Protocol的目的是提供一個相對通用的,雙向的,面向八位位元組的通訊方法。它主要的目標是允許介面終端裝置的標準方法和麵向終端的相互作用。可以預見到,此協議也可被用於終端到終端的通訊和處理到處理的通訊(分散式計算)。
一般考慮
一個TELNET連線是一個用於傳輸控制協議的傳送資料的。TELNET 協議是建立在以下三個想法上的:首先是虛擬終端的概念;其次是對話選項的方法;最後是終端和處理的協調。
- 當一個TELNET連線被初次建立時,每一端都被假設使用了網路虛擬終端,也就是NVT。NVT是一個想象中的標準裝置通用裝置的代表。這就消除了“”和“”機要了解對方機器終端的特點,而終端可以直接處理對話。所有的主機,使用者端的和伺服器端的,它們自己本地的裝置特點因此在網路上可以作為一種NVT處理,任何一個都可以認為對方使用的是相同特點的裝置。NVT傾向於不過多地限制(提供了一個相應比較豐富的對映到本地裝置的字符集),也不是包括一切的(它要求使用者使用適當的終端)。注意:使用者機通常是與處理終端連線的主機,伺服器機通常是提供某種服務的機器。從另一點看,在終端到終端或程式到程式的通訊上,使用者機是發起通訊的機器。
- 規定選項的原理將以下事實考慮在內,許多機器希望在現在的NVT上提供另外的服務,多數使用者有比較複雜的終端,它們也就希望一種比較完整的而不是最小的服務。獨立的,但是存在於 TELNET 協議的不同選項支援這些需求,它們使用"DO, DON'T, WILL, WON'T" 結構允許使用者機和伺服器建立建立一種更加精巧的TELNET會話連線。這種選項包括改變字符集,響應等等。設定選項的基本策略是任一方(或者兩者)初始化要求一個選項生效的請求。另一方可以接受也可以拒絕這一請求。如果接受請求,此選項立刻生效;如果被拒絕,連線仍然保持基本的NVT的連線屬性。很明顯,一方可以拒絕另一方關於啟用某一選項的請求,但是不能拒絕另一方關於使一選項失效的請求,因為雙方必須準備支援NVT。對話選項語法的建立使在雙方都發出請求某一選項生效的請求時,另一方可以直接認為收到對方的確認資訊。
- 這種對稱式的對話語法潛在地引起了一個不可終止的確認環--任何一方都將收到的確認資訊看作是請求,而不是一個確認資訊。為了防止這種迴圈的出現,有下面的規則:
- 任何一方僅可以要求對選項狀態的變化:例如,一方不可以發出請求,僅僅說明它在什麼樣的選項狀態下。
- 如果一方接收到好象是請求的資訊,請求進入一個已經進入的狀態,此資訊將被看作是一個確認訊息。這種非響應從本質上防止了不可終止的對話的迴圈。如果要求傳送一個要求改變狀態的請求,即使狀態並未改變。
- 無論何時,一方傳送選項命令到另一方,無論作為一個請求或者是一個確認訊息,選項的使用將對傳送的資料處理有影響,這樣命令應該被插入到希望發生作用的資料流中的資料點之前。(應該注意,傳送請求和收到確認訊息之間有一定的時間間隔,這是被動方式的。因此,一個主機希望在要求一個選項後快取資料,直到它知道它的請求是否被接受,這樣就可以使這段不不確定時間對使用者不可見。)選項的請求可以在建立TELNET連線時十分頻繁地來往,因為每一方都希望從對方得到更好的服務。
除此以外,選項也可以在連線持續過程中動態改變來適應本地機器條件的變化。例如,NVT(它將以後被詳細解釋)對於許多“一次一行”的應用,如BASIC是十分適用的,而對於如NLS的“一次一字”的應用程式卻不怎麼好用。伺服器可能被選擇作為“一次一字”法則來適應在其上執行的本地程式,它將發起對話以達到合適的選項狀態。然而,相對於永久地負責這種多餘的處理負擔;它可以透過會話,在不需要這樣的選項狀態下回到NVT狀態。由一個程式發起的請求可以導致一個不可終止的請求迴圈,如果此程式對一個拒絕請求的響應是再次要求此選項。為了防止這樣迴圈的發生,被拒絕的請求在其它事情發生變化之前不能被重複請求。這可能意味著,程式執行另外一個程式,或者使用者傳送另外的命令,或者使用者對於環境或選項的改變。
比較好的方法是,預請求應該作為由另一端傳送資訊的結果而發生,或者由於人為介入而發生。選項的設計者不應該因為對於選項會話的種種限制而感覺到伸不開手腳。一般語法的目的是更容易地擁有選項--因為表示對它們的忽視也是容易的。
如果特定的選項需要除"DO, DON'T, WILL, WON'T"以外的更豐富的結構,正確的方針是使用"DO, DON'T, WILL, WON'T"來建立連線解釋這種新結構,當這一解釋工作完成時,就可以自由地使用這一新結構了。例如,一方可能傳送請求改變(或建立)每行的長度。如果接受了這些,對於對話的不同行長度可以使用不同的語法來表示--“子對話”可以包括一個域表示最大允許的,最小允許的和希望的長度。重要概念是這樣的擴充的會話應該直到雙方建立了標準的會話並且能夠解釋這種擴充的語法之後再進行。總的來說,WILL XXX傳送時說明一方希望選項XXX,DO XXX 和 DON'T XXX作為確定的不確定的響應;同樣,DO XXX被作為一種請求傳送給另一方來啟動選項XXX,WILL XXX 和WON'T將被作為確定和不確定的響應。因為NVT是沒有任何選項時的結果, DON'T和WON'T響應將保證使連線最終保持於這種沒有任何選項的狀態。因此,所有主機可以不支援不理解的選項,它僅僅需要返回這種選項的請求即可。
儘可能的,TELNET協議被用作伺服器-使用者的對稱,這樣,它就可以更容易而自然地處理使用者-使用者和伺服器-伺服器的情況。用選項來擴充套件這一功能是被希望實現的,但不是必要的。在任何情況下,對稱是一個執行的準則而不是固定的準則多次被明確提出。一個比較文件,“TELNET選項說明”,可以被用於對建立新選項過程資訊的參考。
網路虛擬終端網路虛擬終端(NVT)是一個雙向字元裝置。NVT有一個顯示裝置和一個鍵盤。顯示裝置響應到達的資料,鍵盤負責透過TELNET連線傳送資料,如果需要回顯,也應該在NVT的顯示裝置上顯示。對於網路上的回顯並不要求(雖然確實存在這個“”回顯選項,但是主機必不是必須實現此選項)。字符集是由七位ASCII碼組成的,而儲存在八位的域中。任何字元的轉換和計時方面的考慮都是本地的問題,這不影響NVT的工作。
資料傳送方面,雖然TELNET連線是全雙工的,NVT卻是線上緩衝狀態下的半雙工裝置。傳送資料 雖然TELNET連線是全雙工的,線上緩衝模式下,NVT卻被當作半雙工的裝置。此訊號可以由程式或者使用者產生。對於一些主機處理網路輸入中斷,或與預設的不進行遠端回顯的NVT說明的主機來說,此規則的代價是高昂的。因此,在源點快取一些資料是有理由的。一些在每個輸入行未採用一些操作(即使是行印表機或打卡機也經常採用這種方法),這樣可以在每行未開始傳送。在另一方面,使用者或者程式可以有時發覺提供在行未不中斷的資料是有用的而且是必須的;因此,也應該在實現在本地能夠識別這種訊號並把這些資料立刻傳送的方法和機制。當一個程式已經完成將資料傳送到對方的顯示裝置而且也沒有快取的輸入資料時時,程式必須傳送TELNET Go Ahead (GA)命令。
這個規則並不是要求 TELNET GA命令必須由雙方終端傳送,因為伺服器主機通常不要求特定的訊號來繼續程式。但是,此命令的設計可以幫助使用者的本地主機操作一個物理上半雙工的終端,它如果IBM2741一樣擁有可鎖定的鍵盤。對此種型別終端的描述有助於解釋GA命令的正確使用。終端和的連線總是在計算機或使用者的控制之下。任何一方都不能夠隱式地從另一方獲得控制權;控制權必須顯式地從一方轉移到另一方。
在終端一方,設定在每一行結束時放棄控制權(例如,當使用者按下Enter鍵時)。當這種情況發生時,本地計算機處理輸入資料,決定是否輸出,如果不需要,將控制權回送給終端。如果需要產生輸出,計算機將保有控制權直到輸出資料傳送完畢。在網路上使用這種終端的困難是顯而易見的。“本地”計算機不知道在讀到行未符號時是否應該繼續保持控制權;這個問題的決定權在遠地處理此資料的計算機。因此,TELNET GA命令提供了一種機制讓遠端計算機能夠通知本地計算機,讓它將控制權轉交給使用者終端。在使用者需要控制權時,此訊號應該也只能在此時傳送。注意:過早地傳送GA命令會使輸出資料阻塞,因為使用者可以假定傳送系統暫停,因此不能將一行結束。當然,前述內容不能夠用於使用者到伺服器方面的通訊方面。在這個方面,GA命令可以在任何時候傳送,可以根本不用傳送。同樣,如果TELNET連線被用於程式到程式的通訊,也不需要傳送GA命令。
最後,對於終端到終端的通訊,可以在兩端都需要GA命令,也可以在一端,也可以兩端都需要。如果主機希望支援終端到終端的通訊主機應該提供一種讓使用者自由傳送GA命令的方法;然而,對於一個TELNET程式而言,這並不是必須的。注意:TELNET模式的對稱性要求在概念上,兩端中的一端至少是一個NVT。控制的標準表示 如要本文的介紹中所說的,TELNET協議的目的是提供一種網路上面向終端程式和終端裝置的標準介面。
這種型別互連的先前的告訴我們,在許多主機上已經實現了類似的功能,但它們的實現方法卻差別很大。對於接觸這些系統的使用者而言,這些差別將是令人頭痛的。因此,TELNET定義了以下功能的五種標準表示。這種標準表示有一定的標準的意義,但這也不是必須的(例外是中斷處理函功能要其它使用TELNET的協議執行);這也就是說,系統不提供給本地使用者的功能也不可以不提供給遠端使用者,它可以將標準表示作為非操作的功能。
在另一方面,給本地使用者提供此功能的系統必須也向傳送此功能標準表示的遠端使用者提供此功能。
中斷處理(IP)一些系統提供可以暫停,中斷,放棄或終止使用者程式操作的功能。當使用者確定它的程式處於不可結束的迴圈中,或不經意地啟用了一個程式時經常使用此功能。IP是使用此功能的標準表示。實現者應該注意的是:使用TELNET的其它協議可能也需要IP,因此,如果需要支援其它協議就應該實現IP。放棄輸出 (AO) 許多系統提供此功能,它允許產生輸出的程式到達類似操作結束的點,而不將輸出傳送到使用者的終端。更深一層的,此功能通常清除已產生的所有輸出,而不顯示到使用者的終端上。AO是使用此功能的標準表示。
例如,一些子系統可能通常接受使用者命令,傳送長文字串到使用者終端,最後傳送一個提示使用者允許接收下一命令的提示符到使用者終端。如果在傳送文字串的過程中接收到AO命令,將會不再傳送剩餘的字串,而直接顯示提示符告知使用者可以輸入下一命令。(這與接收到IP之後的操作可能有所不同;IP會放棄傳送剩餘的字串而且退出子系統。)應該注意到,使用提供此功能的伺服器系統時外部緩衝區(在網路和使用者本地主機上)也被清除;完成的正確方法是向使用者系統傳送“Synch”訊號。
你在此嗎 (AYT) 許多系統提供使用者這樣的功能,讓使用者知道是否正在執行。此功能在系統由於不可預知長度運算,或系統負載重的情況下長時間不響應時由使用者發起。AYT是使用此功能的標準表示。
刪除字元(EC) 許多系統提供此功能用於刪除最近相鄰的不可刪除字元或使用者提供資料流的最近相鄰的“顯示位置”。此功能通常用於編輯鍵盤錯誤的輸入。EC是使用此功能的標準表示。注意:“顯示位置”可能包括多於一個的字元,它們是過多鍵入的結果或者如下格式的字串:
刪除行(EL) 許多系統提供此功能用於刪除當前輸入行中的所有資料。此功能通常被用於是編輯鍵盤輸入。EL是使用此功能的標準表示。
TELNET的"Synch"訊號 大部分時分系統提供一種允許終端使用者重新獲得失控程式的機制;上述的IP和AO功能就是此機制的一個例子。這些系統,當被用於本地時,訪問由使用者提供的所有訊號,無論此訊號是一般字元還是不可顯示的字元如電傳中的“BREAK”或IBM 2741中的“ATTN”鍵。當系統透過網路連線時這種情況不一定就是準確的;網路流量控制機制可能導致一個訊號被快取於網路中某處,例如在使用者的主機中。為了克服這個問題,引入了TELNET的“Synch”機制。一個Synch訊號包括一個TCP 緊急訊號和TELNET命令 DATA MARK。
緊急訊號,它不受限於限制TELNET的流量控制,它可以在接收到程式引發特定的資料處理。
在這種模式中,此資料流立即被看作是“有重大意義的”,而拋棄其它資料。
TELNET命令DATA MARK (DM)是資料流中的同步標誌,它指示任何特定的訊號已經發生過了,接收可以返回到正常處理其它資料的狀態中了。Synch透過TCP傳送操作完成,它和緊急標誌及在最後的DM標誌一起傳送。當一些Synch訊號被連續傳送時緊急訊號可能被淹沒。不可能對緊急訊號記數,因為這一數字有可能小於也可能等於已經傳送的數目。當處於通常模式下,DM不是一個操作;當處於緊急模型下,它指示緊急處理的結束。如果TCP指示緊急資料結束前發現DM,TELNET應該繼續運算元據流直到遇到DM為止。如果TCP在DM之後指示又有一些緊急資料,那隻能是因為是一串Synch。TELNET應該繼續運算元據流直到遇到DM。
“有意義的”訊號被定義為:IP,AO和AYT(但不是EC或EL)的TELNET標準定義;如果有的話,本地對這些標準定義的模擬;所有其它TELNET命令;其它站點定義的不需要拖後資料流的訊號。因為SYNCH命令的另一個作用是拋棄所有在接收者和傳送者之間隨了TELNET命令之外的字元,如果需要時,此機制被指定為標準方法來清理資料路徑。例如,如果一個在終端的使用者傳送一個AO命令,收到此命令的伺服器(如果此伺服器提供此功能)應該返回一個SYNCH給使用者。
最後,正如需要TCP緊急訊號作為供他們使用的命令一樣,其它使用TELNET協議的協議也需要類似的命令。這透過使用[IP,SYNCH]就可以達到。例如,假設其它一些使用TELNET的協議定義了型別於AO命令的停止字串。試想此協議的使用者希望伺服器來處理停止字串,但連線因為伺服器正在處理別的命令而被阻塞。使用者應該使它的系統做以上工作:
- 傳送TELNET IP字元;
- 傳送TELNET SYNC串,這就是說:傳送DM作為在TCP緊急模式傳送操作下的唯一字串。
- 傳送字串STOP,並且
- 傳送其它協議的型別於TELNET DM的命令。
使用者(或者程式)必須象步2一樣重新傳送TELNET SYNCH序列來確保TELNET IP到達伺服器的TELNET直譯器。“緊急”將喚醒TELNET程式;IP應該喚醒更高階的程式。NVT顯示和鍵盤 NVT顯示有一個未指定的行寬和頁面大小,並且可以產生代表ASCII碼的字元。
對於33個控制字元和另外128個沒有使用的字元,將指定給顯示:
NULL (NUL) 0 無操作;
Line Feed (LF) 10 將顯示移動到下一行的同一垂直位置。
Carriage Return (CR) 13 將顯示移至當前行的左邊界處。
另外,還應該定義如下字元(但這不是必須的),它們對顯示也有作用。TELNET的任何一方都不會假定另一方會在接收或傳送時採取以下行動:
BELL (BEL) 7 響鈴或者給出一個可視的訊號(這並不移動顯示位置)。
Back Space (BS) 8將顯示向左移一個位置。
Horizontal Tab (HT) 9 將顯示移至下一個製表位。現在還未指定任何一方如何決定製表位的位置究竟在什麼地方。
Horizontal Tab (HT) 9 將顯示移至下一個垂直製表位。現在還未指定任何一方如何決定製表位的位置究竟在什麼地方。
FoFeed (FF) 12 將顯示移動到下頁起始位置,並保持相同的水平位置。所有現在的程式碼都不使NVT顯示作任何操作。
CR LF序列將使顯示定位於下一顯示行的左邊界處。然而,許多系統和終端並不將這兩個字元分開處理而不得不作一些工作模擬它們的作用。(例如,一些終端沒有獨立於LF的CR,但在這些終端上可以透過後退鍵模擬CR的功能。)因此,CR LF序列必將作為新行標記使用它們的複合功能;CR NUL必須在希望僅輸入一個回車時使用;在其它情況下應該避免單獨使用CR。這個法則使必須決定是否進行一個“新行”操作功能或多個回退的系統能夠保證包括由一個字元在CR後面的TELNET流的操作,並作出正確的決定。注意:CR LF或者CR NUL對雙方都是要求的,這就保證了NVT的對稱性。即使在一些情況下可以知道字元未被送到實際的終端,然而,出於一致性的考慮,協議要求在CR後面如果沒有LF就必須插入一個NUL。反過來說,在CR後面接收到一個NUL後,應該把它從資料流中拋棄,而不應該將它用於NVT的字元對映。
在NVT上有鍵盤,組合鍵或鍵序列來產生這全部128個字元。注意:雖然其中的一些對NVT顯示沒有作用,NVT也有能力產生它們。除了這些以外,NVT鍵盤還應該能夠產生如下有意義,但不要求的的字元。對這些字元的實際程式碼指派在TELNET命令一節中,因為它們被作為普通的應該被提供的,即使在資料流被解釋為一些其它字符集的情況下。
Synch 此鍵允許使用者清除到另一方的資料通道。此鍵的啟用導致DM的傳送,而且還導致同時傳送TCP的緊急訊號。DM-緊急訊號對有如前面定義的意義。
Break (BRK) 它的提供是因為它不是ASCII字符集內的一員。它指示Break鍵和Attention鍵被按下。然而,請注意:它是作為第129個程式碼,而不是IP標準定義。
Interrupt Process (IP) 暫停,中斷,放棄或終止NVT連線的程式的執行。同樣的,它也是使用TELNET協議的協議要使用的訊號。
Abort Output (AO) 允許當前程式執行至終止,但不將結果送給使用者。同樣,傳送SYNCH給使用者。
Are You There (AYT) 回送給NVT一些可見的字元。
Erase Character (EC) 接收方應該刪除緊後一個未刪除的字元或從資料流中刪除一個“顯示位置”。
Erase Line (EL) 接收方應該將資料流中的字元從當前位置開始一直刪除到最近的“CR LF”為止。
這些“額外”鍵的功能和一些顯示格式功能鍵是它們應該代表一個對從NVT到本地機對映的擴充。如同NVT資料位元組68應該被對映為大寫D一樣,一個EC字元應該被對映為一個“刪除行”的功能鍵。另外,如果對映124在一些情況下是武斷的一樣,EL字元的對映有時候也是武斷的。對於格式字元也是一樣的:如果終端實際上擁有“垂直製表位”,那麼對映到NVT是顯然的,如果終端不提供此功能,那麼結果將是不可預料的。TELNET命令結構 所有TELNET命令結構至少包括一個兩個位元組的序列:由一個IAC後跟一個命令。關於選項會話的命令是由三個位元組的序列構成的,第三個位元組是關於選項參考的。選擇這種結構,這樣隨著完全使用資料空格資料與命令值之間的衝突就會減少,所有這些衝突導致了不一致和沒有和資料的丟失。根據目前的設定,只有與IAC衝突的資料需要被髮送兩次,其它255個程式碼都可以直接傳送。下面是定義了的TELNET命令。注意:只有當程式碼和程式碼序列前面是IAC時它才是命令。
SE 240 結束子會話引數。
NOP 241 無操作。
Data
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-987740/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- POP3協議規範(中文版) (轉)協議
- Mqtt協議規範MQQT協議
- SOAP協議規範(一)協議
- SOAP協議規範(二)協議
- 網路協議規範大全協議
- Gnutella協議中文版 (轉)協議
- 用Python寫協議規範Python協議
- 【譯】 WebSocket 協議第十二章——使用其他規範中的WebSocket協議Web協議
- 計算機網路學習筆記(10) TCP/IP協議棧 之TELNET協議計算機網路筆記TCP協議
- HTML編碼規範建議HTML
- SMTP協議初探(1)----dos下telnet命令發郵件協議
- Google C++ 編碼規範(中文版)GoC++
- 頁面連結跳轉--指定協議,半協議,無協議協議
- corba核心規範(轉)ORB
- Neuron 2.1.0 釋出:支援 Sparkplug B 規範,更完善的工業協議支援Spark協議
- 雲協議範例一 P2P協議
- 前端開發規範:命名規範、html規範、css規範、js規範前端HTMLCSSJS
- 轉:Git 使用規範流程Git
- [轉]PHP編碼規範PHP
- Java 編碼規範 (轉)Java
- java編碼規範 (轉)Java
- (譯) JSON-RPC 2.0 規範(中文版)JSONRPC
- 關於JAVA 2 網路協議ftp,tfpt,telnet,dns的實現Java協議FTPDNS
- Http協議學習(轉)HTTP協議
- FreeBSD PPP協議(轉)協議
- 轉換協議位元組協議
- MySQL 高效能優化規範建議MySql優化
- CSS編寫指導規範和建議CSS
- PHP PSR-1 基本程式碼規範(中文版)PHP
- 實現網站由http協議轉為https協議網站HTTP協議
- java編碼規範(2) (轉)Java
- 【網路協議】IP協議、ARP協議、RARP協議協議
- MySQL資料庫規範 (設計規範+開發規範+操作規範)MySql資料庫
- 多協議遠端管理Termius 啟用中文版最新協議
- PD快速充電協議(轉)協議
- 深入理解HTTP協議(轉)HTTP協議
- TCP/IP協議原理【轉載】TCP協議
- FreeBSD SMB/CIFS協議(轉)協議