TCP的特性就是面向连接的,是可靠传输,可以差错控制和流量控制,TCP的数据传送是建立在虚电路的基础上的。
为面向连接的会话建立的通信信道自然是逻辑的,常被称作虚电路(virtual circuit),它关心的是端点。与在网络上寻求一条实际的物理路径相比,这条信道更关心的是保持两个端点的联系。在有多条到达目的地路径的网络中,物理路径在会话期间随着数据模式的改变而改变,但是端点(和中间节点)一直保持对路径进行跟踪, ******************************************
虚电路,应该是指“意”的虚。就是存在那么一条电路,逻辑上好象是固定的存在的,但事实它是随着会话的不同而使用不同的路径。也就是说没有一条固定的路径。它是在通信过程中灵活地变动的。具体使用哪条路径以及如何操作,通过三次握手来进行建立。在发握手信号的过程中,知道了发送方与接收方,然后建立一条路径。这条路径是一条逻辑上的电路。以后的传输就由此来进行。
面向连接的会话的建立过程如下: 1.源应用程序请求一个面向连接的通信会话。 2.建立会话(需要一段时间,是选用无连接的协议的一个原因)。 3.在逻辑连接上开始数据传输。 4.传输结束时,信道解除连接。
---------------------------------------------------------------------
虚电路服务和数据报服务的区别可由下表归纳:
对比的方面 | 虚电路 | 数据报 |
---|---|---|
连接的建立 | 必须有 | 不要 |
目的站地址 | 仅在连接建立阶段使用,每个分组使用短的虚电路号 | 每个分组都有目的站的全地址 |
路由选择 | 在虚电路连接建立时进行,所有分组均按同一路由 | 每个分组独立选择路由 |
当路由器出故障 | 所有通过了出故障的路由器的虚电路均不能工作 | 出故障的路由器可能会丢失分组,一些路由可能会发生变化 |
分组的顺序 | 总是按发送顺序到达目的站 | 到达目的站时可能不按发送顺序 |
端到端的差错处理 | 由通信子网负责 | 由主机负责 |
端到端的流量控制 | 由通信子网负责 | 由主机负责 |
从占用通信子网资源方面看:虚电路服务将占用结点交换机的存储空间,而数据报服务对每个 其完整的目标地址独立选径,如果传送大量短的分组,数据头部分远大于数据部分,则会浪费带宽。
从时间开销方面看:虚电路服务有创建连接的时间开销,对传送小量的短分组,显得很浪费;而数据报服务决定分组的去向过程很复杂,对每个分组都有分析时间的开销。
从拥塞避免方面看:虚电路服务因连接起来的资源可以预留下来,一旦分组到达,所需的带宽和结点交换机的容量便已具有,因此有一些避免拥塞的优势。而数据报服务则很困难。
从健壮性方面看:通信线路的故障对虚电路服务是致命的因素,但对数据报服务则容易通过调整路由得到补偿。因此虚电路服务更脆弱。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
计算机网络基础教程
全书 http://www.gdou.edu.cn/te/net/index.htm
4.1 http://www.gdou.edu.cn/te/net/net41.htm
4.1 虚电路和数据报
端点之间的通信是依靠通信子网中的节点间的通信来实现的,在OSI模型中,网络层是网络节点中的最高层,所以网络层将体现通信子网向端系统所提供的网络服务。在分组交换中,通信子网向端系统提供的虚电路和数据报两种网络服务,而通信子网内部的操作方式也有虚电路和数据报两种。
一、通信子网的虚电路操作方式及网络层提供的虚电路服务
1、虚电路操作方式
为了进行数据的传输,网络的源节点和目的节点之间先要建立一条逻辑通路,因为这条逻辑电路不是专用的,所以称之为“虚”电路。每个节点到其它任一节点之间可能有若干条虚电路支持特定的两个端系统之间的数据传输,两个端系统之间也可以有多条虚电路为不同的进程服务。这些虚电路的实际路径可能相同,也可能不同。 假设有两条虚电路经过某节点,当一个数据分组到达时,该节点可利用下述方法判明该分组属于哪条虚电路,并且能将其转送至下一正确节点。一个端系统每次在建立虚电路时,选择一个未被使用的虚电路号分配给该虚电路,以便区别于本系统中的其它虚电路。在每个被传送的数据分组上不仅要有分组号、检验和等控制信息,还要有它要通过的虚电路的号码,以区别于其它虚电路的数据分组。在每个节点上都保存一张虚电路表,表中各项记录了一个打开的虚电路的信息,包括虚电路号、前一个节点、下一个节点等信息,这些信息是在虚电路建立过程中被确定的。 上述采用固定虚电路号的虚电路表法存在着缺陷,因为各个端系统各自独立地选取虚电路号,就有可能造成虚电路号的重复,如果两条编号相同的虚电路经过同一个节点,便会产生畸义。解决的方法是采用“动态”的虚电路号。 “动态”的虚电路号。是指各节点对同一条虚电路,根据本节点的实际情况给予可能不同的编号,与之对应的各节点的虚电路表也是在呼叫请求过程中建立的。 在建立虚电路的同时,每个节点的虚电路表中的每一项要记录两个虚电路号:前一个节点所选取的虚电路号和本节点所选取的虚电路号。这样一来,每条虚电路就有了唯一的一套虚电路编号。 由于虚电路上的数据是双向传输的,为保证两节点之间正、反两个方向的虚电路不相混淆,在一个节点选取虚电路号来替换其前一节点使用的虚电路号时,不仅要考虑以下一节点之间的虚电路号不相同,还要考虑以下一节点作为另一条反向虚电路的上一节点时所选取的虚电路号相区别。
2.虚电路服务
虚电路服务是网络层向运输层提供的一种使所有分组按顺序到达目的端系统的可靠的数据传送方式。进行数据交换的两个端系统之间存在着一条为它们服务的虚电路。 为了建立端系统之间的虚电路,源端系统的运输层首先向网络层发出连接请求,网络层则通过虚电路网络访问协议向网络节点发出呼叫分组;在目的端,网络节点向端系统的网络层传送呼叫分组,网络层再向运输层发出连接指示:最后,接收方运输层向发起方发回连接响应从而使虚电路建立起来。以后,两个端系统之间就可传送数据,数据由网络层拆成若干个分组送给通信子网,由通信子网将分组传送到数据接收方。 上述虚电路的服务是网络层向运输层提供的服务,也是通信子网向端系统提供的网络业务。但是,提供这种虚电路服务的通信子网内部的实际操作既可以是虚电路方式的,也可以是数据报方式的。以虚电路方式操作的网络,一般总是提供虚电路服务,OSI中面向连接的网络服务就是虚电路服务。在虚电路操作方式中,端系统的网络层同通信子网节点的操作是一致的,SNA、TRANSPAC等多数公共网络都采用这种虚电路操作支持虚电路服务的方式。 以数据报方式操作的网络,也可以提供虚电路服务,即通信子网内部节点按数据报方式交换数据,而与端系统相连的网络节点则向端系统提供虚电路服务。对于端系统来说,它的网络层与网络节点间的通信仍象虚电路操作方式的网络节点间情形一样,先建立虚电路,再交换数据分组,最后拆除电路。但实际上,每个分组被网络节点分成若干个数据报,附加上地址、序号、虚电路号等信息,分送到目的节点。目的节点再将数据报进行排序,拼成原来的分组,送给目的端系统;因此,源端系统和源网络节点之间。目的节点和目的端系统之间的网络层按虚电路操作方式交换分组,而目的节点和源节点之间则按数据报方式完成分组的交换。尽管通信子网的双据掀交换不是很可靠,但是两端的网络节点做了许多诸如徘序、重发等额外工作,从而满足了虚电路服务的要求。例如,在ARPANET中,内部使用数据报交换方式,但可以向端系统提供数据报和虚电路两种服务。
二、通信子网的数据报操作方式及网络层提供的数据报服务
1、数据报操作方式
在数据报方式中,每个分组被称为一个数据报。若干个数据报构成一次要传送的报文或数据块。每个数据报自身携带有足够的信息。它的传送是被单独处理的。一个节点接收到一个数据报后,根据数据报中的地址信息和节点所存储的路由信息,找出一个合适的出路,把数据报原样地发送到下一个节点。 当端系统要发迭一个报文时,将报文拆成若干个带有序号和地址信息的数据报,依次发给网络节点。此后,各个数据报所走的路径就可能不同了,因为各个节点在随时根据网络的流量、故障等情况选择路由。由于各行其道,各数据报不能保证按顺序到达目的节点,有些数据报甚至还可能在途中丢失。在整个传送过程中,不必建立虚电路,但要为每个数据报作路由选择。
2.数据报服务
数据报服务一般仅由数据报交换网来提供。端系统的网络层同网络节点中的网络层之间,一致地按照数据报操作方式交换数据。当端系统要发送数据时,网络层给该数据附加上地址、序号等信息,作为数据报发送给网络节点;目的端系统收到的数据报可能是不按序到达的,也可能有数据报的丢失。数据报服务与OSI的无连接网络服务类似。 由虚电路交换网提供数据报服务的组合方式并不常见。可以想象有这么一种特殊情况: 一个端系统的网络层已经构造好了用于处理数据报的服务,而当它要掺入以虚电路方式操作的网络时,网络节点就需要做一些转换工作。当端系统向网络节点发送一个携带有完整地址信息的数据报时,若发向同一地址的数据报数量足够大,则网络节点可以为这些数据报同目的节点问建立一条虚电路,所有相同地址的数据报均在这条虚电路上传送。等一段时间后,当没有这类相同的地址的数据报要发送时,这条虚电路便可拆除。所以,这种数据报服务具有了虚电路服务的通信质量,但是既不经济,效率也低。
三、两种操作方式及两种网络服务的特点
1、两种操作方式的特点 虚电路分组交换适用于端系统之间长时间的数据交换,尤其是在频繁的,但每次传送数据又很短的交互式会话情况下,免去了每个分组中地址信息的额外开销,但是每个网络节点却需要负担维持虚电路表的开销。因此,要将这两个因素进行权衡,另外还要考虑如果建立和拆除电路的次数过于频繁也不合适。 数据报免去了呼叫建立过程,在分组传输数量不多的情况下要比虚电路简单灵活。每个数据报可以临时根据网络中的流量情况选取不太拥挤的链路,不象虚电路中的每个分组必须按照连接建立时的路径传送。每个节点没有额外开销,但每个分组在每个节点都要经过路由选择处理,会影响传送速度。 虚电路提供了可靠的通信功能,能保证每个分组的正确到达,且分组保持原来顺序。另外,还可以对两个数据端点的流量进行控制,当接收方来不及接收数据时,可以通知发送方暂缓发送分组,但虚电路有一个致命的弱点,即当某个节点或某条链路出故障而彻底失效时,则所有经过该节点或该链路的虚电路将遭到破坏。而在数据报方式中,这种故障的影响面要小得多,当发生上述故障时,仅有缓存在该节点上的分组可能丢失,其它分组则可绕开故障区到达目的地,或者一直被搁置到故障修复后再传送。不过,数据报不保证数据分组的按序到达,数据的丢失也不会立即被发现。
2、两种网络服务的特点 虚电路服务与数据报服务的本质差别表现为:是将顺序控制、差错控制和流量控制等通信功能交由通信子网完成,还是由端系统自己来完成。 虚电路服务向端系统保证了数据的按序到达,免去了端系统在顺序控制上的开销。但是,当端系统本身并不关心数据的顺序时,这项功能便成了多余,反倒影响了无序数据交换的整体效率。 虚电路服务向端系统提供了无差错的数据传送,但是,在端系统只要求快速的数据传送,而不在乎个别数据块丢失的情况下,虚电路服务所提供的差错控制也就并不很必要了。相反,有的端系统却要求很高的数据传送质量,虚电路服务所提供的差错控制还不能满足要求,端系统仍需要自己来进行更严格的差错控制,此时虚电路服务所做的工作又略嫌多余。不过,这种情况下,虚电路服务毕竟在一定程度上为端系统分担了一部分工作,为降低差错概率还是起了一定作用。 至于虚电路服务所提供的流量控制,有时对端系统来说也并不适宜,比如在要求数据交换速率尽可能高的情况下。因为,虚电路服务将数据总是按固定路径传送,而不灵活地走捷径;另外,流量控制本身就很可能规定了交换速率的上限。 虚电路服务提供了可靠的数据传送和方便的进网接口。但是,虚电路服务中电路的建立与拆除在交互式应用中会影响通信效率。 以上主要对虚电路服务的优、缺点作了分析,数据报服务的优、缺点基本与之相补。 可以看出,两种服务优、缺点各自参半,对二者的选择取决于应用背景,即网络用户对通信子网是要求只管数据传送而不必多管“闲事”,还是希望通信子网提供更可靠的服务来减轻自身的负担。有人将虚电路服务比作坐公共汽车,将数据报服务比作坐出租车,这种比喻在某种程度上形象他说明了两种服务的特点。
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。