现在研究子网的内部结构,即研究子网在采用数据报机制及虚电路机制时报文分组的传送过程。假设范例网络的结构形式如图5.1.5所示,图中A,B,C,…,F分别表示子网内部的各个结点(CCP),H1,H2,H3,…,H7分别表示接在网络上的主机,各结点之间的链路都是单一的,没有复线。
1、数据报机制
图5.1.5 范例网络
若子网内部采用数据报结构,子网将独立地对待每一个进入网络的报文分组(即数据报)。网中的每个结点根据报文分组携带的全称网络地址进行路由选择,并按所选择的路由向下一结点转发,直至数据报到达目的主机。例如,范例网络中,H1将一个目的地址为H4的数据报投入子网;子网中的CCPA予以接收,并根据一定的路由选择算法和网络的拓扑表选择一条出站线路,然后将数据报沿此线路传送;下一结点同样照此办理,直至到达目的结点CCPD,再由CCPD将数据报送往主机H4.在这个过程中,有两处是不需要进行路由选择的:H1→源CCPA和目的CCPD→H4.子网内的路由选择仅是在各个CCP之间进行,从而,源主机和目的主机的寻径转化为源CCP和目的CCP的寻径。因此,各个CCP中都应存放一张对可能的目的CCP指出出站线路的表供路由选择时参考。这张表称为路由选择表,包括全网的所有目的地、本结点的各条出站线路及其有关的信息,如到目的地的最小跳跃(hop)数、延迟、可用状态等等。CCPE中可能的路由选择如表5.1.2所示。
表5.1.2
只有每一个CCP都保留有整个网络的拓扑图,才可以根据数据报提供的地址判断出目的CCP或主机的位置。数据报在传送过程中始终保持原样,任何CCP都不会对其任何部分进行修改,但它的穿网传送过程要受到CCP的路由选择算法的控制。
2、虚电路机制
若子网内部采用虚电路机制,它要解决的问题就是建立、维持和终止虚电路。为使每一个分组都沿所建立的虚电路穿过网络,每一个介入该虚电路的CCP都必须能记住已打开的虚电路的来龙去脉(因为可能有若干条虚电路经过同一结点),并且能够识别各个沿特定虚电路前进的分组。要做到这一点,必须在每一个CCP中存放一张有关虚电路的登记表。该表在虚电路的呼叫分组建立虚电路时增加项目,以记住呼叫分组的来源和去向。一旦虚电路建立成功,这个表项便被正式确认,供以后分组传输时使用。当该虚电路用毕关闭后,其对应的项目就从表中删除。为了区别不同的虚电路,必须给每条虚电路一个唯一的标识,这个标识被称为虚电路号。沿虚电路传送的报文分组,不再需要数据报那样的网络全称地址,而只需标明虚电路号,各个CCP都根据分组中的虚电路号识别其传送的方向。报文分组在传送过程中也不再需要作路由选择,路由选择仅在呼叫分组寻找建立虚电路时才需要。建立虚电路的呼叫分组实质上是一种特别的对子网起作用的数据报形式的分组。终止虚电路时,只需沿虚电路发出一特殊分组通知各CCP取消该虚电路即可。
看起来这个过程并不复杂,当源主机要与另一个主机中的某进程对话时,只需为此对话选择一个未被本机使用的虚电路号即可。但由于各个主机都独立地选择虚电路号,不同的主机很可能为不同的虚电路选择了相同的虚电路号,从而造成混乱。以范例网为例,假设H1的某一进程欲与H4的某一进程对话,且所选择的虚电路号为0,道路为ABCD,若此时H2的某进程也要与H4中的另一进程对话,且所选择的虚电路号也是0,则H4将无法判断该把所收到的分组交给哪一个进程。产生这一问题的原因是两个分组均无全称地址,而选择的虚电路号又都相同,所以简单地使用独立的虚电路号是不行的。给各主机规定可使用的虚电路号,例如给H1分配0~9号虚电路号,给H2分配10~19虚电路号,…,可以避免上述问题,但这违背了计算机网络中各计算机独立的原则。另外当计算机网络规模很大时,虚电路号的开销不会小于全称网络地址,从而虚电路号也就转化成了地址。
解决上述问题的方法之一是:虚电路号由网上的所有CCP参与选择,而不是由源主机独断选择。其工作过程为:当某主机想产生一个新的出站虚电路(实际上是发出一个新的呼叫分组)时,先选择本机中当时没被占用的最小虚电路号;再将此电路上的第一个CCP记为CCPx,并根据路由算法决定应向哪个CCP传送。若选择了CCPY,CCPX就找出所有从它向CCPY通信的虚电路号中未被占用的最小号,然后用此号去代替主机所选的虚电路号,将分组继续下去,下一CCP同样照此处理。当请求建立虚电路的分组到达目的地后,目的CCP以最小的可用入站虚电路号码替换原分组的虚电路号,并以此号交给主机。只要在给定的虚电路上到达的分组有此号,即使源主机使用了不同的虚电路号码也是无关紧要的。目的主机收到建立虚电路的请求分组后,根据自己的情况决定是否同意建立此条虚电路。若同意,则将此虚电路及有关信息登记到自己的虚电路表中,并沿此虚电路回答有关同意建立的信息。源主机一旦收到此信息,便将其记入自己的虚电路表中,然后就用这条虚电路发送分组。
为清楚起见,现以范例网络中的单工虚电路为例来进一步说明。假设初始状态全网无任何虚电路,即各有关虚电路的表格均空白,此时最小可用虚电路号为0.然后,以A为源点建立了5条单工虚电路(相对于主机H1的虚电路号为0,1,2,3,4),以B为源点建立了3条单工虚电路(对于主机H2的虚电路号为0,1,2)。这些虚电路都是呼叫分组在网络中通过路由选择得出的,而不是固定的。设它们的建立时间顺序如表5.1.3所示。
表5.1.3
(www.xing528.com)
上表中最后一个虚电路(AECDFB)看起不合情理,但当线路AB,BC严重过载时,这可能是一个最佳的选择。这仅仅是一个例子,当路由选择算法根据一定的理由选择了这条通路后,只有拆除它并重新呼叫,才能选择一条新的通路。
现来分析一下各CCP中的虚电路表。依照上述虚电路的建立方法,首先由CCPA填写它的虚电路表,每张表均由入站和出站两个部分组成,而每一部分又都由一个CCP名或主机名(用于指明一条线路)和一个虚电路号组成。CCPA接到H1建立虚电路0的请求后,首先在表的第一项中填入站部分(H1,0);然后由路由算法确定下一步的去向,若选择了B,则它再填出站部分(B,0),“B”说明线路去向,“0”说明在AB上最小可用虚电路号是0.然后把呼叫分组发至CCPB,CCPB照此处理,入站填(A,0)出站填(C,0),直到CCPD.CCPD为目的CCP,故出站填(H4,0)。然后,H2请求CCPB建虚电路0,由CCPB填入站表(H2,0),出站表(C,1),这是因为BC线路上已有一虚电路,最小虚电路号只能为1.一直到CCPD填好出站(H4,1),其余电路也照此办理,直至全部虚电路建立完毕。各CCP中的虚电路表如图5.1.6所示。
图5.1.6 各CCP 中的虚电路表
开始使用虚电路时,即报文分组沿已建虚电路传送时,若一个分组到达某CCP,该CCP先以该分组的到达线路和它所携带的虚电路号为关键字查找虚电路表的入站部分。当找到完全一致的那项后,再根据该项出站部分的内容决定该分组应向哪一个CCP发送,并将出站虚电路号填入分组中,代替原有的虚电路号。所以,在传输过程中,报文分组所携带的虚电路号是变化的。如图5.1.7所示,经H1的4号虚电路(AECDFB)传送的报文分组,在传送过程中,其虚电路号经历了4、3、1、2、0、0、0的变化过程。
值得注意的是,上例中使用的是单工虚电路,即只能按照虚电路建立的方向传送报文分组。但在实际应用中都要求虚电路能够以全双工或半双工的形式传送报文。显然,上述的表格方法因定死了入站和出站、限死了报文的传输方向而无法满足这一要求。如果在查找时不区别入站和出站,而是两部分同时匹配查找,一旦找到,即将对应项的另一部分作为出站线路和虚电路号,则可以实现反向报文传输。在上例中,当CCPc中收到从D传来的虚电路号为0的分组时,如它在表的出站部分找到匹配项(D,0),则该项的另一部分(B,0)便作为其出站部分,然后又以0为虚电路号向CCPB发出该分组,从而实现了分组沿ABCD逆向传送的报文传输。但由CCPA、CCPF、CCPB等CCP中的表可以发现,它们在入站和出站中有相同的项,如在CCPA的出站、入站中都有(B,0)项,故上述办法实际上是行不通的。因此,要想实现虚电路中的反向报文传输,须使用不同的表进行管理,或者在分组中指明它是正向报文传输还是反向报文传输,或者干脆用同样方法建一条相同的通路供反向报文传输使用,以形成双工虚电路。
图5.1.7 经虚电路AECDFB传送的分组的虚电路号变化过程
当虚电路使用完毕后,必须将其关闭,即取消它所占用的CCP表的项目,以腾出表空间用于建立其它的虚电路。所以公共网络都用计时及计传送数据量的方法进行收费。
从上面的例子可以更清楚地理解虚电路的具体含义。在一条实电路上可以建立多条虚电路,如AB上有3条。这些虚电路可以供不同主机中不同的用户进程使用,而报文分组的传送则是由单一的数据链路层完成的。换句话说,单一实电路可由多个虚电路复用,这正是分组交换优于电路交换的地方。
向外提供虚电路服务而内部采用数据报机制的子网的结构与上述结构是有差异的。如表5.1.4所示,这种情况实际上相当于将网络层划分为两个子层,下层采用数据报机制,上层则按虚电路服务的要求进行处理,包括呼叫处理、顺序处理、差错处理等。
表5.1.4
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。