大纲要求核心考点网络层的功能异构网络互联路由与转发拥塞控制路由算法静态路由和动态路由距离 - 向量路由算法链路状态路由算法层次路由IPV4IPV4 分组IPV4 地址IPv4 地址的分类A 类地址(0-127)B 类地址(128-191)C 类地址(192-223)6 种特殊地址1. 直接广播地址(net-id:1)2. 受限广播地址(1:1)3. 这个网络上的这个主机(0:0)4. 这个网络上的特定主机(0:特定)5. 环回地址(127:特定 了解即可,不懂没关系,只需知道 127 是环回用的即可)NAT子网划分和子网掩码子网划分子网掩码CIDRARPDHCPICMPICMP 差错报告报文的分类(2010 年考过一道选择题)ICMP 询问报文的分类不应发送 ICMP 差错报告报文的几种情况IPv6IPv6 的特点IPv6 的格式路由协议路由选择协议内部网关协议(IGP)外部网关协议(EGP)RIP距离 - 向量算法RIP 报文格式首部路由RIP 的优缺点OSPF链路状态协议OSPF 的 5 种分组类型(了解)RIP 和 OFPF 的比较协议参数收敛速度分层负载平衡灵活性以组播地址发送报文BGPBGP 的基本概念BGP 的特点BGP 的 4 种报文RIP、OSPF、BGP 的最终陈述IP 组播组播的概念IP 组播的地址(224-239)组播地址与 MAC 地址的换算局域/以太网上进行硬件多播因特网上进行IP多播组播路由选择协议——网际组管理协议IGMP移动 IP移动 IP 的概念移动 IP 的通信过程网络层设备路由器的组成和功能路由表与路由转发路由环路问题
大纲要求
(一)网络层的功能
- 异构网络互连
- 路由与转发
- 拥塞控制
(二)路由算法
- 静态路由与动态路由
- 距离 - 向量路由算法
- 链路状态路由算法
- 层次路由
(三)IPv4
- IPv4 分组
- 2.IPv4 地址与 NAT
- 子网划分与子网掩码、CIDR
- ARP、DHCP 与 ICMP
(四)IPv6
- IPv6 的主要特点
- IPv6 地址
(五)路由协议
- 自治系统
- 域内路由与域间路由
- RIP 路由协议
- OSPF 路由协议
- BGP 路由协议
(六)IP 组播
- 组播的概念
- IP 组播地址
(七)移动 IP
- 移动 IP 的概念
- 移动 IP 的通信过程
(八)网络层设备
- 路由器的组成和功能
- 路由表与路由转发
核心考点
- (★★★★★)子网划分和无分类编址 CIDR
- (★★★★★)路由与转发,即各种路由算法
- (★★★★)IP 地址的分类、IP 数据报格式、NAT
- (★★★)ARP、DHCP 和 ICMP
- (★★★)3 种常用路由选择协议∶RIP、OSPF、BGP
- (★★)IP 组播、移动 IP 的基本概念
- (★★)路由器的组成和功能
网络层的功能
异构网络互联
世界上有数以百万计的网络,要实现这些网络的互连是一件相当困难的事情,因为这些网络并没有统一的标准。
而让大家都使用同一个网络也是不可能的,因为用户的需求是多种多样的,不可能有一种单一的网络能够适应所有用户。虽然网络不可能一样,但是可以想办法使用一种协议让路由器连接的网络都遵守这种协议,在这种情况下可以将互连起来的网络看成一个虚拟互联网络。
虚拟互联网络也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是利用协议可以使这些性能各异的网络让用户看起来好像是一个统一的网络,如图 4-1 所示。这种协议就是网络层重点讨论的 IP。

将网络互连起来肯定需要一些中间设备(又称为中间系统或中继系统),根据中继系统所在的层次,可以有以下 4 种不同的中继系统。
- 物理层的中继系统∶中继器或集线器。
- 数据链路层的中继系统∶网桥或交换机。
- 网络层的中继系统∶路由器。
- 网络层以上的中继系统∶网关。
当中继系统是中继器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。互联网都是指用路由器进行互连的网络。
使用虚拟互联网的好处∶当互联网上的主机进行通信时,就好像在同一个网络上通信,而看不见互连的具体的网络异构细节(如超时控制、路由选择协议等)。
可能疑问点∶“尽最大努力交付” 都有哪些含义?
解析∶
- 不保证源主机发送出来的 IP 数据报一定无差错地交付到目的主机。
- 不保证源主机发送出来的 IP 数据报都在某一规定的时间内交付到目的主机。
- 不保证源主机发送出来的 IP 数据报一定按发送时的顺序交付到目的主机。
- 不保证源主机发送出来的 IP 数据报不会重复交付到目的主机。
- 不故意丢弃 IP 数据报。丢弃 IP 数据报的情况∶路由器检测出首部检验和有错误;或由于网络中通信量过大,路由器或目的主机中的缓存已无空闲空间。
但是要注意,IP 数据报的首部中有一个 " 首部检验和 "。当它检验出 IP 数据报的首部出现了差错时,就将该数据报丢弃。
因此,凡交付给目的主机的 IP 数据报都是 IP 数据报的首部没有出现差错的,或没有检测出来有差错的。这就是说,传输过程中出现差错的 IP 数据报都被丢弃了。
例如,源主机一连发送了 1000 个 IP 数据报,结果有 9999 个 IP 数据报都出现了差错,因而都被丢弃了。这样,只有一个不出错的 IP 数据报最后交付给了目的主机。这也完全符合 “尽最大努力交付” 的原则。甚至当所发送的 10000 个 IP 数据报都被丢弃了,也不能说这不是 “尽最大努力交付”,只要路由器不是故意地丢弃 IP 数据报即可。
现在因特网上绝大多数的通信量都属于 “尽最大努力交付”。如果要保证数据可靠地交付给目的地,则必须由使用 IP 的高层软件来负责解决这一问题。
路由与转发
路由器的主要功能包括路由选择(确定哪一条路径)与分组转发(当一个分组到达时所采用的动作)。
根据所需性能要求,可以采用适当的路由算法来构造路由表进行路由选择。不仅如此,该路由表还会根据从各相邻路由器所得到的关于整个网络的拓扑变化情况,动态地改变所选择的路由,以便得到最佳路由。
- 路由选择∶根据路由算法确定一个进来的分组应该被传送到哪一条输出路线上。如果子网内部使用数据报,那么对每一个进来的分组都要重新选择路径。如果子网内部使用虚电路,那么只有当创建一个新的虚电路时,才需要确定路由路径。
- 分组转发∶路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
注意∶路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去区分转发表和路由表,而是笼统地使用路由表这一名词。
可能疑问点∶在一个互联网中,能否使用一个很大的交换机(Switch)来代替互联网中很多的路由器?
解析∶不行。交换机和路由器的功能不一样。
交换机可在单个的网络中和若干台计算机相连,并且可以将一台计算机发送过来的帧转发给另一台计算机。从这一点上看,交换机具有集线器的转发帧的功能。
但交换机比集线器的功能强很多。集线器在同一时间只允许一台计算机和其他计算机进行通信,但交换机允许多台计算机同时进行通信。
路由器连接两个或多个网络。路由器可在网络之间转发分组(IP 数据报)。特别是,这些互连的网络可以是异构的。
因此,如果是许多相同类型的网络互连在一起,那么用一个很大的交换机(如果能够找得到)代替原来的一些路由器是可以的。
如果这些互连的网络是异构的网络,那么就必须使用路由器来进行互连。
可能疑问点∶路由表中只给出到目的网络的下一跳路由器的 IP 地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的 IP 地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处?
解析∶这样做的最大好处就是使得路由选择成为动态的,十分灵活。当 IP 数据报传送到半途时,若网络的情况发生了变化(如网络拓扑变化或出现了拥塞),那么中途的路由器就可以改变其下一跳路由,从而实现动态路由选择。
拥塞控制
本章仅介绍拥塞控制的基本概念,有关拥塞控制更详细的讲解请参考第 5 章 5.3.5 小节和 5.3.6 小节。
计算机网络(如交通网络一样)在一个子网或子网的一部分出现太多分组(车辆)时,网络性能开始下降,这种情况称为拥塞。因此需要采取拥塞控制方法,以确保网络不出现拥塞,或确保网络在出现拥塞时也能保持良好的性能。
拥塞控制可以分为两大类∶
- 开环控制∶在网络系统设计时,事先就要考虑到有关发生拥塞的各种因素,力求在系统工作时不会出现拥塞。一旦整个系统启动并运行起来,就不再需要中途进行修改。开环控制手段可包括确定何时可接收新流量、确定何时可丢弃分组及丢弃哪些分组、确定何种调度决策等。所有这些手段的共性是,在做决定时不考虑当前网络状态。
- 闭环控制∶事先不考虑有关发生拥塞的各种因素,采用监视系统去监视,即时检测到哪里发生拥塞(就像道路上的摄像头,看到哪里发生堵车,立刻派交警去解决),然后将拥塞信息传到合适的地方以便调整系统运行,改正问题。其主要措施包括检测拥塞、报告拥塞和调整措施。
加上合适的拥塞控制后,网络就不易出现拥塞和死锁现象了,但代价是当提供的负载较小时,有拥塞控制的吞吐量反而比无拥塞控制时要小。
注意∶拥塞控制和流量控制的关系密切,但二者之间也存在一些差异。拥塞控制必须确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及所有主机、路由器以及导致网络传输能力下降的所有因素。而流量控制只与给定的发送端和接收端之间的点对点通信量有关,其任务是使发送端发送数据的速率不能快得让接收端来不及接收。
路由算法
静态路由和动态路由
路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。
如果从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略(又称为非自适应路由选择)与动态路由选择策略(又称为自适应路由选择)。
静态路由选择的特点是简单和开销小,但不能及时适应网络状态的变化。对于很小的网络,完全可以采用静态路由选择,自己手动配置每一条路由。
动态路由选择的特点是能较好地适应网络状态的变化,但实现起来比较复杂,开销也较大。因此,动态路由适用于较复杂的网络。
现代的计算机网络通常使用动态路由选择算法。动态路由算法又可分为两种基本类型∶距离 - 向量路由算法和链路状态路由算法。
距离 - 向量路由算法
在距离 - 向量路由算法中,所有的节点都定期地将它们整个路由选择表传送给所有与之直接相邻的节点。这种路由选择表包含每条路径的目的地(另一节点)和路径的代价(距离)。
注意∶这里的距离是一个抽象的概念,如 RIP 就将距离定义为 “跳数”。跳数指从源端口到达目的端口所经过的路由个数,经过一个路由器跳数加 1。当然距离还可以定义成其他因素。
在该路由算法中,所有节点都必须参与距离 - 向量交换,以保证路由的有效性和一致性。换句话说,所有节点都监听从其他节点传送来的路由选择更新信息,并在下列情况下更新它们的路由选择表。
- 情况一∶被通告一条新的路由,该路由在本节点的路由表中不存在,此时本地节点加入这条新的路由。
- 情况二∶通过发送路由信息的节点有一条到达某个目的地的路由,该路由比当前使用的路由有较短的距离(例如,RIP 就是有较小的跳数)。在这种情况下,用经过发送路由信息的节点的新路由替换路由表中到达那个目的地的现有路由。
距离 - 向量路由算法的实质是通过迭代法来得到到达某目标的最短通路。它要求每个节点在每次更新中都将它的全部路由表发送给它的所有相邻节点。显然,如果该网络的节点越多,那么每次因为路由更新所产生的报文就越大。另外,由于更新报文发给直接相邻的路由器,因此所有节点都将参加路由选择信息交换。基于这些原因,在通信子网上传送的路由选择信息的数量很容易变得非常大。
目前,最常用的距离 - 向量路由算法是 RIP 算法,它采用 “跳数” 作为距离的代价。
链路状态路由算法
链路状态路由算法要求每个参与该算法的节点都有完全的网络拓扑信息,它们执行下述两项任务。
- 主动测试所有邻接节点的状态。两个共享一条链接的节点是相邻节点,它们连接到同一条链路。
- 定期地将链路状态传播给所有其他节点(或称为路由节点)。
在一个链路状态路由选择中,一个节点检查所有直接链路的状态,并将所得的状态信息发送给网上所有其他的节点,而不仅是发送给那些直接相连的节点。每个节点都用这种方式,所有其他节点从网上接收包含直接链路状态的路由选择信息。
每当链路状态报文到达时,路由节点便使用这些状态信息去更新自己的网络拓扑和状态 “视野图”,一旦链路状态发生了变化,节点对更新的网络图利用 Dijkstra 最短路径算法重新计算路由,从单一节点出发计算到达所有目的节点的最短路径。
链路状态路由算法主要有三大特征∶
- 向本自治系统(参考 4.2.4 小节)中的所有路由器发送信息。这里使用的方式是洪泛法,即路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有相邻路由器(但不再发送给刚刚发来信息的那个路由器)。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓 “链路状态” 就是说明本路由器都和哪些路由器相邻以及该链路的 “度量”。对于 OSPF 算法,链路状态的 “度量” 主要用来表示费用、距离、时延、带宽等。
- 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送信息。由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因此与整个互联网的规模并无直接关系,所以链路状态路由算法可以用于大型的或路由信息变化剧烈的互联网络环境。
目前,最常用的链路状态路由算法是 OSPF 算法。
层次路由
背景知识∶首先要清楚因特网为什么采用分层次的路由选择协议,原因有两个。
- 随着时间的推移,因特网的规模越来越大,现在就有几百万个路由器互连在一起了,如果让所有路由器知道所有网络应该怎样到达,则这种路由表将非常大,处理起来也太耗费时间,而所有这些路由器交换路由信息所需的带宽就会使因特网的通信链路达到饱和。
- 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。
基于上述两个原因,因特网将整个互联网划分为许多较小的自治系统(但是注意一个自治系统不是一个局域网,里面包含很多局域网),每个自治系统有权自主地决定本系统内应采用何种路由选择协议。但是问题出来了,如果两个自治系统需要通信,并且这两个自治系统内部所使用的路由选择协议不同,那么怎么通信?
所以就需要一种在两个自治系统之间的协议来屏蔽这些差异,据此,因特网把路由选择协议划分为两大类∶
- 一个自治系统内部所使用的路由选择协议称为内部网关协议(IGP),具体的协议有 RIP 和 OSPF 等。
- 自治系统之间使用的路由选择协议称为外部网关协议(EGP),主要在不同自治系统的路由器之间交换路由信息,并负责为分组在不同自治系统之间选择最优的路径,具体的协议有 BGP。
自治系统内部的路由选择称为域内路由选择。相应的,自治系统之间的路由选择称为域间路由选择。
对于非常大的网络,OSPF 协议将一个自治系统再划分为若干个更小的范围,叫作区域。划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这样减少了整个网络上的通信量。
在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。
为了使每一个区域能够和本区域以外的区域进行通信,OSPF 使用层次结构的区域划分。在上层的区域叫作骨干区域,骨干区域的标识符规定为 0.0.0.0。
骨干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括。每一个区域至少应当有一个区域边界路由器。在骨干区域内的路由器叫作骨干路由器,一个骨干路由器可以同时是区域边界路由器。在骨干区域内还要有一个路由器,专门与本自治系统外的其他自治系统交换路由信息,这样的路由器叫作自治系统边界路由器。
采用分层次划分区域的方法使交换信息的种类增多了,同时也使 OSPF 协议更加复杂。但此方法能使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协议能够用于大规模的自治系统中。
故事助记∶将整个世界看作一个因特网,每个国家是不同的自治系统,而每个国家又分为许多省(区域),每个省的人只懂得自己省的风俗(每个路由器只知道本区域的完整网络拓扑)。但是各个省之间是需要互相交流的,这样就在每个省选出一个省长(区域边界路由器),这样该省的百姓就可以将信息通过省长传给另外一个省长(通过骨干区域)。当然有时候国家首脑还要给各个省长开会,相互交流信息,所以需要一个组织(骨干区域,取名为 0.0.0.0),该组织包括各省长和国家首脑。所以说省长需要演好两个角色,一个是骨干区域的成员,另一个是区域边界成员。当然这样是不够的,如果两个国家互访(不同自治系统交换信息),这时就派国家首脑去和外国交流(可以是骨干区域的任何一个路由器),此时国家首脑可以看成是自治系统边界路由器。
IPV4
IPV4 分组
IP 数据报首部格式如图 4-2 所示。

从宏观方面,一般来说,IP 数据报的首部是 60B,其中 21~60B 部分是可选字段和填充,用来完成某种功能(什么功能不用管)。而如果使用某功能后,首部的长度若不再是 4B 的倍数时,就需要使用填充来填满这个 4B。例如,使用某功能后首部长度是 22B(该功能占用了 2B),那么就要用自动填充功能来填到 24B。但是一般来说 IP 数据报不需要使用任何功能,所以在默认情况下考生应该将 IP 数据报的首部看成是 20B(已经是 4B 的倍数,所以不需要填充),千万记住!
从微观的角度去理解这 20B 的作用,下面是总体介绍,易考到的首部部分会在后面进行总结。
- 版本∶占 4 位,就是说这个 IP 数据报是 IPv4 版本还是 IPv6 版本,通信双方的版本必须一致。
- 首部长度∶占 4 位,IP 数据报的首部实际上是 60B(但是有 40B 基本从不使用,考试的时候就认为 IP 数据报的首部是 20B,绝对不会错),前面也讲过 IP 数据报首部的长度必须是 4B 的倍数,这样只要用 15 个标记(每个标记 4 位)就可以表示 60B,例如,0001 表示 4B,0010 表示 8B,…,1111 表示 60B。
- 区分服务∶占 1B,从没使用过,不会考,可忽略。
- 总长度∶占 2B,千万不要和首部的基本长度弄混淆,这里的基本单位长度是 1B,不再是 4B,并且总长度包括了首部和数据部分,很明显 16 位可以表示的长度为 65535B(因为 16 位表示的数的范围是 0~65535)。
如果 IP 数据报的总长度这么长,MAC 帧的数据部分最大长度才 1500B(可能还少于 1500B,每个网络是可以自己定义的),而 IP 数据报的总长度恰好就是 MAC 帧的数据部分,所以当 IP 数据报的长度大于 1500B 时,很明显就必须要切割之后发送。但是问题出现了,切割之后接收端怎么合并?
这就需要片偏移,只需要按照片偏移从小到大合并即可,在合并的过程中一定要将首部的 20B 删除。
疑问∶细心的考生可能会发现,在总长度的设计上明显存在缺陷。MAC 帧数据部分最大的长度是 1500B,既然 IP 数据报是 MAC 帧的数据部分,那么如果 IP 数据报的总长度字段是 2B,可以表示的长度达到 65535B,这样不是浪费了吗?
解析∶因为以前用的不是以太网,也许以前用的局域网帧格式可以让帧的长度很长,甚至不加以限制。只是以太网比较流行了,也许才发现这个缺点(这是编者理解的,如果有更好的答案,请与编者联系)。
- 标识∶占 2B,它是一个计数器,用来产生 IP 数据报的标识。
- 标志∶占 3 位,目前只有前 2 位有意义,即 MF 和 DF。 MF 前面已经讲过,作用是为了合并数据报;首先接收端收到的数据报要是原数据报的分片(这样的话就需要标识,每个原数据报都可以将这个标识填到每个分片的首部,就是下面要介绍的标识),但是,万一等到的是最后一片,而接收端不知道是最后一片,还会一直等,为了打破僵局,这就需要有一个标志位 MF,去标记该片是不是最后一位。现在继续假设已经收到了最后一个分片,怎样将所有的分片合并呢? DF 的作用∶比如一个数据报经过某个路由器发现它的长度超过了最大发送长度,并且 DF=1(不能分片),这样该数据报就过不去了,然后路由器丢弃这个数据报,并发送一个 ICMP 报文(参考 4.3.8 小节)给发送端,说该数据报太长了过不去,并且在 ICMP 报文中填写了该路由器传送的最大传输单位,让主机考虑怎么传,但是如果 DF=0,即使下一跳数据报太大,仍然可以继续分片传送,这就是 DF 的作用。
- 片偏移∶占 13 位,前面已经讲过,但是需要注意的是片偏移是 8B 的整数倍。理由就是数据报总长度为 16 位,而片偏移只有 13 位,要使得 13 位能准确地表示 16 位的长度,就必须 1 位可以当 3 位用,即 ,为了更好地理解上面所讲的,请参考例 4-1。在例 4-1 中有一点需要提醒,现在假定数据报片 2 经过某个网络时还需要分片,此时还需要分片是建立在数据报 2 的 DF 值都是 0(见表 4-1)的基础上,若数据报片 2 的 DF 值等于 1,则该数据报就不可达,请千万注意。
【例 4-1】某数据报的总长度为 3820B(使用固定首部),需要分片为长度不超过 1420B 的数据报片,应该怎么分?
解析∶由于该数据报采用固定首部,因此该数据报的数据部分长度为 3800B。又由于分片为长度不超过 1420B 的数据报片,因此每个数据报片的数据部分长度不能超过 1400B(原始数据报首部被复制为各数据报片的首部,仅需修改有关字段的值)。图 4-3 给出分片后得出的结果(注意片偏移的数值)。


