问题4-1:“IP网关”和“IP路由器”是否为同义语?
答:当初发明TCP/IP的研究人员使用IP Gateway作为网际互连的设备。我国的网络工作者曾使用过多种译名,如网间连接器、网闸、信关、联网机等,但最后由全国自然科学名词审定委员会(这个委员会现在改名为“全国科学技术名词审定委员会”)在[MINGCI94]中公布的Gateway标准译名为“网关“。
但是在美国在20世纪90年代初期一家厂商认为,将IP Gateway改名为IP Router似乎更加有利于设备的销售。后来其他厂家也跟着改变产品的名称。在[MINGCI94]中Router的标准译名是“路由器”。现在,大家就都基本上不再使用网关这一名词了。
我们可以认为“IP网关”和“IP路由器”是同义语。
问题4-2:在文献中有时会见到对等连网(peer-to-peer networking),这是什么意思?
答:这表示在因特网中,任何两个计算机都可以进行平等地通信。这里可能一个计算机是很小的PC机,而另一个计算机是很大的巨型机。因特网对通信双方计算机的大小是不关心的。“对等”也有“对称”的意思。在早期的计算机网络是以计算机为中心,而远地的终端围绕中心的计算机进行通信。这些远地的终端和在中心的计算机并不是对等的,因为智能都集中在中心的计算机,复杂的计算都要在中心的计算机进行。但现在情况已经有了根本的变化。因此产生了对等连网这样的名词。
问题4-3:在一个互联网中,能否使用一个很大的交换机(switch)来代替互联网中很多的路由器?
答:不行。交换机和路由器的功能是很不一样的。
交换机可在一个单个的网络中和若干个计算机相连,并且可以将一个计算机发送过来的帧转发给另一个计算机。从这一点上看,交换机具有集线器的转发帧的功能。
但交换机比集线器的功能强很多。集线器在同一时间只允许一个计算机和其他计算机进行通信,但交换机允许多个计算机同时进行通信。
路由器连接两个或好几个网络。路由器可在网络之间转发分组(即IP数据报)。特别是,这些互连的网络可以是异构的。
因此,如果是许多相同类型的网络互连在一起,那么用一个很大的交换机(如果能够找得到)代替原来的一些路由器是可以的。但若这些互连的网络是异构的网络,那么就必须使用路由器来进行互连。
问题4-4:为什么IP地址又称为“虚拟地址”?
答:这是因为IP地址是靠软件来维持的而不是硬件地址。我们好像构成了一个很大的互连网络,但这个网络是虚拟的网络系统,因为它的通信系统是抽象的。虽然许多硬件和软件的组合看起来好像构成了一个很大的网络,但这样的大网络实际上并不存在。
这种虚拟网络的地址也是虚拟的,因此IP地址又称为“虚拟地址”。
问题4-5:有的文献上使用“虚拟分组”(virtual packet)这一名词。虚拟分组是什么意思?
答:虚拟分组就是IP数据报。
因为因特网是由大量异构的物理网络互连而成的。这些物理网络的帧格式是各式各样的,它们的地址也可能是互不兼容的。路由器无法将一种格式的帧转发到另一种网络,因为另一种网络无法识别与自己格式不同的帧的地址。路由器也不可能对不同的地址格式进行转换。
为了解决这一问题,IP协议定义了IP数据报的格式。所有连接在因特网中的路由器都能识别IP数据报的IP地址,因此能够对IP数据报进行转发(在进行转发时当然要调用ARP协议以便获得相应的硬件地址)。我们知道,IP数据报是作为物理网络的帧的数据部分。各个物理网络在转发帧时是根据帧的首部中的硬件地址而不看帧的数据部分。因此所有的物理网络都看不见帧里面的IP数据报。这样就使得IP数据报得到“虚拟分组”这样的名称。
问题4-6:如下图所示。五个网络用四个路由器(每一个路由器有两个端口)互连起来。能否改变这种连接方法,使用一个具有五个端口的路由器将这五个网络互连起来?
答:一般说来是不采用这样的连接方法。
这里有两个原因:
(1)路由器中的CPU和存储器是用来对通过该路由器的每一个IP数据报进行处理的。假若一个路由器和许多个网络相连接,那么这个路由器的处理器很可能没有足够的能力来处理通过它的所有的IP数据报。
(2)冗余度可以提高因特网的可靠性。路由器和网络都有可能出现故障。如果将所有的路由选择功能集中在一个路由器上,则一旦该路由器出故障,整个互连网就无法工作。
因此,在规划互连网时,互连网的具体拓扑结构取决于物理网络的带宽、期望的通信量、对可靠性的需求、以及路由器硬件的价格。
问题4-7:有的书(如[COME06])将IP地址分为前缀和后缀两大部分,它们和网络号字段及主机号字段有什么关系?
答:前缀(prefix)就是网络号字段net-id,而后缀(suffix)就是主机号字段host-id。下面的图是以C类地址为例来说明前缀和后缀是什么。
如果网络划分了子网,那么前缀还应包括子网号字段。
问题4-8:IP地址中的前缀和后缀最大的不同是什么?
答:(1) 前缀是由因特网管理机构进行分配的,而后缀是由分配到前缀的单位自行分配的。
(2) IP数据报的寻址是根据前缀来找目的网络,找到目的网络后再根据后缀找到目的主机。
问题4-9:IP数据报中的数据部分的长度是可变的(即IP数据报不是定长的)。这样做有什么好处?
答:这样做的好处是可以满足这种应用的需要。有时在键盘键入的一个字符就可以构成一个很短的IP数据报。但有的应用程序需要将很长的文件构成一个大的IP数据报(最长为64 K字节,包括首部在内)。当然,大多数IP数据报的数据部分的长度都远大于首部长度。这样做的好处是可以提高传输效率(首部开销所占的比重就较小)。
问题4-10:在IP地址中,为什么使用最前面的一个或几个比特来表示地址的类别?
答:知道了IP地址的类别,就可以很快地将IP地址的前缀和后缀区分开来,这在路由器寻找下一跳地址时是必须做的一件事。
但是怎样才能尽快地让计算机完成这一动作呢?如果将IP地址大致按照一定的地址数目划分为几部分作为各类地址,那么计算机执行这样的操作将会花费较多的时间。我们知道,计算机进行比特操作(如左移、右移、布尔运算等)要比进行整数运算要快得多。因此,IP地址的类别划分就用地址中最前面的一位或几位来标志地址的类别。
问题4-11:全1的IP地址是否是向整个因特网进行广播的一种地址?
答:不是。
设想一下,如果是向整个因特网进行广播的地址,那么一定会在因特网上产生极大的通信量,这样会严重地影响因特网的正常工作,甚至还会使因特网瘫痪。
因此,在IP地址中的全1地址表示仅在本网络上(就是你这个主机所连接的局域网)进行广播。这种广播叫做受限的广播(limited broadcast)。
如果net-id是具体的网络号,而host-id是全1,就叫做定向广播(directed broadcast),因为这是对某一个具体的网络(即net-id指明的网络)上的所有主机进行广播的一种地址。
问题4-12:IP协议有分片的功能,但广域网中的分组则不必分片。这是为什么?
答:IP数据报可能要经过许多个网络,而源主机事先并不知道数据报后面要经过的这些网络所能通过的分组的最大长度是多少。等到IP数据报转发到某个网络时可能才发现数据报太长了,因此在这时就必须进行分片。
但广域网能够通过的分组的最大长度是该广域网中所有主机都事先知道的。源主机不可能发送网络不支持的过长分组。因此广域网就没有必要将已经发送出的分组再进行分片。
问题4-13:路由表中只给出到目的网络的下一跳路由器的IP地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的IP地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处?
答:这样做的最大好处就是使得路由选择成为动态的,十分灵活。当IP数据报传送到半途时,若网络的情况发生了变化(如网络拓扑变化或出现了拥塞),那么中途的路由器就可以改变其下一跳路由,从而实现了动态路由选择。
问题4-14:链路层广播和IP广播有何区别?
答:链路层广播是用数据链路层协议(第二层)在一个以太网上实现的对该局域网上的所有主机的MAC帧进行广播。
IP广播则是用IP协议通过因特网实现的对一个网络(即目的网络)上的所有主机的IP数据报广播。
问题4-15:“尽最大努力交付”(best effort delivery)都有哪些含义?
答:(1) 不保证源主机发送出来的IP数据报一定无差错地交付到目的主机。
(2) 不保证源主机发送出来的IP数据报都在某一规定的时间内交付到目的主机。
(3) 不保证源主机发送出来的IP数据报一定按发送时的顺序交付到目的主机。
(4) 不保证源主机发送出来的IP数据报不会重复交付到目的主机。
(5) 不故意丢弃IP数据报。丢弃IP数据报的情况是:路由器检测出首部检验和有错误;或由于网络中通信量过大,路由器或目的主机中的缓存已无空闲空间。
但是要注意,IP数据报的首部中有一个“首部检验和”。当它检验出IP数据报的首部出现了差错时,就将该数据报丢弃。因此,凡交付给目的主机的IP数据报都是IP数据报的首部没有出现差错的或没有检测出来有差错。这就是说,传输过程中出现差错的IP数据报都被丢弃了。例如,源主机一连发送了10000个IP数据报,结果有9999个IP数据报都出现了差错,因而都被丢弃了。这样,只有一个不出错的IP数据报最后交付给了目的主机。这也完全符合“尽最大努力交付”的原则。甚至当所发送的一万个IP数据报都被丢弃了,我们也不能说这不是“尽最大努力交付”,只要路由器不是故意地丢弃IP数据报就行。
现在因特网上绝大多数的通信量都是属于“尽最大努力交付”的。如果数据必须可靠地交付给目的地,那么使用IP协议的高层软件必须负责解决这一问题。
问题4-16:假定在一个局域网中计算机A发送ARP请求分组,希望找出计算机B的硬件地址。这时局域网上的所有计算机都能收到这个广播发送的ARP请求分组。试问这时由哪一个计算机使用ARP响应分组将计算机B的硬件地址告诉计算机A?
答:这要区分两种情况。
如果计算机B和计算机A都连接在同一个局域网上,那么就是计算机B发送ARP响应分组。
如果计算机B和计算机A不是连接在同一个局域网上,那么就必须由一个连接在本局域网上的路由器来转发ARP请求分组。这时,该路由器向计算机A发送ARP回答分组,给出自己的硬件地址。
问题4-17:一个主机要向另一个主机发送IP数据报。是否使用ARP就可以得到该目的主机的硬件地址,然后直接用这个硬件地址将IP数据报发送给目的主机?
答:有时是这样,但也有时不是这样。
ARP只能对连接在同一个网络上的主机或路由器进行地址解析。我们看下图的例子。
由于A和B连接在同一个网络上,因此主机A使用ARP协议就可得到B的硬件地址,然后用B的硬件地址,将IP数据报组装成帧,发送给B。
但当目的主机是F时,情况就不同了。A无法得到F的硬件地址。A只能先将IP数据报发送给本网络上的一个路由器(在本例中就是路由器R1)。因此A发送IP数据报给F时,在地址解析方面要经过以下三个步骤:
(1)A先通过ARP解析出路由器R1的硬件地址,将IP数据报发送到R1。
(2)R1再通过ARP解析出R2的硬件地址,将IP数据报转发到R2。
(3)R2再通过ARP解析出F的硬件地址,将IP数据报交付给F。
因此,A发送IP数据报给F要经过三次ARP地址解析。A只知道F的IP地址,但并不知道F的硬件地址。
问题4-18:在因特网中最常见的分组长度大约是多少个字节?
答:使用以太网是和因特网相连的最常用的局域网,而以太网的数据字段最多只允许装入1500字节。因此在因特网上传送的分组长度一般都不会超过1500字节。
由于现在因特网上最常用的应用程序是电子邮件和万维网。这两个应用程序都使用TCP进行传输,因此经常要用到TCP的确认报文段。这种TCP确认报文段没有数据,只有20字节的首部,再加上IP数据报的20字节首部,使得IP数据报(即分组)的长度只有40字节。
根据美国MCI主干网上传送的分组的统计数据,大约有40%的分组为40字节长(即它们携带的数据都是TCP的确认报文段)。大约有15%的分组为576字节左右的长度(即IP数据报的默认长度)。大约有10%的分组为1500字节长。超过1500字节的分组数是很少的。
问题4-19:当路由器利用IP数据报首部中的“首部检验和”字段检测出在传输过程中出现了差错时,就简单地将其丢弃。为什么不发送一个ICMP报文给源主机呢?
答:IP协议并不要求源主机重传有差错的IP数据报。保证无差错传输是由TCP协议完成的。另一方面,首部检验和只能检验出IP数据报的首部出现了差错,但不知道首部中的源地址字段有没有出错。如果源地址出现了差错,那么将这种IP数据报传送到错误的地址也是没有任何意义的。
问题4-20:IP数据报必须考虑最大传送单元MTU (Maximum Transfer Unit)。这是指哪一层的最大传送单元?包括不包括首部或尾部等开销在内?
答:这是指IP层下面的数据链路层的最大传送单元,也就是下面的MAC帧的数据字段,不包括MAC帧的首部和尾部的各字段。因为IP数据报是装入到MAC帧中的数据字段,因此数据链路层的MTU数值就是IP数据报所容许的最大长度(是总长度,即首部加上数据字段)。
问题4-21:为什么生存时间TTL原来用秒作为单位而现在TTL却表示数据报在网络中所能通过的路由器数的最大值?
答:最初TTL是用秒作为单位,表示一个数据报在网络中的最长生存时间。TTL可用来防止数据报无限期地在网络中兜圈子(这样会浪费网络的资源)。例如,把数据报的TTL初始值设置为70秒,就表示在该数据报进入网络后只要经过了70秒就要把它丢弃,哪怕它就快要到达目的站了。
但后来发现这样做很不方便(各个没有时钟同步关系的路由器都要计算通过它的数据报在网络中的逗留时间)。于是就改用另一种方法,就是让TTL表示数据报在网络中所能够通过的路由器数的最大值。例如,把数据报的TTL初始值设置为60,就表示:若该数据报在经过60个路由器后还没有到达目的站,则最后到达的那个路由器就立即把这个数据报丢弃,使它不再占用网络的资源。现在路由器在转发数据报时,应把数据报首部中的TTL值减1。若TTL值减为零,就把它丢弃。因此,现在的TTL表示数据报在网络传送过程中的最大跳数。