Telnet会话与TCP会话

时间:2013-12-25 22:47:31

标签: java sockets session tcp telnet

TELNETTCP会话之间的区别是什么? 我有一个简单的服务器:

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连接并输入如下:

enter image description here

所以我假设telnet客户端发送的数据包没有特定的标头,并且在没有更改的情况下完全传递给低级协议(在我的情况下为TCP)。这是对的吗?

2 个答案:

答案 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是一种协议,用于连接计算机以及可靠,有序,错误检查的流传输。