现在假定将数据报片 2 的 DF 设置为 1,并且假设中途要经过一个允许最大数据报的长度为 820B 的网络。这样数据报片 2 又需要分片,但是此时 DF 值为 1,也就是说不允许分片,则需要将其丢弃。若此时 DF 值为 0,允许分片,则需要将数据报片 2 分片为数据报片 2-1(携带 800B)和数据报片 2-2(携带 600B),见表 4-2。

注意∶数据报片 2-2 的 MF 值仍然是 1,因为后面还有数据报片 3。
- 生存时间∶占 8 位,如果一个数据报一直在网络中转圈,网络资源就被白白浪费了,所以需要设置生存时间(Time ToLive,TTL),即数据报在网络中可通过的路由器数的最大值。
- 协议∶占 8 位,当接收端收到数据报时,肯定要交付给传输层的某种协议去处理,是交给传输层的 TCP,还是交给传输层的 UDP,需要此标志给出,如图 4-4 所示。

- 首部校验和∶占 16 位,只需记住只检验数据报的首部,不检验数据部分,至于具体检验过程可参考第 5 章关于 UDP 数据报校验和。
- 源地址∶发送端主机的 IP 地址。
- 目的地址∶接收端主机的 IP 地址。 至此,20B 的首部全部介绍完毕,也许看到这里你确实记住了,但是根据经验,不出一周必忘无疑,希望下面的总结能够帮助大家将遗忘降到最低。
总结∶
在首部中接触了 3 个关于长度的标记,一个是首部长度,一个是总长度,一个是片偏移,它们的基本单位分别为 4B、1B、8B(这个一定要记住)。通过一句话帮助记忆∶你不要总是拿 1 条假首饰(首 4)来骗(偏)我吧(8),记住关键词总 1、首 4、偏 8。
现在知道了 IP 数据报是由什么构成的,下面来讨论 IP 数据报有关转发的一些疑问总结。
- 默认路由中的 “默认” 二字并没有出现在路由表中,“默认” 会被记为 0.0.0.0,这个一定要记住,2009 年最后一题就考到了。但是这里仅仅是将 0.0.0.0 作为默认目的地址,绝对不是目的地址,0.0.0.0 不能作为目的地址。
- 得到下一跳路由器的 IP 地址后不是直接将该地址填入到待发送的数据报,而是将该 IP 地址转成 MAC 地址(通过 ARP,参考 4.3.6 小节),将其放到 MAC 帧首部中,然后根据这个 MAC 地址来找到下一跳路由器。
也许有人会问,为什么要转换成物理地址?不能直接通过 IP 地址去找吗?
当然不能,计算机网络中一直有这样一句话,好像两台主机的网络层有一条链路一样,这仅仅是好像,不是真实有,就好像两栋 7 层楼房,你要从这一栋的第三层到另一栋的第三层,你能直接过去吗?肯定不行,一定要先下到一楼然后走向另一栋,再走楼梯到三楼,但是如果不考虑中间这些细节的话,这个人就好像是从三楼直接飞过去的。
- 只知道 IP 地址,也就是说,这个人只能站在三楼才能看见去对面三楼的路线,但是你从这一栋下到一楼后走向另一栋,你是不知道怎么样才能过去的,所以第一层也需要地址才知道怎么走到另一栋,这里的地址就是 MAC 地址。所以说 MAC 地址是数据链路层和物理层使用的地址,一定要使用 MAC 地址去找路由器。
- 在不同网络中传送时,MAC 帧首部中的源地址和目的地址要发生变化,但是网桥在转发帧时,不改变帧的源地址,注意区分。
可能疑问点∶有的教材上使用虚拟分组(VirtualPacket)这一名词,虚拟分组是什么意思? 它和 IP 数据报有什么区别?
解析∶虚拟分组就是 IP 数据报。
因为因特网是由大量异构的物理网络互连而成的,这些物理网络的帧格式是各式各样的,它们的地址也可能是互不兼容的。路由器无法将一种格式的帧转发到另一种网络,因为另一种网络无法识别与自己格式不同的帧的地址。路由器也不可能对不同的地址格式进行转换。
为了解决这一问题,IP 定义了 IP 数据报的格式。所有连接在因特网中的路由器都能识别 IP 数据报的 IP 地址,因此能够对 IP 数据报进行转发(在进行转发时当然要调用 ARP 以便获得相应的硬件地址)。IP 数据报是作为物理网络的帧的数据部分。各个物理网络在转发帧时是根据帧的首部中的硬件地址而不看帧的数据部分,因此所有的物理网络都看不见帧里面的 IP 数据报,这样就使得 IP 数据报得到 “虚拟分组” 这样的名称。
可能疑问点∶IP 数据报中的数据部分的长度是可变的(IP 数据报不是定长的),这样做有什么好处?
解析∶这样做的好处是可以满足各种不同应用的需要。有时从键盘键入的一个字符就可以构成一个很短的 IP 数据报,但有的应用程序需要将很长的文件构成一个大的 IP 数据报(最长为 64KB,包括首部在内)。当然,大多数 IP 数据报的数据部分的长度都远大于首部长度,这样做的好处是可以提高传输效率(首部开销所占的比例较小)。
可能疑问点∶IP 数据报在传输的过程中,其首部长度是否会发生变化?
解析∶首部长度不会发生变化,但首部中的某些字段(如生存时间、标志、检验和等)的数值一般都要发生变化。
IPV4 地址
IPv4 地址的分类
把整个因特网看作一个单一的、抽象的网络。IP 地址就是给每个连接在因特网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。一般将 IP 地址分为 A 类地址、B 类地址、C 类地址、D 类地址和 E 类地址。
本知识点只介绍 A、B、C 三类地址,D 类地址将在 4.6.2 小节中介绍,E 类地址保留为以后使用,不需要介绍。最后,本知识点将会介绍一些特殊的 IP 地址,这些全是命题老师喜欢出题的地方。
A 类地址(0-127)
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 类网络上的最大主机数是 。

B 类地址(128-191)
如图 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 类地址的每一个网络上的最大主机数是

C 类地址(192-223)
如图 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 类地址的每一个网络上的最大主机数是。

补充知识点∶关于 A、B、C 类地址的最小网络地址和最大网络地址。
解析∶
A 类地址最小网络地址与最大网络地址分别是 (1~126)
00000001
.00000000.00000000.00000000—-
01111110
.00000000.00000000.00000000
B 类地址最小网络地址与最大网络地址分别是 (128.1~191.255)
10000000.00000001.00000000.00000000—-10111111.11111111.00000000.00000000
C 类地址最网络地址与最大网络地址分别是 (192.0.1~223.255.255)
11000000.00000000.00000001.00000000—-11011111.11111111.11111111.00000000
6 种特殊地址
6 种特殊地址见表 4-3。
注意∶网络地址较常见,任何教材都会讲,在此就不讲解了,本知识点主要针对其他 5 种特殊地址进行总结。

1. 直接广播地址(net-id:1)
在 A、B、C 类地址中,若主机号全 1,则这个地址称为直接广播地址。
路由器使用这种地址把一个分组发送到一个特定网络上的所有主机,所有主机都会收到具有这种类型的目的地址的分组。要注意到,这个地址在 IP 分组中只能用作目的地址。还要注意到,这个地址也减少了 A、B、C 类地址中每个网络中可用的主机数。在图 4-8 中,路由器发送数据报,它的目的 IP 地址具有全 1 的主机号,在这个网络上的所有设备都接收和处理这个数据报。

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,即 01001111 11111111,转换成十进制为 79.255。故该网络的广播地址为 180.80.79.255。
2. 受限广播地址(1:1)
IP 地址为 255.255.255.255,这个地址用于定义在当前网络(绝对不是整个因特网,注意出选择题!)上的广播地址。一个主机若想把报文发送给所有其他主机,就可以使用这样的地址作为分组中的目的地址,但是路由器会把这种类型的地址阻拦,使这样的广播仅局限于本地局域网。应注意,这种地址属于 E 类地址,如图 4-9 所示。

3. 这个网络上的这个主机(0:0)
IP 地址为 0.0.0.0,表示这个网络上的主机。这发生在某个主机在运行程序时但又不知道自己的 IP 地址,主机为了要发现自己的 IP 地址,就给引导服务器发送 IP 分组,并使用 0.0.0.0作为源地址,并且使用 255.255.255.255 作为目的地址。此外,这个地址永远是一个 A 类地址,而不管网络是什么类别,这种全 0 地址使 A 类地址网络减少了一个,如图 4-10 所示。

