版权归原作者所有,如有侵权,请联系我们

[科普中国]-远程终端地址

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏
简介

在计算机科学中,远程终端是一个SSH-2和Telnet终端仿真程序,它可以让你连接到你的UNIX和Linux服务器,NAS,虚拟主机,虚拟设备,路由器和所有其他系统,支持SSH-2或Telnet连接。远程终端地址是通过远程终端登录远程设备或系统所需要的地址。远程终端地址一般分为专用地址、广播地址和公用地址。

在UT1553B RTI Remote Terminal Interface中指出分配RTI远程终端地址可以通过软件或者硬件实现,主机分配RT的I远程地址通过执行一个控制寄存器写来实现的。终端地址总线(TA(4:0))选通至RTI远程终端地址寄存器在控制寄存器写入完成后。分配RTI远程终端地址可以通过硬件,利用TALEN /校验输入引脚操作在终端锁存地址的使能模式。这个终端地址总线锁存到RTI当TALEN断言(例如逻辑低)。有效的远程终端地址(RTA)包括十进制位0到31,如果是广播是禁用的,如果广播,0到30是可以的。2十进制地址31(11111)不应作为专用地址分配。如采用广播选择方式,RT除了它的专用地址外,还应指定十进制地址31(11111)作为公用地址。

MIL-STD-1553的总线协议

MIL-STD-1553是由美国国防部出版的军用标准,其定义了串行数据总线的机械,电气和功能特性。它最初设计为与军用航空电子设备一起使用的航空电子数据总线,但也成为军用和民用航天器车载数据处理(OBDH)子系统的常用功能。它具有多个(通常为双)冗余平衡线路物理层,(差分)网络接口,时分复用,半双工命令/响应协议,并可处理多达30个远程终端(设备)。使用光纤布线代替电气的MIL-STD-1553版本称为MIL-STD-1773。

MIL-STD-1553多路复用数据总线系统由控制多个远程终端(RT)的总线控制器(BC)组成,所有这些总线控制器都通过数据总线连接在一起,从而在总线控制器和所有关联的远程终端之间提供单一数据通路。也可能有一个或多个总线监视器(BM); 然而,总线监视器特别不允许参与数据传输,并且仅用于捕获或记录用于分析的数据等。在冗余总线实现中,使用多个数据总线来提供多于一个的数据路径,即双冗余数据总线,三冗余数据总线等。数据总线上的所有传输均可访问BC和所有连接的RT。消息由一个或多个16位字(命令,数据或状态)组成。使用曼彻斯特码传输包含每个字的16位,其中每个位作为逻辑0的逻辑1或低 - 高序列发送为0.5μs高和0.5μs低。每个单词前面都有一个3μs的同步脉冲(1.5μs低,加上数据字高1.5μs,命令和状态字相反,在曼彻斯特码中不会发生),后跟一个奇校验位。实际上,每个字可以被认为是一个20位字:3位用于同步,16位用于有效负载,1位用于奇校验控制。消息内的字连续传输,消息之间的差距必须至少为4微秒。然而,这个消息间的间隙可能并且通常比4μs大得多,甚至与一些较旧的总线控制器甚至高达1 ms。器件必须在4-12μs内开始发送其有效命令的响应,如果在14μs内没有启动响应,则认为没有收到命令或消息。

总线上的所有通信都由总线控制器控制,使用从BC到RT的命令进行接收或发送。从BC到终端的数据传输,(序列的形式是.和类似于CSP的符号)的序列是

master.command(terminal)→terminal.status(master)→master.data(terminal)→master.command(terminal)→terminal.status(master)

并且用于终端到终端通信

master.command(terminal_1)→terminal_1.status(master)→master.command(terminal_2)→terminal_2.status(master)→master.command(terminal_1)→terminal_1.data(terminal_2)→master.command(terminal_2)→terminal_2.STATUS(主)

这意味着在传输过程中,所有通信都由总线控制器启动,终端设备不能自己开始数据传输。在RT到RT传输的情况下,序列如下:RT接口(例如RT1)后面的子系统中的应用或功能将要发送的数据写入特定(发送)子地址(数据缓冲区)。将数据写入子地址的时间不一定与事务的时间相关联,尽管接口确保不发送部分更新的数据。总线控制器命令作为数据目的地的RT(例如RT2)以指定的(接收)数据子地址接收数据,然后命令RT1从命令中指定的发送子地址进行发送。RT1发送状态字,指示其当前状态和数据。总线控制器接收RT1的状态字,并看到发送命令已被接收并且没有任何问题。RT2接收共享数据总线上的数据,并将其写入指定的接收子地址并发送其状态字。接收RT接口后面的子系统上的应用程序或功能可以访问数据。再次,这种阅读的时间不一定与转移的时间相关。总线控制器接收RT2的状态字,并看到接收命令和数据已被接收并且没有问题。RT2接收共享数据总线上的数据,并将其写入指定的接收子地址并发送其状态字。接收RT接口后面的子系统上的应用程序或功能可以访问数据。再次,这种阅读的时间不一定与转移的时间相关。总线控制器接收RT2的状态字,并看到接收命令和数据已被接收并且没有问题。RT2接收共享数据总线上的数据,并将其写入指定的接收子地址并发送其状态字。接收RT接口后面的子系统上的应用程序或功能可以访问数据。再次,这种阅读的时间不一定与转移的时间相关。总线控制器接收RT2的状态字,并看到接收命令和数据已被接收并且没有问题。

BC和特定RT之间或总线控制器和一对RT之间允许六种类型的事务:

信息传输格式

控制器到RT传输。总线控制器发送一个16位接收命令字,紧接着是1到32个16位数据字。所选的远程终端然后发送单个16位状态字。

RT到控制器传输。总线控制器向远程终端发送一个发送命令字。远程终端然后发送单个状态字,紧接着是1到32个字。

RT到RT转接。总线控制器立即发出一个接收命令字,然后发送一个发送命令字。发送远程终端立即发送状态字,后跟1到32个数据字。接收终端然后发送其状态字。

没有数据字的模式命令。总线控制器发送一个子地址为0或31的命令字,表示模式码类型命令。远程终端用状态字进行响应。

模式命令与数据字(发送)。总线控制器发送一个子地址为0或31的命令字,表示模式码类型命令。远程终端用一个状态字立即响应一个单个数据字。

数据字(接收)的模式命令。总线控制器发送一个具有0或31的子地址的命令字,表示一个模式代码类型命令,紧随其后一个数据字。远程终端用状态字进行响应。

MIL-STD-1553B还介绍了可选广播传输的概念,其中将数据发送到实施该选项的所有RT,但没有RT响应,因为这将导致总线上的冲突。这些可以用于将相同数据发送到多个RT的地方,以减少事务数量,从而减少数据总线上的负载。然而,接收这些广播的RT没有明确的响应意味着在事务发生错误的情况下,这些传输不能被自动重新尝试。

BC和所有能力RT之间允许四种类型的广播事务:

广播信息传输格式

控制器到RT(s)传输。总线控制器发送一个接收命令字,终端地址为31,表示广播类型命令,紧接着是0到32个数据字。实现广播的所有远程终端将接受数据,但是远程终端将不会响应。

RT到RT(s)传输。总线控制器发出一个接收命令字,终端地址为31,表示广播类型命令,紧接着是一个发送命令。发送远程终端立即发送状态字,后跟1到32个数据字。实现广播的所有远程终端将接受数据,但是远程终端将不会响应。

模式命令无数据字(广播)。总线控制器发送一个命令字,终端地址为31,表示广播类型命令,子地址为0或31,表示模式代码类型命令。无远程终端将响应。

使用数据字(广播)的模式命令。总线控制器发送一个命令字,终端地址为31,表示广播类型命令,子地址为0或31,表示模式代码类型命令,紧接着是一个数据字。无远程终端将响应。3

终端与伪终端终端

终端(Terminal)也称终端设备,是计算机网络中处于网络最外围的设备,主要用于用户信息的输入以及处理结果的输出等。

在早期计算机系统中,由于计算机主机昂贵,因此一个主机(IBM大型计算机)一般会配置多个终端,这些终端本身不具备计算能力,仅仅承担信息输入输出的工作,运算和处理均由主机来完成。

在个人计算机时代,个人计算机可以运行称为终端仿真器的程序来模仿一个终端的工作。

随着移动网络的发展,移动终端(如手机、PAD)等得到了广泛的应用。此时,终端不仅能承担输入输出的工作,同时也能进行一定的运算和处理,实现部分系统功能。4

伪终端

对于远程网络用户来说,上节描述的 Terminal 登录过程并不适用,网络用户既不能远程使用串行端口设备,也不能远程控制显示器设备。因此需要创建一个虚拟的终端设备为其服务—— 伪终端。

伪终端,顾名思义,不是真正的终端,不能操作某个物理设备。它是虚拟的终端驱动设备,用来模拟串行终端的行为。

当使用 ssh、telnet 等程序连接到某台服务器上时进行操作时,底层使用的就是伪终端技术。

伪终端是成对的逻辑终端设备,分为“主设备”(master)和“从设备”(slave),例如/dev/ptyp3和/dev/ttyp3。

其中,“从设备”提供了与真正终端无异的接口,可以与系统进行 IO,规范终端行输入。;而“主设备”与管道文件类似,可以进行读写操作。往“主设备”写入的数据会传输到“从设备”,而“从设备”从系统获取到的数据也会同样的传输到“主设备”。因此,也可以说,伪终端是一个双向管道。

构建远程终端服务

一个远程终端服务程序由两个部分构成:伪终端和 shell 进程。通常构建如下:

1 创建伪终端设备。

2 fork 创建子进程,并将该子进程的标准输入、输出和错误输出均 dup 为伪终端的"从设备"。

3 在子进程中 exec 执行 /bin/bash 命令,启动 shell 进程。由于上一步的操作,该子进程(也就是 shell 进程)的 stdin、stdout 和 stderr 已与伪终端进行了绑定。如此,shell 子进程的输出、输出、错误输出均是通过伪终端的“从设备”进行的。

经过上述操作,可以说这个子进程就是一个“终端进程“了:既能够完成终端的输入输出操作,又能解释执行用户输入与系统内核交互。

由于伪终端“双向管道”的特性:对伪终端“主设备”的写操作,将传输到“从设备”,也就是传输给”终端进程“;而”终端进程“执行命令后的输出,将通过“从设备”传输返回至“主设备”。如此一来,对”终端进程“ 的 IO 操作完全可以通过操作伪终端的“主设备”来完成。

对“主设备”进行读写操作,就等同于在对一个终端 shell 进行操作。因此,如果在父进程中将该伪终端“主设备”与网络 socket 绑定,就能够实现远程终端操作了。(当然也可以将该“主设备”与其他文件描述符绑定,例如与另一进程通信的管道 fd 绑定等等,这些就取决于功能需求了)。

数据传输可见下图: