为什么 telnet 被认为是一种协议?不就是一个简单的TCP发送/回声程序吗?

Ric*_*ick 12 tcp telnet protocols

这更像是一个概念性问题。我需要一些说明。


今天我正在学习一些套接字编程的东西,并根据Beej 的网络编程指南编写了一个简单的聊天服务器和聊天客户端。(聊天服务器接收客户端消息并向所有其他客户端发送消息)

我复制了 聊天服务器并编写了自己的聊天客户端

聊天客户端只是一个将stdin输入发送到服务器并从服务器打印套接字数据的程序。

后来我注意到指南说我可以telnet用来连接到服务器。我试过了,它奏效了。


我不熟悉 telnet,很长一段时间我都不知道它到底是什么。

所以现在我的经历让我感到困惑:

telnet 不就是一个简单的 TCP 发送/回显程序吗?是什么让成为协议的东西如此特别?我的愚蠢聊天客户端程序没有创建 [应用程序] 协议。

来自维基百科Communication_protocol

在电信中,通信协议是一种规则系统, 它允许通信系统的两个或多个实体通过物理量的任何种类的变化来传输信息。

Telnet 创建了哪些规则?telnet host port,为原始输入/输出打开一个 TCP 流套接字?那不是规则。

Mic*_*tum 17

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 作为一种协议不再被广泛使用,不仅仅是因为它缺乏安全性)所以在实践中它归结为发送/回声,除非你必须实际与终端接口。

  • 一个令人惊讶的地方仍然使用 Telnet——FTP。FTP 在 Telnet 的“顶部”运行,理论上,FTP 客户端和服务器必须能够响应 WILL/DO/DON'T 命令。 (3认同)
  • 好的我明白了。简而言之,telnet 有自己的协议,我们现在几乎没有接触过。发送/回送 TCP 原始输入/输出服务只是其功能的一部分。 (2认同)

Ste*_*itt 7

telnet连接两个终端时“正常工作”这一事实本身就是一个协议决定:设计者telnet决定在 TCP 连接的任一端使用带有“网络虚拟终端”的模型,并决定在基本终端上对这些虚拟终端进行建模功能(真的是电传打字机)。

除此之外,telnet它不仅仅是一个简单的基于 TCP 的回声服务;它支持用于各种目的的带内发送的控制代码。它被编纂在RFC 854 中