计算机网络常见问题与详解.docx
《计算机网络常见问题与详解.docx》由会员分享,可在线阅读,更多相关《计算机网络常见问题与详解.docx(83页珍藏版)》请在冰豆网上搜索。
计算机网络常见问题与详解
计算机网络常见问题与详解
参考书目:
谢希仁版的计算机网络(第5版)。
题目解答涉及到课本章节的请自行翻书。
第1章概述
问题1-1:
“主机”和“计算机”一样不一样?
答:
“主机”(host)就是“计算机”(computer),因此“主机”和“计算机”应当是一样意思。
不过在因特网中,“主机”是指任何连接在因特网上的(也就是连接在因特网中某一个物理网络上的)、可以运行应用程序的计算机系统。
主机可以小到PC机,也可以大到巨型机。
主机的CPU可以很慢也可以很快,其存储器可以很小也可以很大。
但TCP/IP协议族可以使因特网上的任何一对主机都能进行通信,而不管它们的硬件有多大区别。
问题1-2:
能否说:
“电路交换和面向连接是等同的,而分组交换和无连接是等同的”?
答:
不行。
这在概念上是很不一样的。
这点可举例说明如下。
电路交换就是在A和B要通信的开始,必须先建立一条从A到B的连接(中间可能经过很多的交换结点)。
当A到B的连接建立后,通信就沿着这条路径进行。
A和B在通信期间始终占用这条信道(全程占用),即使在通信的信号暂时不在通信路径上流动时(例如打电话时双方暂时停止说话),也是同样地占用信道。
通信完毕时就释放所占用的信道,即断开连接,将通信资源还给网络,以便让其他用户可以使用。
因此电路交换是使用面向连接的服务。
但分组交换也可以使用面向连接服务。
例如X.25网络、帧中继网络或ATM网络都是属于分组交换网。
然而这种面向连接的分组交换网在传送用户数据之前必须先建立连接。
数据传送完毕后还必须释放连接。
因此使用面向连接服务的可以是电路交换,也可以是分组交换。
使用分组交换时,分组在哪条链路上传送就占用了该链路的信道资源,但分组尚未到达的链路则暂时还不占用这部分网络资源(这时,这些资源可以让其他用户使用)。
因此分组交换不是全程占用资源而是在一段时间占用一段资源。
可见分组交换方式是很灵活的。
现在的因特网使用IP协议,它使用无连接的IP数据报来传送数据,即不需要先建立连接就可以立即发送数据。
当数据发送完毕后也不存在释放连接的问题。
因此使用无连接的数据报进行通信既简单又灵活。
面向连接和无连接是强调通信必须经过什么样的阶段。
面向连接必须经过三个阶段:
“建立连接→传送数据→释放连接”,而无连接则只有一个阶段:
“传送数据”。
电路交换和分组交换则是强调在通信时用户对网络资源的占用方式。
电路交换是在连接建立后到连接释放前全程占用信道资源,而分组交换则是在数据传送是断续占用信道资源(分组在哪一条链路上传送就占用该链路的信道资源)。
面向连接和无连接往往可以在不同的层次上来讨论。
例如,在数据链路层,HDLC和PPP协议是面向连接的,而以太网使用的CSMA/CD则是无连接的(见教材4.2.1节)。
在网络层,X.25协议是面向连接的,而IP协议则是无连接的。
在运输层,TCP是面向连接的,而UDP则是无连接的。
但是我们却不能说:
“TCP是电路交换”,而应当说:
“TCP可以向应用层提供面向连接的服务”。
可参考教材中5.1.2节更进一步的讨论。
问题1-3:
因特网使用的IP协议是无连接的,因此其传输是不可靠的。
这样容易使人们感到因特网很不可靠。
那么为什么当初不把因特网的传输设计成为可靠的?
答:
这个问题很重要,需要多一些篇幅来讨论。
先打一个比方。
邮局寄送的平信很像无连接的IP数据报。
每封平信可能走不同的传送路径,同时平信也不保证不丢失。
当我们发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。
邮局会说:
“平信不保证不丢失。
怕丢失就请你寄挂号信”。
但是大家并不会将所有的信件都用挂号方式邮寄,这是因为邮局从来不会随意地将平信丢弃,而丢失平信的概率并不大,况且寄挂号信要多花3元钱,还要去邮局排队,太麻烦。
总之,尽管寄平信有可能会丢失,但绝大多数的信件还是平信,因为寄平信方便、便宜。
我们知道,传统的电信网的最主要的用途是进行电话通信。
普通的电话机很简单,没有什么智能。
因此电信公司就不得不把电信网设计得非常好,这种电信网可以保证用户通话时的通信质量。
这点对使用非常简单的电话机的用户则是非常方便的。
但电信公司为了建设能够确保传输质量的电信网则付出了巨大的代价(使用昂贵的程控交换机和网管系统)。
数据的传送显然必须是非常可靠的。
当初美国国防部在设计ARPANET时有一个很重要的讨论内容就是:
“谁应当负责数据传输的可靠性?
”这时出现了两种对立的意见。
一种意见是主张应当像电信网那样,由通信网络负责数据传输的可靠性(因为电信网的发展历史及其技术水平已经证明了人们可以将网络设计得相当可靠)。
但另一种意见则坚决主张由用户的主机负责数据传输的可靠性。
这里最重要的理由是:
这样可以使计算机网络便宜、灵活,同时还可以满足军事上的各种特殊的需求。
下面用一个简单例子来说明这一问题。
设主机A通过因特网向主机B传送文件(如下图所示)。
怎样才能实现文件数据的可靠传输呢?
如按照电信网的思路,就是设法(这需要花费相当多的钱)将不可靠的因特网做成为可靠的因特网。
但设计计算机网络的人采用另外一种思路,即设法实现端到端的可靠传输。
提出这种思路的人认为,计算机网络和电信网的一个重大区别就是终端设备的性能差别很大。
电信网的终端是非常简单的、没有什么智能的电话机。
因此电信网的不可靠必然会严重地影响人们利用电话的通信。
但计算机网络的终端是有很多智能的主机。
这样就使得计算机网络和电信网有两个重要区别。
第一,即使传送数据的因特网有一些缺陷(如造成比特差错或分组丢失),但具有很多智能的终端主机仍然有办法实现可靠的数据传输(例如,能够及时发现差错并通知发送方重传刚才出错的数据)。
第二,即使网络可以实现100%地无差错传输,端到端的数据传输仍然有可能出现差错。
为了说明这点,我们可以用一个简单例子来说明这个问题。
这就是主机A向主机B传送一个文件的情况。
文件是通过一个文件系统存储在主机A的硬盘中。
主机B也有一个文件系统,用来接收和存储从A发送过来的文件。
应用层使用的应用程序现在就是文件传送程序,这个程序一部分在主机A运行,另一部分在主机B运行。
现在讨论文件传送的大致步骤。
(1)主机A的文件传送程序调用文件系统将文件从硬盘中读出。
然后文件系统将文件传递给文件传送程序。
(2)主机A请求数据通信系统将文件传送到主机B。
这里包括使用一些通信协议和将数据文件划分为适当大小的分组。
(3)通信网络将这些数据分组逐个传送给主机B。
(4)在主机B,数据通信协议将收到的数据传递给文件传送应用程序在主机B运行的那一部分。
(5)在主机B,文件传送程序请求主机B的文件系统将收到的数据写到主机B的硬盘中。
在以上的几个步骤中,都存在使数据受到损伤的一些因素。
例如:
(1)虽然文件原来是正确写在主机A的硬盘上,但在读出后就可能出现差错(如在磁盘存储系统中的硬件出现了故障)。
(2)文件系统、文件传送程序或数据通信系统的软件在对文件中的数据进行缓存或复制的过程中都有可能出现故障。
(3)主机A或B的硬件处理机或存储器在主机A或B进行数据缓存或复制的过程中也有可能出现故障。
(4)通信系统在传输数据分组时有可能产生检测不出来的比特差错或甚至丢失某些分组。
(5)主机A或B都有可能在进行数据处理的过程中突然崩溃。
由此可看出,即使对于这样一个简单的文件传送任务,仅仅使通信网络非常可靠并不能保证文件从主机A硬盘到主机B硬盘的传送是可靠的。
也就是说,花费很多的钱将通信网络做成为非常可靠的,对传送计算机数据来说是得不偿失的。
既然现在的终端设备有智能,就应当把网络设计得简单些,而让具有智能的终端来完成“使传输变得可靠”的任务。
于是,计算机网络的设计者采用了一种策略,这就是“端到端的可靠传输”。
更具体些,就是在运输层使用面向连接的TCP协议,它可保证端到端的可靠传输。
只要主机B的TCP发现了数据的传输有差错,就告诉主机A将出现差错的那部分数据重传,直到这部分数据正确传送到主机B为止(见第5章)。
而TCP发现不了数据有差错的概率是很小的。
采用这样的建网策略,既可以使网络部分价格便宜和灵活可靠,又能够保证端到端的可靠传输。
这样,我们可以这样想像,将因特网的范围稍微扩大一些,即扩大到主机中的运输层(请参考前面的图)。
由于运输层使用了TCP协议,使得端到端的数据传输成为可靠的,因此这样扩大了范围的因特网就成为可靠的网络。
因此,说“因特网提供的数据传输是不可靠的”或“因特网提供的数据传输是可靠的”这两种说法都可以在文献中找到,问题是是怎样界定因特网的范围。
如果说因特网提供的数据传输是不可靠的,那么这里的因特网指的是不包括主机在内的网络(仅有下三层)。
说因特网提供的数据传输是可靠的,就表明因特网的范围已经扩大到主机的运输层。
再回到通过邮局寄平信的例子。
当我们寄出一封平信后,可以等待收信人的确认(通过他的回信)。
如果隔了一些日子还没有收到回信,我们可以将该信件再寄一次。
这就是将“端到端的可靠传输”的原理用于寄信的例子。
问题1-4:
在具有五层协议的体系结构中,如果下面的一层使用面向连接服务或无连接服务,那么在上面的一层是否也必须使用同样性质的服务呢?
或者说,是否我们可以在各层任意使用面向连接服务或无连接服务呢?
答:
实际上,在五层协议栈中,并非在所有的层次上都存在这两种服务方式的选择问题。
在网络层由于现在大家都使用IP协议,它只提供一种服务,即无连接服务。
在使用IP协议的网络层的下面和上面,都可以使用面向连接服务或无连接服务。
已经过时的OSI体系结构在网络层使用面向连接的X.25协议。
但在因特网成为主流计算机网络后,即使还有很少量的X.25网在使用,那也往往是在X.25协议上面运行IP协议,即IP网络把X.25网当作一种面向连接的链路使用(见教材5.1.2节的讨论)。
在网络层下面的数据链路层可以使用面向连接服务(如使用拨号上网的PPP协议,见教材3.6节),即IP可运行在面向连接的网络之上。
但网络层下面也可以使用无连接服务(如使用以太网,见教材4.2节),即IP可运行在无连接网络之上。
网络层的上面是运输层。
运输层可以使用面向连接的TCP,也可以使用无连接的UDP。
问题1-5:
在运输层应根据什么原则来确定应当使用面向连接服务还是无连接服务?
答:
根据上层应用程序的性质。
例如,在传送文件时要使用文件传送协议FTP,而文件的传送必须是可靠的,因此在运输层就必须使用面向连接的TCP协议。
但是若应用程序是要传送分组话音或视频点播信息,那么为了要保证信息传输的实时性,在运输层就必须使用无连接的UDP协议(见教材10.1节)。
另外,选择TCP或UDP时还需考虑对连接资源的控制。
若应用程序不希望在服务器端同时建立太多的TCP连接时,可考虑采用UDP。
问题1-6:
在数据链路层应根据什么原则来确定应当使用面向连接服务还是无连接服务?
答:
在设计硬件时就能够确定。
例如,若采用拨号电路,则数据链路层将使用面向连接服务。
但若使用以太网,则数据链路层使用的是无连接服务。
问题1-7:
TCP/IP的体系结构到底是四层还是五层?
答:
在一些书籍和文献中的确见到有这两种不同的说法。
能否这样理解:
四层或五层都关系不大。
因为TCP/IP体系结构中最核心的部分就是靠上面的三层:
应用层、运输层和网络层。
至于最下面的是一层——网络接口层,还是两层——网络接口层和物理层,这都不太重要,因为TCP/IP本来就没有为网络层以下的层次制定什么标准。
TCP/IP的思路是:
形成IP数据报后,只要交给下面的网络去发送就行了,不必再考虑得太多。
用OSI的概念,将下面的两层称为数据链路层和物理层是比较清楚的。
问题1-8:
我们常说“分组交换”。
但又常说“路由器转发IP数据报”或“路由器转发帧”。
究竟“分组”一词应当用在什么场合?
答:
“分组”(packet)也就是“包”,它是一个不太严格的名词,意思是将若干个比特加上首部的控制信息就封装在一起,组成一个在网络上传输的数据单元。
在数据链路层这样的数据单元叫做“帧”。
而在IP层(即网络层)这样的数据单元就叫做“IP数据报”。
在运输层这样的数据单元就叫做“TCP报文段”或“UDP用户数据报”。
但在不需要十分严格和不致弄混的情况下,有时也都可笼统地采用“分组”这一名词。
这点请读者注意。
OSI为了使数据单元的名词准确,就创造了“协议数据单元”PDU这一名词。
在数据链路层的PDU叫做DLPDU,即“数据链路协议数据单元”。
在网络层的PDU叫做“网络协议数据单元”NPDU。
在运输层的PDU叫做“运输协议数据单元”TPDU。
虽然这样做十分严格,但过于繁琐,现在已没有什么人愿意使用这样的名词。
问题1-9:
到商店购买可一个希捷公司生产的80G的硬盘。
安装到电脑上以后用WINDOWS的资源管理器发现在该磁盘的“属性”中只有74.5G。
是不是商店出了差错?
答:
不是。
这个因为希捷公司的硬盘标记中的G表示109,而微软公司WINDOWS软件中的G表示230。
74.5´230=80´109。
即希捷的80G和微软的74.5G相等。
问题1-10:
有这样的说法:
习惯上,人们都将网络的“带宽”作为网络所能传送的“最高数据率”的同义语。
这样的说法有何根据?
答:
我还没有找到这种说法出自哪一个国际标准文件或重要的RFC文件(欢迎读者告诉我)。
但是在一些著名国外教材中可以找到类似的说法。
例如,
在本书附录C的[PETE00]一书的第18页上写着:
Ifyouseetheword“bandwidth”usedinasituationinwhichitisbeingmeasuredinhertz,thenitprobablyreferstotherangeofsignalsthatcanbeaccommodated.
Whenwetalkaboutthebandwidthofacommunicationlink,wenormallyrefertothenumberofbitspersecondthatcanbetransmittedonthelink.
又如附录C中的[COME04]一书的第245页上有这样两句话:
Throughputisameasureoftherateatwhichdatacanbesentthroughthenetwork,andisusuallyspecifiedinbitspersecond(bps).…Infact,thetermbandwidthissometimesusedasasynonymforthroughput.
问题1-11:
有时可听到人们将“带宽为10Mb/s的以太网”说成是“速率(或速度)为10Mb/s的以太网”或“10兆速率(或速度)的以太网”。
试问这样的说法正确否?
答:
这种说法的确在网络界很常见。
例如,当10Mb/s以太网升级到100Mb/s时,这种100Mb/s的以太网就称为快速以太网,表明速率提高了。
当调制解调器每秒能够传送更多的比特时就称为高速调制解调器。
当网络中的链路带宽增加时,也常说成是链路的速率提高了。
因此在计算机网络领域,“速率”和“带宽”有时是代表同样的意思。
但我们必须对网络的“速度”有正确的理解。
。
我们早已在物理课程中学过,速率(或速度)的单位是“米/秒”。
我们谈到“高速火车”是指这种火车在单位时间内行驶的距离增大了。
但“网络提速”并不是指信号在网络上传播得更快了(更多的“米/秒”),而是说网络的传输速率(更多的“比特/秒”)提高了。
这里特别要注意,“传播”(propagation或propagate)和“传输”(transmission或transmit)这两个中文名词仅一字之差,但意思却差别很大。
传播速率:
信号比特在传输媒体上的传播速率就是电磁波在单位时间内能够在传输媒体上的走多少距离。
这个速率大约只有电磁波在真空中的传播速率的2/3左右。
或者说,信号比特在传输媒体上1微秒可传播200米左右的距离。
传输速率:
计算机每秒钟可以向所连接的媒体或网络注入(也就是发送)多少个比特则是传输速率。
若计算机在单位时间内能够发送更多的比特也就是“发送速率提高了”,但一定要弄清,这里的“速率”指的“比特/秒”而不是指“米/秒(传播速率)”。
由此可见,当我们使用“速率”表示“比特/秒”时,就应当将其理解为主机向链路(或网络)发送比特的速率。
这也就是比特进入链路(或网络)的速率。
同理,传播时延和传输时延的意思也是完全不同的。
由于传输时延很容易和传播时延弄混,因此最好使用发送时延来代替传输时延这个名词。
请记住:
发送时延=传输时延传播时延
问题1-12:
有人说,宽带信道相当于高速公路车道数目增多了,可以同时并行地跑更多数量的汽车。
虽然汽车的时速并没有提高(这相当于比特在信道上的传播速率没有提高),但整个高速公路的运输能力却增多了,相当于能够传送更多数量的比特。
这种比喻合适否?
答:
可以这样比喻。
但一定不能误认为“提高信道的速率是设法使比特并行地传输”。
如果一定要用汽车在高速公路上跑和比特在通信线路上传输相比较,那么可以这样来想像。
低速信道相当于汽车进入高速公路的时间间隔较长。
例如,每隔一分钟有一辆汽车进入高速公路。
“信道速率提高”相当于进入高速公路的汽车的时间间隔缩短了,例如,现在每隔6秒钟就有一辆汽车进入高速公路。
虽然汽车在高速公路上行驶的速度没有变化,但在同样时间内,进入高速公路的汽车总数却增多了(每隔一分钟进入高速公路的汽车现在增加到10辆),因而吞吐量也就增大了。
下面给出一个图,可帮助理解这一概念。
假定一条链路的传播速率为2´108km/s。
这相当于电磁波在该媒体上1ms可向前传播200m。
若链路带宽为1Mb/s,则主机在1ms内可向链路发送1bit数据。
图中用横坐标表示距离(请注意,横坐标不是时间)。
当t=0时开始向链路发送数据。
这样,我们有:
当t=1ms时,信号传播到200m处。
注入到链路上1个比特。
当t=2ms时,信号传播到400m处。
注入到链路上共2个比特。
当t=3ms时,信号传播到600m处。
注入到链路上共3个比特。
现在将链路带宽提高到10倍,即达到10Mb/s。
这相当于1ms内可向链路发送10bit数据。
显然,发送速率提高了。
然而这些数据比特在链路上的传播速率(m/s)并没有任何变化,即传播速率仍然是200m/ms。
这点从图的上下两部分对比即可看出:
当t=1ms时,信号仍然是传播到200m处。
但注入到链路上已有10个比特。
当t=2ms时,信号仍然是传播到400m处。
但注入到链路上已有20个比特。
当t=3ms时,信号仍然是传播到600m处。
但注入到链路上已有30个比特。
也就是说,当带宽或发送速率提高后,比特在链路上向前传播的速率并没有提高,只是每秒钟注入到链路的比特数增加了。
“速率提高”就体现在单位时间内发送到链路上的比特数增多了,而并不是比特在链路上跑得更快。
问题1-13:
如果用时延带宽积管道来比作传输链路,那么是否宽带链路对应的时延带宽积管道就比较宽呢?
答:
对的。
我们可以用时延带宽积管道来表示传输链路。
可以将时延带宽积管道画成如下图所示的长方形管道,它的长度是时延,宽带是带宽。
对于前面的例子,时延以微秒(ms)作为单位,因此600m长度的链路相当于3ms长的管道。
管道的宽度是带宽,现在以Mb/s作为单位。
下图是在不同时间、链路带宽为不同数值时,时延带宽积管道中的比特填充情况。
图中上面的部分是链路带宽为1Mb/s的情况。
下面的部分是链路带宽为10Mb/s的情况。
对比这两部分就可看出,到链路速率提高到10倍时,时延带宽积管道的宽度也相应地增大到10倍。
对比图中的上、下两部分,我们可以看出:
当t=1ms时,管道中的比特数(即注入到链路上的比特数)分别为1bit和10bit。
当t=2ms时,管道中的比特数(即注入到链路上的比特数)分别为2bit和20bit。
当t=3ms时,管道中的比特数(即注入到链路上的比特数)分别为3bit和30bit。
问题1-14:
网络的吞吐量与网络的时延有何关系?
答:
本来吞吐量和时延是两个完全不同的概念,似乎它们应当是彼此无关的。
然而,吞吐量和时延却是密切相关的。
当网络的吞吐量增大时,分组在路由器中等待转换时就会经常处在更长的队列中,因而增加了排队的时间。
这样,时延就会增大。
当吞吐量进一步增加时,还可能产生网络的拥塞(见教材的5.3节)。
这时整个网络的时延将大大增加。
可见吞吐量与时延的关系是非常密切的。
这个问题可参考教材的附录A的图A-8。
问题1-15:
什么是“无缝的”、“透明的”和“虚拟的”?
答:
“无缝的”(seamless)用于网络领域时表示几个网络的互连对用户来说就好像是一个网络。
这是因为互连的各网络都使用统一的网际协议IP,都具有统一的IP地址,就好像所有网络上的主机和路由器都连接在一个大的互连网上。
用户看不见各个不同的网络相连接的“缝”,因此称这种连接为“无缝的”。
在这个意义上讲,“无缝的”和“透明的”意思很相近。
当“无缝的”用于计算机程序时,表示有几个程序联合起来完成一项任务,但对用户来说只有一个接口,这样的接口叫做“无缝的用户接口”,表示程序之间的其他一些接口对用户是不可见的。
“透明的”(transparent)表示实际上存在的东西对我们却好像看不见一样。
例如,网络的各层协议都是相当复杂的。
当我们在电脑上编辑好一封邮件后,只要用鼠标点击一下“发送”按钮,这封电子邮件就发送出去了。
实际上,我们的电脑要使用好几个网络协议。
可是这些复杂的过程我们都看不见。
因此,这些复杂的网络协议对网络用户来说都是“透明的”。
意思是:
这些复杂的网络协议虽然都是存在于电脑中,但用户却看不见(如果要看,就要使用专门的网络软件)。
我们在使用调制解调器上网时是使用PPP协议。
不管我们发送什么样的字符,PPP协议都可以进行传输。
那么这种传输方式叫做“透明传输”。
有时我们也说网络是透明的。
这表示对应用程序来说,只要将要做的事情交给应用层下面的应用编程接口API,后面的事情就不必管了。
网络程序会将应用程序传送到远地的目的进程。
因此这个网络的复杂机制对端用户来说也是看不见的,因而是透明的。
“虚拟的”(virtual)表示看起来好像存在但实际上并不存在。
“虚拟的”有时可简称为“虚”。
如“虚电路”就表示看起来好像有这样一条电路,但实际上并不存在。
“虚拟局域网”VLAN表示看起来这几个工作站组成了一个局域网,但实际上并不是这样。
读者应当注意到,从字典上看,英文字virtual还有“实际上的”、“实质上的”、“现实的”等意思。
这正好和“虚拟的”相差很大。
问题1-16:
在教材的1.7.2节提到协议有三个要素,即语法、语义和同步。
语义是否已经包括了同步的意思?
答:
“语义”并不包括“同步”。
“语义”指出需要发出何种控制信息、完成何种动作以及做出何种响应。
但“语义”并没有说明应当在什么时候做这些动作。
而“同步”则详细说明这些事件实现的顺序(例如,若出现某个事件,则接着做某个动作)。
问题1-17:
为什么协议不能设计成100%可靠的?
答:
设想某一个要求达到100%可靠的协议需要A和B双方交换信息共N次,而这N次交换信息都是必不可少的。
也就是说,在所交换的N次信息中没有冗余的。
假定第N次交换的信息是从B发送给A。
B发送给A的这个信息显然是需要A加以确认的。
这是因为:
若不需要A的确认,则表示B发送这个信息丢失了或出现差错都不要紧。
这就是说,B发送的这个信息是可有可无的。
如果B发送