课后题答案(超详细)

Posted zouer.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了课后题答案(超详细)相关的知识,希望对你有一定的参考价值。

第一章

该答案为博主在网络上整理,排版不易,希望大家多多点赞支持。后续将会持续更新(可以给博主点个关注~

第二章 答案

【1-01】计算机网络可以向用户提供哪些服务?

解答:这道题没有现成的标准答案,因为可以从不同的角度来看"服务"。
首先要明确的是,计算机网络可以向用户提供的最重要的功能有两个:连通性和共享。所谓连通性,就是计算机网络使上网用户之间都可以交换信息,好像这些用户的计算机都可以彼此直接连通一样。用户之间的距离也似乎因此而变得更近了。所谓共享就是指资源共享。资源共享的含义是多方面的,可以是信息共享、软件共享,也可以是硬件共享。例如,计算机网络上有许多主机存储了大量有价值的电子文档,可供上网的用户自由读取或下载(无偿或有偿)。由于网络的存在,这些资源好像就在用户身边一样。
我们知道,互联网允许分布式的应用程序运行在连接到网络上的端系统上。正是因为计算机网络了上述的两种功能,这些应用程序才能够互相交换数据,因而能够向用户提供各种不同的服务。因此,计算机网络能够向用户提供各种不同的服务,其实也就是这些应用程序能够向用户提供各种不同的服务。

【1-02】试简述分组交换的要点。

解答:分组交换最主要的特点就是采用存储转发技术
我们把要发送的整块数据称为一个报文。在发送报文之前,先把较长的报文划分成一个个更小的等长数据段,例如,每个数据段为1024 bit 。在每一个数据段前面,加上一些必要的控制信息组成的首部后,就构成了一个分组。分组又称为"包",而分组的首部也可称为"包头"。分组是在互联网中传送的数据单元。分组中的"首部"是非常重要的,正是由于分组的首部包含了诸如目的地址和源地址等重要控制信息,每一个分组才能在互联网中独立地选择传输路径。互联网的核心部分是由许多网络和把它们互连起来的路由器组成的,而主机处在互联网的边缘部分。主机是为用户进行信息处理的,并且可以和其他主机通过网络交换信息。路由器则是用来转发分组(即进行分组交换)的。路由器每收到一个分组,先临时存储下来(这个存储的时间非常短暂),再检查其首部,查找转发表,按照首部中的目的地址,找到合适的接口转换出去,把这个分组转交给下一个路由器。这样一步一步地经过若干个或几十个不同的路由器,以存储转发的方式,把分组交付最终的目的主机。各路由器之间必须经常交换彼此掌握的路由信息,以便创建和维持在路由器中的转发表,使得转发表能够在整个网络拓扑发生变化时及时更新。

【1-03】试从多个方面比较电路交换、报文交换和分组交换的主要优缺点。

解答:电路交换的主要特点:(1)通信之前先要建立连接,通信完毕后要释放连接。也就是说,通信一定要有三个阶段:建立连接、通信、释放连接。
(2)在整个通信过程中,通信的双方自始至终占用着所使用的物理信道
因此,对于计算机通信,由于计算机数据是突发性的,因此,从通信线路的利用率来考虑,电路交换的效率就比较低。此外,当通信双方占用的通信线路由很多段链路(通过若干个交换机把这些链路连通)组成时,只有在每一段链路都能接通(每一段链路都有空闲的信道资源还没有被其他用户占用,即有可用资源)时,整个的连接建立才能完成(哪怕只有一段链路没有空闲的信道可供使用,连接建立也无法完成)。当通信网的业务量很繁忙时,电路交换无法保证用户的每一个呼叫都能接通。如果第一阶段的连接建立不能完成,那么后续阶段的通信过程当然也就无法进行。
在电路交换的通信过程中,只要在整个连接中有一个环节(如某段链路或某个交换机)出了故障,那么整个连接就不复存在,接着就是通信的中断。若要重新进行通信,必须重新建立连接。如果能够绕过刚才的故障链路或故障交换机而建立新的连接,那么就可以开始新的通信。这就是说,电路交换系统不能自动从故障中进行恢复。
但电路交换有一个最主要的优点,就是只要连接能够建立,那么双方通信所需的传输带宽就已经分配好而不会再改变。这叫作静态分配传输带宽。通信双方愿意占用通信资源多久,就占用多久(对于公用网,只要按规定付费即可),而不受网络中的其他用户的影响。当网络发生拥塞时,网络中的其他用户很可能反复呼叫都无法建立连接,但这些动作都不会影响已经占用了通信资源的用户的通信质量(除非发生了通信网中的故障,影响到正在进行通信的连接)。
目前最常用的分组交换使用无连接的 IP 协议。这种分组交换以分组作为传输的单位,采用存储转发技术,并且没有连接建立和连接释放这两个阶段,因此传送数据比较迅速。在传输数据的过程中,动态分配传输带宽,对通信链路是逐段占用的。这就是说,若某段链路的带宽较高,分组的传输速率就较快;若另一段链路的带宽较低,传输速率就较慢。不像电路交换那样,从源点到终点都是同样的传输速率。可见,分组交换能够比较合理而有效地利用各链路的传输带宽。
分组交换采用分布式的路由选择协议。当网络中的某个节点或链路出现故障时,分组传送的路由可以自适应地动态改变,使数据的传送能够继续下去。传送数据的源点和接收数据的终点甚至不会感觉到网络中所发生的故障。因此分组交换网络有很好的生存性。
分组交换也有一些缺点。例如,分组在各路由器存储转发时需要排队,这就会造成一定的时延。此外,由于分组交换无法确保通信时端到端所需的带宽,因此当分组交换网的通信量突然增大时,可能会在网络中的某处产生拥塞,从而延长数据的传送时间。当网络拥塞非常严重时,整个网络也可能会瘫痪。分组交换的另一个问题是各分组必须携带控制信息,这也造成了一定的开销。整个分组交换网还需要专门的管理和控制机制。当然,电路交换网也需要网络管理,但电路交换网的交换机都具有很强的网络管理功能,能够对网络进行很有效的管理。分组交换网中的路由器比较简单,无法对整个网络进行管理。必须在网络中由专门的主机来运行专门的网络管理软件,对整个网络进行管理。
报文交换也采用存储转发技术,不同的是,报文交换不再把报文划分为更小的分组,而是把整个报文在网络的节点中存储下来,然后再转发出去。这样做,省去了划分小的分组的步骤,也省去了在终点把分组重装成报文的过程。但报文交换在灵活性上不如分组交换,传送数据的时延较大。本来报文交换是用来传送电报的。现在已经很少有人打电报了,因此报文交换已经很少使用了。

【1-04】为什么说互联网是自印刷术发明以来人类在存储和交换信息领域的最大变革?

解答:自印刷术发明以来,使用书刊和报纸来传播信息,是人类通信的一个很大变革。在印刷术出现之后,对人类通信起过重要作用的技术有很多,如电报、电话、传真、无线电通信、广播、电视、数字通信、卫星通信、蜂窝无线电通信,等等。这些技术所起的作用,这里就不一一论述了。
但互联网出现后,互联网上的应用的确层出不穷,因而也就出现了许多重大的变革。下面可以通过一些例子来说明这个问题。
最早出现的电子邮件使人们可以非常方便而快捷地进行通信。电子邮件的大量使用,使得传统的电报业务(更贵、更慢,而且更不方便)基本上已无人使用。使用电子邮件,发件人可以非常方便地把同一邮件非常快捷地传递给很多远隔千里的友人。人们在互联网上发布自己创作的文章和视频,可以让成千上万的网民(这里有很多网民是我们并不认识的)在网上看到,而且基本上感觉不到有什么时间上的延迟。网上的 IP 电话既便宜通话质量又好,使得网民们能够随时和异地的友人在网上聊天,还可以进行网上的可视通信。如果愿意支付少量的费用(例如每分钟2美分),这种 IP 电话还能够直接拨打远隔重洋的固定电话。万维网的出现,大大地方便了广大网民上网。例如,当我们发现某个网站有很多有用的信息时,我们不必把这些信息一一传送给远地的友人,而是可以仅仅把该网址传送给这些友人,让他们自己上网查询和下载。这就比传统的通信方式效率高出很多。我们从网上还可以免费下载很多的电子图书和文章,大大加快了信息的广泛传播。这相当于一下子就免费得到了很多想看的书籍和文章。
以前当我们遇到一些问题(如见到一个不懂的新名词),我们可以打电话或写信向远地的老师或友人请教。而现在我们利用互联网的搜索引擎上网查询一下,就可以非常快地获得满意的答案。这显然比传统的通信方式进步了很多。
又如,以前大家都有排长队购买火车票的经历。但现在可以上网购买火车票了,免除了亲自去火车票出售点排队的麻烦。由于采用了实名制购票,因此旅客进站和出站都不需要出示火车票,而只需在所购买车次的检票口刷一下本人的有效身份证,即可完成相当于传统的检票过程。列车员查票时,旅客也只需出示有效身份证就行。这样就使得我们的出行更加方便。
互联网在金融、证券、网购、物流、管理等各行各业、各个领域中的应用,更是不胜枚举。因此,仅仅从以上列举的一些方面就可看出,说互联网是自印刷术发明以来人类通信方面最大的变革,一点也不夸张。

【1-05】互联网基础结构的发展大致分为哪几个阶段?请指出这几个阶段最主要的特点。

解答:互联网的基础结构大体上经历了三个阶段的演进。但这三个阶段在时间划分上并非截然分开而是有部分重叠的,这是因为网络的演进是逐渐的而不是在某个日期突然发生的。第一阶段是从单个网络 ARPANET 向互联网发展的过程。1969年美国国防部创建的第一个分组交换网 ARPANET 最初只是一个单个的分组交换网(并不是一个互连的网络)。所有要大连接在 ARPANET 上的主机都直接与就近的节点交换机相连。但到了20世纪70年代中期,人们已认识到不可能仅使用一个单独的网络来解决所有的通信问题。于是 ARPA 开始研究多种网络(如分组无线电网络)互连的技术,这就导致了后来互连网的出现。这样的互连网就成为现在互联网( Internet )的维形。1983年 TCP / IP 协议成为 ARPANET 上的标准协议,使得所有使用 TCP / IP 协议的计算机都能利用互联网相互通信,因而人们就把1983年作为互联网的诞生时间。1990年 ARPANET 正式宣布关闭,因为它的实验任务已经完成。
第二阶段的特点是建成了三级结构的互联网。从1985年起,美国国家科学基金会 NSF ( National Science Foundation )就围绕6个大型计算机中心建设计算机网络,即国家科学基金网( NSFNET )。它是一个三级计算机网络,分为主干网、地区网和校园网(或企业网)。这种三级计算机网络覆盖了全美国主要的大学和研究所,并且成为互联网中的主要组成部分。1991年, NSF 和美国的其他政府机构开始认识到,互联网必将扩大其使用范围,不应仅限于大学和研究机构。世界上的许多公司纷纷接入到互联网,使网络上的通信量急剧增大,互联网的容量已满足不了需要。于是美国政府决定将互联网的主干网转交给私人公司来经营,并开始对接入互联网的单位收费。1992年互联网上的主机超过100万台。1993年互联网主干网的速率提高到45 Mbit / s (T3速率)。
第三阶段的特点是逐渐形成了多层次 ISP 结构的互联网。从1993年开始,由美国政府资助的 NSFNET 逐渐被若干个商用的互联网主干网替代,而政府机构不再负责互联网的运营。这样就出现了一个新的名词:互联网服务提供者 ISP ( Internet Service Provider )。在许多情况下, ISP 就是一个从事商业活动的公司,因此 ISP 又常译为互联网服务提供商。 ISP 拥有从互联网管理机构申请到的多个 IP 地址,同时拥有通信线路(大的 ISP 自己建造通信线路,小的 ISP 则向电信公司租用通信线路)以及路由器等连网设备,因此任何机构和个人只要向 ISP 交纳规定的费用,就可从 ISP 得到所需的 IP 地址,并通过该 ISP 接入到互联网。我们通常所说的"上网"就是指"(通过某个 ISP )接入到互联网",因为 ISP 向连接到互联网的用户提供了 IP 地址。 IP 地址的管理机构不会把一个单个的 IP 地址分配给单个用户(不"零售" IP 地址),而是把一批 IP 地址有偿分配给经审查合格的 ISP (只"批发" IP 地址)。从以上所讲的可以看出,现在的互联网已不是某个单个组织所拥有而是全世界无数大大小小的 ISP 所共同拥有的。

【1-06】简述互联网标准制定的几个阶段。

解答:制定互联网的正式标准要经过以下三个阶段:
(1)互联网草案( Internet Draft )-﹣互联网草案的有效期只有六个月。在这个阶段还不能算是 RFC 文档。(2)建议标准( Proposed Standard )-﹣从这个阶段开始就成为 RFC 文档。
(3)互联网标准( Internet Standard )–﹣如果经过长期的检验,证明某个建议标准可以变成互联网标准时,就给它分配一个标准编号,记为 STDxx ,这里 STD 是" Standard “的英文缩写,而” xx “是标准的编号(有时也写成4位数编号,如STD0005)。一个互联网标准可以和多个 RFC 文档关联。
原先制定互联网标准的过程是:“建议标准"→"草案标准"→"互联网标准”。由于"草案标准"容易和成为 RFC 文档之前的"互联网草案"混淆,从2011年10月起取消了"草案标准"这个阶段[ RFC 6410]。这样,现在制定互联网标准的过程简化为:“建议标准"→"互联网标准”。在新的规定以前就已发布的草案标准,将按照以下原则进行处理:若已达到互联网标准,就升级为互联网标准;对目前尚不够互联网标准条件的,则仍称为发布时的旧名称"草案标准”。

【1-07】小写和大写开头的英文名字 internet 和 Internet 在意思上有何重要区别?

解答:以小写字母 i 开始的 internet (互连网)是一个通用名词,它泛指由多个计算机网络互连而成的网络。在这些网络之间的通信协议(即通信规则)可以是任意的。
以大写字母 I 开始的 Internet (互联网或因特网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络相互连接而成的特定计算机网络,它采用 TCP / IP 协议族作为通信的规则,且其前身是美国的 ARPANET 。

【1-08】计算机网络都有哪些类别?各种类别的网络都有哪些特点?

解答:可以从不同的角度回答这个问题。从网络的作用范围来划分,有:
(1)广域网 WAN ,作用范围通常为几十到几千公里,有时也称为远程网。(2)城域网 MAN ,作用范围一般是一个城市,可跨越几个街区甚至整个城市,其作用距离约为5~50 km .
(3)局域网 LAN ,作用范围局限在较小的范围(如1km左右)。
(4)个人区域网 PAN ,也常称为无线个人区域网 WPAN ,其作用范围大约在10m左右。按照使用者来划分,有:
(1)公用网,这是指电信公司(国有或私有)出资建造的大型网络。"公用"的意思就是所有愿意按电信公司的规定交纳费用的人都可以使用这种网络。因此公用网也可称为公众网。
(2)专用网,这是某个部门为满足本部门的特殊业务工作的需要而建造的网络。这种网络不向本部门以外的人提供服务。例如,军队、铁路、电力、银行等系统均有本系统的专用网。
按照采用的交换技术来划分,有:
(1)电路交换网。(2)分组交换网。
(3)混合交换网。
还有一种网络叫作接入网( AN ),用来把用户接入到互联网。接入网也叫作本地接入网。

【1-09】计算机网络中的主干网和本地接入网的主要区别是什么?

解答:计算机网络中的主干网是计算机网络核心部分的重要组成部分。主干网是由许多高速通信链路组成的,因而能够迅速地传送数据。主干网中还有许多路由器,能够把分组一步一步地转发到正确的目的地。本地接入网的作用仅仅是把用户接入到互联网。当然,接入网应当使用户可以更快地通过计算机网络可靠地下载文件和上传数据。

【1-10】试在下列条件下比较电路交换和分组交换。要传送的报文共 x ( bit )。从源点到终

点共经过 k 段链路,每段链路的传播时延为 d ( s ),数据率为 b ( bit / s )。在电路交换时电路的建立时间为 s ( s )。在分组交换时,分组长度为 p ( bit ),每个分组所必须添加的首部都很短,对分组的发送时延的影响在题中可以不考虑。此外,各节点的排队等待时间也可忽略不计。问在怎样的条件下,分组交换的时延比电路交换的要小?(提示:画一下草图观察 k 段链路共有几个节点。)
解答:电路交换必须先建立连接,需要的时间是 s 秒。
发送 x 比特的报文所需的时间是报文长度除以数据率 b 。因此发送时延是 x / b 。总的传播时延是链路数乘以每段链路的传播时延,即 kde
因此,电路交换的时延由以上三项组成,即: s + x / b + kd 。
分组交换时延的计算要稍微麻烦一点,见图 T -1-10。请注意,分组经过 k 段链路,中间要经过 k -1个节点转发。

分组交换不需要先建立连接(这里假定了题目中的分组交换使用数据报传送。如果使用虚电路传送则需要先建立连接)。从图 T -1-10的右边可看出,总时延由三部分组成。
先计算分组交换的传播时延,这和电路交换是一样的,也是 kde
再计算 n 个分组所需的发送时延,这需要知道报文 x 一共划分为多少个分组。将报文长度 x 除以一个分组的长度 p 就得出分组的数目 n 。在一般情况下, x 除以 p 所得到的商可能不是整数,因此要把得出的商的整数部分加1才是分组的数目 n 。我们知道,符号「 a ]表示 a 的整数部分加1,例如,「3.027=4。因此,分组的数目:

这样,发送 n 个分组所需的发送时延是:

请注意,最后一个分组的长度一般会小于前面 n -1个分组的长度,而小多少我们也无从得知。这样,最后一个分组的发送时延就无法算出。于是,我们这里还需要再使用一个假定,即:所有分组的发送时延都是相同的。这就是认为所有的分组都是等长的。
从图 T -1-10可以看出,总时延中还有一项,就是一个分组经过 k -1个节点的发送时延。当 k =1时,就没有这一项。
在一段链路上发送一个分组的发送时延是 plb ,( k -1)段链路的发送时延是( k -1) p / b ,因此把以上三部分时延相加,就得出在分组交换情况下的总时延:

【1-11】在上题的分组交换网中,设报文长度和分组长度分别为 x 和( p + h )( bit ),其中 p 为分组的数据部分的长度,而 h 为每个分组所添加的首部长度,与 p 的大小无关。通信的两端共经过 k 段链路。链路的数据率为 b ( bit / s ),但传播时延和节点的排队时间均可忽略不计。若打算使总的时延为最小,问分组的数据部分长度 p 应取为多大?(提示:参考图 T -1-10,观察总的时延由哪几部分组成。)

从 D 的表达式可以看出,若分组很短,则该表达式右端第一项将增大。这表示分组数目很大会导致每个分组的控制信息所引起的时延增大。但若分组很长,则该表达式右端第二项将增大。因此,分组的长度不宜太短或太长。

【1-12】互联网的两大组成部分(边缘部分与核心部分)的特点是什么?它们的工作方式各有什么特点?

解答:互联网的拓扑结构非常复杂,并且在地理上覆盖了全球,但从其工作方式上看,可以划分为以下两大块。
(1)边缘部分:由所有连接在互联网上的主机组成。这部分是用户直接使用的,用来进行通信(传送数据、音频或视频)和资源共享。
(2)核心部分:由大量网络和连接这些网络的路由器组成。这部分是为边缘部分提供服务的(提供连通性和交换)。
在网络边缘的端系统之间的通信方式通常可划分为两大类:客户﹣服务器方式( C / S 方式)和对等方式(P2P方式)。这两种通信方式的区别见习题1-13。
在网络核心部分起特殊作用的是路由器。路由器是实现分组交换的关键构件,如果没有路由器,再多的网络也无法构建成互联网。由此可以看出,互联网的核心部分的工作方式其实也就是路由器的工作方式。
路由器的任务是转发收到的分组。当路由器转发分组时,必须查找路由表。因此,互联网中的各路由器必须根据路由选择协议的规定相互交换路由信息,以便使路由表能够及时反映出网络拓扑的变化。
由此可见,互联网的核心部分的工作方式有两种:一种是路由器转发分组(这是直接为主机之间的通信服务的),另一种是路由器之间不断地交换路由信息(这是为了保证路由表的路由信息与网络的实际拓扑一致)。

【1-13】客户﹣服务器方式与P2P对等通信方式的主要区别是什么?有没有相同的地方?

解答:客户﹣服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。服务请求方和服务提供方都要使用网络核心部分所提供的服务。
客户程序被用户调用后运行,在通信时主动向远地服务器发起通信(请求服务)。因此,客户程序必须知道服务器程序的地址。客户程序不需要特殊的硬件和很复杂的操作系统。服务器程序是一种专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。服务器程序在系统启动后即自动调用并一直不断地运行着,被动地等待并接收来自各地的客户的通信请求。因此,服务器程序不需要知道客户程序的地址,并且一般需要有强大的硬件和高级的操作系统支持。
客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可发送和接收数据。对等连接(或P2P方式)是指两个主机在通信时并不区分哪一个是服务请求方哪一个是服务提供方。只要两个主机都运行了对等连接软件(P2P软件),它们就可以进行平等的对等连接通信。
实际上,对等连接方式从本质上看仍然使用客户﹣服务器方式,只是对等连接中的每一个主机既是客户又是服务器。

【1-14】计算机网络有哪些常用的性能指标?解答:计算机网络常用的性能指标如下。

(1)速率:指的是连接在计算机网络上的主机在数字信道上传送数据的速率,也称为数据率或比特率。(2)带宽:用来表示网络的通信线路传送数据的能力,网络带宽表示在单位时间内(一般是每秒钟)从网络中的某一点到另一点所能通过的"最高数据率"。
(3)吞吐量:表示在单位时间内(一般是每秒钟)通过某个网络(或信道、接口)的数据量。
(4)时延:指数据(一个报文或分组,甚至比特)从网络(或链路)的一端传送到另一端所需的时间。时延包括发送时延、传播时延、处理时延和排队时延等。
(5)时延带宽积:是传播时延( s )和带宽( bit / s )的乘积。链路的时延带宽积又称为以比特为单位的链路长度。
(6)往返时间:表示从发送方发送数据开始,到发送方收到来自接收方的确认(接收方收到数据后便立即发送确认),总共经历的时间。有时,往返时间还包括网络各中间节点的处理时延、排队时延以及转发数据时的发送时延。
(7)利用率:分信道利用率和网络利用率两种。信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。完全空闲的信道的利用率是零。网络利用率则是全网络的信道利用率的加权平均值。

【1-15】假定网络的利用率达到了90%。试估算一下现在的网络时延是它的最小值的多少倍?

解答:根据教材中的公式(1-5), D / Do =1/(1-)=1/0.1=10现在的网络时延是最小值的10倍。

【1-16】计算机通信网有哪些非性能特征?非性能特征与性能指标有什么区别?

解答:计算机通信网的非性能特征有以下一些:(1)费用(2)质量(3)标准化(4)可靠性(5)可扩展性和可升级性(6)易于管理和维护
非性能特征与性能指标的主要区别就是:性能指标是直接反映网络性能的,而非性能指标则不是网络所特有的指标。例如,非性能特征中的费用,在所有的工程项目中都存在费用的问题。所以费用不能说是网络的性能指标。然而一般说来,网络的速率越高,其价格也越高。当我们要求网络的速率非常高时,其费用就可能达到我们不能承受的数值,而且使我们无法实现这样的性能。也就是说,有时网络的非性能特征能够制约网络性能指标的实现。再例如,某个网络的性能指标都很不错,但很不便于管理和维护,那么这种网络可能就不宜选用。

【1-17】收发两端之间的传输距离为1000 km ,信号在媒体上的传播速率为2x10m/ s 。试计算以下两种情况的发送时延和传播时延:(1)数据长度为10’ bit ,数据发送速率为100 kbit / s (2)数据长度为10’ bit ,数据发送速率为1 Gbit / s 。从以上计算结果可得出什么结论?

解答:两种情况分别计算如下:
(1)发送时延为10 bit /(100 kbit / s )=100 s ,
传播时延为10° m /(2x10m/ s )=5 ms .发送时延远大于传播时延。
(2)发送时延为10 bit /(1 Gbit / s )=1μ s ,
传播时延为5 ms .
发送时延远小于传播时延。
若数据长度大而发送速率低,则在总的时延中,发送时延往往大于传播时延。但若数据长度短而发送速率高,则传播时延又可能是总时延中的主要成分。

【1-18】假设信号在媒体上的传播速率为2.3 x 10m/ s 。媒体长度1分别为:(1)10 cm (网络接口卡)(2)100 m (局域网)(3)100 km (城域网)(4)5000 km (广域网)现在连续传送数据,数据率分别为1 Mbit / s 和10 Gbit / s 。试计算每一种情况下在媒体中的比特数。(提示:媒体中的比特数实际上无法使用仪表测量。本题是假想我们能够看见媒体中正在传播的比特,能够给媒体中的比特拍个快照。媒体中的比特数取决于媒体的长度和数据率。)

解答:计算步骤如下:
先计算10 cm (即0.1 m )的媒体上信号的传播时延:0.1 m /(2.3 x 10m/ s )=4.3478 x 10-0s≈4.35 x 10-10 s 再计算10 cm 线路上正在传播的比特数:
1 Mbit / s 数据率时为:1 Mbit / s x 4.35 x 10-0s=4.35 x 10 bit 读者应正确理解在线路上只有0.000435个比特到底是什么意思。
10 Gbit / s 数据率时为:10 Gbit / s x 4.35 x 10-10 s =4.35 bit
对于后面的几种情况,计算方法都是一样的。把计算结果填入表 T -1-18中。

【1-19】长度为100字节的应用层数据交给运输层传送,需加上20字节的 TCP 首部。再交给网络层传送,需加上20字节的 IP 首部。最后交给数据链路层的以太网传送,加上首部和尾部共18字节。试求数据的传输效率。数据的传输效率是指发送的应用层数据除以所发送的总数据(即应用数据加上各种首部和尾部的额外开销)。若应用层数据长度为1000字节,数据的传输效率是多少?

解答:数据长度为100 B ( B 表示字节)时,以太网的帧长为:100+20+20+18=158 B 数据传输效率=100B/(158B)=63.29%≥63.3%
数据长度为1000 B 时,以太网的帧长为:1000+20+20+18=1058 B 传输效率=1000 B /(1058 B )=94.52%~94.5%。传输效率明显提高了。

【1-20】网络体系结构为什么要采用分层次的结构?试举出一些与分层体系结构的思想相似的日常生活的例子。

解答:网络体系结构采用分层次的结构,是因为"分层"可以把庞大而复杂的问题转化为若干较小的局部问题,而这些较小的局部问题比较易于研究和处理。
在日常生活中,经常会遇到与分层体系结构的思想相似的情况。例如, A 有一个急件要尽快地交付到远地(例如,在美国)的友人 B 。如果 A 自己买机票亲自送去,那么这就是一个不分层的交付。

实际上,快递公司还可以继续划分自己公司的层次。更重要的是,快递公司可以使用非本公司的运输工具。也就是说,把快件的运输交给其他公司来承担。而这一点,对用户 A 和 B 来说,都是透明的。用户 A 和 B 并不知道快件是由哪个运输部门传送的(也不必要知道)。这就是分层带来的好处。
总之,划分层次可以把复杂的问题划分成多个比较简单的较小的问题。这样做实现起来比较方便,也比较容易分工协作。

【1-21】协议与服务有何区别?有何关系?

解答:为进行网络中的数据交换而建立的规则、标准或约定称为网络协议,简称为协议。网络协议是计算机网络不可缺少的组成部分。
协议是控制两个对等实体(或多个实体)进行通信的规则的集合。协议的语法方面的规则定义了所交换的信息的格式,而协议的语义方面的规则定义了发送者或接收者所要完成的操作。
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。
协议和服务在概念上是很不一样的。
首先,协议的实现保证了能够向上一层提供服务。使用本层服务的实体只能看见服务而无法看见下面的协议。下面的协议对上面的实体是透明的。
其次,协议是"水平的",即协议是控制对等实体之间通信的规则。但服务是"垂直的",即服务是由下层向上层通过层间接口提供的。另外,并非在一个层内完成的全部功能都称为服务,只有那些能够被高一层实体"看得见"的功能才能称为"服务"。

【1-22】网络协议的三个要素是什么?各有什么含义?

解答:网络协议主要由以下三个要素组成:(1)语法,即数据与控制信息的结构或格式。(2)语义,即需要发出何种控制信息,完成何种动作以及做出何种响应。
(3)同步,即事件实现顺序的详细说明。

【1-23】为什么一个网络协议必须把各种不利的情况都考虑到?

解答:如果一个网络协议只考虑了一些正常的、有利的情况,那么当各种情况都很正常时,这种协议当然能够顺利地工作。但是,情况不可能永远都是正常的,总有一些时候会出现异常情况。我们知道,出现异常情况的概率一般是不大的,但这并非绝对不可能出现。因此,如果网络协议没有考虑到一些不利情况(这些当然都是小概率事件),那么一旦这些不利情况出现,协议就会失败。

【1-24】试述具有五层协议的网络体系结构的要点,包括各层的主要功能。

解答:我们知道, OSI 的体系结构是七层协议。 TCP / AP 的体系结构是四层协议,而真正有具体内容的只是上面三层。在学习计算机网络的原理时往往采取折中的办法,即综合 OSI 和 TCP / IP 的优点,采用一种有五层协议的体系结构。图 T -1-24给出了五层协议的结构。

这五层协议的主要功能如下。
(1)物理层﹣﹣在物理层上所传数据的单位是比特( bit )。物理层的任务就是透明地传送比特流。物理层还要确定连接电缆的插头应当有多少根引脚以及各条引脚应如何连接。当然,哪几个比特代表什么意思,则不是物理层所要管的。请注意,传递信息所利用的一些物理媒体,如双绞线、同轴电缆、光缆、无线信道等,并不在物理层协议之内而是在物理层协议的下面。因此也有人把物理媒体当作第0层。
(2)数据链路层﹣﹣常简称为链路层。在两个相邻节点之间(主机和路由器之间或两个路由器之间)传送数据是直接传送的(即不需要经过转发的点对点通信)。这时就需要使用专门的链路层的协议。数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上"透明"地传送帧中的数据。每一帧包括数据和必要的控制信息(如同步信息、地址信息、差错控制等)。
在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提取出数据部分,上交给网络层。
控制信息还使接收端能够检测到所收到的帧中有无差错。如发现有差错,数据链路层就简单地丢弃这个出了差错的帧,以免继续传送下去白白浪费网络资源。如果需要改正错误,就由运输层的 TCP 协议来完成。
(3)网络层﹣﹣网络层负责为分组交换网上的不同主机提供通信服务。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组或包进行传送。在 TCP / IP 体系中,由于网络层使用 IP 协议,因此分组也叫作 IP 数据报,简称为数据报。
网络层的另一个任务就是选择合适的路由,使源主机运输层所传下来的分组能够通过网络中的路由器找到目的主机。
对于由广播信道构成的分组交换网,路由选择的问题很简单,因此这种网络的网络层非常简单,甚至可以没有。
(4)运输层﹣﹣运输层的任务就是向两个主机中进程之间的通信提供服务。由于一个主机可同时运行多个进程,因此运输层有复用和分用的功能。复用就是多个应用层进程同时使用下面运输层的服务,分用则是运输层把收到的信息分别交付上面应用层中相应的进程。
运输层主要使用以下两种协议:一个是传输控制协议 TCP ,是面向连接的,数据传输的单位是报文段,能够提供可靠的交付。另一个是用户数据报协议 UDP ,是无连接的,数据传输的单位是用户数据报,不保证提供可靠的交付,只能提供"尽最大努力交付"。
(5)应用层﹣﹣应用层是体系结构中的最高层。应用层直接为用户的应用进程提供服务。这里的进程就是指正在运行的程序。互联网中的应用层协议很多,如支持万维网应用的 HTTP 协议、支持电子邮件的 SMTP 协议、支持文件传送的 FTP 协议,等等。

【1-25】试举出日常生活中有关"透明"这一名词的例子。

解答:"透明"表示:某一个实际存在的事物看起来却好像不存在一样(例如,你看不见在你前面有100%透明的玻璃存在)。"在数据链路层透明传送数据"表示无论什么样的比特组合的数据都能够通过这个数据链路层。因此,对所传送的数据来说,这些数据就"看不见"数据链路层。或者说,数据链路层对这些数据来说是透明的。
在日常生活中,打电话就是一种透明传输。假定 A 和 B 通电话。 A 说, B 听。 A 所发送的所有话音信号,都能够通过电话传输系统传送到 B 。只要是符合电话传输标准的电话系统, B 都能听清楚 A 所说的话。
又如,银行给储户的利息是非常透明的。这就是说,根据银行的公告,储户就能够很准确地知道自己将能够获得多少利息(取决于储户存款的种类和期限)。但银行如何处理储户的存款(贷款给什么人?投资到什么地方去?),则对储户是不透明的,即储户看不见这些信息,好像被什么东西挡住了。

【1-26】试解释以下名词:协议栈、实体、对等层、协议数据单元、服务访问点、客户、服务器、客户﹣服务器方式。

解答:各名词含义如下。
协议栈:由于计算机网络的体系结构采用了分层结构,因此不论是在主机中还是在路由器中协议都有好几层。这些一层一层的协议画起来很像堆栈的结构,因此就把这些协议层称为协议栈。
实体:表示任何可发送或接收信息的硬件或软件进程。在许多情况下,实体就是一个特定的软件模块。
对等层:在网络体系结构中,通信双方实现同样功能的层。例如, A 向 B 发送数据,那么 A 的第 n 层和 B 的第 n 层就构成了对等层。
协议数据单元:通常记为 PDU ,它是对等实体之间进行信息交换的数据单元。
服务访问点:通常记为 SAP ,在同一系统中相邻两层的实体进行交互(即交换信息)的地方,通常称为服务访问点。
客户:在计算机网络中进行通信的应用进程中的服务请求方。
服务器:在计算机网络中进行通信的应用进程中的服务提供方。但在很多情况下,服务器也常指运行服务器程序的机器。
客户﹣服务器方式:这种方式所描述的是进程之间服务的请求方和服务的提供方的关系。服务的请求方是主动进行通信的一方,而服务器是被动接受通信的一方。系统启动后即自动调用服务器程序,并一直不断地运行着,被动地等待并接收来自各地的客户的通信请求。客户与服务器的通信关系建立后,通信可以是双向的,客户和服务器都可发送和接收数据。关于客户﹣服务器方式更详细的解释,见前面的1-13题。

【1-27】试解释 everything over IP 和 IP over everything 的含义。

解答: TCP / IP 协议可以为各式各样的应用提供服务。从协议栈来看,在 IP 层上面可以有很多应用程序。这就是 everything over IP .

另一方面, TCP / IP 协议也允许 IP 协议在各式各样的网络构成的互联网上运行。在 IP 层以上看不见下层究竟是什么样的物理网络。这就是 IP over everything 。

【1-28】假定要在网络上传送1.5MB的文件。设分组长度为1KB,往返时间 RTT =80 ms .传送数据之前还需要有建立 TCP 连接的时间,这时间是2 x RTT =160 ms 。试计算在以下几种情况下接收方收完该文件的最后一个比特所需的时间。

(1)数据发送速率为10 Mbit / s ,数据分组可以连续发送。(2)数据发送速率为10 Mbit / s ,但每发送完一个分组后要等待一个 RTT 时间才能再发送下一个分组。
(3)数据发送速率极快,可以不考虑发送数据所需的时间。但规定在每一个 RTT 往返时间内只能发送20个分组。
(4)数据发送速率极快,可以不考虑发送数据所需的时间。但在第1个 RTT 往返时间内只能发送1个分组,在第2个 RTT 内可发送2个分组,在第3个 RTT 内可发送4个分组(即23-1=22=4个分组)(这种发送方式见教材第5章" TCP 的拥塞控制"部分)。

解答:题目的已知条件中的 M =220=1048576, K =210=1024。
(1)1.5 MB =1.5x1048576 B =1.5x1048576 x 8 bit =12582912 bit 。发送这些比特所需时间=12582912/10’=1.258 s
最后一个分组的传播时间还需要0.5 xRTT =40 ms .
总共需要的时间=2x RTT +1.258+0.5 x RTT =0.16+1.258+0.04=1.458 s
(2)需要划分的分组数=1.5 MB /1KB=1536。
第一个分组以后的1535个分组需要等待的时间是:1535xRTT=1535 x 0.08=122.8 S .因此本题总共需要的时间=1.458+122.8=124.258 S .
(3)在每一个 RTT 往返时间内只能发送20个分组。1536个分组,需要76个 RTT (76个 RTT 可以发送76 x 20=1520个分组),最后剩下16个分组,一次发送完。但最后一次发送的分组到达接收方也需要0.5x RTT 。
因此,总共需要的时间=76.5 x RTT +2 xRTT =6.12+0.16=6.28
(4)在两个 RTT 后就开始传送数据。1.5 MB 共需1536个分组来传送。经过 n 个 RTT ,发送了1+2+4+…+2"-'=2"-1个分组。
若 n =10,那么只发送了210-1=1023个分组。可见10个 RTT 不够。
若 n =11,那么可发送2"-1=2047个分组。可见剩下的分组(513个分组)都可以在0.5 x RTT 的时间内到达接收方。
因此,接收方收到该文件最后一个比特所需的时间=(2+10+0.5) xRTT =12.5 x 0.08=1 s .

【1-29】有一个点对点链路,长度为50 km 。若数据在此链路上的传播速率为2x10m/ s ,

试问链路的带宽应为多少才能使传播时延和发送100字节的分组的发送时延一样大?如果发送的是512字节长的分组,结果又应如何?
解答:整条链路的传播时延是50 km /(2 x 10 m / s )=250μ s .
如果在250μ s 把100字节发送完,则发送速率应为800 bit /(250 us )=3.2 Mbit / s 。这也是链路带宽应有的数值。
如果改为发送512字节的分组,则发送速率应为512 x 8 bit /(250μ s )=16.38 Mbit / s 。这也是链路带宽应有的数值。

【1-30】有一个点对点链路,长度为20000 km 。数据的发送速率是1 kbit / s ,要发送的数据有100 bit 。数据在此链路上的传播速度为2 x 10 m / s 。假定我们可以看见在线路上传输的比特,试画出我们看到的线路上的比特(画两张图,一张是在100 bit 刚刚发送完时,另一张是再经过0.05s后)。

解答:100 bit 的发送时间=100 bit /(1000 bit / s )=0.1 S .
如图 T -1-30所示,0.1秒的时间可以传播20000 km ,正好是线路的长度。因此,当发送的第一个比特到达终点时,发送方也正好把100 bit 发送完毕,整个线路上都充满了所传输的100 bit 。


再经过0.05 s 后,所有的比特都向前走了10000 km 。这就是说,发送的前50 bit 已经到达终点了,剩下的50 bit 还在线路上传播。最后一个比特正好走了一半(10000 km ),在线路的正中间。

【1-31】条件同上题,但数据的发送速率改为1Mbit/ s 。和上题的结果相比较,你可以得出什么结论?

解答:100 bit 的发送时间=100 bit /(1000000 bit / s )=0.0001 s ,只有上一题的千分之一。如图 T -1-31所示,0.0001秒的时间可以传播20km,只有线路长度的千分之一。因此现在整个100 bit 都在线路靠发送端的位置(图没有按比例画)。


再经过0.05 s 后,所有的比特都向前走了10000 km 。这时,整个100 bit 都在线路上传播。最后一个比特正好走了一半(10000 km ),在线路的正中间。
和上题相比较,我们可以看出,同样是在一条线路上传送100 bit 的数据,在较低速的线路上(例如,1 kbit / s 的发送速率),100 bit 的数据看起来像是"数据流",而在较高速的线路上(例如,1 Mbit / s 的发送速率),100 bit 的数据看起来像是"小分组"。

【1-32】以1Gbit/ s 的速率发送数据。试问在以距离或时间为横坐标时,一个比特的宽度分别是多少?

解答:当我们在某一个位置上观察信号随时间的变化规律时,我们往往需要以时间为横坐标来看信号的变化。当以1 Gbit / s 的速率发送数据时,每一个比特的持续时间是10~’ s ,也就是0.001μ s =1 ns ( ns 表示纳秒,即10’ s )。因此,在以时间为横坐标的图上,每一个比特的宽度是1 ns (见图 T -1-32上面的一个)。

现在看以时间为横坐标的情况。
假定信号在线路上的传播速度是2x10* m / s (即2/3的光速),那么在一个比特时间内(即10s)信号可以前进20 cm 。图 T -1-32中下面的一个即表示这种情况–当时间为某一数值时信号在线路上的"快照"。请注意,这两种表示信号的方法都很有用,但这两个横坐标的量纲不同,我们不能说哪一个信号更宽一些或更窄一些。这样相比是没有意义的。

【1-33】我们在互联网上传送数据经常是从某个源点传送到某个终点,而并非传送过去又再传送回来。那么为什么往返时间 RTT 是个很重要的性能指标呢?

解答:我们在传送数据时,经常要使用 TCP 协议。 TCP 连接的建立需要消耗时间,这与 RTT 有密切关系(在教材第5章中有详细讲述)。在传输数据时也常常需要对方的确认。在发送数据后要经过多少时间才能收到对方的确认,这也取决于往返时间 RTT 的大小。
另外,在计算吞吐率时,有时也要考虑到往返时间 RTT 。例如,一个10字节的文件在1 Gbit / s 的发送速率下,发送只需要8 ms 。但如果我们通过网络向远方某个主机请求把这样大的文件发送过来, RTT =100 ms ,那么总共需要的时间至少为100+8=108 ms ,是原来发送时间的十几倍。

【1-34】主机 A 向主机 B 发送一个长度为10’比特的报文,中间要经过两个节点交换机,即一共经过三段链路。设每段链路的传输速率为2Mbit/ s 。忽略所有的传播、处理和排队时延。

(1)如果采用报文交换,即整个报文不分段,每台节点交换机收到整个的报文后再转发。问从主机 A 把报文传送到第一个节点交换机需要多少时间?从主机 A 把报文传送到主机 B 需要多少时间?
(2)如果采用分组交换。报文被划分为1000个等长的分组(这里忽略分组首部对本题计算的影响),并连续发送。节点交换机能够边接收边发送。问从主机 A 把第一个分组传送到第一个节点交换机需要多少时间?从主机 A 把第一个分组传送到主机 B 需要多少时间?从主机 A 把1000个分组传送到主机 B 需要多少时间?
(3)就一般情况而言,比较用整个报文来传送和划分多个分组传送的优缺点。

解答:(1) A 把报文传送到第一个节点交换机需要的时间=10’+(2x109=5s.主机 A 把报文传送到主机 B 要经过3段链路,因此需要3x5=15s.

(2)报文被划分为1000个分组,每个分组的长度为10000 bit 。
A 发送一个分组所需的时间=10*+(2 x 10)=0.005s。这也是 A 把第一个分组传送到第一个节点交换机需要的时间。
A 把第一个分组传送到 B 需要的时间=3 x 0.005=0.015s。
A 把1000个分组传送到 B 需要的时间=0.015+999 x 0.005=5.01s.
(3)一般来讲,使用分组传送会更快些。如果整个报文存储转发,只要其中有一个比特出错,整个报文就必须重传,这很浪费网络资源。使用分组交换,只需要重传出了差错的那个分组即可。在复杂的网络中,使用分组交换还可以使有些分组通过不太拥塞的路径传送,这就加快了数据的传输。但在使用分组交换时,在目的主机所收到的分组中,只要缺少了一个,就无法重装成原来的报文,这就使所收到的分组都没有用处。此外,分组首部造成的开销有时并不能忽略不计。

【1-35】主机 A 向 B 连续传送一个600000 bit 的文件。 A 和 B 之间有一条带宽为1Mbit/ s 的链路相连,距离为5000 km ,在此链路上的传播速率为2.5 x 10m/ s .(1)链路上的比特数目的最大值是多少?(2)链路上每比特的宽度(以米来计算)是多少?(3)若想把链路上每比特的宽度变为5000 km (即整条链路的长度),这时应把发送速率调整到什么数值?

解答:(1)传播时延=链路长度+传播速率=5x10° m +2.5x10m/ s =0.02s.时延带宽积=0.02s x 10 bit / s =2 x 10 bit .
由于文件长度大于这个时延带宽积,因此链路上的比特数目的最大值是2 x 10* bit 。如果文件长度只有2000 bit ,那么链路上的比特数目的最大值就是2000 bit 。
(2)链路上每比特的宽度=传播速率÷发送速率-传播速率-链路带宽即每比特的宽度为250 m 。
(3)发送速率=传播速率-链路上每比特的宽度
=2.5x10 m / s ÷5 x 10m/ bit =50 bit / s .
当发送速率调整为50 bit / s 时,链路上每比特的宽度正好等于5000 km =2.5 x 10 m / s ÷10 bit / s =250 m / bit ,

【1-36】主机 A 到主机 B 的路径上有三段链路,其速率分别为2 Mbit / s ,1 Mbit / s 和500 kbit / s .现在 A 向 B 发送一个大文件。试计算该文件传送的吞吐量。设文件长度为10MB,而网络上没有其他的流量。试问该文件从 A 传送到 B 大约需要多少时间?为什么这里只是计算大约的时间?

解答:文件传送的吞吐量由瓶颈链路决定。因此吞吐量是500 kbit / s 。
文件长度为10 MB 。但文件长度的 M 不是10而是220。1 B =8 bit 。因此文件长度为10 x 2 x 220 bit =20971520 bit
文件的传送时间=文件长度+吞吐量=20971520+500 kbit / s =41.94 s ,即约为42 s .这就是大约的传送时间,因为有很多细节都没有考虑,如划分为多大的分组、每个分组首部的开销,在链路上的传播时延,在每个节点的处理时延和排队时延,等等。

React面试题(超详细,附答案)

生命周期

  • 组件将要挂载时触发的函数:componentWillMount

  • 组件挂载完成时触发的函数:componentDidMount

  • 是否要更新数据时触发的函数:shouldComponentUpdate

  • 将要更新数据时触发的函数:componentWillUpdate

  • 数据更新完成时触发的函数:componentDidUpdate

  • 组件将要销毁时触发的函数:componentWillUnmount

  • 父组件中改变了props传值时触发的函数:componentWillReceiveProps

shouldComponentUpdate 的作用?

shouldComponentUpdate 允许我们手动地判断是否要进行组件更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要的更新

React 中 keys 的作用是什么?

KeysReact 用于追踪哪些列表中元素被修改、被添加或者被移除的辅助标识

  • 在开发过程中,我们需要保证某个元素的 key 在其同级元素中具有唯一性。在 React Diff 算法中React 会借助元素的 Key 值来判断该元素是新近创建的还是被移动而来的元素,从而减少不必要的元素重渲染。此外,React 还需要借助 Key 值来判断元素与本地状态的关联关系,因此我们绝不可忽视转换函数中 Key 的重要性

(组件的)状态(state)和属性(props)之间有何不同?

  • State 是一种数据结构,用于组件挂载时所需数据的默认值。State 可能会随着时间的推移而发生突变,但多数时候是作为用户事件行为的结果

  • Props(properties 的简写)则是组件的配置。props 由父组件传递给子组件,并且就子组件而言,props 是不可变的(immutable)。组件不能改变自身的 props,但是可以把其子组件的 props 放在一起(统一管理)。Props 也不仅仅是数据--回调函数也可以通过 props 传递。

何为受控组件(controlled component)?

在 HTML 中,类似 <input/>, <select><textarea> 这样的表单元素会维护自身的状态,并基于用户的输入来更新。当用户提交表单时,前面提到的元素的值将随表单一起被发送。但在 React 中会有些不同,包含表单元素的组件将会在 state 中追踪输入的值,并且每次调用回调函数时,如 onChange 会更新 state,重新渲染组件。一个输入表单元素,它的值通过 React 的这种方式来控制,这样的元素就被称为"受控元素"。

展示组件(Presentational component)(也叫 UI 组件)和容器组件(Container component)(负责应用逻辑处理)之间有何不同

  • 展示组件(UI 组件)

    • 负责展示 UI,也就是组件如何渲染,具有很强的内聚性

    • 只关心得到数据后如何渲染

  • 容器组件(逻辑组件)

    • 负责应用逻辑处理,发送网络请求,处理返回数据,将处理过的数据传递给展示组件

    • 也提供修改数据源的方法,通过展示组件的props传递给展示组件

    • 当展示组件的状态变更引起源数据变化时,展示组件通过调用容器组件提供的方法同步这些变化

react-router的原理

  • BrowserRouterHashRouter 用来渲染Router所代表的组件

    • BrowserRouter --浏览器路由(属于后端路由) 会有一个#,通过这个# HTML 5 History进行前端跳转他的感觉像锚点

    • HasRouter --前端has路由(属于前端路由)很简洁没有#,但是需要 server 端支持

  • Route 用来匹配组件路径并且筛选需要渲染的组件

  • Switch 用来筛选需要渲染的唯一组件

  • Link 直接渲染某个页面组件

  • Redirect 类似于Link,在没有Route匹配成功时触发

何为高阶组件(HOC)?

高阶组件 其实就是一个函数而已,只不过参数是一个组件而已,返回了一个新的组件

复用组件的业务逻辑 react-redux connect 其实就是一个高阶组件

HOC 是纯函数,没有副作用 ------纯函数:输入确定,输出就一定确定

了解 redux 么,说一下 redux

  • redux 是一个应用数据流框架,主要是解决了组件间状态共享的问题,原理是集中式管理

  • 主要有三个核心方法,actionstorereducer

  • 工作流程是 view 调用 store 的 dispatch 接收 action 传入 store,reducer 进行 state 操作,view 通过 store 提供的 getState 获取最新的数据

  • 新增 state,对状态的管理更加明确,通过 redux,流程更加规范了,减少手动编码量,提高了编码效率,同时缺点时当数据更新时有时候组件不需要,但是也要重新绘制,有些影响效率。一般情况下,我们在构建多交互,多数据流的复杂项目应用时才会使用它们

redux中间件的理解,以及用过哪些中间件

  • redux-thunk:处理异步操作

  • redux-saga:处理异步操作

  • redux-promise:处理异步操作,actionCreator 的返回值是promise

Redux 遵循的三个原则是什么?

  • 单一事实来源:整个应用程序的状态存储在单个存储中的对象/状态树中

  • 状态是只读的:更改状态的惟一方法是触发一个动作

  • 使用纯函数来修改state:为了描述 action 如何改变 state tree ,你需要编写reducers

React , redux 可以运行在服务端吗?有什么优势

  1. 利于 SEO

  2. 提高首屏渲染速度

  3. 同构直出,使用同一份 JS 代码实现,便于开发和维护

react性能优化方案

  • 重写shouldComponentUpdate来避免不必要的 dom 操作

  • 使用 production 版本的react.js

  • 使用key来帮助React识别列表中所有子组件的最小变化

说说你用react有什么坑点?

  • JSX 做表达式判断时候,需要强转为boolean类型

  • 尽量不要在 componentWillReviceProps 里使用 setState,如果一定要使用,那么需要判断结束条件,不然会出现无限重渲染,导致页面崩溃

  • 遍历子节点的时候,不要用 index 作为组件的 key 进行传入

react 的虚拟 dom 是怎么实现的?

首先说说为什么要使用Virturl DOM,因为操作真实DOM的耗费的性能代价太高,所以react内部使用js实现了一套 dom 结构,在每次操作在和真实 dom 之前,使用实现好的 diff 算法,对虚拟 dom 进行比较,递归找出有变化的 dom 节点,然后对其进行更新操作。为了实现虚拟DOM,我们需要把每一种节点类型抽象成对象,每一种节点类型有自己的属性,也就是prop,每次进行diff的时候,react会先比较该节点类型,假如节点类型不一样,那么react会直接删除该节点,然后直接创建新的节点插入到其中,假如节点类型一样,那么会比较prop是否有更新,假如有prop不一样,那么react会判定该节点有更新,那么重渲染该节点,然后在对其子节点进行比较,一层一层往下,直到没有子节点

react diff 原理

  • 把树形结构按照层级分解,只比较同级元素

  • 给列表结构的每个单元添加唯一的 key 属性,方便比较

  • React 只会匹配相同 class 的 component(这里面的 class 指的是组件的名字)

  • 合并操作,调用 component 的 setState 方法的时候, React 将其标记为 dirty.到每一个事件循环结束, React 检查所有标记 dirty 的 component 重新绘制

  • 选择性子树渲染。开发人员可以重写 shouldComponentUpdate 提高 diff 的性能

react 的渲染过程中,兄弟节点之间是怎么处理的?也就是key值不一样的时候

我们必须给每一个元素添加 key 属性,大概的作用就是给每一个元素添加一个身份标识,方便react进行识别,在重渲染过程中,如果key一样,若组件属性有所变化,则react只更新组件对应的属性;没有变化则不更新,如果key不一样,则react先销毁该组件,然后重新创建该组件

react组件之间如何通信?

父子:父传子:props; 子传父:子调用父组件中的函数并传参; 兄弟:利用 redux 实现。 所有关系都通用的方法:利用PubSub.js订阅

setState 为什么是异步的

  1. 保证内部的一致性 (因为props是要等到父组件渲染过后才能拿到,也就是不能同步更新,state出于统一性设成异步更新)

  2. 性能优化 (举例说你正在一个聊天窗口输入,如果来了一条新消息又要render,那就会阻塞你的当前操作,导致延迟什么的)

  3. 支持state在幕后渲染(异步可以使state在幕后更新,而不影响你当前旧的页面的交互,提升用户体验)

react的优势以及特点

  • 优势

    • 实现对虚拟DOM的操作,使得它速度快,提高了Web性能

    • 组件化,模块化。react里每一个模块都是一个组件,组件化开发,可维护性高

    • 单向数据流,比较有序,有便于管理,它随着React视图库的开发而被 Facebook 概念化

    • 跨浏览器兼容:虚拟DOM帮助我们解决了跨浏览器问题,它为我们提供了标准化的 API,甚至在 IE8 中都是没问题的

  • 不足

    • react中只是 MVC 模式的View部分,要依赖引入很多其他模块开发

    • 当父组件进行重新渲染操作时,即使子组件的props或state没有做出任何改变,也会同样进行重新渲染

  • 特点

    • 声明式设计:React采用声明范式,可以轻松描述应用

    • 高效:React通过对DOM的模拟,最大限度地减少与DOM的交互

    • 灵活:React可以与已知的库或框架很好地配合

以上是关于课后题答案(超详细)的主要内容,如果未能解决你的问题,请参考以下文章

《计算机网络·自顶向下方法》第七版 第四章 课后习题与问题 答案

计算机网络第四章课后作业30题:一个大公司有一个总部和三个下属部门。公司分配到的网络前缀是192.77.33/24.

计算机网络——自顶向下方法(第六版) 课后题 第五章

计算机网络原理(谢希仁第八版)第五章课后习题答案

2022计算机考研_计算机网络第四章知识梳理:构造超网(无分类编址CIDR)

OSPF网络入门级路由协议超详细介绍