BSD 的远程登陆

【BSD 的远程登陆】协议描述
Rlogin提供远程回显(remote-echoed)、本地流控(locallyflow-controlled)、正确输出清
洗(flow-controlled)的虚终端 。它广泛用于Unix主机间 , 因为它提供了比telnet协议更加
丰富的终端环境语义的传输 , 而且在许多Unix主机上 , 通过配置可以让用户不用输入密码
就从被信任的主机上建立连接 。
Rlogin需要使用TCP协议 , 端口号是513 。采用8位透明流 。
建立连接
建立连接时 , 客户给服务器发送四个以null结尾的字符串 。第一个是空串(就是说它
只有一个为0的字节) , 后面跟着三个非空串:客户的用户名 , 服务器的用户名 , 终端的类
型和速度 。更明确的讲:
客户端用户名
服务器端用户名
终端类型/速度
例如:
bostic
kbostic
vt100/9600
服务器端返回一个空字节 , 表明它接受到了这些字符串 , 现在已进入了数据传输模式 。
窗口大小的协商可以接下来进行(如下) 。
从客户到服务器(以及流控)
开始时 , 客户在cooked模式下工作(与raw模式相对) 。此模式下START和STOP(通
常是ASCII码DC1 , DC3)字符被客户端截获 , 理解为启动和终止远程服务器对本地终端
的输出 , 而其它字符被按照接收到的原样传输到远端主机(但是下面对本地转意字符的处
理) 。
在raw模式下 , START和STOP字符不在本地处理 , 而被像其它字符一样传送到远端
服务器上 。于是在raw模式下由服务器来决定START和STOP字符的语义 。它们可以用于
流控制或者其它与在客户端上根本不同的意思 。
屏幕/窗口大小
在刚刚建立好连接并且完成了用户身份检查后 , 远端服务器通过给客户端发送一个请求
取得窗口大小的消息(如下描述)来表明自己可以接受改变窗口大小的请求 。客户端应该返
回当前窗口大小信息 。
假如远端服务器表示它可以接收客户窗口大小改变 , 客户窗口或者屏幕的尺寸大小 , 一
个12字节的非凡序列被传送到服务器端 , 告知当前客户端的尺寸 , 以防服务器端的用户进
程等待使用这些信息 。
窗口大小变化控制序列为12字节长 , 由一个magiccookie(两个连续的16进制FF),
后面跟着两个小写的ASCII"s" , 然后是8个字节包含16位的行和列的字符数 , X方向的像
素数和Y方向的像素数 。所以:
FFFFssrrccXPyp
将来也许会用ss之外的其它标志来作为控制信息 。但现在还没有定义 。
从服务器到客户
从远端服务器的数据以字节流方式传递给客户 。一般情况下数据被送到客户端显示 , 但
也可能在实际显示前处理(例如扩展tab键) 。
服务器可以把单字节的控制信息嵌入到数据流中 , 而TCP"紧急数据"指针(译者注:
参见TCP头部格式)指向控制字节 。当TCP紧急数据指针被客户端收到后 , TCP流中的数
据直到紧急字节的数据被缓存 , 到控制字节得到处理后再显示 。被指向的控制字节被接收然
后按照如下来解释:
02 16进制02的控制字节使客户端丢掉所有缓冲的从服务器端接收到但还没有写道客户端
屏幕的数据 。
10 16进制控制字节10命令客户端切换到"raw"模式 , 这种模式下 , START和STOP字符
不再被客户端处理 , 而被当作普通的数据 。
20 16进制控制字节20继续捕捉并且在本地处理START和STOP流控制字符 。
紧急数据的所有其它值都被忽略 。在所有情况下 , 紧急数据指针所指向的字节都不会被

推荐阅读