课后习题详解
Posted KiefaC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课后习题详解相关的知识,希望对你有一定的参考价值。
3-01 数据链路与链路有何区别?“电路接通了”与“数据链路接通了”的区别何在?
所谓链路就是从一个结点到另一个结点的一段物理线路。而中间没有其他的任何交换结点。在进行数据通信的时候,两个计算机之间的通信路径要经过许多这样的链路。
当需要在一条链路上传送数据的时候,除了必须有一条物理线路外,还必须要有一些必要的通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
3-02 数据链路层中的链路控制包括哪些功能?试讨论把数据链路层做成可靠的链路层有哪些优点和缺点。
链路控制包括:封装成帧;透明传输;差错检测。
如果把数据链路层做成可靠的链路层,就表示从源主机到目的主机的整个通信路径中的每一段链路都是可靠的。这样做的优点是如果在传输过程某个结点中发生了差错,可以及时的通过数据链路重传纠正这个错误;如果数据链路层做成不可靠的,那么当网路中的某个结点发现收到的帧有错误的的时候,就仅仅丢弃该帧,而并不通知发送结点重传出现差错的帧。只有当主机的高层协议(例如TCP协议)发现了这个错误时,才会出现源主机重传出现错误的帧。但这时候就比较晚了,可能要重传较多的数据。对网络资源有些浪费。
但是,如果高层协议使用的是不可靠的传输协议UDP,UDP并不要求重传有差错的数据,在这某些情况下,并不会带来更多的好处(例如实时语音视频通话)增加了可靠性,牺牲了实时性反而是不合适的。
3-03 网络适配器的作用是什么?网络适配器工作在哪一层?
适配器又叫网卡,适配器和局域网之间通过电缆或者双绞线以串行传输方式进行,而适配器与计算机主板上的IO之间以并行方式传输数据。因此适配器的一个重要功能就是进行数据串行与并行之间的转化。初始之外,适配器还有能够实现以太网协议。适配器在接收和发送各种数据帧的时候并不会通知计算机,如果收到帧是有差错的帧,就直接丢弃也不会通知计算机,只有当收到正确的帧才会使用中断通知计算机处理。
3-04 数据链路层的三个基本问题(封装成帧,透明传输,差错检测)为什么必须要解决?
封装成帧是在一段数据的前后分别加上首部和尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别出帧的开始和结束。
透明传输指的是上层交来的数据,不管是什么形式的比特组合,都必须能够正确的传送。由于帧的开始和结束标记是使用专门指明的控制字符。因此在传送的数据中的任何比特组合一定不允许出现特定帧定界符的控制字符,否则会引起帧定界错误。
如果数据链路层没有出现差错检测,那么当目的主机收到其他主机发送过来的数据帧的时候,在交给上层应用后,上层应用的数据必须确保正确无误。如果发现数据有误,就可以请求目的主机重传这些数据。这样做就可以达到正确接收数据的目的。但这种工作方式有一个很大的缺点,就是在一些传输过程中出现了错误的数据,如果链路层有差错检测的功能,就可以直接把这个有差错的帧丢弃掉。以后并不会传送了。否则这个帧还要在网络上到处传送。
3-05 如果在数据链路层不进行封装成帧,会发生什么问题?
如过在数据链路层不进行封装成帧,那么数据链路层在收到一些数据后,就无法知道对方传送的数据中哪些是数据,哪些是控制信息,甚至数据中有没有差错都不清楚(因为无法进行帧差错检测)。数据链路层也不知道数据传送结束了没有,因此并不知道应当在什么时候把收到的数据交给上一层。
3-06 PPP协议的主要特点是什么?为什么PPP不使用帧编号?PPP适用于什么情况?为什么PPP协议不能使数据链路层实现可靠传输?
- 简单PPP协议很简单,接收方每收到一个帧,就进行CRC循环检验,如果CRC检验正确,就收下这个帧,反之就丢弃这个帧。
- 封装成帧:PPP协议规定了特殊的字符作为帧定界符号,以便使得接收端能从收到的比特流中准确的找出帧开始和结束位置。
- 透明性:PPP协议能够保证数据传输的透明性,如果在数据中出现了和帧定界符一样的比特组合,PPP协议规定了一系列措施来决解这个问题。
- 支持多种网络层协议:PPP协议支持多种网络层协议在同一条链路上的运行。当点对点链路所连接的是局域网或者路由器时,PPP协议就必须能够同时支持在链路所连接的局域网或者路由器上运行的各种网络层协议。
- 支持多种类型链路:PPP能够在多种类型的链路上运行。例如串行的(一次性只发送一个比特)或并行的(一次性并行的发送多个比特),同步或者异步,低速或者高速的点对点链路。
PPP不使用帧编号,因为帧编号是为了出错时可以有效地重传,而PPP并不需要实现可靠传输。
PPP协议适用于线路质量不太差的情况下,如果通信质量太差,传输会频频出错,但PPP又没有编号和确认机制,这样就必须依靠上层的协议才能保证数据传输的正确无误,这样就使得数据的传输效率降低。
3-07 要发送的数据为1101011011。采用CRC的生成多项式是P(X)=X4+X+1。试求应添加在后面的余数。数据在传输过程中最后一位1变成0,问接收端能够发现?若数据在传送过程中最后两个1都变成了0,问接收端能够发现?采用CRC检验后,数据链路层的传输是否成为了可靠的传输?
解:采用CRC的生成多项式P(X)=X4+X+1,除数用二进制表示是P=10011,现在除数是5位。因此需要把被除数1101011011后面加4个0(除数最高次为4),然后进行模2运算:
现在数据在传输过程中最后一个1变为了0,即1101011010,然后把帧检验序列1110接在数据110111010的后面,下一步就是进行CRC检验:
得出余数为0011不为0,因此判定所接受的数据有差错。CRC校验可以检测到这个差错。
若在数据的传输过程中最后两个1都变为了0,即1101011000,把真检验序列1110加到1101011000后面,进行CRC检验:
现在余数R为0101不为0,因此可以判断所接收的数据有差错。
采用CRC检验后,数据链路层的传输并非成为了可靠的传输,当接收方进行CRC检验的时候,如果发现有差错,就丢弃该帧。数据链路层并不能保证接收方接收到的的和发送的完全一样。
3-08 要发送的数据为101110.采用CRC的生成多项式P(X)=X3+1,试求应添加在后面的余数。
解:CRC的生成多项式为P(X)=X3+1,因此使用二进制表示的除数为P=1001,要发送的数据后面添加3个0,余数应该为3位。进行CRC运算:
得到的余数R为011。
3-09 一个PPP帧的数据部分(用16进制写出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E,试问真正的数据是什么?
解:把由转义字符7D开始的2字节序列用下划线标出:
把原来的7D 5E转义为7E,把原来的7D 5D转为7D,因此真正的数据部分为:7E FE 27 7D 7D 65 7E
3-10 PPP协议使用同步传输技术传送比特串0110 1111 1111 1100,试经过0比特填充后变成怎样的比特串?若接收端收到的的PPP帧的数据部分是0001 1101 1111 0111 1101 10,问删除发送端加入的0比特后变成怎样的比特串?
解:第一个比特串0110 1111 1111 1100,0比特填充就是在连续5个1后面必须插入一个0.经过0比特填充后就变成了
0110 1111 1(0)11 111(0) 00 加括号的0是填充的。
另一个比特串为0001 1101 1111 0111 1101 10:删除发送端加入的0比特(5个连续1后面的第一个0删掉),变为0001 1101 1111-1111 1-110(-表示删除了0)
3-11 是分别讨论下列各种情况在什么条件下是透明传输,在什么条件下不是透明传输。
- 普通的电话服务。
- 互联网提供的电子邮件服务
解:由于电话系统的带宽有限,而且还失真,普通的电话通信并不是透明传输。
电子邮件是透明传输。
3-12 PPP协议工作状态有哪几种?当用户要使用PPP协议和ISP建立连接进行通信的时候,需要建立哪几种连接?每一种连接解决什么问题?
解:PPP协议的工作状态有6种,这几个状态图之间的关系如图所示:
当用户要使用PPP协议的ISP建立连接进行通信的时候,需要建立两种连接。
第一种连接是物理层连接,上图中从“链路静止”到“连接建立”的这一过程。我们知道,只有建立起了物理连接,数据链路层才能建立起连接。
第二层连接是数据链路层连接,即建立LCP链路,这时,用户PC向ISP发送一系列的LCP分组(封装成多个PPP帧),以便建立LCP连接,这时候LCP开始协商一些配置选项,协商结束后双方就建立起了LCP连接,接着就进入鉴别状态,PC端发送身份标识符和口令(系统允许用户重试若干次),若鉴别成功,则进入“网络层协议”状态,PPP链路的两端的网络控制层协议NCP,根据网络层的不同协议互相交换网络层特定的分组,如果PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块(如分配IP地址)时,就要使用NCP中支持IP的协议--IP控制协议IPCP。IPCP分组也封装成PPP帧,在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。
当网络配置完毕后,链路就进入了可进行通信的“链路打开状态”。链路的两个PPP端点可以彼此向双方发送分组。
3-13 局域网的主要特点是什么?为什么局域网采用广播通信方式而广域网不采用呢?
解:局域网最主要的特点是归一个单位所有,且地理范围和站点数目有限,采用广播通信十分的简单方便,但是广域网范围很大,如果采用广播通信,势必会造成通信资源极大的浪费,因此广域网不采用广播通信。
3-14 常见的局域网网络拓扑结构有哪些种类?现在最流行的是哪种架构?
解:常见的局域网网络拓扑结构有:星形网,环状网(典型的令牌环网)和总线网。现在最流行的是星形网。
3-15 什么叫传统以太网?以太网有哪两个标准?
解:传统以太网就是流行最早的10Mbit/s速率的以太网。
以太网有两个标准,即DIX Ethernet V2标准和IEEE 802.3标准。
3-16 数据率为10Mbit/s的以太网在屋里媒体上的码元传输速率是多少码元/秒?
解:
数据率为10Mbit/s的以太网在进行曼彻斯特编码之前,基带信号每秒发送10x106106个码元,但是经过曼彻斯特编码后,原来的信号源的每一个码元都变成了两个码元,因此,最后经过网络适配器发送到线路上的码元是每秒20x106106给码元,即速率是每秒20兆码元。
3-17 为什么LLC子层的标准已经制定出来但现在却很少用了?
解:LLC子层在过去曾流于令牌环网,令牌总线网等中,但是这些都已经在市场上消失了,现在IP数据包直接都是放到以太网中,作为以太网的数据部分。
3-19 试说明10BASE-T中各字段的意思。
解:10代表的是以太网的速率是10Mbit/s,BASE代表的是连接线上的信号是基带信号。T代表的是双绞线。
3-20 假定1km长的CSMA/CD网络使用的数据率为1GBit/s,设信号在网络上的传播速率为200000km/s,求能够使用此协议的最短帧长。
解:1km长的CSMA/CD网络的端到端的传播时延ττ=(1km)/(200000km/s)=5μμs
2ττ=10μμs,在此期间要发送(1Gbit/s)(10μμs)=10000bit。只要经过这样一段时间后才能收到碰撞信息(如果发生碰撞的话),因此最短帧长为10000bit,即1250字节(10000/8)。
3-21 什么叫比特时间?使用这种时间单位有什么好处?100比特时间是多少微秒?
解:比特时间指的是发送1比特所需的时间,而不管数据率是多少,好处就是方便。要把“比特时间”换算成“秒”或者“微妙”,就必须先知道数据率是多少。
3-22 假定在使用CSMA/CD协议的10Mbit/s以太网中,某个站在发送数据时检测到碰撞,执行退避算法时选择了随机数r=100。试问这个站需要等待多长时间才能再次发送数据?如果是100Mbit/s的以太网呢?
解:对于10Mbit/s的以太网来说,争用期为512比特时间,现在r=100,因此退避的时间为512*100=51200比特时间,即:51200X10=5120μμs。对于100Mbit/s的以太网,争用期仍然是512比特时间。退避时间仍然为51200比特时间,即51200/100=512μμs。
3-23 以太网的利用率与连接在一台网上的站点数目无关吗?
解: 以太网的利用率与连接在一台网上的站点数目有关。
3-24 假定站点A和站点B在同一个10Mbit/s以太网网段上。这两个站点之间的传播时延为225比特时间,现假定A开始发送一帧,并且在A发送结束之前也发送一帧。如果A发送的是以太网所允许的最短帧,那么A在检测到和B发送碰撞之前能否把自己的数据发送完?
解:如图
设t=0时开始发送,A发送的最短帧长时64字节=512比特。实际上在信道上传送的还有8字节(64bit)的前同步码和帧开始定界符。因此t=512+64=576bit时间。A应当发送完毕后,经过传播时间后,即t=225比特时间,B检测到A的信号,如图所示:
因此,在t=225比特时间后以后B就不会发送数据了。反之,如果B在t=224比特时间或者之前发送数据就一定会和A发送的数据发生碰撞。B在t=224比特时间发送的第一个比特将在t=224+256=449比特时间到达A,因此A在检测到和B发送的数据发生碰撞之前显然还没有发送完毕,(449<576)。当A再发送完毕之前(t=576比特时间)没有检测到发生碰撞就表明A所发送的只能不会和B发送的帧发生碰撞。
3-25 在上题中的站点A和站点B在t=0时同时发送了数据帧。当t=225比特时间,A和B同时检测到发生了碰撞。并且在t=225+48比特时间完成了干扰信号的传输。A和B在CSMA/CD算法中选择了不同的r值退避,假定A和B选择的随机数分贝是rA=0和rB=1,试问A和B各在什么时间开始重传数据帧?A重传的数据帧在什么时间到达B?A重传的数据会不会和B重传的数据再次发生碰撞?B会不会在预定的重传时间停止发生数据?
解:如下图:
t=0时刻,A和B开始发送数据。
t=225比特时间,A和B都检测到碰撞。
t=273比特时间,A和B结束干扰信号的传输。A和B马上执行执行退避算法。
因为rA=0,rB=1,所以A立即检测到信道,而B要推迟512比特时间才可以检测信道。
也就是说,A在t=273比特时间就开始检测信道,但B要等到t=785比特时间才检测信道。
当t=273+225=498比特时间,B的感染信号中的最后一个比特到达A:A检测到信道空闲,但A还不能马上发生数据,必须等待96比特时间才能发生数据(以太网的最小间隔就是96比特时间)。这样,当t=498+96=594bit时间,A开始发送数据。
再看一下B什么时候可以发送数据。当t=273+512=785比特时间(B从273比特时间算起,经过1个争用期512比特时间),再次检测信道,若空闲,则B在96bit事件后,即t=785+96=881比特时间发送数据。请注意,只有在785-881bit时间B一直检测到信道是空闲的,B才在881比特时间发送数据。
当t=594+225=819bit时间,A在594bit时间发送的数据到达B。可见从785bit时间算起,才经过了34bit时间,B就检测到信道繁忙。因此B的881比特时间不发送数据。
3-26 以太网上只有两个站,它们同时发送数据,产生了碰撞。于是按阶段二进制指数退避算法进行重传。重传次数记为i,i=1,2,3...。试计算第1次重传失败的概率,第2次重传失败的概率,第3次重传失败的概率。以及一个站点成功发送数据之前的平均重传次数l。
解:设第i次重传失败的概率是Pi,显然:Pi=(0.5)^k,k=min(i,10)。
第1次重传失败的概率是P1=0.5。
第2次重传失败的概率是P2=0.50.5^2=0.25。
第3次重传失败的概率是P2=0.50.5^3=0.125。
P[传送i次才成功]=P[第1次传送失败]xP[第2次传送失败]x...xP[第i-1次传送失败]xP[第i次传送成功]
p[传送1次成功]=0.5
p[传送2次成功]=P[传送1次失败]x[传送2次成功]=p[传送1次失败]x(1-[传送2次败])=0.5x0.75=0.375
P[传送3次成功]=P[传送1次失败]xP[传送2次失败]xP[传送3次成功]=p[传送1次失败]xp[传送1次失败]x(1-[传送3次失败])=0.5x0.25x0.875=0.1094。
求p[传送i次才成功]的统计平均值,得出:平均重传次数=1x(0.5)+2x(0.375)+3x(0.1094)+...≈≈1.64
3-27 有10个站点连接到以太网上,试计算以下三种情况每一个站所能得到的带宽。
- 10个站都连接到一个10Mbit/s以太网集线器上。
- 10个站都连接到一个100Mbit/s以太网集线器上。
- 10个站都连接到一个10Mbit/s以太网交换机上。
解:每一个站点能得到的带宽如下:
- 假定以太网的利用率基本达到100%,那么10个站共享10Mbit/s,即平均每一个站可得到1Mbit/s的带宽。
- 假定以太网的利用率基本达到100%,那么10个站共享10Mbit/s,即平均每一个站可得到10Mbit/s的带宽。
- 每一个站独占交换机的一个接口的带宽10Mbit/s。
3-29 以太网交换有何特点?用它怎样组成虚拟局域网?
解:以太网交换机实质上就是一个多接口的网桥,以太网的额每个接口都直接与一个单个主机或另一个集线器相连,并且一般工作在全双工方式,。当主机需要通信的时候,交换机能同时连通许多对接口,使每一对相互通信的主机都能像独占传输媒体那样,无碰撞的传输数据。以太网内部的帧转发表也是通过自学习算法自动逐渐建立起来的。当两个站通信完成后就断开连接,由于内部使用了专门的交换结构芯片,其交换速率就较高。
虚拟局域网VLAN是由一些i局域网网段构成的,与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的工作站属于哪一个VLAN。1998年IEEE批准了802.3ac标准,这个标准定义了以太网的帧格式的扩展,以便支持虚拟局域网。虚拟局域网协议允许以太网的帧格式插入一个4字节的标识符,称为VLAN标记,用来指明发送该帧的工作站属于哪一个虚拟局域网,如果还使用原来的以太网帧格式,显然就无法划分虚拟局域网。
3-30 在图T-3-30中,某学院的以太网交换机有三个接口,分别和学院三个系的以太网相连,另外三个接口分别和电子邮件服务器,万维网服务器以及和连接互联网的路由器相连。图中的A,B,C都是100Mbit/s的以太网交换机,假定所有链路的镀铝都是100Mbit/s,并且图中的9台主机任何一个都可以与任何一个服务器或者主机进行通信。试计算着9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
解:这里的9台主机和两个服务器都工作时的总的吞吐量使900+200=1100Mbit/s.
3-31 假定上图中所有链路的诉苦v仍然是100Mbit/s,但三个系的以太网交换机都换成了100Mbit/s的集线器,试计算这9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
解:最大的吞吐量为100x3+200=500Mbit/s。
3-32 假定上图中所有链路的速率仍然为100Mbit/s,但所有的以太网交换机都换成100Mbit/s的集线器,试计算这9台主机和两个服务器产生的总的吞吐量的最大值。为什么?
解:现在整个系统是一个碰撞域,因此最大吞吐量为100Mbit/s。
3-33 在图T-3-33中,以太网交换机有6个接口,分别连接到5台主机和一个路由器。
在下面的表中的“动作”一栏中,标识先后发送了4个帧。假定在开始时,以爱王交换机的交换表使空的。是把该表中的其他栏目都填完。
3-35 假定一个以太网上的通信量中的80%是在本局域网上进行的,而其余的20%的通信量是在本局域网和互联网之间进行的,另一个以太网的情况则反过来。这两个以太网一个使用以太网集线器,而另一个使用以太网交换机。你认为以太网交换机应当用在哪一个网络上?
解:使用集线器的最主要的特点是:这种局域网在逻辑上仍然是一个总线网,局域网上的各个主机共享逻辑上的总线,使用的还是CSMA/CD协议(确切的来说,是各主机上的适配器执行CSSMA/CD协议),网络中的个主机必须竞争对传输媒体的控制,同一时刻之多只允许一个主机发送数据。
以太网交换最主要的特点是:交换机的每个接口都直接为一个单个主机或另一个集线器相连,并且一般都工作在全双工工作方式。当主机进行通信时,交换机能同时连接许多对接口,使每一对相互通信的主机都能像独占通信媒体那样,无碰撞的传输数据。
设以太网E1上的通信量中方的80%是在本局域网上进行的,而其余的20%是在本局域网和互联网之间进行的。。设以太网E2上的通信量中的20%是在本局域网上进行的,而其余的80%是在本局域网和互联网上进行的。
交换机的性能显然由于集线器性能。那么,哪个以太网(E1或者E2)应当使用交换机呢?
如果以太网的管理者认为,确保局域网上的主机相互通信是最重要的,那么就应该把交换机安装在以太网E1上。这样就可以保证有多对局域网上的主机同时进行通信,反之,如果把集线器安装在以太网E1上,那么在同一时间,在局域网上就只能有一对主机进行通信。
如果以太网的管理者认为,确保居于网上的主机能够上互联网是最重要的,那么就应当把交换机安装在以太网E2上,但要注意,居于网上的主机要上互联网。首先必须经过本局域网上的路由器。如果以太网E2上只有一个路由器,那么在同一时间内还是只有一个主机能够通过这个路由器上网,这个居于网上的其他主机就无法再和这个路由器相连,除非这个局域网上有好几个路由器,而通过这些路由器都能够连接到互联网。请注意,在使用集线器的以太网,不管这个局域网上多少个路由器,在同一时间,只能有一个主机与某一个路由器相连。
3-36 网桥的工作原理与特点是什么?网桥各转发器以及与以太网交换机有何异同?
解:网桥工作在数据链路层,它根据MAC帧的目的地址对接收到的帧进行转发和过滤。当网桥收到一个帧的时候,并不是向所有的接口转发此帧,而是先检查次帧的目的MAC地址,然后再确定将该帧转发到哪一个接口上。或者是把它丢弃(即过滤),网桥依靠转发表转发帧。
使用网桥可以带来以下好处:
- 过滤通信量,增大吞吐量。
- 提高了物理范围,因此也增大了整个以太网上工作站的数目。
- 提高了可靠性,当网络出现故障的时候,一般只影响个别网段。
- 可互联不同的物理层,不同MAC子层和不同速率(如10 Mbit/s和100Mbit/s以太网)的以太网。
当然,网桥也有一些缺点,例如:
- 由于网桥要对接收到的帧要先存储和查找转发表,然后才转发,而在转发之前,还必须执行CSMA/CD算法,这就增加了时延。
- 在MAC子层并没有流量控制功能,当网络上的负荷很重的时候,网桥中的缓存空间可能不够而发生溢出,以致产生帧丢失的现象。
- 网桥只适用于用户数不多(不超过几百个)和通信量不太大的局域网。否则有时还会因为传播过快的广播信息而产生网络拥堵,这就是所谓的广播风暴。
网桥与转发器最大的区别是工作层次的不同,网桥工作在数据链路层,它根据MAC地址的目的地址对收到的帧进行转发和过滤。而转发器工作在物理层,用来连接以太网不同的网段,以便扩展以太网的覆盖范围,转发器的特点是收到一个比特就转发一个比特,而不进行碰撞检测,也不管这个帧是有效帧还是无效帧。
以太网交换机实质上就是一个拥有多接口的网桥,他的每个接口都直接与一台主机或者集线器相连(注意:普通网桥的接口往往是连接到以太网的一个网段),并且一般工作在全双工方式。
3-37 图T-3-37标识有五个站点分别连接在三个局域网上,不过你切用网桥B1,B2连接起来,每一个网桥都有两个接口(1和2),在一开始,两个网桥中的转发表是空的,以后有以下各站向其他的站按先后顺序发送了数据帧:A发送给E,C发送给B,D发送给C,B发送给A,试把有关数据填入表T-3-37-a中
A->E:B1收到此帧时转发表是空的,因此加上收到的帧的源地址A和这个帧到达的转接口1,即(A,1)。收到帧的目的地址在转发表中没有,因此该帧从接口2转发出去,发送到LAN2。当B2收到此帧时,按照同样的步骤处理。因此该帧从接口2转发出去。发送到LAN2。当B2收到此帧时,按照同样的步骤处理。LAN3上面的E站收到此帧。
C->B:B1和B2都收到此帧,因为它们和C连接在同一个局域网上,B1的转发表没有C,因此将(C,2)加上。并从接口1转发LAN1,LAN1上面的B站收到此帧,B2的转发表也没有C,因此将(C,1)加上。并从接口2转发到LAN3。这个局域网上各站都将丢弃这个帧。
D->C: B2收到此帧时,转发表上没有D。因此将(D,2)加上,再查B2的转发表,收到此帧的目的地址C在转发表上有这一选项,其接口是1,因此从相应的接口1转发出去,C收到此帧。当B1收到此帧后,将(D,2)加上。再找到目的地址C。因为与C对应的转发接口2与此帧到达的接口2一样,因此B1将不再转发此帧,从而丢弃它。
B->A: B1收到此帧将B和接口1写入转发表。再查找B1转发表,收到此帧的目的地址A在转发表中有这一项,其接口是1,与此帧的到达接口一样,不再需要转发,故丢弃此帧,B2收不到此帧,无法再转发表中写入B的转发西悉尼。可以看出,B->A的通信不涉及LAN2和LAN3。
3-38 网桥中的转发表是用学习算法建立的,如果有的站点总是不发送数据而仅仅接收数据,那儿抓发表中是否就没有与这样的站点相对应的项目?如果要向这个站点发送数据帧,那么网桥能够把数据帧正确转发到目的地址吗?
解:如果有的站点总是不发送数据,那么在转发表中就没有与这样的站点相对应的项目。如果要想这个站点发送数据帧,那么网桥还是能够把数据正确转发到目的地址,这是因为局域网具有广播功能。
3-39 表示有6各站分别连接在三个局域网上,并且用网桥B1和B2连接起来,每一个网桥都有两个接口(1和2),在一开始,两个网桥中的转发表都是空的。以后有以下各站向其他的站发送了数据帧:B发送给A,E发送给D,C发送给E,A发送给B,F发送给E,试把有关数据填写在同类的表T-3-37-a中。
B->A:在LAN1上的A直接收到B发送的数据帧,但此帧也被网桥B1收到。B1收到此帧转发表是空的,因此加上源站地址B和到达的接口1(B,1)。目的站在转发表中没有,因此该帧从接口2阻焊发出去,发送到LAN2。当LAN2上的B2收到此帧时,按照同样步骤处理,在转发表中加上源站地址B和到达的接口1(B,1),再把该帧从接口2转发出去,发送到LAN2,此帧在LAN3中最后被丢弃。
E->D:B2收到此帧时,转发表上没有E,因此将(E,2)加上,再查B1转发表,收到此帧的目的地址E在转发表上有一项(E,2),但此帧就是从接口2收到的,因此不能把此帧再转发到LAN2。此帧在LAN1中最后被丢弃。在LAN2上的B2从接口1收到C发送的帧。当B2收到此帧后,将(C,1)加上,从接口2将此帧转发到LAN3,此帧在LAN3中最后被丢弃。
C->E:B1收到此帧,转发表上没有C,因此将(C,2)加上,再查B1的转发表,收到此帧的目的地址在转发表上有这一项(E,2),但此帧就是从接口2收到的,因此不能把此帧再转发到LAN2上,此帧在LAN1中最后被丢弃,在LAN2上的B2接口从接口1收到C发送的帧,当B2收到此帧后,将(C,1)加上,从接口2将此帧转发到LAN3,此帧在LAN3中最后被丢弃。
A->B:在LAN1上的B直接收到A发送的帧,但此帧也被网桥B1收到,B1收到此帧时在转发表中加上源站地址A和到达的接口1(A,1)。此帧的目的站在B1的转达表中有,就是接口1.因此B1不再转发该帧,仅仅是丢弃它,LAN2和LAN3上都不会收到此帧。
F->E:B2从接口收到此帧时,转发表上没有F,因此将(F,2)加上,再查B2的转发表,收到此帧的目的地址E在转发表上有这一项(E,2),但此帧就是从接口2接收到的,因此不再从接口2转发到LAN3。B2丢弃此帧,不转发。LAN2和LAN1上都不会收到此帧。
C++ Primer 课后习题详解 | 12.1.2 直接管理内存
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: C/C++面试通关【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
本篇文章是对 「C++ Primer 第五版」 第 12.1.12 节课后习题 12.6 ~ 12.9 的讲解。
一、练习 12.6
1.1 题目描述
编写函数,返回一个动态分配的 int 的 vector。将此 vector 传递给另外一个函数,这个函数读取标准输入,将读入的值保存在 vector 元素中。再将 vector 传递给另外一个函数,打印读入的值。记得在恰当的时刻 delete vector。
1.2 题目解析
代码实现如下所示。
#include <iostream>
#include <vector>
std::vector<int> *vectorMalloc()
return new std::vector<int>;
void readValue(std::vector<int>* p)
int val;
std::cin>>val;
p->push_back(val);
void printValue(std::vector<int>* p)
for (const auto i : *p)
std::cout<<i<<std::endl;
int main()
auto p = vectorMalloc();
readValue(p);
printValue(p);
delete p;
return 0;
二、练习 12.7
2.1 题目描述
重做上一题,这次使用 shared_ptr 而不是内置指针。
2.2 题目解析
代码实现如下所示。
#include <iostream>
#include <vector>
#include <memory>
typedef std::shared_ptr<std::vector<int>> sharePtrVector;
sharePtrVector vectorMalloc()
return std::make_shared<std::vector<int>>();
void readValue(sharePtrVector p)
int val;
std::cin>>val;
p->push_back(val);
void printValue(sharePtrVector p)
for (const auto i : *p)
std::cout<<i<<std::endl;
int main()
auto p = vectorMalloc();
readValue(p);
printValue(p);
return 0;
三、练习 12.8
3.1 题目描述
下面的函数是否有错误?如果有,解释错误原因。
bool b()
int* p = new int;
// ...
return p;
3.2 解题思路
函数返回类型错误,应该是 int*,上述代码中,p 将转换为 bool 类型。这样写编译器一般检查不出来错误,会导致内存泄漏问题。
四、练习 12.9
4.1 题目描述
解释下面代码执行的结果:
#include <iostream>
using namespace std;
int main()
int *q = new int(42), *r = new int(100);
r = q;
auto q2 = make_shared<int>(42), r2 = make_shared<int>(100);
r2 = q2;
return 0;
4.2 题目解析
首先,执行 r = q 后,并没有指针指向原 r 指向的内存,造成内存泄漏。
执行 r2 = q2 后,r2 原指内存空间引用计数减一变为 0,所在内存空间被释放,q2 所指内存引用计数加一。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于课后习题详解的主要内容,如果未能解决你的问题,请参考以下文章
数据结构(C语言版)课后习题全套完整答案及详解 (答案由李冬梅老师撰写)
C++ Primer 课后习题详解 | 2.1.2 类型转换