首页 > 技术文章 > 网络层

lihello 2020-09-12 07:55 原文

大纲要求

(一)网络层的功能

  1. 异构网络互连

  2. 路由与转发

  3. 拥塞控制

(二)路由算法

  1. 静态路由与动态路由

  2. 距离-向量路由算法

  3. 链路状态路由算法

  4. 层次路由

(三)IPv4

  1. IPv4分组

  2. 2.IPv4地址与NAT

  3. 子网划分与子网掩码、CIDR

  4. ARP、DHCP与ICMP

(四)IPv6

  1. IPv6的主要特点

  2. IPv6地址

(五)路由协议

  1. 自治系统

  2. 域内路由与域间路由

  3. RIP路由协议

  4. OSPF路由协议

  5. BGP路由协议

(六)IP组播

  1. 组播的概念

  2. IP组播地址

(七)移动IP

  1. 移动IP的概念

  2. 移动IP的通信过程

(八)网络层设备

  1. 路由器的组成和功能

  2. 路由表与路由转发

核心考点

  1. (★★★★★)子网划分和无分类编址CIDR

  2. (★★★★★)路由与转发,即各种路由算法

  3. (★★★★)IP地址的分类、IP数据报格式、NAT

  4. (★★★)ARP、DHCP和ICMP

  5. (★★★)3种常用路由选择协议∶RIP、OSPF、BGP

  6. (★★)IP组播、移动IP的基本概念

  7. (★★)路由器的组成和功能

网络层的功能

异构网络互联

世界上有数以百万计的网络,要实现这些网络的互连是一件相当困难的事情,因为这些网络并没有统一的标准

而让大家都使用同一个网络也是不可能的,因为用户的需求是多种多样的,不可能有一种单一的网络能够适应所有用户。虽然网络不可能一样,但是可以想办法使用一种协议让路由器连接的网络都遵守这种协议,在这种情况下可以将互连起来的网络看成一个虚拟互联网络。

虚拟互联网络也就是逻辑互联网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是利用协议可以使这些性能各异的网络让用户看起来好像是一个统一的网络,如图4-1所示。这种协议就是网络层重点讨论的IP。

image-20200912074805727

将网络互连起来肯定需要一些中间设备(又称为中间系统或中继系统),根据中继系统所在的层次,可以有以下 4种不同的中继系统。

  1. 物理层的中继系统∶中继器或集线器。
  2. 数据链路层的中继系统∶网桥或交换机。
  3. 网络层的中继系统∶路由器。
  4. 网络层以上的中继系统∶网关。

当中继系统是中继器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络。互联网都是指用路由器进行互连的网络

使用虚拟互联网的好处∶当互联网上的主机进行通信时,就好像在同一个网络上通信,而看不见互连的具体的网络异构细节(如超时控制、路由选择协议等)。

可能疑问点∶"尽最大努力交付"都有哪些含义?

解析∶

  1. 不保证源主机发送出来的IP数据报一定无差错地交付到目的主机
  2. 不保证源主机发送出来的IP数据报都在某一规定的时间内交付到目的主机。
  3. 不保证源主机发送出来的IP数据报一定按发送时的顺序交付到目的主机。
  4. 不保证源主机发送出来的IP数据报不会重复交付到目的主机。
  5. 不故意丢弃IP数据报。丢弃IP数据报的情况∶路由器检测出首部检验和有错误;或由于网络中通信量过大,路由器或目的主机中的缓存已无空闲空间

但是要注意,IP数据报的首部中有一个"首部检验和"。当它检验出IP数据报的首部出现了差错时,就将该数据报丢弃

因此,凡交付给目的主机的IP数据报都是IP数据报的首部没有出现差错的,或没有检测出来有差错的。这就是说,传输过程中出现差错的IP数据报都被丢弃了

例如,源主机一连发送了1000个IP数据报,结果有9999个IP数据报都出现了差错,因而都被丢弃了。这样,只有一个不出错的IP数据报最后交付给了目的主机。这也完全符合"尽最大努力交付"的原则。甚至当所发送的10000个IP数据报都被丢弃了,也不能说这不是"尽最大努力交付",只要路由器不是故意地丢弃IP数据报即可。

现在因特网上绝大多数的通信量都属于"尽最大努力交付"。如果要保证数据可靠地交付给目的地,则必须由使用 IP的高层软件来负责解决这一问题

路由与转发

路由器的主要功能包括路由选择(确定哪一条路径)与分组转发(当一个分组到达时所采用的动作)。

根据所需性能要求,可以采用适当的路由算法来构造路由表进行路由选择。不仅如此,该路由表还会根据从各相邻路由器所得到的关于整个网络的拓扑变化情况,动态地改变所选择的路由,以便得到最佳路由。

  1. 路由选择∶根据路由算法确定一个进来的分组应该被传送到哪一条输出路线上。如果子网内部使用数据报,那么对每一个进来的分组都要重新选择路径。如果子网内部使用虚电路,那么只有当创建一个新的虚电路时,才需要确定路由路径

  2. 分组转发∶路由器根据转发表将用户的IP数据报从合适的端口转发出去。

    注意∶路由表是根据路由选择算法得出的,而转发表是从路由表得出的。转发表的结构应当使查找过程最优化,路由表则需要对网络拓扑变化的计算最优化。在讨论路由选择的原理时,往往不去区分转发表和路由表,而是笼统地使用路由表这一名词

可能疑问点∶在一个互联网中,能否使用一个很大的交换机(Switch)来代替互联网中很多的路由器?

解析∶不行。交换机和路由器的功能不一样。

交换机可在单个的网络中和若干台计算机相连,并且可以将一台计算机发送过来的帧转发给另一台计算机。从这一点上看,交换机具有集线器的转发帧的功能。

但交换机比集线器的功能强很多。集线器在同一时间只允许一台计算机和其他计算机进行通信,但交换机允许多台计算机同时进行通信

路由器连接两个或多个网络。路由器可在网络之间转发分组(IP数据报)。特别是,这些互连的网络可以是异构的。

因此,如果是许多相同类型的网络互连在一起,那么用一个很大的交换机(如果能够找得到)代替原来的一些路由器是可以的

如果这些互连的网络是异构的网络,那么就必须使用路由器来进行互连

可能疑问点∶路由表中只给出到目的网络的下一跳路由器的IP地址,然后在下一个路由器的路由表中再给出再下一跳的路由器的 IP地址,最后才能到达目的网络进行直接交付。采用这样的方法有什么好处?

解析∶这样做的最大好处就是使得路由选择成为动态的,十分灵活。当IP数据报传送到半途时,若网络的情况发生了变化(如网络拓扑变化或出现了拥塞),那么中途的路由器就可以改变其下一跳路由,从而实现动态路由选择。

拥塞控制

本章仅介绍拥塞控制的基本概念,有关拥塞控制更详细的讲解请参考第5章5.3.5小节和5.3.6小节。

计算机网络(如交通网络一样)在一个子网或子网的一部分出现太多分组(车辆)时,网络性能开始下降,这种情况称为拥塞。因此需要采取拥塞控制方法,以确保网络不出现拥塞,或确保网络在出现拥塞时也能保持良好的性能。

拥塞控制可以分为两大类∶

  1. 开环控制∶在网络系统设计时,事先就要考虑到有关发生拥塞的各种因素,力求在系统工作时不会出现拥塞。一旦整个系统启动并运行起来,就不再需要中途进行修改。开环控制手段可包括确定何时可接收新流量确定何时可丢弃分组丢弃哪些分组确定何种调度决策等。所有这些手段的共性是,在做决定时不考虑当前网络状态
  2. 闭环控制∶事先不考虑有关发生拥塞的各种因素,采用监视系统去监视,即时检测到哪里发生拥塞(就像道路上的摄像头,看到哪里发生堵车,立刻派交警去解决),然后将拥塞信息传到合适的地方以便调整系统运行,改正问题。其主要措施包括检测拥塞报告拥塞调整措施

加上合适的拥塞控制后,网络就不易出现拥塞和死锁现象了,但代价是当提供的负载较小时,有拥塞控制的吞吐量反而比无拥塞控制时要小

注意∶拥塞控制和流量控制的关系密切,但二者之间也存在一些差异。拥塞控制必须确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及所有主机、路由器以及导致网络传输能力下降的所有因素。而流量控制只与给定的发送端和接收端之间的点对点通信量有关,其任务是使发送端发送数据的速率不能快得让接收端来不及接收

路由算法

静态路由和动态路由

路由器转发分组是通过路由表转发的,而路由表是通过各种算法得到的。

如果从路由算法能否随网络的通信量或拓扑自适应地进行调整变化来划分,则只有两大类,即静态路由选择策略(又称为非自适应路由选择)与动态路由选择策略(又称为自适应路由选择)。

静态路由选择的特点是简单开销小,但不能及时适应网络状态的变化。对于很小的网络,完全可以采用静态路由选择,自己手动配置每一条路由

动态路由选择的特点是能较好地适应网络状态的变化,但实现起来比较复杂,开销也较大。因此,动态路由适用于较复杂的网络。

现代的计算机网络通常使用动态路由选择算法。动态路由算法又可分为两种基本类型∶距离-向量路由算法链路状态路由算法

距离-向量路由算法

在距离-向量路由算法中,所有的节点都定期地将它们整个路由选择表传送给所有与之直接相邻的节点。这种路由选择表包含每条路径的目的地(另一节点)和路径的代价(距离)

注意∶这里的距离是一个抽象的概念,如RIP就将距离定义为"跳数"。跳数指从源端口到达目的端口所经过的路由个数,经过一个路由器跳数加1。当然距离还可以定义成其他因素。

在该路由算法中,所有节点都必须参与距离-向量交换,以保证路由的有效性和一致性。换句话说,所有节点都监听从其他节点传送来的路由选择更新信息,并在下列情况下更新它们的路由选择表。

  1. 情况一∶被通告一条新的路由,该路由在本节点的路由表中不存在,此时本地节点加入这条新的路由。
  2. 情况二∶通过发送路由信息的节点有一条到达某个目的地的路由,该路由比当前使用的路由有较短的距离(例如,RIP就是有较小的跳数)。在这种情况下,用经过发送路由信息的节点的新路由替换路由表中到达那个目的地的现有路由。

距离-向量路由算法的实质是通过迭代法来得到到达某目标的最短通路。它要求每个节点在每次更新中都将它的全部路由表发送给它的所有相邻节点。显然,如果该网络的节点越多,那么每次因为路由更新所产生的报文就越大。另外,由于更新报文发给直接相邻的路由器,因此所有节点都将参加路由选择信息交换。基于这些原因,在通信子网上传送的路由选择信息的数量很容易变得非常大。

目前,最常用的距离-向量路由算法是RIP算法,它采用"跳数"作为距离的代价。

链路状态路由算法

链路状态路由算法要求每个参与该算法的节点都有完全的网络拓扑信息,它们执行下述两项任务。

  1. 主动测试所有邻接节点的状态。两个共享一条链接的节点是相邻节点,它们连接到同一条链路。
  2. 定期地将链路状态传播给所有其他节点(或称为路由节点)。

在一个链路状态路由选择中,一个节点检查所有直接链路的状态,并将所得的状态信息发送给网上所有其他的节点而不仅是发送给那些直接相连的节点。每个节点都用这种方式,所有其他节点从网上接收包含直接链路状态的路由选择信息。

每当链路状态报文到达时,路由节点便使用这些状态信息去更新自己的网络拓扑和状态"视野图",一旦链路状态发生了变化,节点对更新的网络图利用 Dijkstra 最短路径算法重新计算路由,从单一节点出发计算到达所有目的节点的最短路径。

链路状态路由算法主要有三大特征∶

  1. 向本自治系统(参考4.2.4小节)中的所有路由器发送信息。这里使用的方式是洪泛法,即路由器通过所有输出端口向所有相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有相邻路由器(但不再发送给刚刚发来信息的那个路由器)。
  2. 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。所谓"链路状态"就是说明本路由器都和哪些路由器相邻以及该链路的"度量"。对于OSPF算法,链路状态的"度量"主要用来表示费用、距离、时延、带宽等。
  3. 只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送信息。由于一个路由器的链路状态只涉及与相邻路由器的连通状态,因此与整个互联网的规模并无直接关系,所以链路状态路由算法可以用于大型的或路由信息变化剧烈的互联网络环境。

目前,最常用的链路状态路由算法是OSPF 算法。

层次路由

背景知识∶首先要清楚因特网为什么采用分层次的路由选择协议,原因有两个。

  1. 随着时间的推移,因特网的规模越来越大,现在就有几百万个路由器互连在一起了,如果让所有路由器知道所有网络应该怎样到达,则这种路由表将非常大,处理起来也太耗费时间,而所有这些路由器交换路由信息所需的带宽就会使因特网的通信链路达到饱和。
  2. 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到因特网上。

基于上述两个原因,因特网将整个互联网划分为许多较小的自治系统(但是注意一个自治系统不是一个局域网,里面包含很多局域网),每个自治系统有权自主地决定本系统内应采用何种路由选择协议。但是问题出来了,如果两个自治系统需要通信,并且这两个自治系统内部所使用的路由选择协议不同,那么怎么通信?

所以就需要一种在两个自治系统之间的协议来屏蔽这些差异,据此,因特网把路由选择协议划分为两大类∶

  1. 一个自治系统内部所使用的路由选择协议称为内部网关协议(IGP),具体的协议有RIP 和OSPF 等。
  2. 自治系统之间使用的路由选择协议称为外部网关协议(EGP),主要在不同自治系统的路由器之间交换路由信息,并负责为分组在不同自治系统之间选择最优的路径,具体的协议有BGP。

自治系统内部的路由选择称为域内路由选择。相应的,自治系统之间的路由选择称为域间路由选择。

对于非常大的网络,OSPF 协议将一个自治系统再划分为若干个更小的范围,叫作区域。划分区域的好处就是把利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个自治系统,这样减少了整个网络上的通信量。

在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑情况。

为了使每一个区域能够和本区域以外的区域进行通信,OSPF使用层次结构的区域划分。在上层的区域叫作骨干区域,骨干区域的标识符规定为0.0.0.0。

骨干区域的作用是用来连通其他在下层的区域从其他区域来的信息都由区域边界路由器进行概括。每一个区域至少应当有一个区域边界路由器。在骨干区域内的路由器叫作骨干路由器,一个骨干路由器可以同时是区域边界路由器。在骨干区域内还要有一个路由器,专门与本自治系统外的其他自治系统交换路由信息,这样的路由器叫作自治系统边界路由器

采用分层次划分区域的方法使交换信息的种类增多了,同时也使OSPF协议更加复杂。但此方法能使每一个区域内部交换路由信息的通信量大大减小,因而使OSPF协议能够用于大规模的自治系统中。

故事助记∶将整个世界看作一个因特网,每个国家是不同的自治系统,而每个国家又分为许多省(区域),每个省的人只懂得自己省的风俗(每个路由器只知道本区域的完整网络拓扑)。但是各个省之间是需要互相交流的,这样就在每个省选出一个省长(区域边界路由器),这样该省的百姓就可以将信息通过省长传给另外一个省长(通过骨干区域)。当然有时候国家首脑还要给各个省长开会,相互交流信息,所以需要一个组织(骨干区域,取名为0.0.0.0),该组织包括各省长和国家首脑。所以说省长需要演好两个角色,一个是骨干区域的成员,另一个是区域边界成员。当然这样是不够的,如果两个国家互访(不同自治系统交换信息),这时就派国家首脑去和外国交流(可以是骨干区域的任何一个路由器),此时国家首脑可以看成是自治系统边界路由器。

IPV4

IPV4分组

IP数据报首部格式如图4-2所示。

image-20200912091543874

从宏观方面,一般来说,IP数据报的首部是60B,其中21~60B部分是可选字段和填充,用来完成某种功能(什么功能不用管)。而如果使用某功能后,首部的长度若不再是4B的倍数时,就需要使用填充来填满这个4B。例如,使用某功能后首部长度是22B(该功能占用了2B),那么就要用自动填充功能来填到24B。但是一般来说IP数据报不需要使用任何功能,所以在默认情况下考生应该将IP数据报的首部看成是20B(已经是4B的倍数,所以不需要填充),千万记住!

从微观的角度去理解这20B的作用,下面是总体介绍,易考到的首部部分会在后面进行总结。

  1. 版本∶占4位,就是说这个IP数据报是IPv4版本还是IPv6版本,通信双方的版本必须一致。

  2. 首部长度∶占4位,IP数据报的首部实际上是60B(但是有40B基本从不使用,考试的时候就认为IP数据报的首部是20B,绝对不会错),前面也讲过IP数据报首部的长度必须是4B的倍数,这样只要用15个标记(每个标记4位)就可以表示60B,例如,0001表示4B,0010表示 8B,…,1111表示60B。

  3. 区分服务∶占1B,从没使用过,不会考,可忽略。

  4. 总长度∶占2B,千万不要和首部的基本长度弄混淆,这里的基本单位长度是1B,不再是4B,并且总长度包括了首部和数据部分,很明显16位可以表示的长度为65535B(因为16位表示的数的范围是0~65535)。

    如果IP数据报的总长度这么长,MAC帧的数据部分最大长度才1500B(可能还少于1500B,每个网络是可以自己定义的),而IP数据报的总长度恰好就是MAC帧的数据部分,所以当IP数据报的长度大于1500B时,很明显就必须要切割之后发送。但是问题出现了,切割之后接收端怎么合并?

    首先接收端收到的数据报要是原数据报的分片(这样的话就需要标识,每个原数据报都可以将这个标识填到每个分片的首部,就是下面要介绍的标识),但是,万一等到的是最后一片,而接收端不知道是最后一片,还会一直等,为了打破僵局,这就需要有一个标志位 MF,去标记该片是不是最后一位。现在继续假设已经收到了最后一个分片,怎样将所有的分片合并呢?

    这就需要片偏移,只需要按照片偏移从小到大合并即可,在合并的过程中一定要将首部的20B删除

疑问∶细心的考生可能会发现,在总长度的设计上明显存在缺陷。MAC帧数据部分最大的长度是1500B,既然IP数据报是MAC帧的数据部分,那么如果IP数据报的总长度字段是2B,可以表示的长度达到65535B,这样不是浪费了吗?

解析∶因为以前用的不是以太网,也许以前用的局域网帧格式可以让帧的长度很长,甚至不加以限制。只是以太网比较流行了,也许才发现这个缺点(这是编者理解的,如果有更好的答案,请与编者联系)。

  1. 标识∶占2B,它是一个计数器,用来产生IP数据报的标识。
  2. 标志∶占3位,目前只有前2位有意义,即MF和 DF。MF前面已经讲过,作用是为了合并数据报;DF的作用∶比如一个数据报经过某个路由器发现它的长度超过了最大发送长度,并且DF=1(不能分片),这样该数据报就过不去了,然后路由器丢弃这个数据报,并发送一个ICMP报文(参考4.3.8小节)给发送端,说该数据报太长了过不去,并且在ICMP 报文中填写了该路由器传送的最大传输单位,让主机考虑怎么传,但是如果DF=0,即使下一跳数据报太大,仍然可以继续分片传送,这就是DF的作用。
  3. 片偏移∶占13位,前面已经讲过,但是需要注意的是片偏移是8B的整数倍。理由就是数据报总长度为16位,而片偏移只有13位,要使得13位能准确地表示16位的长度,就必须1位可以当3位用,即23=8B,为了更好地理解上面所讲的,请参考例4-1。在例4-1 中有一点需要提醒,现在假定数据报片2经过某个网络时还需要分片,此时还需要分片是建立在数据报2的DF值都是0(见表4-1)的基础上,若数据报片2的DF值等于1,则该数据报就不可达,请千万注意。

【例4-1】某数据报的总长度为3820B(使用固定首部),需要分片为长度不超过1420B 的数据报片,应该怎么分?

解析∶由于该数据报采用固定首部,因此该数据报的数据部分长度为3800B。又由于分片为长度不超过1420B的数据报片,因此每个数据报片的数据部分长度不能超过1400B(原始数据报首部被复制为各数据报片的首部,仅需修改有关字段的值)。图4-3给出分片后得出的结果(注意片偏移的数值)。

image-20200912094256284

image-20200912094308426

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

image-20200912094351741

注意∶数据报片2-2的MF值仍然是1,因为后面还有数据报片3。

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

image-20200912094426576

  1. 首部校验和∶占16位,只需记住只检验数据报的首部,不检验数据部分,至于具体检验过程可参考第5章关于UDP数据报校验和。
  2. 源地址∶发送端主机的IP地址。
  3. 目的地址∶接收端主机的IP地址。
    至此,20B的首部全部介绍完毕,也许看到这里你确实记住了,但是根据经验,不出一周必忘无疑,希望下面的总结能够帮助大家将遗忘降到最低。

总结∶

  1. 在首部中接触了3个关于长度的标记,一个是首部长度,一个是总长度,一个是片偏移,它们的基本单位分别为4B、1B、8B(这个一定要记住)。通过一句话帮助记忆∶你不要总是拿1条假首饰(首4)来骗(偏)我吧(8),记住关键词总1、首4、偏8。

    所以说还有一点要提醒∶编者不可能对每个知识点都能想到过目不忘的记忆方式。但是希望考生能在备考的过程中善于利用这样的方法来帮助学习,特别是对于网络这样记忆性较强的学科。

现在知道了IP数据报是由什么构成的,下面来讨论IP数据报有关转发的一些疑问总结。

  1. 默认路由中的"默认"二字并没有出现在路由表中,"默认"会被记为0.0.0.0,这个一定要记住,2009年最后一题就考到了。但是这里仅仅是将0.0.0.0作为默认目的地址,绝对不是目的地址,0.0.0.0不能作为目的地址

  2. 得到下一跳路由器的 IP地址后不是直接将该地址填入到待发送的数据报,而是将该IP地址转成MAC地址(通过ARP,参考4.3.6小节),将其放到MAC帧首部中,然后根据这个MAC地址来找到下一跳路由器。

    也许有人会问,为什么要转换成物理地址?不能直接通过IP地址去找吗?

    当然不能,计算机网络中一直有这样一句话,好像两台主机的网络层有一条链路一样,这仅仅是好像,不是真实有,就好像两栋7层楼房,你要从这一栋的第三层到另一栋的第三层,你能直接过去吗?肯定不行,一定要先下到一楼然后走向另一栋,再走楼梯到三楼,但是如果不考虑中间这些细节的话,这个人就好像是从三楼直接飞过去的。

  3. 只知道IP地址,也就是说,这个人只能站在三楼才能看见去对面三楼的路线,但是你从这一栋下到一楼后走向另一栋,你是不知道怎么样才能过去的,所以第一层也需要地址才知道怎么走到另一栋,这里的地址就是MAC地址。所以说MAC地址是数据链路层和物理层使用的地址,一定要使用MAC 地址去找路由器

  4. 在不同网络中传送时,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类地址

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。

image-20200912133035527

B类地址

如图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。

image-20200912133100037

C类地址

如图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。

image-20200912133122468

补充知识点∶关于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种特殊地址

6种特殊地址见表4-3。

注意∶网络地址较常见,任何教材都会讲,在此就不讲解了,本知识点主要针对其他5 种特殊地址进行总结。

image-20200912134518575

直接广播地址

在A、B、C类地址中,若主机号全1,则这个地址称为直接广播地址

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

image-20200912140106001

【例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,即01001111 11111111,转换成十进制为79.255。故该网络的广播地址为180.80.79.255。

受限广播地址

IP地址为255.255.255.255,这个地址用于定义在当前网络(绝对不是整个因特网,注意出选择题!)上的广播地址。一个主机若想把报文发送给所有其他主机,就可以使用这样的地址作为分组中的目的地址,但是路由器会把这种类型的地址阻拦,使这样的广播仅局限于本地局域网。应注意,这种地址属于E类地址,如图4-9所示。

image-20200912141112021

这个网络上的这个主机

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

image-20200912141246975

这个网络上的特定主机

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

image-20200912141318065

环回地址(了解即可,不懂没关系,只需知道127是环回用的即可)

第一个字节等于127的IP地址作为环回地址,这个地址用来测试机器的软件。当使用这个地址时,分组永远不离开这个机器,这个分组就简单地返回到协议软件,因此这个地址可以用来测试IP软件

例如,像 ping 这样的应用程序,可以发送把环回地址作为目的地址的分组,以便测试IP软件能否接收和处理分组。另一个例子就是,客户进程用环回地址发送报文给同样机器上的服务器进程。应当注意,这种地址在IP分组中既能用作目的地址,也能用作源地址。实际上这也是A类地址,环回地址也会使A类地址中的网络数减少一个,如图4-12所示。

image-20200912141340868

补充知识点∶IP地址具有以下一些重要特点。

  1. IP地址是一种分等级的地址结构。分等级的两个好处如下∶

    ①IP地址管理机构在分配IP地址时 只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了IP地址的管理。

    ②路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。

  2. 实际上 IP地址是标志一个主机(或路由器)和一条链路的接口。当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的IP地址,其网络号(net-id)必须是不同的。这种主机称为多接口主机,例如,路由器的每个接口都有一个不同网络号的IP地址。

  3. 用中继器或网桥连接起来的若干个局域网仍为一个网络,因此这些局域网都具有同样的网络号。

  4. 所有分配到网络号的网络,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网,两者都是平等的。

可能疑问点∶在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地址

例如,100个机构各有100台主机,假设现在100个机构都分配全球IP地址,就需要10000 个全球IP地址,但是现在从所有的全球IP地址里面划分出100个IP地址(当然不只100个,这里仅仅是为了简化问题),专门用作一些只需内部通信的机构使用,即100个机构都使用这100个地址,只需要100个IP地址就解决问题了。而这100个IP地址在计算机网络中被称为专用地址,而路由器看到专用地址就不转发,所以说专用地址作为目的地址是不可能在因特网上传送的。

因特网已经规定了以下地址作为专用地址

  1. 10.0.0.0~10.255.255.255(相当于一个A类网络)。
  2. 172.16.0.0~172.31.255.255(相当于16个连续的B类网络)。
  3. 192.168.0.0~192.168.255.255(相当于256个连续的C类网络)。

这种采用专用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宿舍楼管因为没有记录该地址,所以就不知道将东西给哪个女生。因此,专用网的主机是不能充当服务器直接被因特网的主机访问的,即一定要专用网的主机先发起通信。也就是说,专用网的主机不联系因特网的主机,因特网的主机就一定不会联系专用网的主机

image-20200912151715513

解析∶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地址(网络号+主机号)设计得不合理。

  1. IP地址空间的利用率有时很低。例如,对于一个只有200台主机的公司,分配一个A类网络,显然IP地址利用率极低。
  2. 给每一个物理网络分配一个网络号会使路由表变得太大而使网络性能变坏
  3. 两级的IP地址不够灵活

聪明的人类想出了"子网号字段",使得两级的IP地址变为三级的IP地址,这种做法叫作划分子网。划分子网属于一个单位内部的事情,单位对外仍然表现为没有划分子网的网络

划分子网的基本思路∶从主机号借用若干个比特作为子网号,而主机号也就相应减少了若干个比特,网络号不变。于是三级的IP地址可记为

image-20200912152241838

凡是从其他网络发送给本单位某个主机的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中需要增加的一条路由(目的网络、子网掩码、下一跳)是()。

image-20200912153009949

image-20200912153328313

子网掩码

子网划分与否是看不出来的,如果要告诉主机或路由器是否对一个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所示。

image-20200912154327951

现在的因特网标准规定,所有网络都必须有一个子网掩码如果一个网络没有划分子网,就采用默认子网掩码。A类、B类、C类地址的默认子网掩码分别是255.0.0.0255.255.0.0255.255.255.0

总结∶不管网络有没有划分子网,只要将子网掩码和IP地址进行逐位的"与"运算,就一定能立即得出网络地址。使用子网掩码后,路由表的每行所包括的主要内容是目的网络地址、子网掩码和下一跳地址。此时,路由器的分组转发算法如下∶

  1. 从收到的分组首部提取目的 IP地址D。
  2. 先判断是否为直接交付,用那些和路由器直接相邻的网络的子网掩码和D 逐位相"与",看是否和相应的网络地址匹配。若匹配,则将分组直接交付,否则就是间接交付。
  3. 若路由表中有目的地址为D的特定主机路由,则将分组传送给指明的下一跳路由器,否则执行 4)。
  4. 对路由表中的每一行的子网掩码和D 逐位相"与"。若其结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行5)。
  5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行6)。
  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地址耗尽而提出的一种措施。

  1. CIDR消除了传统的A类、B类和C类地址以及划分子网的概念,因而可以更加有效地分配IPv4的地址空间。CIDR使用各种长度的"网络前缀"来代替分类地址中的网络号和子网号。于是,IP地址又从三级编址回到了两级编址,其地址格式为
    image-20200912160203869
    为了区分网络前缀,通常采用"斜线记法"(又称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"的主机号地址一般不使用

  2. 网络前缀都相同的连续的IP地址组成"CIDR地址块"。一个 CIDR地址块可以表示很多地址,这种地址的聚合常称为路由聚合(也称构成超网),它使得路由表中的一个项目可以表示很多个原来传统分类地址的路由,因此可以缩短路由表,减小路由器之间选择信息的交换,从而提高网络性能(参考例 4-9)。CIDR 中同样使用了掩码来确定其网络前缀。对于"20"的地址块,其掩码由连续的20个"1"和后续12个"0"组成。可以看出,"1"对应于网络前缀,"0"对应于主机号。

在使用 CIDR时,路由表中的每个项目由网络前缀和下一跳地址组成。这样就会导致查找路由表时可能会得到不止一个匹配结果。应当= =从匹配结果中选择具有最长网络前缀的路由==,因为网络前缀越长,其地址块就越小,路由就越具体。最长前缀匹配原则又称为最长匹配或最佳匹配,参考例4-10。

image-20200912185933857

image-20200912190102498

解析∶A。路由聚合的计算方法如下∶

  1. 将需要聚合的几个网段的地址转换为二进制的表达方式。
  2. 比较这些网段,寻找它们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分组将被投递到哪个下一站?

image-20200912190318103

解析∶
解题思路∶将右边的 IP地址与左边的网络号进行一一比较,如果可以满足前缀相同的长度大于或等于掩码的长度,则表示可以走此条路由,称为匹配。但是如果有更长掩码的网络与之匹配,则应该优先选择具有更长掩码的网络,即满足最长匹配原则

解题技巧∶既然需要满足最长匹配原则,那么应该从掩码长度最长的开始比较。

  1. 网络号C4.5E.10.0/20的第三字节可以用二进制表示成00010000,目标地址C4.5E.13.87 的第三字节可以用二进制表示成00010011,前20位相同,恰好匹配了,所以具有该目标地址的IP分组将被投递到B站。

  2. 目标地址C4.5E.22.09与网络号C4.5E.10.0/20的前20位不一样,所以不能进行匹配。其次,优先考虑的应该是网络号C4.50.0.0/12,恰好匹配,所以具有该目标地址的IP分组将被投递到A站。

  3. 经过比较,目标地址C3.41.80.02只能与80.0.0.0/1匹配。因为目标地址C3.41.80.02 的第一字节为11000011,而网络80.0.0.0的第一字节为10000000,第一位都为1,匹配,所以具有该目标地址的IP分组将被投递到E 站。

  4. 同上分析,目标地址 5E.43.91.12与网络40.0.0.0/2匹配,所以具有该目标地址的IP 分组将被投递到F站。

  5. 同上分析,目标地址C4.6D.31.2E与网络C4.60.0.0/12匹配(且标地址C4.6D.31.2E 与网络C4.68.0.0/14只有前13位相同,所以不能匹配,所以具有该目标地址的IP分组将被投递到C 站。

  6. 同上分析,目标地址C4.6B.31.2E 与网络 C4.68.0.0/14匹配,所以具有该目标地址的IP分组将被投递到D站。

补充∶有些同学可能还不是很明白为什么要满足最长匹配原则?下面用一个生活实例来解释。

解析∶比如我要邮寄一个包裹给我的同学。然后我给了快递人员以下3个地址∶1)浙江省杭州市2)浙江省杭州市西湖区。
3)浙江省杭州市西湖区浙江大学玉泉校区。

其实以上3个地址都是正确的(匹配,但是作为快递人员(路由器)会去选择哪一个呢?

当然是会选择第三个,地址越具体(掩码长度越长),就能越准确地找到目标地址。

路由表表项在各种情况下的总结见表4-6。

image-20200912191508924

可能疑问点∶网络前缀是指网络号字段(net-id)中前面的几个类别位还是指整个的网络号字段?

解析∶网络前缀是指整个网络号字段,即包括了最前面的几个类别位在内。网络前缀常常简称为前缀。

例如,一个B类地址1010000 00000000 00000000 00010000,其类别位就是最前面的两位10,而网络前缀就是前16 位1010000 00000000。

可能疑问点∶有的书将IP地址分为前缀和后缀两大部分,它们和网络号字段及主机号字段有什么关系?前缀和后缀有什么不同?

解析∶前缀(prefix)是网络号字段(net-id),而后缀(suffix)是主机号字段(hostid)。图4-16所示是以C类地址为例来说明前缀和后缀是什么。

image-20200912191959868

前缀与后缀的区别∶

  1. 前缀是由因特网管理机构进行分配的,而后缀是由分配到前缀的单位自行分配的。
  2. 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),即从一个源地址发送到一个目的地址。

image-20200912192147148

注意∶从IP地址到硬件地址的解析是自动进行的,主机的用户对这种地址解析过程是不知道的。只要主机或路由器与本网络上的另一个已知IP地址的主机或路由器进行通信,ARP 就会自动地将该IP地址解析为链路层所需要的硬件地址。

ARP的4种典型情况总结∶

  1. 发送方是主机,要把IP数据报发送到本网络上的另一个主机。这时用ARP找到目的主机的硬件地址。
  2. 发送方是主机,要把IP数据报发送到另一个网络上的一个主机。这时用ARP找到本网络上的一个路由器的硬件地址,剩下的工作由这个路由器来完成。
  3. 发送方是路由器,要把IP数据报转发到本网络上的一个主机。这时用ARP找到目的主机的硬件地址。
  4. 发送方是路由器,要把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所示。

image-20200912194331450

由于主机A和B连接在同一个网络上,所以主机A使用一次ARP就可得到主机B的硬件地址,然后用主机B的硬件地址将IP数据报组装成帧,发送给主机B。

但当目的主机是主机F时,情况就不同了。主机A无法得到主机F的硬件地址。主机A 只能先将IP数据报发送给本网络上的一个路由器(在本例中就是路由器R1)。因此,当主机A发送IP数据报给主机F 时,在地址解析方面要经过以下3个步骤∶

  1. 主机A先通过ARP解析出路由器R1的硬件地址,将IP数据报发送到R1。
  2. R1再通过 ARP解析出R2的硬件地址,将IP数据报转发到R2。
  3. 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客户端的交换过程如下∶

  1. DHCP客户机广播"DHCP发现"消息,试图找到网络中的DHCP服务器,服务器获得一个IP地址。
  2. DHCP服务器收到"DHCP发现"消息后,就向网络中广播"DHCP提供"消息,其中包括提供 DHCP客户机的IP地址和相关配置信息。
  3. DHCP客户机收到"DHCP提供"消息,如果接受DHCP服务器所提供的相关参数,则通过广播"DHCP请求"消息向DHCP服务器请求提供IP地址。
  4. DHCP服务器广播"DHCP确认"消息,将IP地址分配给 DHCP客户机。DHCP允许网络上配置多台DHCP服务器,当DHCP客户发出DHCP请求时,就有可能收到多个应答信息。这时,DHCP客户只会挑选其中的一个,通常是挑选"最先到达的信息"。

ICMP

