TCP/IP 與 Internet 網路:第十一章 網路終端機系統 上一頁 下一頁
11-4 Telnet 通訊協定
早期 Telnet 通訊協定是在 RFC 854 中規範,它是定義最低通用的同質性終端機協定,將客戶端和伺服端之間模擬成一虛擬終端機來互相通訊,稱之為『網路虛擬終端機』(Network Virtual Terminal, NVT)。透過虛擬想像的 NVT 裝置,將客戶端和伺服端的真正終端機映射到 NVT 上,也就是說,雙方不論終端機型態為何,都將其映射到 NVT 上,便可以利用 NVT 格式來互相通訊,其中便可省略許多相容性的問題。
如果各種網路應用系統的 Client/Server 雙方都模擬成 NTV 來相互通訊,也就將客戶端所傳送的各種命令,都好像是從主控台的鍵盤輸入一樣,便可省略掉 Internet 網路上各種異質性電腦之間的相容性問題,這也是我們在 12-2-3 節中介紹 Internet 網路上應用系統的通訊方式。也就是說,Telnet 的通訊方式後來都使用在各種應用系統上。有關 NVT ASCII 通訊方式,我們在 12-2-3 節中已介紹過,不再重複說明,以下介紹 Telnet 的通訊命令。
11-4-1 Telnet 通訊命令
在 NVT ASCII 中都是以 8 位元來編碼欲傳輸的資料,但一般 ASCII 碼都為 7 位元,因此,我們將最高位元(第 8 位元)都設定為 0。但一些有關圖形文字碼(如,中文的 Big-5 碼)和影像檔,大多會用到 7 位元以後(第 8 位元為 1)的碼,因此,一般 Internet 應用系統的控制字元大多使用在 8 位元編碼中較後面的,也就是以較接近 255(0xFF)的數碼。有關 Telnet 通訊命令的編碼,在 RFC 856 中有詳細規範,表 11-1 列出 Telnet 通訊命令。
表 11-1 Telnet 通訊命令彙集
名稱 |
碼(10 進位) |
碼(16 進位) |
功能描述 |
EOF |
236 |
0xEC |
檔案結束(End of File)。 |
SUSP |
237 |
0xED |
暫停目前處理動作(Suspend)。 |
ABORT |
238 |
0xEE |
中斷放棄(Abort)。 |
EOR |
239 |
0xEF |
紀錄結束(End of Record)。 |
SE |
240 |
0xF0 |
子選項結束(End of Subnegotiation)。 |
NOP |
241 |
0xF1 |
沒有動作(No Operation)。 |
DM |
242 |
0xF2 |
資料標記(Data Mark)。 |
BRK |
243 |
0xF3 |
中斷(Break)。 |
IP |
244 |
0xF4 |
中斷處理程序(Interrupt Process)。 |
AO |
245 |
0xF5 |
放棄輸出(Abort Output)。 |
AYT |
246 |
0xF6 |
您還在嗎?(Are You There)。 |
EC |
247 |
0xF7 |
刪除字元(Erase Character)。 |
EL |
248 |
0xF8 |
刪除字行(Erase Line)。 |
GA |
249 |
0xF9 |
前進(Go Ahead)。 |
SB |
250 |
0xFA |
子選項開始(Subnegotiation Begin)。 |
WILL |
251 |
0xFB |
期望(Will)子選項協議。 |
WONT |
252 |
0xFC |
不期望(Won’t)選項協議。 |
DO |
253 |
0xFD |
要求(Do)選項協議。 |
DONT |
254 |
0xFE |
不要求(Don’t)選項協議。 |
IAC |
255 |
0xFF |
直譯命令(Interpret as Command) |
主機和終端機雙方所傳送的命令都以 IAC (0xFF)為前導,也就是說,在雙方傳輸當中,IAC 後面緊接著通訊命令。但如果傳輸資料中也有 IAC(0xFF)的位元組,則再插入一個 IAC 來表示資料的意思,其情況就好像網路系統中的字元填塞(Character Stuffer)一樣。
11-4-2 Telnet 選項協議
就我們所瞭解,主機和客戶端之間必須經過協議來決定雙方的通訊方式,譬如,終端機型態、傳輸模式等等,因此雙方隨時都必經過協議來決定某一事項,這些協議的工作就利用選項命令來達成。Telnet 中有下列四種選項命令:
(1) WILL:發送者期望自己選項被啟動(Enable),並詢問對方。
(2) DO:接收者同意對方選項,並回應給發送者。
(3) WONT:發送者想要停用(Disable)自己的選項,並詢問對方。
(4) DONT:接收者不同意對方選項,並回應給發送者。
雙方利用上述四種協議命令,來協調雙方的選項,任何一方都可以拒絕或接受對方的選項,因此,可能發生下列六種情況:(表 11-2)
表 11-2 選項協定運作
|
發送者 |
|
接收者 |
說 明 |
1. |
WILL
|
→ ← |
DO |
發送者期望自己選作用。 接收者同意對方選項。 |
2. |
WILL
|
→ ← |
DONT |
發送者期望自己選作用。 接收者不同意對方選項。 |
3. |
DO
|
→ ← |
WILL |
發送者希望對方啟動選項項目。 接收者回應選項項目。 |
4. |
DO
|
→ ← |
WONT |
發送者希望對方啟動選項項目。 接收者回應無法提供。 |
5. |
WONT
|
→ ← |
DONT |
發送者希望停用自己的選項。 接收者回應停用該選項(必需同意)。 |
6. |
DON’T
|
→ ← |
WONT |
發送者要求停用對方的選項。 接收者回應停用自己選項(必需同意)。 |
當雙方欲執行上述協議動作時,必需包含三個位元組:一者為 IAC 表示命令的開始;二者為協議命令(如,WILL、DO、WONT、DONT);三者為欲協議之選項項目的 ID(如,終端機型態、視窗大小、流量控制等等)。每一個位元組表示一種命令,因此,協議命令格式如下:
< IAC, WILL(或 DO、WONT、DONT), 功能碼_ID >
目前 Internet 網路上針對 Telnet 的選項項目有超過 40 種以上,當然並不是所有的選項都會應用得到,這可以依據使用者的環境而定。這些選項都由各自的 RFC 指定 ID 號碼,並說明其功能,我們在表 11-3 中列出一些較常用的選項。
表 11-3 常用之選項項目
ID |
名 稱 |
說 明 |
RFC |
0 |
Transmit Binary |
設定為 8 位元傳輸模式。 |
856 |
1 |
Echo |
Echo 回應輸入位元到螢幕上。 |
857 |
3 |
Supress GA |
抑制前進訊號(Go-ahead)。 |
858 |
5 |
Status |
詢問對方選項狀態。 |
859 |
6 |
Time Mark |
通訊中插入時間標記。 |
860 |
24 |
Terminal Type |
終端機型態。 |
1091 |
31 |
Window Size |
視窗大小。 |
1073 |
32 |
Terminal Speed |
終端機速度。 |
1079 |
33 |
Remote Flow Control |
遠端流量控制。 |
1372 |
34 |
Linemode |
行輸入模式。 |
1184 |
36 |
Environment Variable |
環境變數設定。 |
1408 |
11-4-3 Telnet 子選項協議
並非所有選項都只要指定選項項目就可以完成,有些選項必需詳細的指定某些參數,譬如終端機選項,當雙方協議好某一種終端型態之後,也許還必須協議有關終端機的傳輸模式,如 ASCII 字元傳輸模式等等,因此,就有必要在某一選項之下,再協議一些子選項(Sub-negotiation)項目。基本上,每一選項的子選項項目都會在自己的 RFC 規範中制定,但它們的協議方式也都大同小異。一般都以 <IAC, SB, ..> 表示子選項的開始,又以 <…. IAC, SE> 表示子選項的結束,其中 IAC(0xFF)表示交談命令開始;SB(0xFA)表示子選項開始;SE(0xF0)為子選項結束。我們以 RFC 1091 中規範終端機選項,來介紹 Telnet 的終端機型態之協議運作方式,依照圖 11-6 中標示順序號碼說明如下:
圖 11-6 Telnet 選項協議範例
(1) 首先由客戶端(網路終端機)要求協議終端機型態(<IAC, WILL, 24>),選項 24 表示終端機型態(如表 11-3)。
(2) 伺服端同意對方協議終端機型態,則傳送 <IAC, DO, 24> 給客戶端。
(3) 伺服端欲向客戶端詢問終端機型態,則送出 <IAC, SB, 24, 1, IAC, SE>,其中子選項 1 表示『請傳送您的終端機型態』(Send)的意思。
(4) 客戶端收到伺服端的詢問訊號後,便傳送自己的終端機型號給伺服端,發送 <IAC, SB, 24, 0, 'V', 'T', '2', '2', '0', IAC, SE> 給伺服端,其中 0 表示『我的終端機型態是』(Is)的意思,而 VT220 是以 ASCII 字元編碼,每一字元以 8 個位元表示。
(5) 此時,伺服端繼續協商希望以 8 位元型態傳輸資料,因此發送 <IAC, WILL, 0> 給客戶端,其中選項 0 表示用 8 位元傳輸模式(如表 11-3 所示)。
(6) 客戶端如同意該選項,則回應 <IAC, DO, 0>;否則回應 <IAC, DONT, 0>。