【技術白皮書】內功心法 | 第二部分 | Telnet遠程登錄的工作原理

遠程登錄的工作原理

  • 背景介紹
  • 遠程登錄
    • 遠程登錄的服務模式
      • 遠程登錄服務的實現基礎
      • 遠程登錄服務的運行模式
      • 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規范,上述轉換過程得以順暢進行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71953.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71953.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71953.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在 Spring Boot 中實現基于 TraceId 的日志鏈路追蹤

1 前言 1.1 什么是 TraceId? TraceId 是一個唯一的標識符,用于跟蹤分布式系統中的請求。每個請求從客戶端發起到服務端處理,再到可能的多個微服務調用,都會攜帶這個 TraceId,以便在整個請求鏈路中進行追蹤和調試。 1.2 日志鏈路追蹤的意義 日志鏈路追蹤可以幫助開發者…

游戲引擎學習第150天

回顧與當天計劃 我們在這里完全不使用任何庫,所以我們完全是引擎和庫免疫的, 正如大家所知道的,我們正在編寫自己的資源處理系統,準確來說,是一個資源加載系統。過去一周我們已經完成了很多工作,現在只剩下最后幾步&a…

Flutter中stream學習

Flutter中stream學習 概述Stream的基礎概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

基于javaweb的SSM房屋租賃管理系統設計和實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論…

物聯網商業模式

物聯網商業模式是一種戰略規劃&#xff0c;它融合了物聯網技術來創造價值并獲取收入。它與傳統商業模式的不同之處在于&#xff0c;它利用互聯設備來改善運營、提升客戶體驗以及優化服務項目。在當今由科技驅動的世界中&#xff0c;這種商業模式通過利用實時數據來提供創新服務…

從0開始的操作系統手搓教程45——實現exec

目錄 建立抽象 實現加載 實現sys_execv &#xff01;&#xff01;&#xff01;提示&#xff1a;因為實現問題沒有測試。所以更像是筆記&#xff01; exec 函數的作用是用新的可執行文件替換當前進程的程序體。具體來說&#xff0c;exec 會將當前正在運行的用戶進程的進程體&…

【python爬蟲】酷狗音樂爬取練習

注意&#xff1a;本次爬取的音樂僅有1分鐘試聽&#xff0c;僅作學習爬蟲的原理&#xff0c;完整音樂需要自行下載客戶端。 一、 初步分析 登陸酷狗音樂后隨機選取一首歌&#xff0c;在請求里發現一段mp3文件&#xff0c;復制網址&#xff0c;確實是我們需要的url。 復制音頻的…

Linux開發工具----vim

目錄 Linux編輯器-vim使用 1. vim的基本概念 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 底行模式(last line mode) 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. vim操作總結 (本篇文章相當于vim常用命令字典) Linux編輯器-vim使用 我們先來看…

基于云函數的自習室預約微信小程序+LW示例參考

全階段全種類學習資源&#xff0c;內涵少兒、小學、初中、高中、大學、專升本、考研、四六級、建造師、法考、網賺技巧、畢業設計等&#xff0c;持續更新~ 文章目錄 [TOC](文章目錄) 1.項目介紹2.項目部署3.項目部分截圖4.獲取方式 1.項目介紹 技術棧工具&#xff1a;云數據庫…

卷積神經網絡與計算機視覺:從數學基礎到實戰應用

卷積神經網絡與計算機視覺&#xff1a;從數學基礎到實戰應用 摘要 本文深入解析卷積神經網絡&#xff08;CNN&#xff09;的核心原理及其在計算機視覺中的應用。首先介紹卷積與互相關的數學定義及在神經網絡中的實際應用差異&#xff0c;接著從系統設計視角分析卷積的線性代數…

從Manus到OpenManus:多智能體協作框架如何重構AI生產力?

文章目錄 Manus&#xff1a;封閉生態下的通用AI智能體OpenManus&#xff1a;開源社區的閃速復刻挑戰與未來&#xff1a;框架落地的現實邊界當前局限性未來演進方向 OpenManus使用指南1. 環境配置2. 參數配置3. 替換搜索引擎4. 運行效果 協作框架開啟AI生產力革命 Manus&#xf…

js 使用 Web Workers 來實現一個精確的倒計時,即使ios手機鎖屏或頁面進入后臺,倒計時也不會暫停。

## 效果如上 <!-- 將 main.js 和 worker.js 放在同一個目錄下&#xff0c;然后在 HTML 文件中引入 main.js --><!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&q…

深入理解 Linux 中的 -h 選項:讓命令輸出更“人性化”

在 Linux 系統中&#xff0c;命令行工具是系統管理員和普通用戶最常用的交互方式之一。然而&#xff0c;命令行輸出往往充滿了技術性術語和數字&#xff0c;對于初學者或非技術用戶來說可能顯得晦澀難懂。幸運的是&#xff0c;許多 Linux 命令都提供了一個非常實用的選項&#…

Docker Compose國內鏡像一鍵部署dify

克隆代碼 git clone https://github.com/langgenius/dify.git進入docker目錄 cd docker修改.env部分 # 將環境模版文件變量重命名 cp .env.example .env # 修改 .env,修改nginx的host和端口,避免端口沖突 NGINX_SERVER_NAME192.168.1.223 NGINX_PORT1880 NGINX_SSL_PORT1443…

紅隊OPSEC(安全運營)個人總結

OPSEC又稱&#xff1a;運營安全&#xff0c;是指在紅隊的視角下&#xff0c;藍隊對我方的威脅。 OPSEC漏洞的五個流程&#xff1a; 關鍵信息識別&#xff1a;指紅隊的關鍵信息不泄露&#xff0c;包括但不限于紅隊的攻擊意圖&#xff0c;能力&#xff0c;人員&#xff0c;活動及…

NO.29十六屆藍橋杯備戰|string九道練習|reverse|翻轉|回文(C++)

P5015 [NOIP 2018 普及組] 標題統計 - 洛谷 #include <bits/stdc.h> using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);string s;getline(cin, s);int sz s.size();int cnt 0;for (int i 0; i < sz; i){if (isspace(s[i]))continue…

MongoDB 觸發器實現教程

在傳統的關系型數據庫&#xff08;如 MySQL&#xff09;中&#xff0c;觸發器是一種強大的工具&#xff0c;它可以在特定的數據庫操作&#xff08;如插入、更新或刪除&#xff09;發生時自動執行一段代碼。然而&#xff0c;MongoDB 并沒有原生內置的觸發器概念。不過&#xff0…

C#控制臺應用程序學習——3.11

一、整型數字計算 如果我們想執行以下程序&#xff1a;程序提示用戶輸入一個數字并輸出 num 20 的結果&#xff0c;我們的思維應該是這樣的&#xff1a; using System;public class Class1 {public static void Main(string[] args){Console.WriteLine("Enter the first…

【C語言】指針篇

目錄 C 語言指針概述指針的聲明和初始化聲明指針初始化指針 指針的操作解引用操作指針算術運算 指針的用途動態內存分配作為函數參數 指針與數組數組名作為指針通過指針訪問數組元素指針算術和數組數組作為函數參數指針數組和數組指針指針數組數組指針 函數指針函數指針的定義和…

嵌入式音視頻通話SDK組件EasyRTC:全平臺設備兼容,智能硬件里的WebRTC調用實踐

在萬物互聯時代&#xff0c;智能硬件設備對實時音視頻通信的需求呈現爆發式增長。傳統基于PC或移動端的WebRTC方案難以滿足嵌入式設備在資源占用、低延遲傳輸和硬件適配等方面的特殊需求。本文將深入探討如何通過EasyRTC嵌入式音視頻通信SDK在嵌入式設備中實現高效的WebRTC視頻…