首页 理论教育 一个简单的传送站示例

一个简单的传送站示例

时间:2023-11-17 理论教育 版权反馈
【摘要】:如图6.1.3所示,路径CGJSPL和DHJSOK是两条传送连接的例子。图6.1.3传送连接现以一采用面向连接型服务且用户接口为过程调用形式的简单传送站为例,来介绍传送协议的内容和传送服务的方法。表6.1.1在传送站中使用的主要数据结构是conn数组,该数组记录了对应于每一连接的有关状态和信息,如表6.1.1所示。图6.1.4简单传送站的状态转移CRE:Call Request, CAA:Call Accepted,CLR:Clear Request, CLC:Clear Confirmed.简单传送站中有两种休眠/唤醒机制。

一个简单的传送站示例

总的来说,传送服务可以使高层不受通信细节的影响。传送层的用户接口有多种形式:

①过程调用(程序库),又称服务原语;

②经过邮箱对一进程传送数据和参数;

③在一主机用户和包含传送实体的前端处理机(可以看作是CCP)之间采用直接存储器存取(DMA),这种情形常用于下四层都位于通信子网的网络。

无论哪一种接口都允许用户在进行远程通信时,由传送服务来弥补操作系统为它的用户所提供的服务和通信子网所提供的服务之间的差别,使传送层以上的软件不受子网服务变化的影响。

在传送层中,定义了一组传送地址(Transport Addresses),又称为套接字(Socket).任何传送层的用户都通过传送地址进行通信。网络服务通过网络地址(Network Addresses)提供给传送层。当传送层用户要求建立一个本地传送地址与一远程主机的某传送地址之间的连接时,由传送层通过网络地址建立起该传送连接。如图6.1.3所示,路径CGJSPL和DHJSOK是两条传送连接的例子。

图6.1.3 传送连接

现以一采用面向连接型服务且用户接口为过程调用形式的简单传送站为例,来介绍传送协议的内容和传送服务的方法。

在该例中,用户使用传送协议及传送站提供的系统调用命令(即传送服务原语),以传送地址为存取点进行通信。为简化起见,设用户是第5层的用户。系统调用命令有:

CONNECT调用有两个参数,一个是本地传送地址,另一个是远程传送地址。ONNECT就是要在这两个传送地址间建立连接。连接时,它发出一个请求连接的控制报文,并且等待对方应答的控制报文。如果连接成功,返回一个数,即连接号,用以识别后续的调用;如果失败,则将失败的原因返回(用负数表示不同的原因)。在简单传送站模型中,每一个传送地址仅可以参与一个传送连接,所以失败的原因可能是该传送地址已被使用、非法地址及故障等等。

LISTEN调用表示调用者愿意接受所指出地址的连接请求。按照不同的实现方式,调用者可以暂时被挂起,直到在所侦听的地址上收到了远地的CONNECT请求后再开始执行,也可在操作系统发出的表明连接意图的示意信号或中断条件下继续执行。在本传送站模型中,只是简单地将其挂起(通过调用sleep过程实现)。

CLOSE调用用来终止一个传送连接。由Connum参数说明是哪一个连接,并向其连接的对方发出终止请求控制报文。可能的错误是Connum属于其它进程或Connum不正确。

SEND调用在指定的传送连接上把缓冲器的内容作为一个报文来传输。在Status中回送可能的差错,如没有连接、非法缓冲器地址或计数值为负值等。

RECEIVE调用表明调用者希望接收数据,输入的报文包被放入bytes中。如果远程进程已经关闭连接或缓冲器地址非法,回送相应的错误状态。

虽然简单传送站只是一个数学的例子,但对它作一些仔细的考察研究仍是有益的。它只涉及一个单用户,可以一次打开多个传送连接,向用户进程提供建立、使用和终止顺序的及无差错的连接的基本手段。发送的报文可以任意长,但在下一层子网中规定了一个最大报文分组尺寸Maxpkt.另外,假定传送站使用的网络服务是可靠的,且与X.25有相同的接口。

到网络的接口是通过过程Tonet和Fromnet来实现的。每个过程有6个参数:连接标识符,它们一对一地映射到网络层的虚电路上;X.25的Q和M比特,分别指明控制报文和结束标记;报文类型;数据的指针和数据的字节数。这两个过程的形式为

ToNet(cid,q,m,ptype,data,count)(www.xing528.com)

FromNet(cid,q,m,ptype,data,count)

这两个过程在传送站中都未写出具体过程。

报文类型有 6种,即Call Request,Call Accepted,Clear Request,Clear Confirmed,Data,Credit.其中,前5种的含义与X.25的含义相同,Credit则是一种由接收方提供给发送方的缓冲区信用量报文。当发送方要发送报文时,需检查接收方是否已提供了足够的信用量,也即供该连接使用的缓冲区数量,若有则可以发送,否则不能发送。这是一种不同于传统的滑窗方式的信息流控制方法。

表6.1.1

在传送站中使用的主要数据结构是conn数组,该数组记录了对应于每一连接的有关状态和信息,如表6.1.1所示。

虽然前述简单传送站例子并未全部用到该数组的各个项目,但这些项目对于完整的传送站来说都是必须的,或许还有其它项目。在conn中,当前状态项的初始值为Idle(空闲),以后随着连接的状态变化而可改变为Queued(排队),Listening(侦听),Open(打开),Sending(发送),Receiving(接收),Waiting(等待),Closing(关闭)。根据简单传送站的程序(附后),可以给出这8种状态的变化如图6.1.4所示。从图中可以看出,由于程序较简单,所以状态的变换是简单的,也是不太完善的,但这不影响将其作为教学上的一个例子。Listening状态其实并未用到,故在图中用虚线表示。

图6.1.4 简单传送站的状态转移

CRE:Call Request, CAA:Call Accepted,CLR:Clear Request, CLC:Clear Confirmed.

简单传送站中有两种休眠(sleep)/唤醒(wakeup)机制。一种存在于Tonet和Fromnet过程之中。当虚电路的滑窗已经全充满而传送站又要试图发送时,在Tonet内部它被置于休眠状态(挂起),直到窗口中又有了空间为止。对传送站来说,此休眠/唤醒是透明的,受网络层使用的EnableHost和DisableHost过程的控制,如同在第四章介绍过的一样。另一种是传送站可调用的过程sleep和wakeup,这是一种明显的休眠/唤醒机构,程序中也未写出它们的内部程序。当传送站被逻辑封锁,处于等待某外部事件发生的状态时,就处于休眠状态。当sleep被调用之后,传送站停止运行。如果有报文包到达或有时钟脉冲,将发生一次中断,此时中断处理程序Packet Arrival或Clock将运行一次。若在中断程序中调用了wakeup,被sleep的程序将被唤醒,继续执行。注意,只有当用户正在运行非传送程序时或者传送站处于休眠状态时方能发生中断,这一特征对正确发挥传送站的作用是至关重要的。

应该记住这只是一个简化了的数学例子,在实际的传送站中需处理的问题要多得多,例如处理呼叫冲突、故障恢复、缓冲器管理等等。简单传送站的程序如下:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