Tcp

為什麼telnet被認為是一種協議?它不只是一個簡單的 TCP 發送/回顯程序嗎?

  • November 17, 2019

這更像是一個概念問題。我需要一些澄清。


今天我在學習一些套接字程式的東西,並根據Beej 的網路程式指南編寫了一個簡單的聊天伺服器和聊天客戶端。(聊天伺服器接收客戶端消息並將消息發送給所有其他客戶端)

我複制了 聊天伺服器並編寫了自己的聊天客戶端

聊天客戶端只是一個stdin向伺服器發送輸入並從伺服器列印套接字數據的程序。

後來我注意到指南說我可以telnet用來連接到伺服器。我試過了,它奏效了。


我對telnet不熟悉,很長一段時間我都不知道它到底是什麼。

所以現在我的經歷讓我感到困惑:

telnet 不就是一個簡單的 TCP 發送/回顯程序嗎?是什麼讓成為協議的東西如此特別?我的啞聊天客戶端程序不會創建

$$ application $$協議。 來自維基百科Communication_protocol

在電信中,通信協議是一個規則係統, 它允許通信系統的兩個或多個實體通過物理量的任何類型的變化來傳輸資訊。

Telnet 創建什麼規則?telnet host port,為原始輸入/輸出打開一個 TCP 流套接字?這不是規則。

Telnet 在RFC 854中定義。使它(以及其他任何東西)成為協議的原因是一組規則/約束。一個這樣的規則是 Telnet 是通過 TCP 完成的,並分配了埠 23——這些東西可能看起來微不足道,但需要在某個地方指定。

你不能隨心所欲地發送任何你想要的東西,有些東西是有限制和特殊意義的。例如,它定義了一個“網路虛擬終端”——這是因為當建立 telnet 時,可能會有許多不同的終端:列印機、黑白顯示器、支持 ANSI 程式碼的彩色顯示器等。

此外,還有這樣的東西:

總之,任何一方發送 WILL XXX 以表明該方希望(提議)開始執行選項 XXX、DO XXX 和 DON’T XXX 作為其積極和消極的確認;類似地,發送 DO XXX 以指示對方(即 DO 的接收者)開始執行選項 XXX 的願望(請求),WILL XXX 和 WON’T XXX 是肯定和否定確認。由於 NVT 是在未啟用任何選項時留下的內容,因此可以保證 DON’T 和 WON’T 響應使連接處於兩端都可以處理的狀態。因此,所有主機都可以實現它們的 TELNET 程序以完全不知道不支持的選項,只是簡單地返回拒絕(即拒絕)任何無法理解的選項請求。

在現代,大多數東西都不再那麼重要了(再說一遍,telnet 作為協議不再被使用,不僅僅是因為它缺乏安全性)所以實際上它歸結為發送/回顯,除非你必須實際與終端介面。

引用自:https://unix.stackexchange.com/questions/552302