遠程登錄的工作原理
- 背景介紹
- 遠程登錄
- 遠程登錄的服務模式
- 遠程登錄服務的實現基礎
- 遠程登錄服務的運行模式
- Telnet服務為什么不被操作系統管理
- Telnet協議的原理
- 網絡虛終端(NVT)
- 結束標示
- NVT的原理
- NVT屏蔽差異
背景介紹
絕大多數計算機都是運行多用戶操作系統的中小型機,這些中小型機通常由一臺主機和多個終端組成,主機的計算資源被多個終端用戶共享。系統為每個用戶分配一個賬號,規定了用戶對系統的訪問權限。
用戶通過自己的賬號在某個終端登錄后,可以訪問系統的部分或全部資源。
遠程登錄
遠程登錄的主要目的是使遠端用戶能夠像本地用戶一樣訪問遠程系統的資源。為了實現這一目標,遠程登錄協議的設計旨在提供一個相對通用、雙向且面向8位字節的通信方法,以便遠端終端設備能夠以標準化的方式與計算機系統進行交互。
目前,TCP/IP協議族中有兩個主要的遠程登錄協議:telnet和rlogin。telnet協議是我們主要介紹和分析的內容,由RFC 854定義,成為互聯網中主機被要求采用和實現的標準。
本文主要探討Telnet協議的服務方式、工作原理以及其主要命令。
遠程登錄的服務模式
遠程登錄協議基于TCP協議運行,客戶終端通過TCP連接與遠程計算機進行通信。該服務采用客戶-服務器模式。如下圖所示,終端上運行著Telnet客戶端進程,而遠程計算機系統則運行著服務器進程。
客戶端和服務器進程借助一條TCP連接進行數據交互。
遠程登錄服務的實現基礎
遠程登錄服務的核心目的在于為遠程用戶提供與本地用戶相當的服務體驗。鑒于系統通常向本地用戶提供多條命令,系統同樣需確保這些命令對遠程用戶也可用。若單純采用客戶-服務器模式,則需為每位登錄用戶可能使用的每條命令分別創建一個進程,這將導致系統為接納一個遠程登錄請求而不得不生成多個服務器進程,極大地限制了系統的可擴展性。
為解決這一問題,遠程登錄服務采用了一種優化策略:即為每位遠程登錄用戶僅創建一個靜態的shell進程。該shell進程負責解釋和處理來自遠端用戶的所有服務請求,并根據需要動態地fork出相應的子進程來完成具體的服務任務。這種方法顯著減少了系統中靜態進程的數量,有效防止了系統進程數隨遠程登錄用戶數量的增加而迅速膨脹,從而圓滿解決了可擴展性問題。
因此,在Telnet遠程登錄連接中,雙方僅需各自運行一個應用程序即可實現通信。在客戶終端上運行的是客戶進程,而在遠程計算機上運行的則是服務器進程。
遠程登錄服務的運行模式
在遠程服務場景中,專門提供遠程登錄功能的主機會持續運行一個名為Telnet的服務器進程(亦稱作守護進程),該進程時刻準備接收來自終端用戶的登錄請求。遠程登錄的流程始于終端用戶發起Telnet命令的那一刻,此時,與該命令相關聯的本地應用程序扮演著客戶端的角色。
隨后,客戶端會與遠程計算機上的Telnet服務器建立一條TCP連接。一旦接收到連接請求,遠程登錄服務器便會為該用戶專門創建一個shell進程。基于這條TCP連接,客戶端會將用戶通過終端鍵盤輸入的指令傳輸給服務器端的shell進程。
Shell進程在接收到用戶指令后,會對其進行解析,并派生出一個子進程來執行相應的程序。程序執行的結果隨后通過TCP連接回傳給客戶端。客戶端在接收到這些來自服務器的字符信息后,會通過其所在終端的操作系統,將這些信息展示給用戶。
Telnet服務為什么不被操作系統管理
從先前的圖示中可以洞察到的另一個關鍵點是,在Telnet服務架構中,服務器進程與客戶進程均未被整合進操作系統內核,這一設計抉擇主要基于以下兩方面的深思熟慮:
- Telnet服務主要面向的是鍵盤類終端設備。考慮到用戶擊鍵的速度與微秒級進程切換所產生的響應延遲相比,幾乎可以忽略不計。
- Telnet等類似程序作為獨立的應用程序來處理,有助于保持系統內核的精簡與高效。
Telnet協議的原理
現在,我們來詳細闡述Telnet遠程登錄服務的整個流程,該過程精煉地劃分為以下三個核心步驟:
- 第一步,遠程用戶通過其終端發起對目標系統的登錄請求。這一登錄行為的內在本質,是通過建立一個TCP連接來實現的,它充當了用戶與系統間溝通的橋梁。
- 第二步,緊接著,用戶的鍵盤輸入被逐字逐句地傳輸至遠端的主機系統。這一過程確保了用戶輸入的每一個字符都能準確無誤地到達目標系統,供其處理。
- 第三步,主機系統在接收到用戶指令并完成相應操作后,將其輸出結果反饋回用戶的本地系統。這樣,用戶就能實時看到系統的響應和執行結果。
盡管這一流程看似直觀且簡潔,但考慮到Internet上主機和終端的多樣性——它們可能來自不同的制造商,采用了各異的技術標準——要確保Telnet能在如此復雜多變的環境中順暢運行,就必須實現輸入/輸出對遠端系統內核的透明性。
Telnet巧妙地利用了網絡虛終端技術和選項協商機制,這兩種技術共同協作,確保了無論遠端系統的具體實現如何,用戶都能獲得一致且透明的遠程登錄體驗。
網絡虛終端(NVT)
針對Telnet遠程登錄技術而言,系統間的異構性問題主要體現在它們對鍵盤輸入的解釋上存在的差異性。具體而言,這種差異不僅廣泛存在,而且在細節上尤為顯著。
結束標示
在行結束標志的處理上,盡管所有系統在用戶按下回車鍵時都會執行換行操作,表現出一定的共性,但行結束標志的具體實現方式卻大相徑庭。有的系統采用ASCII字符CR(回車符)作為行結束的標志,而另一些系統則使用CR-LF(回車換行符組合)作為標志。這種使用不同字符作為行結束標志的做法,直接導致了異構系統之間在遠程登錄時的互操作性障礙。
用于觸發進程終止的鍵碼也因系統而異。在某些系統中,Ctrl+C鍵被設定為進程終止碼,而在其他系統中,這一功能則可能由Del鍵承擔。這種鍵碼定義的多樣性,無疑進一步加劇了異構系統間的兼容性問題。
流控字符在不同異構系統間的差異也不容忽視。這些字符用于控制數據傳輸的速率和流量,以確保通信的穩定性和效率。然而,由于各系統對流控字符的定義和解釋各不相同,這也成為了實現遠程登錄時需要克服的又一難題。
NVT的原理
為了有效解決上述問題,Telnet協議引入了一種標準化的鍵盤定義方式——網絡虛終端(NVT,Network Virtual Terminal)。NVT為異構系統提供了一種統一的鍵盤輸入解釋框架,從而確保了不同系統間在進行遠程登錄時能夠準確、高效地傳遞鍵盤輸入信息。通過這種方式,Telnet協議極大地提升了異構系統間的互操作性和兼容性。
NVT屏蔽差異
在解決互聯網中的異構性問題時,核心策略在于將各類設備特有的數據格式轉換為一個預先商定且普遍適用的、與具體設備無關的數據格式,以此來封裝并掩蓋設備間的異構差異。這一理念類似于IP協議的功能,它有效地屏蔽了不同物理子網之間的異構特性。同樣地,Telnet協議利用網絡虛擬終端(NVT)機制,來消除不同終端設備之間因物理特性差異所帶來的不兼容問題。NVT的工作機制詳見下圖。
在客戶與服務器交互過程中,雙方分別采用各自的本地數據格式進行輸入輸出。對于遠程登錄會話,客戶端軟件負責將用戶輸入轉換為標準的網絡虛擬終端(NVT)數據及命令序列,隨后通過TCP連接傳遞給遠程服務器。服務器則接收這些NVT序列,并將其轉換為遠程系統的內部格式。由于客戶與服務器均熟悉各自系統的內部格式及NVT規范,上述轉換過程得以順暢進行。