4. 这个网络上的特定主机(0:特定)
具有全 0 的网络号的 IP 地址表示在同一个网络上的特定主机,用于当某个主机向同一网络上的其他主机发送报文时。因为分组被路由器挡住了,所以这是把分组限制在本地网络上的一种方法。还应注意到,实际上这是一个 A 类地址而不管是什么网络类型,如图 4-11 所示。

5. 环回地址(127:特定 了解即可,不懂没关系,只需知道 127 是环回用的即可)
第一个字节等于 127 的 IP 地址作为环回地址,这个地址用来测试机器的软件。当使用这个地址时,分组永远不离开这个机器,这个分组就简单地返回到协议软件,因此这个地址可以用来测试 IP 软件。
例如,像 ping 这样的应用程序,可以发送把环回地址作为目的地址的分组,以便测试 IP 软件能否接收和处理分组。另一个例子就是,客户进程用环回地址发送报文给同样机器上的服务器进程。应当注意,这种地址在 IP 分组中既能用作目的地址,也能用作源地址。实际上这也是 A 类地址,环回地址也会使 A 类地址中的网络数减少一个,如图 4-12 所示。

补充知识点∶IP 地址具有以下一些重要特点。
- IP 地址是一种分等级的地址结构。分等级的两个好处如下∶
①IP 地址管理机构在分配 IP 地址时 只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理。
②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
- 实际上 IP 地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号(net-id)必须是不同的。这种主机称为多接口主机,例如,路由器的每个接口都有一个不同网络号的 IP 地址。
- 用中继器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号。
- 所有分配到网络号的网络,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网,两者都是平等的。
可能疑问点∶在 IP 地址中,为什么使用最前面的一个或几个比特来表示地址的类别?
解析∶知道了 IP 地址的类别,就可以很快地将 IP 地址的前缀和后缀区分开,这在路由器寻找下一跳地址时是必须做的一件事。
但是怎样才能尽快地让计算机完成这一动作呢?如果将 IP 地址大致按照一定的地址数目划分为几部分作为各类地址,那么计算机执行这样的操作将会花费较多的时间。计算机进行比特操作(如左移、右移、布尔运算等)比进行整数运算要快得多。因此,IP 地址的类别划分就用地址中最前面的一位或几位来标志地址的类别。
可能疑问点∶全 “1” 的 IP 地址是否是向整个因特网进行广播的一种地址?
解析∶不是。
设想一下,如果是向整个因特网进行广播的地址,那么一定会在因特网上产生极大的通信量,这样会严重地影响因特网的正常工作,甚至还会使因特网瘫痪。
因此,在 IP 地址中的全 “1” 地址表示仅在本网络(就是这个主机所连接的局域网)上进行广播。这种广播称为受限的广播(Limited Broadcast)。
如果 net-id 是具体的网络号,而 host-id 是全 “1”,就称为定向广播(Directed Broadcast),因为这是对某一个具体的网络(net-id 指明的网络)上的所有主机进行广播的一种地址。具体参考上面 6 种特殊地址的总结,这里只是再提醒一下,因为经常考选择题。
可能疑问点∶链路层广播和 IP 广播有何区别?
解析∶链路层广播是用数据链路层(第二层)协议在一个以太网上实现对该局域网上的所有主机的 MAC 帧进行广播。
IP 广播则是用 IP 通过因特网实现的对一个网络(目的网络)上的所有主机的 IP 数据报进行广播。
可能疑问点∶IP 地址和电话号码相比有何异同之处?
解析∶相同之处∶
(1)唯一性
每个电话机的电话号码(指包括国家码以及区号在内的号码)在电信网上是唯一的。每个主机的 IP 地址在因特网上也是唯一的。
(2)分等级的结构
电话号码∶(国家号码)-(区号)(局号)(电话机号)。IP 地址∶(网络号)-(主机号)或(网络号)-(子网号)-(主机号)。
不同之处∶
各国的电话号码都是自主设置的,因此号码的位数可以各不相同。但 IP 地址一律是 32 位的固定长度(这是 IPv4 的地址长度,若使用 IPv6 则地址长度为 128 位)。
因此电话号码空间是不受限的。当一个城市的电话号码空间不够用时,就可以增加电话号码的位数(例如,6 位不够用了就升级为 7 位,以后又不够用了就再升级为 8 位)。
但 IP 地址空间是受限的,全部的 IP 地址用尽后就必须将 IPv4 升级到 IPv6。
电话号码中的 “国家号码”" 区号 "“局号” 都能直接反映出具体的地理位置(或范围),但从 IP 地址的 “网络号” 却不能直接反映出具体的地理位置(或范围))。IP 地址的管理机构在分配 IP 地址时并不是先将整个的地址空间按国家来分配,而是按网络来分配(不管这个网络在哪个国家)。
但是有的 IP 地址可以反映出一定的地理范围。例如,顶级域名采用国家域名的,如顶级域名是. cn 的在中国,但在中国的什么地方则不知道。而二级域名若采用省级域名时,如采用 js.cn 的在中国的江苏省,但在江苏省的什么地方也是不知道的。然而在采用通用顶级域名时,如采用. com 或. net 或. org 时,则无法知道该主机在哪一个国家或地区。
NAT
背景知识∶其实某些机构并不需要连接到因特网,只需要与内部的主机通信,这样如果还是按照全球 IP 地址去分配,则会大大浪费 IP 地址。
这时候 NAT 就诞生了。NAT 就是将专用网内部使用的本地 IP 地址转换成有效的外部全球 IP 地址,使得整个专用网只需要一个全球 IP 地址就可以与因特网连通。
例如,100 个机构各有 100 台主机,假设现在 100 个机构都分配全球 IP 地址,就需要 10000 个全球 IP 地址,但是现在从所有的全球 IP 地址里面划分出 100 个 IP 地址(当然不只 100 个,这里仅仅是为了简化问题),专门用作一些只需内部通信的机构使用,即 100 个机构都使用这 100 个地址,只需要 100 个 IP 地址就解决问题了。而这 100 个 IP 地址在计算机网络中被称为专用地址,而路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上传送的。
因特网已经规定了以下地址作为专用地址。
- 10.0.0.0~10.255.255.255(相当于一个 A 类网络)。
- 172.16.0.0~172.31.255.255(相当于 16 个连续的 B 类网络)。
- 192.168.0.0~192.168.255.255(相当于 256 个连续的 C 类网络)。
这种采用专用 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 地址空间的利用率有时很低。例如,对于一个只有 200 台主机的公司,分配一个 A 类网络,显然 IP 地址利用率极低。
- 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏。
- 两级的 IP 地址不够灵活。
聪明的人类想出了 “子网号字段”,使得两级的 IP 地址变为三级的 IP 地址,这种做法叫作划分子网。划分子网属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络。
划分子网的基本思路∶从主机号借用若干个比特作为子网号,而主机号也就相应减少了若干个比特,网络号不变。于是三级的 IP 地址可记为

凡是从其他网络发送给本单位某个主机的 IP 分组,仍然根据 IP 分组的目的网络号先找到连接在本单位网络上的路由器,然后此路由器在收到 IP 分组后,再按目的网络号和子网号找到目的子网,最后将该 IP 分组直接交付给目的主机。
疑问∶子网号到底可不可以使用全 “0” 和全 “1”?如果不可以,那么 CIDR 怎么解释?
解析∶对于分类的 IPv4 地址进行子网划分时,子网号绝对不能使用全 “1” 和全 “0”。但是 CIDR 是可以使用全“0”和全“1” 的。其实 CIDR 准确来讲不能算是划分子网,只是形式上像划分子网。准确地说,CIDR 应该是划分子块。
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 位了,所以最大可分配的地址是 8-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-14 所示。

现在的因特网标准规定,所有网络都必须有一个子网掩码。如果一个网络没有划分子网,就采用默认子网掩码。A 类、B 类、C 类地址的默认子网掩码分别是 255.0.0.0、255.255.0.0 和 255.255.255.0。
总结∶不管网络有没有划分子网,只要将子网掩码和 IP 地址进行逐位的 “与” 运算,就一定能立即得出网络地址。使用子网掩码后,路由表的每行所包括的主要内容是目的网络地址、子网掩码和下一跳地址。此时,路由器的分组转发算法如下∶
- 从收到的分组首部提取目的 IP 地址 D。
- 先判断是否为直接交付,用那些和路由器直接相邻的网络的子网掩码和 D 逐位相 “与”,看是否和相应的网络地址匹配。若匹配,则将分组直接交付,否则就是间接交付。
- 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器,否则执行 4)。
- 对路由表中的每一行的子网掩码和 D 逐位相 “与”。若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 5)。
- 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 6)。
- 报告转发分组出错。
可能疑问点∶谢希仁编写的《计算机网络》教材中的图 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。
CIDR
划分子网在一定程度上缓解了因特网在发展中遇到的困难。然而,在 1992 年因特网仍然面临 3 个必须尽早解决的问题,即 B 类地址在 1992 年已分配了近一半(眼看就要在 1994 年 3 月全部分配完毕)、因特网主干网上的路由表中的项目数急剧增长(从几千个增长到几万个))、整个 IPv4 的地址空间最终将全部耗尽。
无分类编址(CIDR)是为解决 IP 地址耗尽而提出的一种措施。
- CIDR 消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,因而可以更加有效地分配 IPv4 的地址空间。CIDR 使用各种长度的 “网络前缀” 来代替分类地址中的网络号和子网号。于是,IP 地址又从三级编址回到了两级编址,其地址格式为 为了区分网络前缀,通常采用 “斜线记法”(又称 CIDR 记法),即 IP 地址 / 网络前缀所占位数。
例如,128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。在不需要指出地址块的起始地址时,也可将这样的地址块简称为 “/20 地址块”。可以算出,128.14.32.0/20 地址块的最小地址为 128.14.32.0;128.14.32.0/20 地址块的最大地址为 128.14.47.255(128.14.00101111.11111111 下画线为网络前缀),全 “0” 和全 “1” 的主机号地址一般不使用。
- 将网络前缀都相同的连续的 IP 地址组成 “CIDR 地址块”。一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合(也称构成超网),它使得路由表中的一个项目可以表示很多个原来传统分类地址的路由,因此可以缩短路由表,减小路由器之间选择信息的交换,从而提高网络性能(参考例 4-9)。CIDR 中同样使用了掩码来确定其网络前缀。对于 “20” 的地址块,其掩码由连续的 20 个 “1” 和后续 12 个 “0” 组成。可以看出,“1” 对应于网络前缀,“0” 对应于主机号。
在使用 CIDR 时,路由表中的每个项目由网络前缀和下一跳地址组成。这样就会导致查找路由表时可能会得到不止一个匹配结果。应当 = = 从匹配结果中选择具有最长网络前缀的路由 ==,因为网络前缀越长,其地址块就越小,路由就越具体。最长前缀匹配原则又称为最长匹配或最佳匹配,参考例 4-10。


