端点之间的通信是依靠通信子网中的节点间的通信来实现的,在OSI模型中,网络层是网络节点中的最高层,所以网络层将体现通信子网向端系统所提供的网络服务。在分组交换方式中,通信子网向端系统提供虚电路和数据报两种网络服务,而通信子网内部的操作也有虚电路和数据报两种方式。
1.虚电路操作方式
在虚电路操作方式中,为了进行数据传输,网络的源节点和目的节点之间先要建立一条逻辑通路,因为这条逻辑通路不是专用的,所以称之为“虚”电路。每个节点到其它任一节点之间可能有若干条虚电路支持特定的两个端系统之间的数据传输,两个端系统之间也可以有多条虚电路为不同的进程服务,这些虚电路的实际路径可能相同也可能不同。 节点间的物理信道在逻辑上均可看做由多条逻辑信道组成,这些逻辑信道实际上由节点内部的分组缓冲器来实现。所谓占用某条逻辑信道,实质上是指占用了该段物理信道上节点分配的分组缓冲器。不同的逻辑信道在节点内部通过逻辑信道号加以区分,各条逻辑信道异步分时复用同一条物理信道。
一条虚电路可能要经过多个中间节点,在节点间的各段物理信道上都要占用一条逻辑信道用以传送分组。由于各节点均独立地为通过的虚电路分配逻辑信道,也即同一条虚电路通过各段信道所获取的逻辑信道号可能是不相同的,所以各节点内部必须建立一张虚电路表,用以记录经过该点的各条虚电路所占用的各个逻辑信道号。
为使节点能区分一个分组属于哪条虚电路,每个分组必须携带一个逻辑信道号:同样,同一条虚电路的分组在各段逻辑信道上的逻辑信道号可能也不相同。传输中,当一个分组到达节点时,节点根据其携带的逻辑信道号查找虚电路表,以确定该分组应发往的下一个节点及其下一段信道上所占用的逻辑信道号,用该逻辑信道号替换分组中原先的逻辑信道号后,再将该分组发往下一个节点。
各节点的虚电路表是在虚电路建立过程中建立的。比如,与A节点相连的源端系统要经中间节点B、C跟与D节点相连的目的端系统建立一条虚电路,源端系统可发出一个呼叫请求分组,该分组除了包含目的地址外,还包含源端系统所选取的不用的最小逻辑信道号N.A节点收到请求分组后在A节点与下一节点B间所有已使用的逻辑信道号之外选取一个最小编号NA,并将请求分组中的逻辑信道号N替换成该逻辑信道号NA,再将分组发送给节点B.此后的各节点依次逐个根据自身实际情况选取新的逻辑信道号(如NB、NC、ND等)来替换收到的分组中的逻辑信道号。最后,目的节点D将请求分组传送给连接它的端系统。在此过程中,每个节点的虚电路表中要记录两个逻辑信道号:前一个节点所选取的逻辑信道号和本节点所选取的逻辑信道号。这样便使得虚电路所跨越的每一段连接上的逻辑信道号都是惟一的o
图3.16给出了一个虚电路表建立的示例,这里假设建立了6条虚电路。由于虚电路上的数据是双向传输的,为保证两节点之间正、反两个方向的虚电路不相混淆,在一个节点选取逻辑信道号来替换其前一节点使用的逻辑信道号时,不仅要考虑与下一节点之间的逻辑信道号不相同,还要考虑与下一节点作为另一条反向虚电路的上一节点时所选取的逻辑信道号相区别。例如,在建立虚电路1-BAE时(这里1-BAE表示源节点为B,建立虚电路时选取1为逻辑信道号,并经A传送到E),在节点B中,尽管A节点是第一次作为B节点的下一节点,但由于虚电路0-ABCD中A到B间已使用了逻辑信道号0,因此在出路一栏应选B到A间的逻辑信道号为1.这样,当从节点A发来一个分组时,若它所携带的逻辑信道号为0,则说明是虚电路础CD上的正向分组;若为1,则说明是虚电路BAE上的反向分组。对于虚电路2-BFE的建立也是同样情况。
各节点的虚电路表空间和逻辑信道号都是网络资源,当虚电路拆除时必须回收。这可通过某端系统发出一个拆链请求分组,告知虚电路中各节点删除虚电路表中有关表项来实现。
2.数据报操作方式
在数据报操作方式中,每个分组被称为一个数据报,若干个数据报构成一次要传送的报文或数据块。每个数据报自身携带有足够的信息,它的传送是被单独处理的。一个节点接收到一个数据报后,根据数据报中的地址信息和节点所存储的路由信息,找出一个合适的出路,把数据报原样地发送到下一个节点。
当端系统要发送一个报文时,将报文拆成若干个带有序号和地址信息的数据报,依次发给网络节点。此后,各个数据报所走的路径就可能不同了,因为各个节点在随时根据网络的流量、故障等情况选择路由。由于各行其道,各数据报不能保证按顺序到达目的节点,有些数据报甚至还可能在途中丢失。在整个数据报传送过程中,不需要建立虚电路,但网络节点要为每个数据报做路由选择。
3.虚电路服务
虚电路服务是网络层向运输层提供的一种使所有分组按顺序到达目的端系统的可靠的数据传送方式。进行数据交换的两个端系统之间存在着一条为它们服务的虚电路。为了建立端系统之间的虚电路,源端系统的运输层首先向网络层发出连接请求,网络层则通过虚电路网络访问协议向网络节点发出呼叫分组;在目的端,网络节点向端系统的网络层传送呼叫分组,网络层再向运输层发出连接指示;最后,接收方运输层向发起方发回连接响应,从而使虚电路建立起来。此后,两个端系统之间就可以传送数据。数据由网络层拆成若干个分组送给通信子网,由通信子网将分组传送到数据接收方。
上述虚电路的服务是网络层向运输层提供的服务,也是通信子网向端系统提供的网络服务。但是,提供这种虚电路服务的通信子网内部的实际操作既可以是虚电路方式的,也可以是数据报方式的。以虚电路方式操作的网络,一般总是提供虚电路服务。 OSI中面向连接的网络服务就是虚电路服务。在虚电路操作方式中,端系统的网络层同通信子网节点的操作是一致的。SNA就是采用这种虚电路操作支持虚电路服务方式的实例。
以数据报方式操作的网络,也可以提供虚电路服务,即通信子网内部节点按数据报方式交换数据,而与端系统相连的网络节点则向端系统提供虚电路服务。对于端系统来说,它的网络层与网络节点间的通信仍像虚电路操作方式的网络节点间一样,先建立虚电路,再交换数据分组,最后拆除电路。但实际上,每个分组被网络节点分成若干个数据报,附加上地址、序号、逻辑信道号等信息分送到目的节点。目的节点再将数据报进行排序,拼成原来的分组,送给目的端系统。因此,源端系统和源网络节点之间、目的节点和目的端系统之间的网络层按虚电路操作方式交换分组,而目的节点和源节点之间则按数据报方式完成分组的交换。尽管通信子网的数据报交换是不可靠的,但是两端的网络节点做了许多诸如排序、重发等额外工作,从而满足了虚电路服务的要求。例如,在ARP灿JET中,其内部使用数据报操作方式,但可以向端系统提供数据报和虚电路两种服务。
4.数据报服务
数据报服务一般仅由数据报交换网来提供。端系统的网络层同网络节点中的网络层之间,一致地按照数据报操作方式交换数据。当端系统要发送数据时,网络层给该数据附加上地址、序号等信息、¥然后作为数据报发送给网络节点;目的端系统收到的数据报可能是不按序到达的,也可能有数据报的丢失。例如,在ARPANET、DNA等网络中,就提供了数据报服务。数据报服务与OSI的无连接网络服务类似。
由虚电路交换网提供数据报服务的组合方式并不常见。可以想像有这么一种特殊情况:一个端系统的网络层已经构造好了用于处理数据报的服务,而当它要接人以虚电路方式操作的网络时,网络节点就需要做一些转换工作。当端系统向网络节点发送一个携带有完整地址信息的数据报时,若发向同一地址的数据报数量足够大,则网络节点可以为这些数据报同目的节点间建立一条虚电路,所有相同地址的数据报均在这条虚电路上传送。过一段时间后,当没有这类相同的地址的数据报要发送时,这条虚电路便可拆除。所以,这种数据报服务具有了虚电路服务的通信质量,但这样做既不经济,效率也低。