主机在发送数据报时,经常会由于各种原因发送错误,如路由器拥塞丢弃了或者传输过程中出现错误丢弃了(注意∶如果是首部出错,当然可以发,但是一般都不发,因为首部出错很有可能源IP地址都错了,所以即使发了源主机也不一定收到)。

如果检测出错误的路由器或主机都能把这些错误报告通过一些控制消息告诉发送数据的主机,那么发送数据的主机就可根据ICMP报文确定发生错误的类型,并确定如何才能更好地重发失败的数据报(比如ICMP报文发过来的是改变路由,那么主机就不能继续按照这个路由线路发送了,需要用另外一条路由线路发送数据)。尽管这些控制消息并不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP报文分为两种,即ICMP差错报告报文ICMP询问报文

ICMP差错报告报文的分类(2010年考过一道选择题)

  1. 终点不可达。当路由器或主机不能交付数据报时,就向源点发送终点不可达报文
  2. 源站抑制。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢。
  3. 时间超过。当IP分组的TTL值被减为0后,路由器除了要丢弃该分组外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文
  4. 参数问题。当路由器或目的主机收到的数据报的首部中有字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文(现在一般都不发)。
  5. 改变路由(重定向)。路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给其他的路由器(比当前更好的路由)。

【例4-12】(2010年统考真题)若路由器R因为拥塞丢弃IP分组,则此时R可向发出该IP分组的源主机发送的ICMP报文的类型是()

A.路由重定向

B. 目的不可达

C.源抑制

D.超时

解析∶C。当路由器或主机由于拥塞而丢弃数据报时,就向源点发送源点抑制报文,使源点知道应当把数据报的发送速率放慢

ICMP询问报文的分类

  1. 有回送请求和回答报文。
  2. 时间戳请求和回答报文。
  3. 掩码地址请求和回答报文。
  4. 路由器询问和通告报文。

不应发送ICMP差错报告报文的几种情况

  1. 对ICMP差错报告报文不再发送ICMP差错报告报文。
  2. 对第一个分片的数据报片的所有后续数据报片都不发送ICMP差错报告报文。
  3. 对具有组播地址的数据报都不发送ICMP差错报告报文。
  4. 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文。

ICMP的两个典型应用,其实在日常生活中经常用,即 pingtacert

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地址和端口号才能唯一确定)能更好地联系起来,因为发送

image-20200912203917204

数据的是某个主机中的某个进程而不是主机本身,这样才算真正找到了发送数据的源泉。

很多人可能会对代码字段产生疑问,既然有了类型为什么还要代码?

举个例子,类型值是3表示终点不可达,但是不可达也有很多种,如有网络不可达、主机不可达、协议不可达(仅是例子,不要求掌握),所以需要代码字段来更确切地表示是哪一种不可达

可能疑问点∶当路由器利用IP数据报首部中的"首部检验和"字段检测出在传输过程中出现了差错时,就简单地将其丢弃。为什么不发送一个ICMP报文给源主机呢?

解析∶IP并不要求源主机重传有差错的IP数据报,保证无差错传输是由TCP完成的。另一方面,首部检验和只能检验出IP数据报的首部出现了差错,但不知道首部中的源地址字段有没有出错。如果源地址出现了差错,那么将这种IP数据报传送到错误的地址也是没有任何意义的。

IPv6

IPv6的特点

由于IPv4地址即将耗尽,因此必须采取相应的办法去解决。前面已经介绍过采用网络地址转换(NAT)方法以节省全球IP地址和采用无分类编址(CIDR)使IP地址的分配更加合理。这两种方法仅是优化了IPv4地址的使用方法,并没有从根本上解决IP地址的耗尽问题,而采用具有更大地址空间的新版本的IPv6才能真正意义上地解决IPv4即将耗尽问题。下面总结 IPv6的主要特点。

  1. 更大的地址空间。IPv6将地址从IPv4的32位增大到了128位。
  2. 扩展的地址层次结构。因为地址多了,所以可以划分更多的层次。
  3. 灵活的首部格式。
  4. 改进的选项。
  5. 允许协议继续扩充。
  6. 支持即插即用(自动配置)。
  7. 支持资源的预分配。
  8. IPv6首部长度必须是8B的整数倍,而IPv4首部是4B的整数倍(还记得首饰=首4 吗?)。

虽然IPv6与IPV4不兼容,但总的来说它跟所有其他的因特网协议兼容,包括TCP、UDP、ICMP、DNS等,只是在少数地方做了必要的修改(大部分是为了处理长的地址)。IPv6相当好地满足了预定的目标,主要体现在以下3个方面。

  1. IPv6第一个主要改进也是最重要的,即IPv6比IP4有长得多的地址。IPv6的地址用128位表示,地址空间是IPV4的2128-32 = 296倍,相当于地球表面的每平方米面积都有大约6x1023个地址。
  2. IPv6第二个主要改进是简化了IP分组的基本首部,它包含8个段(IPV4是12个段)。这一改变使得路由器能够更快地处理分组,从而可以改善吞吐率。
  3. IPv6第三个主要改进是IPv6更好地支持选项。这一改变对新的分组首部很重要,因为一些从前是必要的段现在变成可选的了。此外,表示选项的方式也有所不同,使得路由器能够简单地跳过与它们无关的选项。这一特征加快了分组处理速度。

IPv6的格式

IPv6地址首部相对于IPv4地址首部有较大的改变,如图4-22所示。image-20200912221745429

  1. 版本(Version)∶占4位,它指明了协议的版本,对于IPv6,该字段总是6。
  2. 通信量类(Traffc Class)∶占8位,这是为了区分不同的IPv6数据报的类别或优先级。已经定义了0~15共16个优先级,0的优先级最低。0~7表示允许延迟,8~15表示高优先级,需要固定速率传输。
  3. 流标号(FlowLabel)∶占20位,"流"是互联网上从特定源点到特定终点的一系列数据报,"流"所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
  4. 有效载荷长度(PayloadLength)∶占16位,它指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是64KB
  5. 下一个首部(Next Header)∶占8位,它相当于IPv4的协议字段或可选字段。
  6. 跳数限制(HopLimit)∶占8位,源站在数据报发出时即设定跳数限制,路由器在转发数据报时将跳数限制字段中的值减1。当跳数限制的值为0时,就要将此数据报丢弃
  7. 源地址∶占128 位,数据报的发送站的IP地址。
  8. 目的地址∶占128位,数据报的接收站的IP地址。

IPv6定义了以下3种地址类型。

  1. 单播∶传统的点对点通信。
  2. 组播∶数据报交付到一组计算机中的每一个广播可看作是组播的一个特例。
  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。

image-20200912222907594

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的三要点∶

  1. 仅和相邻路由器交换信息。
  2. 交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
  3. 按固定的时间间隔(如每隔 30s)交换路由信息。

距离-向量算法如下:

image-20200912225907617

image-20200912225922462

学完距离-向量算法后,就可以理解为什么不把最大跳数设置大点,如图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不可达较合理。

image-20200912230315725

解析∶D。此题考查概念,记住就得分。RIP允许一条路径最多只能包含15个路由器,因此距离等于16时相当于不可达,上面相关知识点已经讲解过了。

以上讲解了RIP的原理以及所使用的算法,下面讲解 RIP报文的组成。

RIP报文格式

首先要清楚的是RIP报文使用传输层的UDP(第5章详细介绍)进行传送

RIP报文从应用层交付下来要在传输层加上UDP首部形成UDP用户数据报,然后在网络层加上IP首部形成 IP 数据报进行传送。

下面详细讲解RIP报文部分(尽量以最简单的方式去描述,因为RIP报文不像IP数据报那么重要,所以很多时候为什么要设置这个不需要讲。RIP报文有两种版本,但现在都是讲解版本2,所以在此仅介绍版本2)。

RIP报文分为首部和路由两大部分,如图4-25所示。

image-20200912230510167

首部

前面讲过首饰=首4,还记得吗?所以首部占用4B。这4B包括1B命令(识别是进行请求操作还是进行响应操作)和1B版本(一般有两个版本,版本1和版本2),但是现在只占用了2B,所以就把剩下的2B用0来填充

路由

每个路由器把自己的路由表告诉相邻的路由器的时候,需要通过RIP报文来传送

首先构造4B的首部,然后把自己的路由表分成几段(详细见下面的补充知识点),每一段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的缺点∶

  1. RIP限制了网络的规模,它能使用的最大距离为15(16表示不可达)。
  2. 路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加了。
  3. 当网络出现故障时,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所示。

image-20200912232734942

注意∶虽然使用Dikstra 算法可以算出完整的最优路径,但是路由表中不会存储完整路径,而只存储"下一跳"。

教材上说OSPF协议不使用UDP数据报传送,而是直接使用IP数据报传送,在此解释一下什么叫用UDP传送,什么叫用IP数据报传送。

用UDP传送是指将该信息作为UDP报文的数据部分,而直接使用IP数据报传送是指将该信息直接作为IP数据报的数据部分。

从图 4-25中可以看出,RIP报文是 UDP数据报的数据部分。

总结∶OSPF 协议的三要点。

  1. 向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法
  2. 发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
  3. "链路状态"就是说明本路由器都和哪些路由器相邻以及该链路的"度量"(metric)。只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息

OSPF的5种分组类型(了解)

  1. 类型1∶问候(Hello)分组,用来发现和维持邻站的可达性。
  2. 类型2∶数据库描述分组,向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。
  3. 类型3∶链路状态请求分组,向对方请求发送某些链路项目的详细信息。
  4. 类型4∶链路状态更新分组,用洪泛法对全网更新链路状态。
  5. 类型5∶链路状态确认分组,对链路更新分组的确认。

通常每隔10s,每两个相邻路由器要交换一次问候分组,以便知道哪些站可达。在路由器刚开始工作时,OSPF 让每一个路由器使用数据库描述分组和相邻路由器交换本数据库中己有的链路状态摘要信息。然后,路由器就使用链路状态请求分组,向对方请求发送自己所缺少的某些链路状态项目的详细信息。经过一系列的这种分组交换,全网同步的链路数据库就建立了。在网络运行过程中,只要一个路由器的链路状态发生变化,该路由器就使用链路状态更新分组,用洪泛法对全网更新链路状态。其他路由器在更新后,发送链路状态确认分组对更新分组进行确认,如图4-27所示。

image-20200912233057156

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采用的是路径-向量路由选择协议。由于以下原因边界网关协议只能是力求寻找一条能够到达目的网络且比较好的路由(不能转圈),而并非要寻找一条最佳路由

  1. 因特网的规模太大,使得自治系统之间路由选择非常困难。
  2. 对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。
  3. 自治系统之间的路由选择必须考虑有关策略。

BGP的基本原理∶每一个自治系统的管理员要选择至少一个路由器(可以有多个)作为该自治系统的"BGP发言人"。一个BGP发言人要与其他自治系统中的BGP发言人交换路由信息,就要先建立TCP连接(可见BGP报文是通过TCP传送的,也就是说BGP报文是TCP 报文的数据部分),然后在此连接上交换BGP报文以建立BGP会话,再利用BGP会话交换路由信息。各BGP发言人互相交换网络可达性的信息后,各 BGP发言人就可找出到达各自治系统比较好的路由了。

BGP的特点

  1. BGP交换路由信息的节点数量级是自治系统数的量级,这要比自治系统中的网络数少很多。
  2. 每一个自治系统中BGP发言人(或边界路由器)的数目是很少的,这样就使得自治系统之间的路由选择不过分复杂。
  3. BGP支持 CIDR,因此 BGP的路由表也就应当包括目的网络前缀、下一跳路由器以及到达该目的网络所要经过的各个自治系统序列。
  4. 在BGP刚刚运行时,BGP的邻站是交换整个的BGP路由表,但以后只需要在发生变化时更新有变化的部分。这样对节省网络带宽和减少路由器的处理开销方面都有好处。

BGP的4种报文

  1. 打开(Open)报文∶用来与相邻的另一个BGP发言人建立关系。
  2. 更新(Update)报文∶用来发送某一路由的信息以及列出要撤销的多条路由。
  3. 保活(Keepalive)报文∶用来确认打开报文和周期性地证实邻站关系。
  4. 通知(Notificaton)报文∶用来发送检测到的差错。

RIP、OSPF、BGP的最终陈述

image-20200913000430860

可能疑问点∶在不同的两本书上看到内部网关协议属于不同的层,一会儿是网络层,一会儿是传输层,内部网关协议到底属于哪一层?

解析∶内部网关协议包括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所示。采用组播协议可明显地减轻网络中各种资源的消耗。组播需要路由器的支持才能实现,能够运行组播协议的路由器称为组播路由器。

image-20200913000800649

IP组播的地址

IP使用D类地址支持组播。D类IP地址的前缀是"1110",因而地址范围是240.00~239.255.255.255,每一个D类地址标识一组主机,下面4点应该记住。

  1. 组播地址只能用于目的地址,不能用于源地址。
  2. 组播数据报"尽最大努力交付",不提供可靠交付。
  3. 对组播数据报不产生ICMP差错报文。换句话说,如果在PING命令后面输入组播地址,将永久不会收到响应,在讲解ICMP的时候已经提到过。
  4. 并非所有D类地址都可以作为组播地址。

IP组播可以分为两种∶一种是只在本局域网上进行硬件组播另一种是在因特网的范围内进行组播。前一种虽然简单,但是很重要,因为现在大部分主机都是通过局域网接入因特网的。在因特网上进行组播的最后阶段,还是要把组播数据报在局域网上用硬件组播交付给组播组的所有成员。

组播地址与MAC地址的换算

组播地址与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地址出现在同一个网络里面的概率很小,如果出现了,那么加入其中一个组的主机能收到另一个组的组播报,但是该主机的上层协议会做出判断,丢弃不属于自己的组播报

移动IP

移动IP的概念

随着移动终端设备的广泛使用,移动计算机和移动终端等设备也开始需要接入网络(Internet),但传统的IP设计并未考虑到移动节点会在链接中变化互联网接入点的问题。

传统的IP地址包括两方面的意义∶一方面是用来标识唯一的主机,另一方面它还作为主机的地址在数据的路由中起重要作用

但对于移动节点,由于互联网接入点会不断发生变化,所以其IP地址在两方面发生分离,一方面是移动节点需要一种机制来唯一标识自己,另一方面是需要这种标识不会被用来路由。而移动IP便是为了让移动节点能够分离IP地址这两方面功能,而又不彻底改变现有互联网的结构而设计的。

例如,某用户离开北京总公司,出差到上海分公司时,只要简单地将移动节点(如笔记本电脑)连接至上海分公司网络上,那么用户就可以享受到跟在北京总公司里一样的所有操作。用户依旧能使用北京总公司的共享打印机,或者可以依旧访问北京总公司同事计算机里的共享文件及相关数据库资源;而当该计算机移动到外网的话,尽管IP地址没变,但是不能再用这个IP地址来找寻路由了,而应该申请一个转交地址,由转交地址来实现找路由功能。诸如此类的种种操作,让用户感觉不到自己身在外地,同事也感觉不到你已经出差到外地了。

总结来说就是移动IP技术可以使移动节点以固定的网络IP地址,实现跨越不同网段的漫游功能,并保证了基于网络IP的网络权限在漫游过程中不发生任何改变。听起来很悬,那怎么去实现呢?下面用提问的方式来慢慢引入。

问题1∶实现移动IP需要哪些功能实体?

解析∶需要以下三大功能实体。

  1. 移动节点∶具有永久IP地址的移动节点。
  2. 本地代理∶有一个端口与移动节点本地链路相连的路由器,它根据移动用户的转交地址,采用隧道技术转交移动节点的数据报。
  3. 外部代理∶移动节点的漫游链路上的路由器,它通知本地用户代理自己的转交地址,是移动节点漫游链路的默认路由器。

问题2∶实现移动IP需要哪些技术?

解析∶需要以下四大技术。

技术一∶代理搜索

计算机要知道自己是否正在漫游,这里就要用到代理搜索技术。

技术二∶申请转交地址

移动节点移动到外网时从外代理处得到的临时地址,就好像我现在到了外地,无依无靠,已经居无定所了,所以别人寄信给我没有固定地址,我要找一个有固定住址的朋友,以后如果有人写信给我就直接寄给他,然后再由他转交给我,这个固定住址在移动IP领域就称为转交地址。

技术三∶登录

移动节点到达外网时进行一系列认证、注册、建立隧道的过程。

技术四∶隧道

本地代理与外部代理之间临时建立的双向数据通道。

可能疑问点∶移动IP和动态IP有什么区别?

解析∶移动IP和动态IP是两个完全不同的概念。动态IP是指局域网中的计算机可以通过网络中的DHCP服务器动态地获得一个IP地址,就好像家里的电信带宽,每次拨号登录都会是不同的IP地址,即自动获取IP地址,所以就不需要用户在计算机的网络设置中指定IP 地址

移动IP的通信过程

  1. 移动节点在本地网时,按传统的TCP/IP方式进行通信(在本地网有固定的地址)。
  2. 移动节点漫游到一个外地网络时,仍然使用固定的IP地址进行通信。为了能够收到通信对端发给它的IP分组,移动节点需要向本地代理注册当前的位置地址,这个位置地址就是转交地址。移动IP的转交地址可以是外部代理的地址或动态配置的一个地址。
  3. 本地代理接收来自转交地址的注册后,会构建一条通向转交地址的隧道,将截获的发给移动节点的IP分组通过隧道送到转交地址处。
  4. 在转交地址处解除隧道封装,恢复出原始的 IP分组,最后送到移动节点,这样移动节点在外网就能够收到这些送给它的IP分组了。
  5. 移动节点在外网通过外网的路由器或者外代理向通信对端发送IP数据报。
  6. 当移动节点来到另一个外网时,只需要向本地代理--更新注册的转交地址--,就可以继续通信了。
  7. 当移动节点回到本地网时,移动节点向本地代理注销转交地址,这时移动节点又将使用传统的TCPI/P方式进行通信。

总结∶移动IP为移动主机设置了两个IP地址,即主地址和辅地址(转交地址)==。移动主机在本地网时,使用的是主地址。当移动到另外一个网络时,需要获得一个辅助的临时地址,但是此时主地址仍然保持不变。当从外网移回本地网时,辅地址改变或撤销,而主地址仍然保持不变。

网络层设备

路由器的组成和功能

路由器工作在网络层,实质上是一种多个输入端口和多个输出端口的专用计算机,其任务是连接不同的网络转发分组。也就是说,将路由器某个输入端口收到的分组,按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。

整个路由器的结构可划分为两大类∶路由选择部分分组转发部分,如图4-30所示。

image-20200913075505632

路由选择部分的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断更新和维护路由表,其核心部件是路由选择处理器。

分组转发部分由3部分组成∶一组输入端口交换结构一组输出端口,交换结构从输入端口接收到分组后,根据转发表对分组进行处理,然后从一个合适的输出端口转发出去。

交换结构是路由器的关键部件,它将分组从一个输入端口转移到某个合适的输出端口。

有3 种常用的交换方法∶通过存储器进行交换、通过总线进行交换和通过互联网络进行交换。以上3种交换了解即可,不要求掌握。下面结合图4-30来详细介绍路由器的工作流程,参考48.2 小节。

image-20200913075630183解析解析∶D。什么是广播风暴?

一个数据帧或包被传输到本地网段上的每个节点就是广播。由于网络拓扑的设计和连接问题,或其他原因导致广播在网段内大量复制、传播数据帧,最终导致网络性能下降,甚至网络瘫痪,这就是广播风暴。所以需要有能够隔离广播域的设备才可以抑制广播风暴,只有路由器可以隔离广播域,总结如下∶

image-20200913075750184

路由表与路由转发

讲解工作流程前先把一些易混的概念总结一下。

  1. 转发就是路由器根据转发表将用户的IP数据报从合适的端口转发出去。
  2. 路由选择则是按照分布式算法,根据从各相邻路由器得到的关于网络拓扑的变化情况,动态地改变所选择的路由。
  3. 路由表是根据路由选择算法得出的,而转发表是从路由表得出的。注意∶在讨论路由选择的原理时,往往区分转发表和路由表。

详细工作流程如下∶

  1. 首先路由器从线路上接收分组,也就是图4-30的输入端口,经过1时进行物理层处理(进行比特的接收),经过2时进行数据链路层处理(剥去帧头、帧尾,得到了IP数据报),然后分组就被送入网络层的模块,如图4-31所示。

    若接收的分组是路由器之间交换路由信息的分组(如RIP和OSPF分组),则把这种分组送交路由器的路由选择部分中的路由选择处理器。若接收的是数据分组,则按照分组首部中的目的地址查找转发表,根据得到的结果,分组就经过交换结构到达合适的输出端口。当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组,这个分组就必须在队列中排队,因而产生了一定的时延,详见图4-31。

    image-20200913080245877

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

image-20200913080514866

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

image-20200913080616557

解析∶C。

I∶路由器上都会运行相应的路由协议,如RIP、OSPF协议等;另外,设置路由表也是路由器必须完成的,故I正确。

Ⅱ∶当监测到拥塞时,路由器会将IP分组丢弃,并向源点发送源抑制报文,故Ⅱ正确。

Ⅲ∶尽管路由器会对IP分组首部进行差错校验,但是不能确保传输的IP分组不丢失。当路由器收到的数据报的首部中有的字段值不正确时,就丢弃该数据报,并向源站发送参数问题报文,故Ⅲ错误。

Ⅳ∶这个是路由表最基本的路由功能,当路由器某个输入端口收到分组后,路由器将按照分组要去的目的地(目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止,故IⅣ正确。

推荐阅读