世界上有数以百万计的网络,要实现这些网络的互连是一件相当困难的事情,因为这些网络并没有统一的标准。
而让大家都使用同一个网络也是不可能的,因为用户的需求是多种多样的,不可能有一种单一的网络能够适应所有用户。虽然网络不可能一样,但是可以想办法使用一种协议让路由器连接的网络都遵守这种协议,在这种情况下可以将互连起来的网络看成一个虚拟互联网络。
虚拟互联网络也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是利用协议可以使这些性能各异的网络让用户看起来好像是一个统一的网络,如图4-1所示。这种协议就是网络层重点讨论的IP。
将网络互连起来肯定需要一些中间设备(又称为中间系统或中继系统),根据中继系统所在的层次,可以有以下4种不同的中继系统。
当中继系统是中继器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。互联网都是指用路由器进行互连的网络。
使用虚拟互联网的好处∶当互联网上的主机进行通信时,就好像在同一个网络上通信,而看不见互连的具体的网络异构细节(如超时控制、路由选择协议等)。
可能疑问点∶"尽最大努力交付"都有哪些含义
解析∶
但是要注意,IP数据报的首部中有一个"首部检验和"。当它检验出IP数据报的首部出现了差错时,就将该数据报丢弃。
因此,凡交付给目的主机的IP数据报都是IP数据报的首部没有出现差错的,或没有检测出来有差错的。这就是说,传输过程中出现差错的IP数据报都被丢弃了。
例如,源主机一连发送了1000个IP数据报,结果有9999个IP数据报都出现了差错,因而都被丢弃了。这样,只有一个不出错的IP数据报最后交付给了目的主机。这也完全符合"尽最大努力交付"的原则。甚至当所发送的10000个IP数据报都被丢弃了,也不能说这不是"尽最大努力交付",只要路由器不是故意地丢弃IP数据报即可。
现在因特网上绝大多数的通信量都属于"尽最大努力交付"。如果要保证数据可靠地交付给目的地,则必须由使用IP的高层软件来负责解决这一问题。
路由器的主要功能包括路由选择(确定哪一条路径)与分组转发(当一个分组到达时所采用的动作)。
根据所需性能要求,可以采用适当的路由算法来构造路由表进行路由选择。不仅如此,该路由表还会根据从各相邻路由器所得到的关于整个网络的拓扑变化情况,动态地改变所选择的路由,以便得到最佳路由。
可能疑问点∶在一个互联网中,能否使用一个很大的交换机(Switch)来代替互联网中很多的路由器
解析∶不行。交换机和路由器的功能不一样。
交换机可在单个的网络中和若干台计算机相连,并且可以将一台计算机发送过来的帧转发给另一台计算机。从这一点上看,交换机具有集线器的转发帧的功能。
路由器连接两个或多个网络。路由器可在网络之间转发分组(IP数据报)。特别是,这些互连的网络可以是异构的。
因此,如果是许多相同类型的网络互连在一起,那么用一个很大的交换机(如果能够找得到)代替原来的一些路由器是可以的。
如果这些互连的网络是异构的网络,那么就必须使用路由器来进行互连。
可能疑问点∶路由表中只给出到目的网络的下一跳路由器的IP地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的IP地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处
解析∶这样做的最大好处就是使得路由选择成为动态的,十分灵活。当IP数据报传送到半途时,若网络的情况发生了变化(如网络拓扑变化或出现了拥塞),那么中途的路由器就可以改变其下一跳路由,从而实现动态路由选择。
本章仅介绍拥塞控制的基本概念,有关拥塞控制更详细的讲解请参考第5章5.3.5小节和5.3.6小节。
计算机网络(如交通网络一样)在一个子网或子网的一部分出现太多分组(车辆)时,网络性能开始下降,这种情况称为拥塞。因此需要采取拥塞控制方法,以确保网络不出现拥塞,或确保网络在出现拥塞时也能保持良好的性能。
拥塞控制可以分为两大类∶
加上合适的拥塞控制后,网络就不易出现拥塞和死锁现象了,但代价是当提供的负载较小时,有拥塞控制的吞吐量反而比无拥塞控制时要小。
注意∶拥塞控制和流量控制的关系密切,但二者之间也存在一些差异。拥塞控制必须确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及所有主机、路由器以及导致网络传输能力下降的所有因素。而流量控制只与给定的发送端和接收端之间的点对点通信量有关,其任务是使发送端发送数据的速率不能快得让接收端来不及接收。
路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。
如果从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略(又称为非自适应路由选择)与动态路由选择策略(又称为自适应路由选择)。
静态路由选择的特点是简单和开销小,但不能及时适应网络状态的变化。对于很小的网络,完全可以采用静态路由选择,自己手动配置每一条路由。
动态路由选择的特点是能较好地适应网络状态的变化,但实现起来比较复杂,开销也较大。因此,动态路由适用于较复杂的网络。
现代的计算机网络通常使用动态路由选择算法。动态路由算法又可分为两种基本类型∶距离-向量路由算法和链路状态路由算法。
在距离-向量路由算法中,所有的节点都定期地将它们整个路由选择表传送给所有与之直接相邻的节点。这种路由选择表包含每条路径的目的地(另一节点)和路径的代价(距离)。
注意∶这里的距离是一个抽象的概念,如RIP就将距离定义为"跳数"。跳数指从源端口到达目的端口所经过的路由个数,经过一个路由器跳数加1。当然距离还可以定义成其他因素。
在该路由算法中,所有节点都必须参与距离-向量交换,以保证路由的有效性和一致性。换句话说,所有节点都监听从其他节点传送来的路由选择更新信息,并在下列情况下更新它们的路由选择表。
距离-向量路由算法的实质是通过迭代法来得到到达某目标的最短通路。它要求每个节点在每次更新中都将它的全部路由表发送给它的所有相邻节点。显然,如果该网络的节点越多,那么每次因为路由更新所产生的报文就越大。另外,由于更新报文发给直接相邻的路由器,因此所有节点都将参加路由选择信息交换。基于这些原因,在通信子网上传送的路由选择信息的数量很容易变得非常大。
目前,最常用的距离-向量路由算法是RIP算法,它采用"跳数"作为距离的代价。
链路状态路由算法要求每个参与该算法的节点都有完全的网络拓扑信息,它们执行下述两项任务。
在一个链路状态路由选择中,一个节点检查所有直接链路的状态,并将所得的状态信息发送给网上所有其他的节点,而不仅是发送给那些直接相连的节点。每个节点都用这种方式,所有其他节点从网上接收包含直接链路状态的路由选择信息。
每当链路状态报文到达时,路由节点便使用这些状态信息去更新自己的网络拓扑和状态"视野图",一旦链路状态发生了变化,节点对更新的网络图利用Dijkstra最短路径算法重新计算路由,从单一节点出发计算到达所有目的节点的最短路径。
链路状态路由算法主要有三大特征∶
目前,最常用的链路状态路由算法是OSPF算法。
背景知识∶首先要清楚因特网为什么采用分层次的路由选择协议,原因有两个。
基于上述两个原因,因特网将整个互联网划分为许多较小的自治系统(但是注意一个自治系统不是一个局域网,里面包含很多局域网),每个自治系统有权自主地决定本系统内应采用何种路由选择协议。但是问题出来了,如果两个自治系统需要通信,并且这两个自治系统内部所使用的路由选择协议不同,那么怎么通信
所以就需要一种在两个自治系统之间的协议来屏蔽这些差异,据此,因特网把路由选择协议划分为两大类∶
自治系统内部的路由选择称为域内路由选择。相应的,自治系统之间的路由选择称为域间路由选择。
对于非常大的网络,OSPF协议将一个自治系统再划分为若干个更小的范围,叫作区域。划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这样减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。
为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫作骨干区域,骨干区域的标识符规定为0.0.0.0。
骨干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括。每一个区域至少应当有一个区域边界路由器。在骨干区域内的路由器叫作骨干路由器,一个骨干路由器可以同时是区域边界路由器。在骨干区域内还要有一个路由器,专门与本自治系统外的其他自治系统交换路由信息,这样的路由器叫作自治系统边界路由器。
采用分层次划分区域的方法使交换信息的种类增多了,同时也使OSPF协议更加复杂。但此方法能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于大规模的自治系统中。
故事助记∶将整个世界看作一个因特网,每个国家是不同的自治系统,而每个国家又分为许多省(区域),每个省的人只懂得自己省的风俗(每个路由器只知道本区域的完整网络拓扑)。但是各个省之间是需要互相交流的,这样就在每个省选出一个省长(区域边界路由器),这样该省的百姓就可以将信息通过省长传给另外一个省长(通过骨干区域)。当然有时候国家首脑还要给各个省长开会,相互交流信息,所以需要一个组织(骨干区域,取名为0.0.0.0),该组织包括各省长和国家首脑。所以说省长需要演好两个角色,一个是骨干区域的成员,另一个是区域边界成员。当然这样是不够的,如果两个国家互访(不同自治系统交换信息),这时就派国家首脑去和外国交流(可以是骨干区域的任何一个路由器),此时国家首脑可以看成是自治系统边界路由器。
IP数据报首部格式如图4-2所示。
从宏观方面,一般来说,IP数据报的首部是60B,其中21~60B部分是可选字段和填充,用来完成某种功能(什么功能不用管)。而如果使用某功能后,首部的长度若不再是4B的倍数时,就需要使用填充来填满这个4B。例如,使用某功能后首部长度是22B(该功能占用了2B),那么就要用自动填充功能来填到24B。但是一般来说IP数据报不需要使用任何功能,所以在默认情况下考生应该将IP数据报的首部看成是20B(已经是4B的倍数,所以不需要填充),千万记住!
从微观的角度去理解这20B的作用,下面是总体介绍,易考到的首部部分会在后面进行总结。
疑问∶细心的考生可能会发现,在总长度的设计上明显存在缺陷。MAC帧数据部分最大的长度是1500B,既然IP数据报是MAC帧的数据部分,那么如果IP数据报的总长度字段是2B,可以表示的长度达到65535B,这样不是浪费了吗
解析∶因为以前用的不是以太网,也许以前用的局域网帧格式可以让帧的长度很长,甚至不加以限制。只是以太网比较流行了,也许才发现这个缺点(这是编者理解的,如果有更好的答案,请与编者联系)。
【例4-1】某数据报的总长度为3820B(使用固定首部),需要分片为长度不超过1420B的数据报片,应该怎么分
解析∶由于该数据报采用固定首部,因此该数据报的数据部分长度为3800B。又由于分片为长度不超过1420B的数据报片,因此每个数据报片的数据部分长度不能超过1400B(原始数据报首部被复制为各数据报片的首部,仅需修改有关字段的值)。图4-3给出分片后得出的结果(注意片偏移的数值)。
现在假定将数据报片2的DF设置为1,并且假设中途要经过一个允许最大数据报的长度为82OB的网络。这样数据报片2又需要分片,但是此时DF值为1,也就是说不允许分片,则需要将其丢弃。若此时DF值为0,允许分片,则需要将数据报片2分片为数据报片2-1(携带800B)和数据报片2-2(携带600B),见表4-2。
注意∶数据报片2-2的MF值仍然是1,因为后面还有数据报片3。
总结∶
现在知道了IP数据报是由什么构成的,下面来讨论IP数据报有关转发的一些疑问总结。
可能疑问点∶有的教材上使用虚拟分组(VirtualPacket)这一名词,虚拟分组是什么意思它和IP数据报有什么区别
解析∶虚拟分组就是IP数据报。
因为因特网是由大量异构的物理网络互连而成的,这些物理网络的帧格式是各式各样的,它们的地址也可能是互不兼容的。路由器无法将一种格式的帧转发到另一种网络,因为另一种网络无法识别与自己格式不同的帧的地址。路由器也不可能对不同的地址格式进行转换。
为了解决这一问题,IP定义了IP数据报的格式。所有连接在因特网中的路由器都能识别IP数据报的IP地址,因此能够对IP数据报进行转发(在进行转发时当然要调用ARP以便获得相应的硬件地址)。IP数据报是作为物理网络的帧的数据部分。各个物理网络在转发帧时是根据帧的首部中的硬件地址而不看帧的数据部分,因此所有的物理网络都看不见帧里面的IP数据报,这样就使得IP数据报得到"虚拟分组"这样的名称。
可能疑问点∶IP数据报中的数据部分的长度是可变的(IP数据报不是定长的),这样做有什么好处
解析∶这样做的好处是可以满足各种不同应用的需要。有时从键盘键入的一个字符就可以构成一个很短的IP数据报,但有的应用程序需要将很长的文件构成一个大的IP数据报(最长为64KB,包括首部在内)。当然,大多数IP数据报的数据部分的长度都远大于首部长度,这样做的好处是可以提高传输效率(首部开销所占的比例较小)。
可能疑问点∶IP数据报在传输的过程中,其首部长度是否会发生变化
把整个因特网看作一个单一的、抽象的网络。IP地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的32位的标识符。一般将IP地址分为A类地址、B类地址、C类地址、D类地址和E类地址。
本知识点只介绍A、B、C三类地址,D类地址将在4.6.2小节中介绍,E类地址保留为以后使用,不需要介绍。最后,本知识点将会介绍一些特殊的IP地址,这些全是命题老师喜欢出题的地方。
A类地址的网络号为前面8位,并且第一位规定为0,如图4-5所示。规定网络地址为全0的IP地址是个保留地址,意思是"本网络"。
例如,A类地址0.0.0.1,表示在这个网络上主机号为1的主机。
而网络号01111111保留作为本地软件环回测试本主机的进程之间的通信(至于什么是环回测试下面会介绍),所以说A类地址可以指派的网络数为27-2。
而后面的3B为主机号,主机号全0表示该网络,如一主机的IP地址为12.0.0.1,那么该主机所在的网络地址就是12.0.0.0;而主机号全1表示广播地址,如12.255.255.255。
所以说合法的主机地址就是介干网络地址和广播地址之间的地址,如在12.0.0.0~12.255.255.255都可以,每个A类网络上的最大主机数是224-2。
如图4-6所示,B类地址的网络号为前面16位,并且前面2位规定为10,由于不管后面14位怎么设置,都不可能出现全0,所以B类地址不存在网络总数减2的问题,但是实际上网络地址10000000.00000000.00000000.00000000(128.0.0.0)是不指派的,而可以指派的最小网络地址是10000000.00000001.00000000.00000000(128.1.0.0),因此B类地址可以指派的网络数是214-1。同样,B类地址的每一个网络上的最大主机数是216-2。
如图4-7所示,C类地址的网络号为前面24位,并且前面3位规定为110,由于不管后面21位怎么设置,都不可能出现全0,所以C类地址不存在网络总数减2的问题,但是实际上网络地址11000000.00000000.00000000.00000000(192.0.0.0)是不指派的,而可以指派的最小网络地址是11000000.00000000.00000001.00000000(192.0.1.0),因此C类地址可以指派的网络数是221-1。同样,C类地址的每一个网络上的最大主机数是28-2。
补充知识点∶关于A、B、C类地址的最小网络地址和最大网络地址。
A类地址最小网络地址与最大网络地址分别是00000001.00000000.00000000.00000000----01111110.00000000.00000000.00000000(1~126)
B类地址最小网络地址与最大网络地址分别是10000000.00000001.00000000.00000000----10111111.11111111.00000000.00000000
(128.1~191.255)C类地址最网络地址与最大网络地址分别是11000000.00000000.00000001.00000000----11011111.11111111.11111111.00000000(192.0.1~223.255.255)
6种特殊地址见表4-3。
注意∶网络地址较常见,任何教材都会讲,在此就不讲解了,本知识点主要针对其他5种特殊地址进行总结。
在A、B、C类地址中,若主机号全1,则这个地址称为直接广播地址。
路由器使用这种地址把一个分组发送到一个特定网络上的所有主机,所有主机都会收到具有这种类型的目的地址的分组。要注意到,这个地址在IP分组中只能用作目的地址。还要注意到,这个地址也减少了A、B、C类地址中每个网络中可用的主机数。在图4-8中,路由器发送数据报,它的目的IP地址具有全1的主机号,在这个网络上的所有设备都接收和处理这个数据报。
【例4-2】(2011年统考真题)在子网192.168.4.0/30中,能接收目的地址为192.168.4.3的IP分组的最大主机数是()。
A.0
B.1
C.2
D.4
解析∶C。在网络192.168.4.0/30中只有两位主机号,取值范围如下(为了简便,二进制和十进制混合用)∶
192.168.4.000000~192.168.4.000011(192.168.4.0~192.168.4.3)
发现什么了?192.168.4.3恰好是其广播地址(广播地址的概念就是主机号全为"1")。既然是广播地址,所以只要是在此网络内的主机,全部都可以接收到广播地址所发出的IP分组。而此网络一共有两个主机(4-2=2,要去掉全"0"和全"1")。
【例4-3】(2012年统考真题)某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是()
A.180.80.76.0
B.180.80.76.255
C.180.80.77.255
D.180.80.79.255
解析∶D。此题其实就是求该网络的广播地址。首先,由IP地址的第一字节180,可以判断主机的IP地址为B类地址。其次,从子网掩码255.255.252.0中可以判断该网络从主机位拿出6位作为子网号。最后,可以得出主机位为10位。接下来将77转换成二进制,即01001101。保持前6位不变,将后2位以及IP地址的最后一个字节都置为1,即0100111111111111,转换成十进制为79.255。故该网络的广播地址为180.80.79.255。
IP地址为255.255.255.255,这个地址用于定义在当前网络(绝对不是整个因特网,注意出选择题!)上的广播地址。一个主机若想把报文发送给所有其他主机,就可以使用这样的地址作为分组中的目的地址,但是路由器会把这种类型的地址阻拦,使这样的广播仅局限于本地局域网。应注意,这种地址属于E类地址,如图4-9所示。
IP地址为0.0.0.0,表示这个网络上的主机。这发生在某个主机在运行程序时但又不知道自己的IP地址,主机为了要发现自己的IP地址,就给引导服务器发送IP分组,并使用这样的地址作为源地址,并且使用255.255.255.255作为目的地址。此外,这个地址永远是一个A类地址,而不管网络是什么类别,这种全0地址使A类地址网络减少了一个,如图4-10所示。
具有全0的网络号的IP地址表示在这个网络上的特定主机,用于当某个主机向同一网络上的其他主机发送报文时。因为分组被路由器挡住了,所以这是把分组限制在本地网络上的一种方法。还应注意到,实际上这是一个A类地址而不管是什么网络类型,如图4-11所示。
第一个字节等于127的IP地址作为环回地址,这个地址用来测试机器的软件。当使用这个地址时,分组永远不离开这个机器,这个分组就简单地返回到协议软件,因此这个地址可以用来测试IP软件。
例如,像ping这样的应用程序,可以发送把环回地址作为目的地址的分组,以便测试IP软件能否接收和处理分组。另一个例子就是,客户进程用环回地址发送报文给同样机器上的服务器进程。应当注意,这种地址在IP分组中既能用作目的地址,也能用作源地址。实际上这也是A类地址,环回地址也会使A类地址中的网络数减少一个,如图4-12所示。
补充知识点∶IP地址具有以下一些重要特点。
可能疑问点∶在IP地址中,为什么使用最前面的一个或几个比特来表示地址的类别
解析∶知道了IP地址的类别,就可以很快地将IP地址的前缀和后缀区分开,这在路由器寻找下一跳地址时是必须做的一件事。
可能疑问点∶全"1"的IP地址是否是向整个因特网进行广播的一种地址
解析∶不是。
设想一下,如果是向整个因特网进行广播的地址,那么一定会在因特网上产生极大的通信量,这样会严重地影响因特网的正常工作,甚至还会使因特网瘫痪。
因此,在IP地址中的全"1"地址表示仅在本网络(就是这个主机所连接的局域网)上进行广播。这种广播称为受限的广播(LimitedBroadcast)。
如果net-id是具体的网络号,而host-id是全"1",就称为定向广播(DirectedBroadcast),因为这是对某一个具体的网络(net-id指明的网络)上的所有主机进行广播的一种地址。具体参考上面6种特殊地址的总结,这里只是再提醒一下,因为经常考选择题。
可能疑问点∶链路层广播和IP广播有何区别
解析∶链路层广播是用数据链路层(第二层)协议在一个以太网上实现对该局域网上的所有主机的MAC帧进行广播。
IP广播则是用IP通过因特网实现的对一个网络(目的网络)上的所有主机的IP数据报进行广播。
解析∶相同之处∶
不同之处∶
但IP地址空间是受限的,全部的IP地址用尽后就必须将IPv4升级到IPv6。
但是有的IP地址可以反映出一定的地理范围。例如,顶级域名采用国家域名的,如顶级域名是.cn的在中国,但在中国的什么地方则不知道。而二级域名若采用省级域名时,如采用js.cn的在中国的江苏省,但在江苏省的什么地方也是不知道的。然而在采用通用顶级域名时,如采用.com或.net或.org时,则无法知道该主机在哪一个国家或地区。
背景知识∶其实某些机构并不需要连接到因特网,只需要与内部的主机通信,这样如果还是按照全球IP地址去分配,则会大大浪费IP地址。
例如,100个机构各有100台主机,假设现在100个机构都分配全球IP地址,就需要10000个全球IP地址,但是现在从所有的全球IP地址里面划分出100个IP地址(当然不只100个,这里仅仅是为了简化问题),专门用作一些只需内部通信的机构使用,即100个机构都使用这100个地址,只需要100个IP地址就解决问题了。而这100个IP地址在计算机网络中被称为专用地址,而路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上传送的。
因特网已经规定了以下地址作为专用地址。
这种采用专用IP地址的互联网络称为专用互联网或本地互联网,或直接称为专用网。专用IP地址也叫作可重用地址。问题出现,如果专用网的主机想和因特网的主机通信,怎么办?
这时候NAT就诞生了。NAT就是将专用网内部使用的本地IP地址转换成有效的外部全球IP地址,使得整个专用网只需要一个全球IP地址就可以与因特网连通。
由于这些本地IP地址是可重用的,因此NAT技术可大大节省IP地址的消耗。
使用NAT技术,需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫作NAT路由器,它至少有一个有效的外部全球IP地址。但是NAT并不能从根本上解决IP地址的耗尽问题,因为NAT并没有增加IP地址的个数。而真正解决IP地址耗尽问题的是IPv6(参考4.4节)。
故事助记∶A、B宿舍互搬物品,A是女生宿舍,B是男生宿舍,假设东西太重,女生不能独自从A搬到B,每次搬到楼下被楼管看见,楼管不让她出去(路由器不转发,显然A宿舍是一个专用网),后来看到门口有一个男生,把东西交给男生(源IP地址变成全球IP地址,且这个源IP地址将会登记),这时楼管才放心(可以转发),等男生把东西搬到B宿舍门口,然后B宿舍的楼管看见了,查看物品是给谁的(查看目的地址),直接交给那个人,并把这个源地址(这个源地址是转换后的地址)记下。但是反过来由于B是男生宿舍,所以男生可以直接搬(B宿舍是因特网,不是专用网),因为男生并不知道这个东西是从A宿舍的哪个女生搬来的,只知道是A宿舍(但是没有关系,A宿舍的楼管知道),然后这个男生到了A宿舍,楼管一看源地址就知道叫哪个女生拿东西了(因为刚才这个女生曾经搬过东西到这个地址)。很明显,这个就是网络地址转换NAT的工作原理。如果有多个这样热心的绅士,也就是说,路由器具有多个全球IP地址,那就可以同时帮多个女生搬家啦!
需要注意的是,如果曾经没有A宿舍的女生搬东西到B宿舍,那么B宿舍的男生搬东西到A宿舍之后,A宿舍楼管因为没有记录该地址,所以就不知道将东西给哪个女生。因此,专用网的主机是不能充当服务器直接被因特网的主机访问的,即一定要专用网的主机先发起通信。也就是说,专用网的主机不联系因特网的主机,因特网的主机就一定不会联系专用网的主机。
解析∶A。NAT协议利用端口域来解决内网到外网的地址映射问题。当一个向外发送的分组进入到NAT服务器时,源地址被真实的公网地址(IP地址)所取代,而端口域被转换为一个索引值(查表4-4可知,21被转换成2056)。
【例4-5】例44的NAT服务器,当它从外网收到一个要发往IP地址为192.168.32.56,端口为80的分组时,它的动作为()
A.转换地址,将源IP变为205.56.79.35,端口变为2056,然后发送到公网
B.添加一个新的条目,转换IP地址以及端口然后发送到公网
C.不转发,丢弃该分组
D.直按将分组转发到公网上
解析∶C。题目中主机发送的分组在NAT表项中找不到(端口80是从源端口找,不是从转换端口找),所以服务器就不转发该分组。
两级IP地址(网络号+主机号)设计得不合理。
聪明的人类想出了"子网号字段",使得两级的IP地址变为三级的IP地址,这种做法叫作划分子网。划分子网属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络。
划分子网的基本思路∶从主机号借用若干个比特作为子网号,而主机号也就相应减少了若干个比特,网络号不变。于是三级的IP地址可记为
凡是从其他网络发送给本单位某个主机的IP分组,仍然根据IP分组的目的网络号先找到连接在本单位网络上的路由器,然后此路由器在收到IP分组后,再按目的网络号和子网号找到目的子网,最后将该IP分组直接交付给目的主机。
疑问∶子网号到底可不可以使用全"0"和全"1"?如果不可以,那么CIDR怎么解释?
解析∶对于分类的IPv4地址进行子网划分时,子网号绝对不能使用全"1"和全"0"。但是CIDR是可以使用全"0"和全"1"的。其实CIDR准确来讲不能算是划分子网,只是形式上像划分子网。准确地说,CIDR应该是划分子块。
【例4-6】(2010年统考真题)某网络的IP地址空间为192.168.5.0/24,采用长子网划分,子网掩码为255.255.255.248,则该网络的最大子网个数、每个子网内的最大可分配地址个数为(
A.32,8
B.32,6
C.8,32
D.8,30
解析∶B。先将子网掩码写成二进制为111111111111000可见IP地址空间192.168.5.0/24(本来主机位是8位)拿出了5位来划分子网,所以一共可以划分32个子网(这里使用的是CIDR,所以全"0"、全"1"的子网不用去除);而主机位只有3位了,所以最大可分配的地址是2-2=6个(要去除全"0"、全"1"的地址)。
【例4-7】(2011年统考真题)某网络拓扑如图4-13所示,路由器R1只有到达子网192.168.1.0/24的路由。为使R1可以将IP分组正确地路由到图中所有子网,则在R1中需要增加的一条路由(目的网络、子网掩码、下一跳)是()。
子网划分与否是看不出来的,如果要告诉主机或路由器是否对一个A类、B类、C类网络进行了子网划分,则需要子网掩码。
子网掩码是一个与IP地址相对应的32位的二进制串,它由一串1和0组成。其中,1对应于IP地址中的网络号和子网号,0对应于主机号。因为1对1进行与操作,结果为1;1对0进行与操作,结果为0。所以使用一串1对网络号和子网号进行与操作,就可以得到网络号,参考例4-8。
【例4-8】已知IP地址是141.14.72.24,子网掩码为255.255.192.0,试求网络地址。
解析∶如图4-14所示。
现在的因特网标准规定,所有网络都必须有一个子网掩码。如果一个网络没有划分子网,就采用默认子网掩码。A类、B类、C类地址的默认子网掩码分别是255.0.0.0、255.255.0.0和255.255.255.0。
总结∶不管网络有没有划分子网,只要将子网掩码和IP地址进行逐位的"与"运算,就一定能立即得出网络地址。使用子网掩码后,路由表的每行所包括的主要内容是目的网络地址、子网掩码和下一跳地址。此时,路由器的分组转发算法如下∶
可能疑问点∶谢希仁编写的《计算机网络》教材中的图4-19的B类网络145.13.0.0在划分子网时,所给出的3个子网号是怎样得出的
解析∶本题假定子网号subnet-id占用8位。可见子网掩码是255.255.255.0。
IP地址中的最后8位就留作主机号。假定我们不使用全0和全1的子网号,那么一共有254个子网号可解析∶本题假定子网号subnet-id占用8位。可见子网掩码是255.255.255.0。IP地址中的最后8位就留作主机号。假定我们不使用全0和全1的子网号,那么一共有254个子网号可供选择。书中的例子是随意选择了3、7和21作为3个子网号。于是这3个子网的地址就是145.13.3.0、145.13.7.0、145.13.21.0。
划分子网在一定程度上缓解了因特网在发展中遇到的困难。然而,在1992年因特网仍然面临3个必须尽早解决的问题,即B类地址在1992年已分配了近一半(眼看就要在1994年3月全部分配完毕)、因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个))、整个IPv4的地址空间最终将全部耗尽。
无分类编址(CIDR)是为解决IP地址耗尽而提出的一种措施。
在使用CIDR时,路由表中的每个项目由网络前缀和下一跳地址组成。这样就会导致查找路由表时可能会得到不止一个匹配结果。应当==从匹配结果中选择具有最长网络前缀的路由==,因为网络前缀越长,其地址块就越小,路由就越具体。最长前缀匹配原则又称为最长匹配或最佳匹配,参考例4-10。
解析∶A。路由聚合的计算方法如下∶
计算过程如图4-15所示。
由图4-15可以看出,这两个C类地址的前21位完全相同,因此构成的超网应该采用21位的网络段。CIDR依然遵循主机段全"0"表示网络本身的规定,因此通过CIDR技术构成的超网可表示为
11001010.01110110.10000000.00000000,即202.118.128.0/21。
解析∶解题思路∶将右边的IP地址与左边的网络号进行一一比较,如果可以满足前缀相同的长度大于或等于掩码的长度,则表示可以走此条路由,称为匹配。但是如果有更长掩码的网络与之匹配,则应该优先选择具有更长掩码的网络,即满足最长匹配原则。
解题技巧∶既然需要满足最长匹配原则,那么应该从掩码长度最长的开始比较。
补充∶有些同学可能还不是很明白为什么要满足最长匹配原则?下面用一个生活实例来解释。
解析∶比如我要邮寄一个包裹给我的同学。然后我给了快递人员以下3个地址∶1)浙江省杭州市2)浙江省杭州市西湖区。3)浙江省杭州市西湖区浙江大学玉泉校区。
其实以上3个地址都是正确的(匹配,但是作为快递人员(路由器)会去选择哪一个呢
当然是会选择第三个,地址越具体(掩码长度越长),就能越准确地找到目标地址。
路由表表项在各种情况下的总结见表4-6。
可能疑问点∶网络前缀是指网络号字段(net-id)中前面的几个类别位还是指整个的网络号字段
解析∶网络前缀是指整个网络号字段,即包括了最前面的几个类别位在内。网络前缀常常简称为前缀。
例如,一个B类地址1010000000000000000000000010000,其类别位就是最前面的两位10,而网络前缀就是前16位101000000000000。
可能疑问点∶有的书将IP地址分为前缀和后缀两大部分,它们和网络号字段及主机号字段有什么关系前缀和后缀有什么不同
解析∶前缀(prefix)是网络号字段(net-id),而后缀(suffix)是主机号字段(hostid)。图4-16所示是以C类地址为例来说明前缀和后缀是什么。
前缀与后缀的区别∶
虽然在网络层转发分组用的是IP地址,但是最终还是要使用MAC地址来在实际网络的链路上传送数据帧,所以知道目的地的IP地址是没用的。如果有办法能够把IP地址直接转换成物理地址就好了,ARP就是为了解决这个问题诞生的。
在每个主机中都有一个ARP高速缓存,里面存放的是所在局域网上的各主机和路由器的IP地址到硬件地址的映射表,ARP的职责就是动态地维护该表。
当源主机欲向本局域网上的某个目标主机发送IP分组时,应先在其ARP高速缓存中查看有无目标主机的IP地址。
如果有,就可查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过局域网将该MAC帧发往此硬件地址。如果没有,则先通过广播ARP请求分组,在获得目标主机的ARP响应分组后,将目标主机的硬件地址写入ARP高速缓存,建立目标主机的IP地址到硬件地址的映射关系。
ARP是解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题的。
如果所要找的主机和源主机不在同一个局域网上,那么就要通过ARP找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络,剩下的工作就由下一个网络来做。尽管ARP请求分组是广播(见图4-17)发送的,但是ARP响应分组是普通的单播(见图4-18),即从一个源地址发送到一个目的地址。
注意∶从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器与本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地将该IP地址解析为链路层所需要的硬件地址。
ARP的4种典型情况总结∶
既然ARP可以将IP地址转换成物理地址,那么有没有一种设备可以将物理地址转换成IP地址呢?
RARP可以转换,但是基本已经被淘汰了,因为物理地址转换成IP地址这种功能已经被集成到了DHCP。
【例4-11】(2012年统考真题)ARP的功能是()。
A.根据IP地址查询MAC地址
B.根据MAC地址查询IP地址
C.根据域名查询IP地址
D.根据IP地址查询域名
解析∶A。ARP用于解决同一个局域网上的主机或路由器的IP地址和硬件地址的映射问题(IP地址→物理地址)。
可能疑问点∶假定在一个局域网中计算机A发送ARP请求分组,希望找出计算机B的硬件地址。这时局域网上的所有计算机都能收到这个广播发送的ARP请求分组。试问这时由哪一个计算机使用ARP响应分组将计算机B的硬件地址告诉计算机A
解析∶这要区分两种情况。
如果计算机B和计算机A都连接在同一个局域网上,那么就是计算机B发送ARP响应分组。
如果计算机B和计算机A不是连接在同一个局域网上,那么就必须由一个连接在本局域网上的路由器来转发ARP请求分组。这时,该路由器向计算机A发送ARP回答分组,给出自己的硬件地址。
可能疑问点∶一台主机要向另一台主机发送IP数据报,是否使用一次ARP就可以得到该目的主机的硬件地址,然后直接用这个硬件地址将IP数据报发送给目的主机
解析∶有时是这样,但有时也不是这样。
ARP只能对连接在同一个网络上的主机或路由器进行地址解析,如图4-19所示。
由于主机A和B连接在同一个网络上,所以主机A使用一次ARP就可得到主机B的硬件地址,然后用主机B的硬件地址将IP数据报组装成帧,发送给主机B。
但当目的主机是主机F时,情况就不同了。主机A无法得到主机F的硬件地址。主机A只能先将IP数据报发送给本网络上的一个路由器(在本例中就是路由器R1)。因此,当主机A发送IP数据报给主机F时,在地址解析方面要经过以下3个步骤∶
动态主机配置协议(DHCP)常用于给主机动态地分配IP地址。
它提供了即插即用连网的机制,这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。
DHCP是应用层协议,DHCP报文使用UDP传输。
例如,现在有一台主机需要IP地址,在该主机启动时就可以向DHCP服务器广播发送报文,将源地址设置为0.0.0.0,目的地址设置为255.255.255.255(看到这里是不是有种似曾相识的感觉,请返回到前面讲解的特殊IP地址中的0.0.0.0地址,可更加深刻地理解这个特殊地址),这时候该主机就成为DHCP的客户,发送广播报文主要是因为现在该主机还不知道DHCP在哪里,这样在本网络上的所有主机都能够收到这个广播报文,但是只有DHCP服务器才应答。
DHCP服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息;若找不到,则从服务器的IP地址池中取一个地址分配给该计算机。DHCP服务器的回答报文叫作提供报文。
DHCP服务器和DHCP客户端的交换过程如下∶
主机在发送数据报时,经常会由于各种原因发送错误,如路由器拥塞丢弃了或者传输过程中出现错误丢弃了(注意∶如果是首部出错,当然可以发,但是一般都不发,因为首部出错很有可能源IP地址都错了,所以即使发了源主机也不一定收到)。
如果检测出错误的路由器或主机都能把这些错误报告通过一些控制消息告诉发送数据的主机,那么发送数据的主机就可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报(比如ICMP报文发过来的是改变路由,那么主机就不能继续按照这个路由线路发送了,需要用另外一条路由线路发送数据)。尽管这些控制消息并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP报文分为两种,即ICMP差错报告报文和ICMP询问报文。
【例4-12】(2010年统考真题)若路由器R因为拥塞丢弃IP分组,则此时R可向发出该IP分组的源主机发送的ICMP报文的类型是()
A.路由重定向
B.目的不可达
C.源抑制
D.超时
解析∶C。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
ICMP的两个典型应用,其实在日常生活中经常用,即ping和tacert。
ping用来测试两个主机之间的连通性。ping使用了ICMP回送请求与回送回答报文。ping是应用层直接使用网络层ICMP的例子,它没有通过传输层的TCP或UDP。tracert可以用来跟踪分组经过的路由,它工作在网络层。
如图4-20和图4-21所示,ICMP报文应该包括ICMP报文的类型和代码,这样源主机收到该报文就知道是由于什么故障需要重传了,但是仅有ICMP的类型是不够的,源主机需要知道哪个数据报发生了这样的错误。这就需要将发生错误的那个数据报的首部也要放在该ICMP报文中,源主机一看就知道是哪个数据报错了。
最后为什么还要将出错IP数据报的数据部分的前8个字节放入ICMP报文
因为该8个字节包含了TCP报文(UDP报文)首部中的TCP端口号(UDP端口号),关于TCP首部和UDP首部将在第5章详细讲解。这样源主机和用户进程(用户进程需要IP地址和端口号才能唯一确定)能更好地联系起来,因为发送
数据的是某个主机中的某个进程而不是主机本身,这样才算真正找到了发送数据的源泉。
很多人可能会对代码字段产生疑问,既然有了类型为什么还要代码
举个例子,类型值是3表示终点不可达,但是不可达也有很多种,如有网络不可达、主机不可达、协议不可达(仅是例子,不要求掌握),所以需要代码字段来更确切地表示是哪一种不可达。
可能疑问点∶当路由器利用IP数据报首部中的"首部检验和"字段检测出在传输过程中出现了差错时,就简单地将其丢弃。为什么不发送一个ICMP报文给源主机呢
解析∶IP并不要求源主机重传有差错的IP数据报,保证无差错传输是由TCP完成的。另一方面,首部检验和只能检验出IP数据报的首部出现了差错,但不知道首部中的源地址字段有没有出错。如果源地址出现了差错,那么将这种IP数据报传送到错误的地址也是没有任何意义的。
由于IPv4地址即将耗尽,因此必须采取相应的办法去解决。前面已经介绍过采用网络地址转换(NAT)方法以节省全球IP地址和采用无分类编址(CIDR)使IP地址的分配更加合理。这两种方法仅是优化了IPv4地址的使用方法,并没有从根本上解决IP地址的耗尽问题,而采用具有更大地址空间的新版本的IPv6才能真正意义上地解决IPv4即将耗尽问题。下面总结IPv6的主要特点。
虽然IPv6与IPV4不兼容,但总的来说它跟所有其他的因特网协议兼容,包括TCP、UDP、ICMP、DNS等,只是在少数地方做了必要的修改(大部分是为了处理长的地址)。IPv6相当好地满足了预定的目标,主要体现在以下3个方面。
IPv6定义了以下3种地址类型。
为了使地址简洁,通常采用冒号十六进制法表示IPv6地址。它把每16bit用一个十六进制数表示,各值之间用冒号分隔,如68E6:8C64:FFFF:FFFF:0111:1180:960A:FFFF。
通常可以把IPv6地址缩写成更紧凑的形式。当16位域的开头有连续的0时,可以采用缩写法表示,但在域中必须至少有一个数字,如可以把地址5ED4:0000:0000:0000:EBCD∶045A∶000A∶7654缩写成5ED4:0:0:0:EBCD:45A:A:7654。
当有相继的0值域时,还可以采用双冒号表示法进一步缩写。这些域可以用双冒号(::)表示。但要注意,双冒号表示法在一个地址中仅可以出现一次,因为0值域的个数没有编码,需要从指定的总的域的个数中推算。这样,前述示范地址可以被更紧凑地书写成5ED4::EBCD:45A:A:7654。
因特网有两大路由选择协议∶
内部网关协议是在一个自治系统内部使用的路由选择协议,它与互联网中其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如RIP和OSPF路由协议。
若源站和目的站处在不同的自治系统中,当数据报传到另一个自治系统的边界时(这两个自治系统可能使用不同的内部网关协议),就需要使用一种协议将路由选择信息传递到另一个自治系统中,如图4-23所示。这样的协议就是外部网关协议,如BGP-4。
疑问∶讲到这里,不得不提一个知识点。很多考生做了以前比较老的题目,经常会出现"网关"一词,这个词具体是什么意思
解析∶因特网的早期RFC文档中未使用"路由器"而是使用"网关"这一名词。但是在新的RFC文档中又使用了"路由器"这一名词。应当把这两个词当作同义词。
注意∶RIP知识点里面所提到的节点,全部都是路由器,而不包括主机。每个自治系统可以选择该自治系统中各个路由器之间的路由选择协议,而最常用的就是RIP。现在先在脑海中形成一个框架图,就是好多网络,并将每个网络都想象成一朵云,这些云都由很多的路由器连接着,现在应该对自己提出疑问,这些路由器到底是按照一种怎样的原则去选择一条路使得分组从这个网络到达另一个网络?
下面就介绍应用最广泛的一种选路原则,这种原则简单地描述就是使得在传送数据报到目的网络的途中经过的路由器数目最少,时延小但经过路由器多的路都不走。
正因为如此,RIP仅适合比较小的自治系统,因为比较大的自治系统里面的路由器的数量肯定会大大超过15个。在这种情况下使用RIP,距离相隔远点(中间超过15个路由器)的主机就不能通信了。但是现在也许会有人问,最大跳数设置大点不行吗?这肯定是不行的,为了说明这一点,首先需要介绍RIP所使用的距离-向量算法。
背景知识∶需要讲解RIP中"距离"的定义以及RIP的三要点。
解析∶从一个路由器到直接连接的网络的距离定义为1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加1。RIP中的"距离"也称为"跳数"(HopCount),因为每经过一个路由器,跳数就加1。这里的"距离"实际上指的是"最短距离"。
RIP认为一个好的路由就是它通过的路由器的数目少,即"距离短"。RIP允许一条路径最多只能包含15个路由器。"距离"的最大值为16时即相当于不可达。
可见,RIP只适用于小型互联网。RIP不能在两个网络之间同时使用多条路由。RIP选择一个具有最少路由器的路由(最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP的三要点∶
距离-向量算法如下:
学完距离-向量算法后,就可以理解为什么不把最大跳数设置大点,如图4-24所示。
以上讲解了RIP的原理以及所使用的算法,下面讲解RIP报文的组成。
首先要清楚的是RIP报文使用传输层的UDP(第5章详细介绍)进行传送。
RIP报文从应用层交付下来要在传输层加上UDP首部形成UDP用户数据报,然后在网络层加上IP首部形成IP数据报进行传送。
下面详细讲解RIP报文部分(尽量以最简单的方式去描述,因为RIP报文不像IP数据报那么重要,所以很多时候为什么要设置这个不需要讲。RIP报文有两种版本,但现在都是讲解版本2,所以在此仅介绍版本2)。
RIP报文分为首部和路由两大部分,如图4-25所示。
前面讲过首饰=首4,还记得吗?所以首部占用4B。这4B包括1B命令(识别是进行请求操作还是进行响应操作)和1B版本(一般有两个版本,版本1和版本2),但是现在只占用了2B,所以就把剩下的2B用0来填充。
每个路由器把自己的路由表告诉相邻的路由器的时候,需要通过RIP报文来传送。
首先构造4B的首部,然后把自己的路由表分成几段(详细见下面的补充知识点),每一段25个路由(例如,该路由器有100个路由,分成4部分,每部分25个路由),将这25个路由放在首部之后,形成一个RIP报文发给相邻路由器。
补充知识点∶整个RIP报文的最大长度为4B(首部)+25×20B(路由信息)=504B(另一种思考,因为RIP使用UDP传送,而UDP限制其报文大小为512B或更小,去除8B的UDP首部,恰好可以得到RIP报文最大长度为504B)。因此,在更大的RIP网络中,对整个路由表的更新请求需要传送多个RIP报文。报文到达目的地时不提供顺序化(报文不需要编号);一个路由表项不会分开在两个RIP报文中。
因此,任何RIP报文的内容都是完整的,即使它们可能仅是整个路由表的一个子集。当报文收到时,接收节点可以任意处理更新,而不需对其进行顺序化。
RIP的优点是实现简单、开销小,收敛过程较快。RIP的缺点∶
随着网络的扩大,一个自治系统内路由器的个数肯定会很多,但是RIP不适合大型网络并且其收敛速度很慢,所以必须使用一种协议来完成大型自治系统的通信并且尽最大努力去提高收敛的速度,这就是OSPF协议的由来。
前面已经讲过RIP是使用距离-向量算法,而这种算法不适合大型自治系统,所以推出一种链路状态协议,下面讲解该协议的详细实现。
为了更好地理解OSPF协议,本书讲解的方式是先详细讲解OSPF所采用的链路状态协议,然后将OSPF协议与RIP进行比较,总结出几点不同之处,这样就可以更好地区分RIP和OSPF协议。
其实在前面就介绍了链路状态协议的基本原理,这里再结合OSPF协议具体讲解。前面讲过使用RIP路由协议的自治系统,路由器会在一个固定的时隙交换路由信息(不管网络是否发生变化),并且只与自己相邻的路由器交换路由信息。
而OSPF路由协议仅仅当网络拓扑发生变化(如增加或减少一个路由器)时,才向本自治系统的所有路由器发送信息(使用洪泛法)。而这里的信息不再是网络的距离和下一跳路由器(RIP路由协议),而是链路状态的信息(每个路由器都有许多接口,并且每个接口都通过不同的链路连接其他的路由器,每一条链路的时延、带宽都是不一样的,如从这个路由器到那个路由器需要多少的时延就可以看作链路状态信息)。
路由器就将此信息发送给自己相邻的路由器,相邻路由器根据此信息去修改自己的路由表,修改完之后又将该信息从各个端口(当然不包括信息进来的端口)传送给与它相邻的路由器。
这样下去,最后的结果就是在这个自治系统内部的所有路由器都会维持一个链路状态数据库,这个数据库实际上就是全自治系统的拓扑结构图,它在全自治系统范围内是一致的,这称为链路数据库的同步。
讲到这里,该自治系统内部的每一个路由器都有一个一模一样的链路状态数据库了。因此,每一个路由器都知道全自治系统内有多少个路由器以及哪些路由器是相连的,其代价是多少等。每一个路由器就可以使用链路状态数据库中的数据(这里面的数据可以看成是数据结构中图的邻接矩阵,当代价为无穷时,就说明这两个路由器没有相连,即不可达,如果为其他数值,如代价为5,说明这两个路由器直接相连,并且从这个路由器到那个路由器的代价为5),这样就可以通过最短路径算法去算出各个节点到其他节点的最短路径了。
例如,要算路由器1到路由器2、3、4的最短路径(给出邻接矩阵,即链路状态数据库),就可以将路由器1看成是起始节点,然后使用3次Dijksta算法分别计算出路由器1到路由器2、3、4的最短路径,路由表就出来了。一旦网络拓扑又有变化,如以前没有相连的路由器,现在相连了,就又按照这样的步骤去计算路由表,这就是链路状态协议。但是为了使OSPF路由协议能够用于规模很大的网络,并且使其收敛得更快,OSPF路由协议将一个自治系统再划分为若干个更小的范围,称为区域,如图4-26所示。
注意∶虽然使用Dikstra算法可以算出完整的最优路径,但是路由表中不会存储完整路径,而只存储"下一跳"。
教材上说OSPF协议不使用UDP数据报传送,而是直接使用IP数据报传送,在此解释一下什么叫用UDP传送,什么叫用IP数据报传送。
用UDP传送是指将该信息作为UDP报文的数据部分,而直接使用IP数据报传送是指将该信息直接作为IP数据报的数据部分。
从图4-25中可以看出,RIP报文是UDP数据报的数据部分。
总结∶OSPF协议的三要点。
通常每隔10s,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达。在路由器刚开始工作时,OSPF让每一个路由器使用数据库描述分组和相邻路由器交换本数据库中己有的链路状态摘要信息。然后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。经过一系列的这种分组交换,全网同步的链路数据库就建立了。在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就使用链路状态更新分组,用洪泛法对全网更新链路状态。其他路由器在更新后,发送链路状态确认分组对更新分组进行确认,如图4-27所示。
路由收敛速度是衡量路由协议的一个关键指标。RIP周期性地将整个路由表作为路由信息广播至网络中,该广播周期为30s。在一个较大型的网络中,RIP会产生很大的广播信息,占用较多的网络带宽资源,并且由于RIP30s的广播周期,影响了RIP的收敛,甚至出现不收敛的现象。而OSPF是一种链路状态的路由协议,当网络比较稳定时,网络中的路由信息比较少,并且其广播也不是周期性的,因此OSPF路由协议在大型网络中也能够较快地收敛。
在RIP中,网络是一个平面的概念,并无区域及边界等的定义。在OSPF路由协议中,一个网络或者一个自治系统可以划分为很多个区域,每一个区域通过OSPF边界路由器相连。
在OSPF路由选择协议中,如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。而RIP不会,它只能按照一条路径传送数据。
动态路由协议为了能够自动找到网络中的邻居,通常都是以广播地址来发送。RIP使用广播报文来发送给网络上的所有设备,所以在网络上的所有设备收到此报文后都需要做相应的处理,但在实际应用中,并不是所有设备都需要接收这种报文。因此,这种周期性以广播发送报文的形式对它就产生了一定的干扰。同时,由于这种报文会定期地发送,在一定程度上也占用了宝贵的带宽资源。后来,随着各种技术不断提升和发展,出现了以组播地址来发送协议报文的形式,如OSPF使用224.0.0.5来发送,EIGRP使用224.0.0.2来发送。所以,OSPF协议采用组播地址来发送,只有运行OSPF协议的设备才会接收发送来的报文,其他设备不参与接收。
边界网关协议(BGP)是在不同自治系统的路由器之间交换路由信息的协议。
BGP采用的是路径-向量路由选择协议。由于以下原因边界网关协议只能是力求寻找一条能够到达目的网络且比较好的路由(不能转圈),而并非要寻找一条最佳路由。
BGP的基本原理∶每一个自治系统的管理员要选择至少一个路由器(可以有多个)作为该自治系统的"BGP发言人"。一个BGP发言人要与其他自治系统中的BGP发言人交换路由信息,就要先建立TCP连接(可见BGP报文是通过TCP传送的,也就是说BGP报文是TCP报文的数据部分),然后在此连接上交换BGP报文以建立BGP会话,再利用BGP会话交换路由信息。各BGP发言人互相交换网络可达性的信息后,各BGP发言人就可找出到达各自治系统比较好的路由了。
可能疑问点∶在不同的两本书上看到内部网关协议属于不同的层,一会儿是网络层,一会儿是传输层,内部网关协议到底属于哪一层
解析∶内部网关协议包括RIP、OSPF,外部网关协议包括BGP。通过表4-8,这个题目的思路就很清晰了。RIP使用UDP来传送,所以RIP是应用层协议,同理BGP也是应用层协议。OSPF使用IP数据报传送,很明显是传输层协议。但是有些教材一定要说是网络层,这是不严谨的!
一个协议的实现需要依赖协议所在层次的下一层功能。简单地说,如果TCP需要依赖网际层协议IP,那么它就是传输层的协议。同理,如果RIP需要依赖传输层的UDP,那至少它应该是被定义在UDP之上的协议,但是笔者不认为它能算是应用层协议。
举个例子,ICMP是网络层协议,但它需要依赖IP承载,那么ICMP是传输层协议吗?
说明TCP/IP是相当不严谨的。严格意义上说,根本就没有明确定义过这些协议的位置。学习这些协议关键是掌握它们在网络中的功能和如何应用它们,至于它们到底是哪一层的协议,并不重要。
前面就提到过一共有3种IP地址∶单播地址、组播地址和广播地址,本节内容主要详细地介绍组播地址。
组播一定是仅应用于UDP,它们对需将报文同时传往多个接收者的应用来说非常重要。而TCP是一个面向连接的协议,它意味着分别运行于两台主机(由IP地址来确定)内的两个进程(由端口号来确定)之间存在一条连接,所以是一对一的发送。
使用IP组播的缘由∶有的应用程序要把一个分组发送给多台目的主机,采用的方法不是让源主机给每台目的主机都发送一个单独的分组,而是让源主机把单个分组发送给一个组播地址,该组播地址标识一组主机。
网络把这个分组复制后传递给该组中的每台主机。主机可以选择加入或者离开一个组,而且一台主机可以同时属于多个分组。
IP组播的思想∶源主机只发送一份数据,该数据中的目的地址为组播的组地址。组地址中的所有接收者都可以接收到同样的数据副本,并且只有组播内的主机可以接收数据,网络中的其他主机不可能收到该数据。
与广播所不同的是,主机组播时仅发送一份数据,组播的数据仅在传送路径分岔时才将数据报复制后继续转发,如图4-28和图4-29所示。采用组播协议可明显地减轻网络中各种资源的消耗。组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器。
IP使用D类地址支持组播。D类IP地址的前缀是"1110",因而地址范围是240.00~239.255.255.255,每一个D类地址标识一组主机,下面4点应该记住。
IP组播可以分为两种∶一种是只在本局域网上进行硬件组播,另一种是在因特网的范围内进行组播。前一种虽然简单,但是很重要,因为现在大部分主机都是通过局域网接入因特网的。在因特网上进行组播的最后阶段,还是要把组播数据报在局域网上用硬件组播交付给组播组的所有成员。
组播地址与MAC地址的换算算法记住即可,下面将换算过程模拟一遍。
现假设组播地址为224.215.145.230,先把IP地址换算成二进制
224.215.145.230→11100009.11010111.10010001.11100110,只映射IP地址的后面23位,因为MAC地址是用十六进制表示的,所以只要把二进制的IP地址4位一组合就可以了,其中第24位取0,没有为什么,这是规定,即01010111.10010001.11100110换成十六进制为57-91-E6,然后再在前面加上固定的首部,即01-00-5E。所以,最后结果应该是01-00-5E-57-91-E6。
虽然结果得到了,但是疑问又来了,参考下面的疑问。
疑问∶组播MAC地址和组播IP地址的这种映射关系不是唯一对应的,因为在32位IP组播地址可以变化的28位中只映射了其中的23位,还剩下5位是可以自由变化的,所以每32个组播IP地址映射一个组播MAC地址。这样会不会导致数据报发送错误
解析∶能映射成相同MAC地址的不同组播IP地址出现在同一个网络里面的概率很小,如果出现了,那么加入其中一个组的主机能收到另一个组的组播报,但是该主机的上层协议会做出判断,丢弃不属于自己的组播报。
随着移动终端设备的广泛使用,移动计算机和移动终端等设备也开始需要接入网络(Internet),但传统的IP设计并未考虑到移动节点会在链接中变化互联网接入点的问题。
传统的IP地址包括两方面的意义∶一方面是用来标识唯一的主机,另一方面它还作为主机的地址在数据的路由中起重要作用。
但对于移动节点,由于互联网接入点会不断发生变化,所以其IP地址在两方面发生分离,一方面是移动节点需要一种机制来唯一标识自己,另一方面是需要这种标识不会被用来路由。而移动IP便是为了让移动节点能够分离IP地址这两方面功能,而又不彻底改变现有互联网的结构而设计的。
总结来说就是移动IP技术可以使移动节点以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。听起来很悬,那怎么去实现呢下面用提问的方式来慢慢引入。
问题1∶实现移动IP需要哪些功能实体?
解析∶需要以下三大功能实体。
问题2∶实现移动IP需要哪些技术
解析∶需要以下四大技术。
技术一∶代理搜索。
计算机要知道自己是否正在漫游,这里就要用到代理搜索技术。
技术二∶申请转交地址。
移动节点移动到外网时从外代理处得到的临时地址,就好像我现在到了外地,无依无靠,已经居无定所了,所以别人寄信给我没有固定地址,我要找一个有固定住址的朋友,以后如果有人写信给我就直接寄给他,然后再由他转交给我,这个固定住址在移动IP领域就称为转交地址。
移动节点到达外网时进行一系列认证、注册、建立隧道的过程。
技术四∶隧道。
本地代理与外部代理之间临时建立的双向数据通道。
可能疑问点∶移动IP和动态IP有什么区别
总结∶移动IP为移动主机设置了两个IP地址,即主地址和辅地址(转交地址)==。移动主机在本地网时,使用的是主地址。当移动到另外一个网络时,需要获得一个辅助的临时地址,但是此时主地址仍然保持不变。当从外网移回本地网时,辅地址改变或撤销,而主地址仍然保持不变。
路由器工作在网络层,实质上是一种多个输入端口和多个输出端口的专用计算机,其任务是连接不同的网络转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
整个路由器的结构可划分为两大类∶路由选择部分和分组转发部分,如图4-30所示。
路由选择部分的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表,其核心部件是路由选择处理器。
分组转发部分由3部分组成∶一组输入端口、交换结构和一组输出端口,交换结构从输入端口接收到分组后,根据转发表对分组进行处理,然后从一个合适的输出端口转发出去。
交换结构是路由器的关键部件,它将分组从一个输入端口转移到某个合适的输出端口。
有3种常用的交换方法∶通过存储器进行交换、通过总线进行交换和通过互联网络进行交换。以上3种交换了解即可,不要求掌握。下面结合图4-30来详细介绍路由器的工作流程,参考48.2小节。
一个数据帧或包被传输到本地网段上的每个节点就是广播。由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制、传播数据帧,最终导致网络性能下降,甚至网络瘫痪,这就是广播风暴。所以需要有能够隔离广播域的设备才可以抑制广播风暴,只有路由器可以隔离广播域,总结如下∶
讲解工作流程前先把一些易混的概念总结一下。
详细工作流程如下∶
补充知识点∶若路由器处理分组的速率达不到分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。
解析∶C。
I∶路由器上都会运行相应的路由协议,如RIP、OSPF协议等;另外,设置路由表也是路由器必须完成的,故I正确。
Ⅱ∶当监测到拥塞时,路由器会将IP分组丢弃,并向源点发送源抑制报文,故Ⅱ正确。
Ⅲ∶尽管路由器会对IP分组首部进行差错校验,但是不能确保传输的IP分组不丢失。当路由器收到的数据报的首部中有的字段值不正确时,就丢弃该数据报,并向源站发送参数问题报文,故Ⅲ错误。
Ⅳ∶这个是路由表最基本的路由功能,当路由器某个输入端口收到分组后,路由器将按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止,故IⅣ正确。