解析∶A。路由聚合的计算方法如下∶
- 将需要聚合的几个网段的地址转换为二进制的表达方式。
- 比较这些网段,寻找它们 IP 地址前面相同的部分,从不同的位置进行划分,相同的部分作为网络段,而不同的部分作为主机段。
计算过程如图 4-15 所示。
由图 4-15 可以看出,这两个 C 类地址的前 21 位完全相同,因此构成的超网应该采用 21 位的网络段。CIDR 依然遵循主机段全 “0” 表示网络本身的规定,因此通过 CIDR 技术构成的超网可表示为
11001010.01110110.10000000.00000000,即 202.118.128.0/21。
【例 4-10】表 4-5 是使用无类别域间路由(CIDR)的路由选择表,地址字节是用十六进制表示的。在 C4.50.0.0/12 中的 “/12” 表示开头有 12 个 1 的网络掩码,也就是 FF.F0.0.0。注意,最后 3 个登录项涵盖每一个地址,因此起到了默认路由的作用。试指出具有下列目标地址的 IP 分组将被投递到哪个下一站?

解析∶
解题思路∶将右边的 IP 地址与左边的网络号进行一一比较,如果可以满足前缀相同的长度大于或等于掩码的长度,则表示可以走此条路由,称为匹配。但是如果有更长掩码的网络与之匹配,则应该优先选择具有更长掩码的网络,即满足最长匹配原则。
解题技巧∶既然需要满足最长匹配原则,那么应该从掩码长度最长的开始比较。
- 网络号 C4.5E.10.0/20 的第三字节可以用二进制表示成 00010000,目标地址 C4.5E.13.87 的第三字节可以用二进制表示成 00010011,前 20 位相同,恰好匹配了,所以具有该目标地址的 IP 分组将被投递到 B 站。
- 目标地址 C4.5E.22.09 与网络号 C4.5E.10.0/20 的前 20 位不一样,所以不能进行匹配。其次,优先考虑的应该是网络号 C4.50.0.0/12,恰好匹配,所以具有该目标地址的 IP 分组将被投递到 A 站。
- 经过比较,目标地址 C3.41.80.02 只能与 80.0.0.0/1 匹配。因为目标地址 C3.41.80.02 的第一字节为 11000011,而网络 80.0.0.0 的第一字节为 10000000,第一位都为 1,匹配,所以具有该目标地址的 IP 分组将被投递到 E 站。
- 同上分析,目标地址 5E.43.91.12 与网络 40.0.0.0/2 匹配,所以具有该目标地址的 IP 分组将被投递到 F 站。
- 同上分析,目标地址 C4.6D.31.2E 与网络 C4.60.0.0/12 匹配(且标地址 C4.6D.31.2E 与网络 C4.68.0.0/14 只有前 13 位相同,所以不能匹配,所以具有该目标地址的 IP 分组将被投递到 C 站。
- 同上分析,目标地址 C4.6B.31.2E 与网络 C4.68.0.0/14 匹配,所以具有该目标地址的 IP 分组将被投递到 D 站。
补充∶有些同学可能还不是很明白为什么要满足最长匹配原则?下面用一个生活实例来解释。
解析∶比如我要邮寄一个包裹给我的同学。然后我给了快递人员以下 3 个地址∶1)浙江省杭州市 2)浙江省杭州市西湖区。
3)浙江省杭州市西湖区浙江大学玉泉校区。
其实以上 3 个地址都是正确的(匹配,但是作为快递人员(路由器)会去选择哪一个呢?
当然是会选择第三个,地址越具体(掩码长度越长),就能越准确地找到目标地址。
路由表表项在各种情况下的总结见表 4-6。

可能疑问点∶网络前缀是指网络号字段(net-id)中前面的几个类别位还是指整个的网络号字段?
解析∶网络前缀是指整个网络号字段,即包括了最前面的几个类别位在内。网络前缀常常简称为前缀。
例如,一个 B 类地址 1010000 00000000 00000000 00010000,其类别位就是最前面的两位 10,而网络前缀就是前 16 位 1010000 00000000。
可能疑问点∶有的书将 IP 地址分为前缀和后缀两大部分,它们和网络号字段及主机号字段有什么关系? 前缀和后缀有什么不同?
解析∶前缀(prefix)是网络号字段(net-id),而后缀(suffix)是主机号字段(hostid)。图 4-16 所示是以 C 类地址为例来说明前缀和后缀是什么。

前缀与后缀的区别∶
- 前缀是由因特网管理机构进行分配的,而后缀是由分配到前缀的单位自行分配的。
- IP 数据报的寻址是根据前缀来找目的网络,找到目的网络后再根据后缀找目的主机。
ARP
虽然在网络层转发分组用的是 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 种典型情况总结∶
- 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是主机,要把 IP 数据报发送到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。
- 发送方是路由器,要把 IP 数据报转发到本网络上的一个主机。这时用 ARP 找到目的主机的硬件地址。
- 发送方是路由器,要把 IP 数据报转发到另一个网络上的一个主机。这时用 ARP 找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。
既然 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 个步骤∶
- 主机 A 先通过 ARP 解析出路由器 R1 的硬件地址,将 IP 数据报发送到 R1。
- R1 再通过 ARP 解析出 R2 的硬件地址,将 IP 数据报转发到 R2。
- R2 再通过 ARP 解析出主机 F 的硬件地址,将 IP 数据报交付给主机 F。因此,主机 A 发送 IP 数据报给主机 F 要经过 3 次 ARP 地址解析。
DHCP
动态主机配置协议(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 地址是临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址。DHCP 称这段时间为租用期。
DHCP 服务器和 DHCP 客户端的交换过程如下∶
- DHCP 客户机广播 “DHCP 发现” 消息,试图找到网络中的 DHCP 服务器,服务器获得一个 IP 地址。
- DHCP 服务器收到 “DHCP 发现” 消息后,就向网络中广播 “DHCP 提供” 消息,其中包括提供 DHCP 客户机的 IP 地址和相关配置信息。
- DHCP 客户机收到 “DHCP 提供” 消息,如果接受 DHCP 服务器所提供的相关参数,则通过广播 “DHCP 请求” 消息向 DHCP 服务器请求提供 IP 地址。
- DHCP 服务器广播 “DHCP 确认” 消息,将 IP 地址分配给 DHCP 客户机。DHCP 允许网络上配置多台 DHCP 服务器,当 DHCP 客户发出 DHCP 请求时,就有可能收到多个应答信息。这时,DHCP 客户只会挑选其中的一个,通常是挑选 “最先到达的信息”。
ICMP
主机在发送数据报时,经常会由于各种原因发送错误,如路由器拥塞丢弃了或者传输过程中出现错误丢弃了(注意∶如果是首部出错,当然可以发,但是一般都不发,因为首部出错很有可能源 IP 地址都错了,所以即使发了源主机也不一定收到)。
如果检测出错误的路由器或主机都能把这些错误报告通过一些控制消息告诉发送数据的主机,那么发送数据的主机就可根据 ICMP 报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报(比如 ICMP 报文发过来的是改变路由,那么主机就不能继续按照这个路由线路发送了,需要用另外一条路由线路发送数据)。尽管这些控制消息并不传输用户数据,但是对于用户数据的传递起着重要的作用。
ICMP 报文分为两种,即 ICMP 差错报告报文和 ICMP 询问报文。
ICMP 差错报告报文的分类(2010 年考过一道选择题)
- 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。
- 源站抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
- 时间超过。当 IP 分组的 TTL 值被减为 0 后,路由器除了要丢弃该分组外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文。
- 参数问题。当路由器或目的主机收到的数据报的首部中有字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文(现在一般都不发)。
- 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给其他的路由器(比当前更好的路由)。
【例 4-12】(2010 年统考真题)若路由器 R 因为拥塞丢弃 IP 分组,则此时 R 可向发出该 IP 分组的源主机发送的 ICMP 报文的类型是()
A. 路由重定向
B. 目的不可达
C. 源抑制
D. 超时
解析∶C。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
ICMP 询问报文的分类
- 有回送请求和回答报文。
- 时间戳请求和回答报文。
- 掩码地址请求和回答报文。
- 路由器询问和通告报文。
不应发送 ICMP 差错报告报文的几种情况
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文。
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文。
- 对具有组播地址的数据报都不发送 ICMP 差错报告报文。
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文。
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 数据报传送到错误的地址也是没有任何意义的。
IPv6
IPv6 的特点
由于 IPv4 地址即将耗尽,因此必须采取相应的办法去解决。前面已经介绍过采用网络地址转换(NAT)方法以节省全球 IP 地址和采用无分类编址(CIDR)使 IP 地址的分配更加合理。这两种方法仅是优化了 IPv4 地址的使用方法,并没有从根本上解决 IP 地址的耗尽问题,而采用具有更大地址空间的新版本的 IPv6 才能真正意义上地解决 IPv4 即将耗尽问题。下面总结 IPv6 的主要特点。
- 更大的地址空间。IPv6 将地址从 IPv4 的 32 位增大到了 128 位。
- 扩展的地址层次结构。因为地址多了,所以可以划分更多的层次。
- 灵活的首部格式。
- 改进的选项。
- 允许协议继续扩充。
- 支持即插即用(自动配置)。
- 支持资源的预分配。
- IPv6 首部长度必须是 8B 的整数倍,而 IPv4 首部是 4B 的整数倍(还记得首饰 = 首 4 吗?)。
虽然 IPv6 与 IPV4 不兼容,但总的来说它跟所有其他的因特网协议兼容,包括 TCP、UDP、ICMP、DNS 等,只是在少数地方做了必要的修改(大部分是为了处理长的地址)。IPv6 相当好地满足了预定的目标,主要体现在以下 3 个方面。
- IPv6 第一个主要改进也是最重要的,即 IPv6 比 IP4 有长得多的地址。IPv6 的地址用 128 位表示,地址空间是 IPV4 的 2128-32 = 296 倍,相当于地球表面的每平方米面积都有大约 6x1023 个地址。
- IPv6 第二个主要改进是简化了 IP 分组的基本首部,它包含 8 个段(IPV4 是 12 个段)。这一改变使得路由器能够更快地处理分组,从而可以改善吞吐率。
- IPv6 第三个主要改进是 IPv6 更好地支持选项。这一改变对新的分组首部很重要,因为一些从前是必要的段现在变成可选的了。此外,表示选项的方式也有所不同,使得路由器能够简单地跳过与它们无关的选项。这一特征加快了分组处理速度。
- IPv6 第三个主要改进是 不允许切片。因此,如果路由器发现到来的数据报太大而不能转发到链路上,那么丢弃该数据报,并向发送方发送一个指示分组太大的ICMP报文。
IPv6 的格式
IPv6 地址首部相对于 IPv4 地址首部有较大的改变,如图 4-22 所示。

- 版本(Version)∶占 4 位,它指明了协议的版本,对于 IPv6,该字段总是 6。
- 通信量类(Traffc Class)∶占 8 位,这是为了区分不同的 IPv6 数据报的类别或优先级。已经定义了 0~15 共 16 个优先级,0 的优先级最低。0~7 表示允许延迟,8~15 表示高优先级,需要固定速率传输。
- 流标号(FlowLabel)∶占 20 位,“流” 是互联网上从特定源点到特定终点的一系列数据报,“流” 所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
- 有效载荷长度(PayloadLength)∶占 16 位,它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64KB。
- 下一个首部(Next Header)∶占 8 位,它相当于 IPv4 的协议字段或可选字段。
- 跳数限制(HopLimit)∶占 8 位,源站在数据报发出时即设定跳数限制,路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为 0 时,就要将此数据报丢弃。
- 源地址∶占 128 位,数据报的发送站的 IP 地址。
- 目的地址∶占 128 位,数据报的接收站的 IP 地址。
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
。路由协议
路由选择协议
因特网有两大路由选择协议∶
内部网关协议(IGP)
内部网关协议是在一个自治系统内部使用的路由选择协议,它与互联网中其他自治系统选用什么路由选择协议无关。目前这类路由选择协议使用得最多,如 RIP 和 OSPF 路由协议。
外部网关协议(EGP)
若源站和目的站处在不同的自治系统中,当数据报传到另一个自治系统的边界时(这两个自治系统可能使用不同的内部网关协议),就需要使用一种协议将路由选择信息传递到另一个自治系统中,如图 4-23 所示。这样的协议就是外部网关协议,如 BGP-4。

RIP
疑问∶讲到这里,不得不提一个知识点。很多考生做了以前比较老的题目,经常会出现 “网关” 一词,这个词具体是什么意思?
解析∶因特网的早期 RFC 文档中未使用 “路由器” 而是使用 “网关” 这一名词。但是在新的 RFC 文档中又使用了 “路由器” 这一名词。应当把这两个词当作同义词。
注意∶RIP 知识点里面所提到的节点,全部都是路由器,而不包括主机。每个自治系统可以选择该自治系统中各个路由器之间的路由选择协议,而最常用的就是 RIP。现在先在脑海中形成一个框架图,就是好多网络,并将每个网络都想象成一朵云,这些云都由很多的路由器连接着,现在应该对自己提出疑问,这些路由器到底是按照一种怎样的原则去选择一条路使得分组从这个网络到达另一个网络?
下面就介绍应用最广泛的一种选路原则,这种原则简单地描述就是使得在传送数据报到目的网络的途中经过的路由器数目最少,时延小但经过路由器多的路都不走。
例如,假设从 A 地到 B 地运送货物有两条路可走,一条路途中经过 10 个收费站(收费站看成路由器),但是每个收费站的等待时间是 1min,另外一条路途中经过 2 个收费站,但是每个收费站等待的时间是 10min,这时司机都会去选择经过 2 个收费站的那条路。但是如果途中需要经历超过 15 个收费站,这时候司机就认为这个地方很遥远,不能到达。这句话转换到专业知识就是,RIP 只关心自己周围的世界,即只与自己相邻的路由器交换信息,并且范围限制在 15 跳之内,再远它就不关心了。
正因为如此,RIP 仅适合比较小的自治系统,因为比较大的自治系统里面的路由器的数量肯定会大大超过 15 个。在这种情况下使用 RIP,距离相隔远点(中间超过 15 个路由器)的主机就不能通信了。但是现在也许会有人问,最大跳数设置大点不行吗?这肯定是不行的,为了说明这一点,首先需要介绍 RIP 所使用的距离 - 向量算法。
距离 - 向量算法
背景知识∶需要讲解 RIP 中 “距离” 的定义以及 RIP 的三要点。
解析∶从一个路由器到直接连接的网络的距离定义为 1。从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1。RIP 中的 “距离” 也称为 “跳数”(Hop Count),因为每经过一个路由器,跳数就加 1。这里的 “距离” 实际上指的是 “最短距离”。
RIP 认为一个好的路由就是它通过的路由器的数目少,即 “距离短”。RIP 允许一条路径最多只能包含 15 个路由器。“距离” 的最大值为 16 时即相当于不可达。
可见,RIP 只适用于小型互联网。RIP 不能在两个网络之间同时使用多条路由。RIP 选择一个具有最少路由器的路由(最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
RIP 的三要点∶
- 仅和相邻路由器交换信息。
- 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
- 按固定的时间间隔(如每隔 30s)交换路由信息。
距离 - 向量算法如下:


学完距离 - 向量算法后,就可以理解为什么不把最大跳数设置大点,如图 4-24 所示。
在正常情况下(图 4-24 上半部分),A 路由器到达目的网络 C 的跳数为 1,B 路由器到达目的网络 C 的跳数为 2。当目的网络 C 与 A 路由器之间的链路发生故障而断掉以后(图 4-24 下半部分),A 路由器会将到达目的网络 C 的路由表项的跳数设置为 16,即标记目的网络 C 不可达,并准备在每 30s(这个 30s 是为相邻路由器交换信息所规定的时间)进行一次的路由表更新中发送出去。
但是现在也许会出现这种问题,在这个信息还未发出的时候,B 路由器发 RIP 报文告诉 A 路由器,到达目的网络 C 的距离是 2,根据上面提到的路由更新方法,A 路由器会错误地认为有一条通过 B 路由器的路径可以到达目的网络 C,从而更新其路由表,将到达目的网络 C 的路由表项的跳数值由 16 改为 3。过段时间 A 路由器又发送 RIP 报文给 B 路由器,内容是到目的网络 C 的距离是 3,B 将无条件更新其路由表,将跳数值改为 4,看到这里也许会有人提出疑问,以前 B 路由器到达目的网络 C 的距离是 2,现在为什么改成?
因为这是最新的路由,要以最新的为准。该条信息又从 B 发向 A,A 将跳数改为 5,这样循环下去,最后双方的路由表关于目标网络 C 的跳数值都变为 16。此时,才真正得到了正确的路由信息。这种现象称为 “计数到无穷大” 现象,虽然最终完成了收敛,但是收敛太慢了,看到这里应该知道了为什么不能把最大跳数设置更大了。因为如果链路出现故障,更大的跳数只会浪费网络资源来发送这些循环的分组。一对很明显的矛盾就出来了,设置太小,尽管收敛得快(所谓收敛快就是当路由变化时,能以最短的时间达到稳定状态),但是只适合小网络; 设置大,尽管能满足大网络的要求,但是收敛慢,所以把跳数设置为 16 不可达较合理。

解析∶D。此题考查概念,记住就得分。RIP 允许一条路径最多只能包含 15 个路由器,因此距离等于 16 时相当于不可达,上面相关知识点已经讲解过了。
以上讲解了 RIP 的原理以及所使用的算法,下面讲解 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 报文来传送。
把自己的路由表分成几段(详细见下面的补充知识点),每一段 25 个路由(例如,该路由器有 100 个路由,分成 4 部分,每部分 25 个路由),将这 25 个路由放在首部之后,形成一个 RIP 报文发给相邻路由器。
只需记住每一条路由占据 20B 的位置。至于里面有什么字段不需要理解,因为 RIP 重点考查协议怎么实现,至于 RIP 报文格式不重要,如果感兴趣可以参考相关教材。
最后,再次申明,RIP 选择的路径不一定是时间最短的,但一定是具有最少路由器的路径。因为它是根据最少的跳数进行路径选择的。
补充知识点∶整个 RIP 报文的最大长度为 4B(首部)+25×20B(路由信息)=504B(另一种思考,因为 RIP 使用 UDP 传送,而 UDP 限制其报文大小为 512B 或更小,去除 8B 的 UDP 首部,恰好可以得到 RIP 报文最大长度为 504B)。因此,在更大的 RIP 网络中,对整个路由表的更新请求需要传送多个 RIP 报文。报文到达目的地时不提供顺序化(报文不需要编号); 一个路由表项不会分开在两个 RIP 报文中。
因此,任何 RIP 报文的内容都是完整的,即使它们可能仅是整个路由表的一个子集。当报文收到时,接收节点可以任意处理更新,而不需对其进行顺序化。
例如,一个 RIP 路由器的路由表可以包括 100 项路由,与其他 RIP 路由器共享这些信息需要 4 个 RIP 报文,每个报文包括 25 项。如果一个接收节点收到了 4 号报文(包括从 76~100 的表项),它会简单地更新路由表中的对应部分,这些报文之间没有顺序相关性。这样使得 RIP 报文的转发可以省去传输协议(如 TCP)所特有的开销。
RIP 的优缺点
RIP 的优点是实现简单、开销小,收敛过程较快。RIP 的缺点∶
- RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
- 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加了。
- 当网络出现故障时,RIP 要经过比较长的时间才能将此信息传送到所有的路由器,即 " 坏消息传播得慢 ",使更新过程的收敛时间长。
OSPF
随着网络的扩大,一个自治系统内路由器的个数肯定会很多,但是 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 协议的三要点。
- 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
OSPF 的 5 种分组类型(了解)
- 类型 1∶问候(Hello)分组,用来发现和维持邻站的可达性。
- 类型 2∶数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
- 类型 3∶链路状态请求分组,向对方请求发送某些链路项目的详细信息。
- 类型 4∶链路状态更新分组,用洪泛法对全网更新链路状态。
- 类型 5∶链路状态确认分组,对链路更新分组的确认。
通常每隔 10s,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达。在路由器刚开始工作时,OSPF 让每一个路由器使用数据库描述分组和相邻路由器交换本数据库中己有的链路状态摘要信息。然后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。经过一系列的这种分组交换,全网同步的链路数据库就建立了。在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就使用链路状态更新分组,用洪泛法对全网更新链路状态。其他路由器在更新后,发送链路状态确认分组对更新分组进行确认,如图 4-27 所示。

OSPF 还规定每隔一段时间,如 30min,要刷新一次数据库中的链路状态。由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因此与整个互联网的规模并无直接关系。所以,当互联网规模很大时,OSPF 协议要比 RIP 好得多,且 OSPF 协议没有 “坏消息传播得慢” 的问题。据统计,OSPF 协议响应网络变化的时间小于 100ms。
RIP 和 OFPF 的比较
协议参数
RIP 中用于表示目的网络远近的参数为跳数,即到达目的网络所要经过的路由器的个数。在 RIP 中,该参数被限制为最大 15。对于 OSPF 路由协议,路由表中表示目的网络的参数为费用(如时延),该参数为一虚拟值,与网络中链路的带宽等相关,也就是说 OSPF 路由信息不受物理跳数的限制。因此,OSPF 协议适合应用于大型网络,支持几百台的路由器,甚至如果规划合理,支持 1000 台以上的路由器也是没有问题的。
收敛速度
路由收敛速度是衡量路由协议的一个关键指标。RIP 周期性地将整个路由表作为路由信息广播至网络中,该广播周期为 30s。在一个较大型的网络中,RIP 会产生很大的广播信息,占用较多的网络带宽资源,并且由于 RIP30s 的广播周期,影响了 RIP 的收敛,甚至出现不收敛的现象。而 OSPF 是一种链路状态的路由协议,当网络比较稳定时,网络中的路由信息比较少,并且其广播也不是周期性的,因此 OSPF 路由协议在大型网络中也能够较快地收敛。
分层
在 RIP 中,网络是一个平面的概念,并无区域及边界等的定义。在 OSPF 路由协议中,一个网络或者一个自治系统可以划分为很多个区域,每一个区域通过 OSPF 边界路由器相连。
负载平衡
在 OSPF 路由选择协议中,如果到同一个目的网络有多条相同代价的路径,那么可以将通信量分配给这几条路径。这称为多路径间的负载平衡。而 RIP 不会,它只能按照一条路径传送数据。
灵活性
OSPF 协议对不同的链路可根据 IP 分组的不同服务类型而设置成不同的代价(就好像有两个人要去旅游,一个人希望以最少的时间到达目的地,多花点钱也没事;另一个人希望以最小花费到达目的地,晚点到都没事。尽管目的地一样,但这两个人的路径肯定是不一样的),因此 OSPF 协议对于不同类型的业务可以计算出不同的路由,十分灵活。而这种灵活性是 RIP 所没有的。
以组播地址发送报文
动态路由协议为了能够自动找到网络中的邻居,通常都是以广播地址来发送。RIP 使用广播报文来发送给网络上的所有设备,所以在网络上的所有设备收到此报文后都需要做相应的处理,但在实际应用中,并不是所有设备都需要接收这种报文。因此,这种周期性以广播发送报文的形式对它就产生了一定的干扰。同时,由于这种报文会定期地发送,在一定程度上也占用了宝贵的带宽资源。后来,随着各种技术不断提升和发展,出现了以组播地址来发送协议报文的形式,如 OSPF 使用 224.0.0.5 来发送,EIGRP 使用 224.0.0.2 来发送。所以,OSPF 协议采用组播地址来发送,只有运行 OSPF 协议的设备才会接收发送来的报文,其他设备不参与接收。
BGP
BGP 的基本概念
边界网关协议(BGP)是在不同自治系统的路由器之间交换路由信息的协议。
BGP 采用的是路径 - 向量路由选择协议。由于以下原因边界网关协议只能是力求寻找一条能够到达目的网络且比较好的路由(不能转圈),而并非要寻找一条最佳路由。
- 因特网的规模太大,使得自治系统之间路由选择非常困难。
- 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
- 自治系统之间的路由选择必须考虑有关策略。
BGP 的基本原理∶每一个自治系统的管理员要选择至少一个路由器(可以有多个)作为该自治系统的 “BGP 发言人”。一个 BGP 发言人要与其他自治系统中的 BGP 发言人交换路由信息,就要先建立 TCP 连接(可见 BGP 报文是通过 TCP 传送的,也就是说 BGP 报文是 TCP 报文的数据部分),然后在此连接上交换 BGP 报文以建立 BGP 会话,再利用 BGP 会话交换路由信息。各 BGP 发言人互相交换网络可达性的信息后,各 BGP 发言人就可找出到达各自治系统比较好的路由了。
BGP 的特点
- BGP 交换路由信息的节点数量级是自治系统数的量级,这要比自治系统中的网络数少很多。
- 每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的,这样就使得自治系统之间的路由选择不过分复杂。
- BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器以及到达该目的网络所要经过的各个自治系统序列。
- 在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表,但以后只需要在发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器的处理开销方面都有好处。
BGP 的 4 种报文
- 打开(Open)报文∶用来与相邻的另一个 BGP 发言人建立关系。
- 更新(Update)报文∶用来发送某一路由的信息以及列出要撤销的多条路由。
- 保活(Keepalive)报文∶用来确认打开报文和周期性地证实邻站关系。
- 通知(Notificaton)报文∶用来发送检测到的差错。
RIP、OSPF、BGP 的最终陈述

可能疑问点∶在不同的两本书上看到内部网关协议属于不同的层,一会儿是网络层,一会儿是传输层,内部网关协议到底属于哪一层?
解析∶内部网关协议包括 RIP、OSPF,外部网关协议包括 BGP。通过表 4-8,这个题目的思路就很清晰了。RIP 使用 UDP 来传送,所以 RIP 是应用层协议,同理 BGP 也是应用层协议。OSPF 使用 IP 数据报传送,很明显是传输层协议。但是有些教材一定要说是网络层,这是不严谨的!
一个协议的实现需要依赖协议所在层次的下一层功能。简单地说,如果 TCP 需要依赖网际层协议 IP,那么它就是传输层的协议。同理,如果 RIP 需要依赖传输层的 UDP,那至少它应该是被定义在 UDP 之上的协议,但是笔者不认为它能算是应用层协议。
举个例子,ICMP 是网络层协议,但它需要依赖 IP 承载,那么 ICMP 是传输层协议吗?
说明 TCP/IP 是相当不严谨的。严格意义上说,根本就没有明确定义过这些协议的位置。学习这些协议关键是掌握它们在网络中的功能和如何应用它们,至于它们到底是哪一层的协议,并不重要。
IP 组播
组播的概念
前面就提到过一共有 3 种 IP 地址∶单播地址、组播地址和广播地址,本节内容主要详细地介绍组播地址。
组播一定是仅应用于 UDP,它们对需将报文同时传往多个接收者的应用来说非常重要。而 TCP 是一个面向连接的协议,它意味着分别运行于两台主机(由 IP 地址来确定)内的两个进程(由端口号来确定)之间存在一条连接,所以是一对一的发送。
使用 IP 组播的缘由∶有的应用程序要把一个分组发送给多台目的主机,采用的方法不是让源主机给每台目的主机都发送一个单独的分组,而是让源主机把单个分组发送给一个组播地址,该组播地址标识一组主机。
网络把这个分组复制后传递给该组中的每台主机。主机可以选择加入或者离开一个组,而且一台主机可以同时属于多个分组。
IP 组播的思想∶源主机只发送一份数据,该数据中的目的地址为组播的组地址。组地址中的所有接收者都可以接收到同样的数据副本,并且只有组播内的主机可以接收数据,网络中的其他主机不可能收到该数据。
与广播所不同的是,主机组播时仅发送一份数据,组播的数据仅在传送路径分岔时才将数据报复制后继续转发,如图 4-28 和图 4-29 所示。采用组播协议可明显地减轻网络中各种资源的消耗。组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器。


IP 组播的地址(224-239)
IP 使用 D 类地址支持组播。D 类 IP 地址的前缀是 “1110”,因而地址范围是
224.00~239.255.255.255
,每一个 D 类地址标识一组主机,下面 4 点应该记住。- 组播地址只能用于目的地址,不能用于源地址。
- 组播数据报 “尽最大努力交付”,不提供可靠交付。
- 对组播数据报不产生 ICMP 差错报文。换句话说,如果在 PING 命令后面输入组播地址,将永久不会收到响应,在讲解 ICMP 的时候已经提到过。
- 并非所有 D 类地址都可以作为组播地址。
- IPv4多播地址又可分为预留的多播地址(永久多播地址)、全球范围可用的多播地址以及本地管理的多播地址[RFC 3330]。

IP 组播可以分为两种∶一种是只在本局域网上进行硬件组播,另一种是在因特网的范围内进行组播。前一种虽然简单,但是很重要,因为现在大部分主机都是通过局域网接入因特网的。在因特网上进行组播的最后阶段,还是要把组播数据报在局域网上用硬件组播交付给组播组的所有成员。
组播地址与 MAC 地址的换算
以太网硬件地址是48位,而IP地址是32位,有效IP组播地址是28位,以太网支持IP组播地址到以太网组播地址的映射,他们之间的映射很巧妙而简单,主要规则如下:
现假设组播地址为 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。
总结:取ip地址的后23位和第24位为0转换成16进制,再加上固定首部
01-00-5E
。虽然结果得到了,但是疑问又来了,参考下面的疑问。
疑问∶组播 MAC 地址和组播 IP 地址的这种映射关系不是唯一对应的,高5位(实际是IP组播地址的第4~8位,下同)的地址信息在映射过程实际上是没有用而被丢掉了,这样如果低23位地址信息一样,则不管高5位地址的值是多少,其映射的以太网地址都是一样的。
局域/以太网上进行硬件多播
因特网上进行IP多播
组播路由选择协议——网际组管理协议IGMP
移动 IP
移动 IP 的概念
随着移动终端设备的广泛使用,移动计算机和移动终端等设备也开始需要接入网络(Internet),但传统的 IP 设计并未考虑到移动节点会在链接中变化互联网接入点的问题。
传统的 IP 地址包括两方面的意义∶一方面是用来标识唯一的主机,另一方面它还作为主机的地址在数据的路由中起重要作用。
但对于移动节点,由于互联网接入点会不断发生变化,所以其 IP 地址在两方面发生分离,一方面是移动节点需要一种机制来唯一标识自己,另一方面是需要这种标识不会被用来路由。而移动 IP 便是为了让移动节点能够分离 IP 地址这两方面功能,而又不彻底改变现有互联网的结构而设计的。
例如,某用户离开北京总公司,出差到上海分公司时,只要简单地将移动节点(如笔记本电脑)连接至上海分公司网络上,那么用户就可以享受到跟在北京总公司里一样的所有操作。用户依旧能使用北京总公司的共享打印机,或者可以依旧访问北京总公司同事计算机里的共享文件及相关数据库资源;而当该计算机移动到外网的话,尽管 IP 地址没变,但是不能再用这个 IP 地址来找寻路由了,而应该申请一个转交地址,由转交地址来实现找路由功能。诸如此类的种种操作,让用户感觉不到自己身在外地,同事也感觉不到你已经出差到外地了。
总结来说就是移动 IP 技术可以使移动节点以固定的网络 IP 地址,实现跨越不同网段的漫游功能,并保证了基于网络 IP 的网络权限在漫游过程中不发生任何改变。听起来很悬,那怎么去实现呢? 下面用提问的方式来慢慢引入。
问题 1∶实现移动 IP 需要哪些功能实体?
解析∶需要以下三大功能实体。
- 移动节点∶具有永久 IP 地址的移动节点。
- 本地代理∶有一个端口与移动节点本地链路相连的路由器,它根据移动用户的转交地址,采用隧道技术转交移动节点的数据报。
- 外部代理∶移动节点的漫游链路上的路由器,它通知本地用户代理自己的转交地址,是移动节点漫游链路的默认路由器。
问题 2∶实现移动 IP 需要哪些技术?
解析∶需要以下四大技术。
技术一∶代理搜索。
计算机要知道自己是否正在漫游,这里就要用到代理搜索技术。
技术二∶申请转交地址。
移动节点移动到外网时从外代理处得到的临时地址,就好像我现在到了外地,无依无靠,已经居无定所了,所以别人寄信给我没有固定地址,我要找一个有固定住址的朋友,以后如果有人写信给我就直接寄给他,然后再由他转交给我,这个固定住址在移动 IP 领域就称为转交地址。
技术三∶登录。
移动节点到达外网时进行一系列认证、注册、建立隧道的过程。
技术四∶隧道。
本地代理与外部代理之间临时建立的双向数据通道。
可能疑问点∶移动 IP 和动态 IP 有什么区别?
解析∶移动 IP 和动态 IP 是两个完全不同的概念。动态 IP 是指局域网中的计算机可以通过网络中的 DHCP 服务器动态地获得一个 IP 地址,就好像家里的电信带宽,每次拨号登录都会是不同的 IP 地址,即自动获取 IP 地址,所以就不需要用户在计算机的网络设置中指定 IP 地址。
移动 IP 的通信过程
- 移动节点在本地网时,按传统的 TCP/IP 方式进行通信(在本地网有固定的地址)。
- 移动节点漫游到一个外地网络时,仍然使用固定的 IP 地址进行通信。为了能够收到通信对端发给它的 IP 分组,移动节点需要向本地代理注册当前的位置地址,这个位置地址就是转交地址。移动 IP 的转交地址可以是外部代理的地址或动态配置的一个地址。
- 本地代理接收来自转交地址的注册后,会构建一条通向转交地址的隧道,将截获的发给移动节点的 IP 分组通过隧道送到转交地址处。
- 在转交地址处解除隧道封装,恢复出原始的 IP 分组,最后送到移动节点,这样移动节点在外网就能够收到这些送给它的 IP 分组了。
- 移动节点在外网通过外网的路由器或者外代理向通信对端发送 IP 数据报。
- 当移动节点来到另一个外网时,只需要向本地代理 – 更新注册的转交地址 –,就可以继续通信了。
- 当移动节点回到本地网时,移动节点向本地代理注销转交地址,这时移动节点又将使用传统的 TCPI/P 方式进行通信。
总结∶移动 IP 为移动主机设置了两个 IP 地址,即主地址和辅地址(转交地址)。移动主机在本地网时,使用的是主地址。当移动到另外一个网络时,需要获得一个辅助的临时地址,但是此时主地址仍然保持不变。当从外网移回本地网时,辅地址改变或撤销,而主地址仍然保持不变。
网络层设备
路由器的组成和功能
路由器工作在网络层,实质上是一种多个输入端口和多个输出端口的专用计算机,其任务是连接不同的网络转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
整个路由器的结构可划分为两大类∶路由选择部分和分组转发部分,如图 4-30 所示。

路由选择部分的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表,其核心部件是路由选择处理器。
分组转发部分由 3 部分组成∶一组输入端口、交换结构和一组输出端口,交换结构从输入端口接收到分组后,根据转发表对分组进行处理,然后从一个合适的输出端口转发出去。
交换结构是路由器的关键部件,它将分组从一个输入端口转移到某个合适的输出端口。
有 3 种常用的交换方法∶通过存储器进行交换、通过总线进行交换和通过互联网络进行交换。以上 3 种交换了解即可,不要求掌握。下面结合图 4-30 来详细介绍路由器的工作流程,参考 48.2 小节。

解析解析∶D。什么是广播风暴?
一个数据帧或包被传输到本地网段上的每个节点就是广播。由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制、传播数据帧,最终导致网络性能下降,甚至网络瘫痪,这就是广播风暴。所以需要有能够隔离广播域的设备才可以抑制广播风暴,只有路由器可以隔离广播域,总结如下∶
路由表与路由转发
讲解工作流程前先把一些易混的概念总结一下。
具体区别见
- 转发就是路由器根据转发表将用户的 IP 数据报从合适的端口转发出去。
- 路由选择则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
- 路由表是根据路由选择算法得出的,而转发表是从路由表得出的。注意∶在讨论路由选择的原理时,往往区分转发表和路由表。
详细工作流程如下∶
- 首先路由器从线路上接收分组,也就是图 4-30 的输入端口,经过 1 时进行物理层处理(进行比特的接收),经过 2 时进行数据链路层处理(剥去帧头、帧尾,得到了 IP 数据报),然后分组就被送入网络层的模块,如图 4-31 所示。
若接收的分组是路由器之间交换路由信息的分组(如 RIP 和 OSPF 分组),则把这种分组送交路由器的路由选择部分中的路由选择处理器。若接收的是数据分组,则按照分组首部中的目的地址查找转发表,根据得到的结果,分组就经过交换结构到达合适的输出端口。当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组,这个分组就必须在队列中排队,因而产生了一定的时延,详见图 4-31。

- 从交换结构传送过来的分组先进行缓存,数据链路层处理模块将给分组加上数据链路层的首部和尾部,交给物理层后发送到外部线路,如图 4-32 所示。

补充知识点∶若路由器处理分组的速率达不到分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。路由器中的输入或输出队列产生溢出是造成分组丢失的重要原因。

解析∶C。
I∶路由器上都会运行相应的路由协议,如 RIP、OSPF 协议等;另外,设置路由表也是路由器必须完成的,故 I 正确。
Ⅱ∶当监测到拥塞时,路由器会将 IP 分组丢弃,并向源点发送源抑制报文,故 Ⅱ 正确。
Ⅲ∶尽管路由器会对 IP 分组首部进行差错校验,但是不能确保传输的 IP 分组不丢失。当路由器收到的数据报的首部中有的字段值不正确时,就丢弃该数据报,并向源站发送参数问题报文,故 Ⅲ 错误。
Ⅳ∶这个是路由表最基本的路由功能,当路由器某个输入端口收到分组后,路由器将按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止,故 IⅣ 正确。
路由环路问题
组播:
由于树具有不存在环路的特性,因此构造一个组播转发树,通过该转发树既能将主播分组传送到组内的每台主机,又能避免环路[见图4.13(b)]。
水平分割用于避免距离-向量路由算法中的无穷计数问题。
TTL字段用于防止IP分组由于环路而在网络中无限循环。