TELNET
和TCP
会话之间的区别是什么?
我有一个简单的服务器:
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(5555);
Socket socket = ss.accept();
System.out.println("Waiting for a client...");
InputStream sin = socket.getInputStream();
OutputStream sout = socket.getOutputStream();
DataOutputStream out = new DataOutputStream(sout);
out.writeUTF("\u001B[2J");
out.writeUTF("Hello client\r\n");
while (true) {
int b = sin.read();
sout.write(b);
}
}
我通过telnet连接并输入如下:
所以我假设telnet客户端发送的数据包没有特定的标头,并且在没有更改的情况下完全传递给低级协议(在我的情况下为TCP
)。这是对的吗?
答案 0 :(得分:2)
来自http://en.wikipedia.org/wiki/Telnet#Telnet_data:
除0377之外的所有数据八位字节都按原样通过TCP传输进行传输。因此,Telnet客户端应用程序也可用于建立交互式原始TCP会话,并且通常认为这种不使用IAC(0377字符或十进制255)的会话在功能上是相同的。[citation needed]但是,并非如此,因为还有其他网络虚拟终端(NVT)规则,例如要求裸回车字符(CR,ASCII 13)后跟一个NULL(ASCII 0)字符,区分来自原始TCP会话的telnet协议。[需要说明]另一方面,许多系统现在拥有真正的原始TCP客户端,例如UNIX上的netcat或socat以及Windows上的PuTTY,它们也可以用于手动" talk&# 34;没有专门的客户端软件的其他服务。尽管如此,Telnet仍然有时用于调试网络服务,如SMTP,IRC,HTTP,FTP或POP3服务器,向服务器发出命令并检查响应,但在所有这些协议中,只有FTP真正使用Telnet数据格式。
Telnet与原始TCP会话的另一个区别是默认情况下Telnet不是8位清理。可以协商8位模式,但在请求此模式之前,高位设置的八位字节可能会出现乱码,显然在非Telnet连接中不会请求它。 8位模式(所谓的二进制选项)旨在传输二进制数据,而不是字符。该标准建议将代码0000-0176解释为ASCII,但不对高位集数据八位字节提供任何含义。尝试引入像HTTP这样的可切换字符编码支持,[3]但对其实际软件支持一无所知。
我会输入更多内容,但维基百科很好地介绍了它:)
答案 1 :(得分:0)
Telnet是服务的名称。 TCP是一种协议,用于连接计算机以及可靠,有序,错误检查的流传输。