计算机网络知识整理-网络层知识汇总(计算机网络入门参考指南)

第4章 网络层

4.1关于网络层我们要学习什么

网络层是计算机网络学习中的重点,在网络层我们主要学习以下内容:

  • 网络层的功能:包括异构网络的互联、路由与转发、网络层的拥塞控制、SDN
  • 路由算法:路由算法的相关概念以及分类、距离-向量算法、链路状态算法
  • IPv4与IPv6:IPv4以及IPv6的一系列相关概念、IP地址、三种IP编址方法、ARP、DHCP、ICMP协议
  • 路由协议:RIP、OSPF、BGP
  • 移动IP:移动IP的相关概念
  • 网络层的设备:路由器的相关概念

网络层要学习的内容较多,博主会逐步将内容整理并更新…

4.2 网络层的功能

4.2.1 简介

网络层处于五层结构中的第三层,网络层的最主要的任务就是将分组从源端传送到目的端,为分组交换网络上的不同主机提供数据通信服务。

其表现形式就是,向上层提供简单灵活的、无连接的、尽最大努力交付的数据报服务,主要使用的协议是IP协议。

网络层主要的功能包括:实现异构网络互联、实现路由选择与分组转发、实现拥塞控制

4.2.2 异构网络互联
4.2.2.1 什么是异构网络

异构网络是指,网络接入机制、路由选择机制、寻址方案等不同的网络。

由于用户的需求的多样性(不同的网络接入机制、路由选择机制等),并不存在一种单一的网络可以满足所有用户的需求,因此世界上存在着各种各样的异构网络。

4.2.2.2 什么是网络互联

网络互联是指将两个及两个以上的计算机网络,通过中间设备(中继系统)相互连接起来,构成一个更大的网络

根据所在的层次,中继系统分为四个类型:

  1. 物理层中继系统:转发器、集线器
  2. 数据链路层中继系统:交换机
  3. 网络层中继系统:路由器
  4. 网络层以上的中继系统:网关

通过之前章节的学习,我们可以知道,在物理层和数据链路层,通过中继系统将两个不同的网络连接起来,只是把一个网络扩大了,并不是真正意义上的网络互联。

因此网络互联一般指在网络层通过路由器进行的网络互联。

4.2.2.3 网络层如何实现网络互联

使用TCP/IP体系的互联网,采用了标准化协议的方法来实现网络互联,各个互联的网络可以使异构的。即,通过路由器,构建一个虚拟的IP网络,通过IP协议使这些异构网络看起来就像是一个统一的网络。

在这里插入图片描述

构建虚拟IP网络的好处在于:当这个虚拟IP网络上的主机相互通信时,仿佛处于同一个网络,不需要关心各个异构网络的具体差异细节。

4.2.3 路由与转发

路由选择与分组转发是路由器的最主要的两个功能。

  • 路由选择

    按照复杂的分布式算法,根据从各个相邻的路由器所得到的关于整个网络拓扑的变化情况,动态地改变所选择的路由

    路由器根据特定的路由选择协议构造路由表,定期地和相邻路由器交互路由信息,不断更新路由表。

  • 分组转发

    路由器根据转发表将用户的IP数据报从正确的端口转发出去。

    路由器处理相关的数据流,相关的功能是查询转发表、转发数据报、进行队列管理和任务调度等。

路由表是根据路由算法计算得出的,转发表是通过路由表得出的,在讨论路由选择的原理时,一般不会专门区分转发表和路由表,而是笼统地使用路由表

4.2.4 拥塞控制
4.2.4.1 拥塞简介

在通信子网中,因出现过量的分组导致网络性能下降的现象被称为拥塞

举例说明:

假设由一个路由器A,该路由器所在的链路的带宽是R(B/s),且只有一个接收端口用于接收IP分组,IP分组发送速率是r(B/s),如果此时r=R,是不是就代表了该链路的带宽被充分利用了,就是一个十分完美的状态呢?答案是否定的,因为路由器的接收端口的缓冲区是有限的,如果分组到达路由器的速率接近R,就会导致由大量的分组被丢弃,从而导致发送端到接收端的平均时延接近无穷大。

下图表示了分组的发送速率与时延的关系图

在这里插入图片描述

那么我们该如何判断一个网络是否处于拥塞状态呢?

我们可以通过观察网络吞吐量网络负载这两个指标,如果随着网络负载的增加,网络的吞吐量明显小于正常的吞吐量,那么网络可能进入了“轻度拥塞”状态,如果随着网络负载的增加,网络的吞吐量急剧下降,那么网络可能进入了“重度拥塞”状态,如果随着网络负载的增加,网络的吞吐量下降为0,那么网络就进入了死锁状态。

4.2.4.2 拥塞控制解决的问题及作用

拥塞控制主要是为了解决如何获取网络中发生的拥塞信息,并且通过这些信息进行控制避免发生分组的丢失以及死锁的产生。

拥塞控制的作用在于确保网络有足够的能力承载接收到的流量

4.2.4.3 拥塞控制与流量控制的区别

流量控制指在发送端和接收端之间点对点通信量的控制,它会抑制发送端发送数据的速率,从而使接收端有足够的时间来接收、处理发送端发送的数据。

拥塞控制是确保通信子网能够传送待传送的数据,是一个全局性的问题,涉及网络中的所有主机、路由器以及导致网络传输能力下降的所有因素。

即,流量控制只需要考虑点对点的通信双方,而拥塞控制需要考虑整个通信子网中与传输能力相关的所有因素。

4.2.4.4 拥塞控制的方法

拥塞控制常见的方法有两种:开环控制闭环控制

  • 开环控制

    在设计网络的架构时就需要事先由网络设计者将可能发生拥塞的所有因素都考虑周全,力求网络在运行时不会发生拥塞。这是一种静态的方法,一旦系统运行起来,就无法再进行修改。

  • 闭环控制

    在设计网络时不需要网络设计者考虑与拥塞相关的因素,而是采用网络检测系统在网络运行时进行检测。这是一种静态的方法,在系统运行时,收集发生拥塞的信息,并进行相应的处理。

4.2.5 SDN的相关概念

网络层的主要任务就是转发和路由选择,我们将网络层抽象为了两个层面:控制层面数据层面

其中,控制层面实现了路由选择功能数据层面实现了转发功能

4.2.5.1 什么是SDN

近几年出现了一种新型的网络架构——软件定义网络(SDN),它采用了集中式的控制层面和分布式的数据层面,将控制层面和数据层面进行了分离,控制层面利用接口对数据层面上的路由器进行集中控制。

在这里插入图片描述

4.2.5.2 SDN与传统互联网的区别

传统互联网中路由器既有转发表又有路由选择软件,各个路由器会相互交换路由信息。

在SDN架构中,各个路由器之间不再相互交换路由信息,在控制层面有一个逻辑上的远程控制器,它掌握了各个主机和整个网络的状态,为每个分组计算出最佳路由,通过Openflow协议将转发表下发给每个路由器,路由器就只是单纯的负责接收分组查找转发表转发分组

4.2.5.3 SDN的优缺点
  • 优点
    1. SDN具有可编程性,其编程接口被称为北向接口,为开发者提供了一系列API,使得开发者可以通过这些接口进行应用开发。
    2. 具有全局集中式控制和分布式高速转发,可以对控制层面进行全局优化。
  • 缺点
    1. 由于控制平面是集中式的(整体上来看),因此具有安全风险,如果控制层面遭到攻击而崩溃,那么整个网络都会受到影响。
    2. 由于控制层面被集中化后,随着网络规模的扩大,控制器就可能称为整个网络的性能瓶颈。

4.3 路由算法

4.3.1 什么是路由算法

在网络层,路由器转发分组的依据是路由表,而路由表是控制层面根据网络的拓扑状态计算得到的。在这个计算的过程中所使用的算法就被称为路由算法

4.3.2 理想的路由算法

理想中的路由算法具有以下特征:

  • 算法必须是正确的和完整的。

  • 算法在计算上应简单。

  • 算法应能适应通信量和网络拓扑的变化,这就是说,要有自适应性。

  • 算法应具有稳定性。

  • 算法应是公平的。

  • 算法应是最佳的。

    注意:这里所谓的最佳,是指相对于某一种特定要求下得出的较为合理的选择,并非是绝对的最佳。因为路由选择是一个十分复杂的问题,不存在绝对最佳的路由算法,在实际工作中,应尽可能接近于理想的算法。

4.3.3 路由算法的分类

路由算法被分为两类:静态路由算法动态路由算法

  • 静态路由算法(非自适应路由算法)

    静态路由算法指由网络管理员手工配置的路由信息。

    优点:简单可靠,在负荷稳定、拓扑变化不大的网络中运行效果很好,可以广泛用于高度安全性的军事网络和较小的商业网络。

    缺点:路由更新慢,不适用于大型网络。

  • 动态路由算法(自适应路由算法)

    动态路由算法指路由器的路由表的表项是通过路由器间彼此交换信息,按照一定的算法优化得出的。7

    优点:路由更新快,适用于大型网络,可以及时响应链路费用或网络拓扑的变化。

    缺点:算法复杂,增加了网络的负担。

    动态路由算法可以进一步细分为两类:距离-向量路由算法链路状态路由算法

4.3.4 距离-向量路由算法

在距离-向量路由算法中,所有的结点都会定期地与其直接相连的路由器交换整个路由选择表信息

路由选择表包含两种信息:每条路径的目的地和该路径的代价(距离)。

在该算法中的各个结点,在下述情况下会更新自己的路由表

  • 收到其他结点发送一条新的路由信息,这条路由信息在该结点的路由表中不存在,此时路由器会将该路由信息添加到本地路由表中。
  • 收到其他结点发送的一条到达某个目的结点的路由信息,在该结点的路由表中已存在到达该目的结点的路由信息,且新收到的路由信息的代价更小,则路由器会使用这条新的路由信息替换原有的到达该目的结点的路由信息。

距离-向量路由算法的本质在于不断的迭代到某个目的结点的路由信息,从而获得到该目的结点的最短(代价最小)路由信息。最常见的使用距离-向量路由算法的协议是RIP协议,这个协议会在后面的小节中详细介绍。

  • 缺点:由于每次相邻的路由器交换的是路由器的整个路由表,交换的报文的大小就和通信子网中的结点个数成正比,因此距离-向量路由算法不适用于大型网络(结点多,会导致每次交换的报文信息十分巨大)。
4.3.5 链路状态路由算法

在链路状态路由算法中,所有的结点都具有整个网络的拓扑信息,各个结点都会主动的测试所有的邻接结点的状态(是否还可以连通),并定期地将这些链路状态传播给所有的其他结点。

每当链路状态报文到达结点后,该结点就会使用这些状态信息更新自己的网络拓扑和状态表,一旦链路状态发生变化,该结点就是用Dijkstra最短路径算法重新计算出到达其他所有结点的最短路径。

链路状态路由算法的主要特点:

  • 使用洪泛法向当前自治系统中的所有其他路由器发送链路状态信息。

    某路由器A向其所有相邻的路由器发送信息,然后其相邻的所有路由器再向它们相邻的所有路由器(除了路由器A)继续发送该信息。

  • 每个结点发送的信息是与该结点相邻的路由器的链路状态

  • 只有当链路状态发生变化时,路由器才会向所有其他路由器发送此信息。

有上述的特点可以看出,链路状态路由算法交换的报文只与其相邻的路由器个数有关,与整个网络的结点个数无关,因此链路状态路由算法适用于大型网络。最常见的使用链路状态路由算法的协议是OSPF协议,这个协议会在后面的小节中详细介绍。

与距离-向量路由算法的区别

  • 距离-向量路由算法中,每个结点只与它相邻的结点交换报文,它为与它相邻的结点提供从自己到网络中其他所有结点的最小代价估计。链路状态路由算法中,每个结点通过广播的方式与所有其他结点交换报文,它仅告诉它们与它直接相连的结点的链路费用。
  • 链路状态路由算法中交换的报文与整个网络的规模无关,适用于大型网络,距离-向量路由算法中交换的报文与整个网络的结点个数成正比,适用于小型网络。

4.4 IPv4协议

IPv4协议是现在被广泛使用的IP协议(版本4)

4.4.1 IPv4数据报的格式

一个IP数据报由首部和数据部分组成,首部在前,数据部分在首部后面,首部分为两部分,前一部分是固定的20B,后一部分是可变部分,所有的IP数据报都必须包含首部的固定部分。IP数据报的格式如下图所示。

在这里插入图片描述

上图的各个字段含义如下:

  • 版本:指IP协议的版本号,IPv4协议的该字段就是4,IPv6协议的该字段就是6。
  • 首部长度:占 4 位,可表示的最大数值是15个单位(一个单位是4字节),因此IP的首部长度的最大值是60字节。
  • 区分服务:占8位,该字段一般情况下不会被用到。
  • 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。由上述章节的介绍,我们了解到以太网帧的最大传送单元(MTU)是1500B,因此当一个IP数据报封装成帧时,总长度不能超过1500B,此时就会将IP数据报进行分片。关于IP数据报分片会在后续小节进行详细介绍。
  • 标识:占16位,它是一个计数器,每产生一个数据报该字段就加1。但是它并不是"序号"(IP是无连接服务),当一个数据报的长度超过MTU时,就会分片,此时每个数据片都会复制该标识号,以便可以正确的将各个数据报分片重组成正确的IP数据报。
  • 标志:占3位,标志字段的最低位是MF,MF为1时表示后面还有分片,MF为0时表示这是最后一个分片。标志字段的中间一位是DF,只有当DF是0时才允许分片。
  • 片偏移:占13位,它指当IP数据报分片后,某片在原数据报中的相对位置。片偏移以8字节为偏移单位,除了最后一个分片外,其他所有的分片的长度都是8字节的整数倍。
  • 生存时间(TTL):占8位,表示数据报在网络中可通过的路由器数量的最大值,用于标识数据报在网络中的寿命,确保数据报不会永远在网络中循环。数据报每经过一个路由器,该字段都会减1,如果TTL为0,则路由器就会丢弃该数据报。
  • 协议:占8位,表示该数据报携带的数据使用的是哪种上层协议(TCP/UDP),如果是6则表示TCP,如果是17则表示UDP。
  • 首部校验和:占16位,仅用于校验数据报的首部。
  • 源地址:占4位,表示发送方的IP地址。
  • 目的地址:占4位,表示接收方的IP地址。
4.4.2 IP数据报分片
  • 为什么需要分片?

    通过前面的学习,我们已经知道,网络层的IP数据报中的数据,需要封装在链路层的帧中进行传递。链路层有着严格的MTU限制,因此如果IP数据报的长度超过了链路层的MTU,那么就必须要将IP数据报中的数据分装在多个较小的IP数据报中,这些较小的数据报叫做分片

  • 分片后如何在目标主机进行正确重装?

    在目的主机中,通过每个IP数据报中的首部的标识、标志以及片偏移字段进行重组。

    当网络层创建一个IP数据报时,源主机会为该数据报加上一个标识号,如果路由器需要将该数据报进行分片时,形成的每个小的数据报都会复制原始数据报的标识号。当目标主机收到来自同一个主机发送的同一批数据报时,它可以通过这些数据报的标识号来进行分组。

    IP首部的标志位有3位,但是只有后两位有意义,分别是MF位和DF位,只有当DF为0时,该IP数据报才能被分片。MF位用于告诉目标主机这个IP数据报是否是原始数据报的最后一个分片,为0时表示是最后一个分片,为1时表示后面还有后续的分片。

4.4.3 IPv4地址
4.4.3.1 IP地址定义

注:这个章节用IP地址代指IPv4地址

IP 地址就是给每个连接在互联网上的主机(或路由器)分配一个在全世界范围是唯一的 32 位的标识符。IP 地址现在由互联网名字和数字分配机构ICANN进行分配。

4.4.3.2 IP地址的发展历史

互联网中的IP地址的发展历史分为以下三个阶段:

  • 分类的 IP 地址。这是最基本的编址方法,在 1981 年就通过了相应的标准协议。
  • 子网的划分。这是对最基本的编址方法的改进,其标准 [RFC 950] 在 1985 年通过。
  • 构成超网。这是比较新的无分类编址(CIDR)方法。 1993 年提出后很快就得到推广应用。
4.4.3.3 分类的IP地址

在早期的互联网中,使用的IP编址方式就是将IP地址进行分类,它将IP地址分为了5类(A|B|C|D|E)。用该方法编址的IP地址由网络号主机号两部分组成。其中网络号表示主机(或路由器)所连接到的网络,每个主机号在整个互联网中必须是唯一的,主机号表示该主机(或路由器)。因此IP地址在整个因特网中是唯一的。

下图表示了五类地址以及各类的主机号和网络号的位数。

在这里插入图片描述

在分类的IP地址中,有一些IP地址是比较特殊的,这些IP地址不会被用做主机的IP地址。具体如下表所示。

网络号主机号作为源地址作为目的地址含义
全0全0可以不可以(0.0.0.0)表示本网络上的本主机
全0host-id可以不可以本网络上的某台主机 host-id
全1全1不可以可以表示整个TCP/IP网络的广播地址
net-id全1不可以可以表示net-id网络上的广播地址
127非全0或全1的任何数可以可以环回自检地址,表示任意主机本身

注:

网络号与主机号全1时(255.255.255.255),虽然是表示了整个TCP/IP网络的广播地址,但是由于路由器对于广播域的隔离,该地址基本等效于本网络的广播地址

目的地址为环回自检地址127.x.x.x的IP数据报永远不会出现在任何网络上只用于本地软件的测试

分类的IP地址的特点

  • 每个IP地址都是由网络号和主机号两部分组成,这种IP地址是一种分等级的地址结构。

    分等级的优点:

    • IP 地址管理机构在分配 IP 地址时只分配网络号,而剩下的主机号则由得到该网络号的单位自行分配。这样就方便了 IP 地址的管理
    • 路由器仅根据目的主机所连接的网络号来转发分组(而不考虑目的主机号),这样就可以使路由表中的项目数大幅度减少,从而减小了路由表所占的存储空间。
  • IP地址标志了一台主机(或路由器)和一条链路的接口。当一台主机同时连接两个网络时,这个主机就必须同时具有两个IP地址,这两个IP地址的网络号必须与所在的网络的网络号相同,且这两个IP地址的网络号互不相同。

  • IP地址中分配的网络号的网络是平等的。

  • 在同一个局域网上的主机的IP地址中的网络号必须一样。

4.4.3.4 子网划分
  • 为什么要进行子网划分?

    两级IP地址有着两个显著的缺点:IP地址的空间的利用率有时很低和不够灵活。

    例如一个企业X申请了一个B类的网络,该网络的每一个网络号后面可以分配的主机数为(2^16 - 2),这是一个相当大的数量,很多机构下是没有这么多主机的。因此此时就产生了空间的浪费。(为啥这个企业不能直接申请一个C类的网络呢?这个就可能因为该企业想的是未来可能发展的规模更大,如果申请C类网络,后面发展更大后,C类网络不够用,想升级成B类网络比较复杂,于是该企业在申请时就申请了B类网络)。

    由此可以看出,IP地址的空间利用率有时很低,且不够灵活。

    因此,为了解决这个问题,从1985年起,在IP地址中只能加了一个“子网号字段”,使两级IP地址变为了三级IP地址,即子网划分。

  • 子网划分的基本思想

    1. 子网划分是某个单位内部的事情,单位对外仍然表现为没有划分子网的网络。

    2. 从主机号借用若干比特作为子网号,即三级IP地址的结构为:{<网络号>,<子网号>,<主机号>}

      在这里插入图片描述

    3. 凡是从其他网络发送给本单位某台主机的数据,仍然是根据数据的目的网络号,先找到连接到本单位网络上的路由器,然后由该路由器按照目的网络号和子网号找到目的子网,最终把该数据报转交给该目的主机。

      注意:

      划分子网只是将IP地址的主机号进行了进一步的划分,并没有改变IP地址的网络号。因此,从一个IP地址本身是无法看出是否进行了子网划分的。

    疑问解答

    在此,我们来回答一下为什么划分子网就能解决之前提到的企业X申请网络号浪费IP地址空间利用率的问题,其原因是,该企业X可以向上层机构申请一个B类网络中的某一个子网段的网络号,上层机构可以根据该企业的实际主机数量对一个B类的网络号进行进一步的划分,划分出若干个更小规模的子网。这些子网可以分配给若干个类似企业X这种规模的企业使用,由此就可以提高IP地址的空间利用率了。

  • 子网掩码

    子网掩码是用于告知主机或路由器,该网络进行了子网划分。

    子网掩码是一个长32bit的二进制串,与IP地址相对应,由一串1和跟随的一串0组成。其中1对应于IP地址中的网络号以及子网号,0对应于主机号。只需要将IP地址和其对应的子网掩码逐位进行"与"运算,就可以得出对应的子网的网络地址。

    例如:某个主机的IP地址是192.168.5.56,子网掩码是255.255.255.0,通过逐位“与”运算后,就可以得出该主机所述的网络的网络号为192.168.5.0

    值得一提的是,现在的因特网标准规定,所有的网络都必须使用子网掩码,即子网掩码已经成为因特网的标准规范了。

    如果一个网络没有进行子网划分,那么就会采用默认的子网掩码。

    A类网络的默认子网掩码是255.0.0.0

    B类网络的默认子网掩码是255.255.0.0

    C类网络的默认子网掩码是255.255.255.0

    由于所有的网络都有子网掩码,因此在互联网中的路由器在相互之间交换路由信息的时候必须要把自己所属的网络的子网掩码告知对方,即,路由表中的每一项,除了有目的网络和下一跳地址外,还包含了该目的网络的子网掩码。

    综上所述,当一个网络使用了子网掩码后,根据约定,会出现以下的情况:

    1. 在给主机设置IP地址时,必须要设置子网掩码(可能是默认的子网掩码)
    2. 同属于一个子网的所有主机(或路由器)的相应端口,必须设置相同的子网掩码。
    3. 路由器的路由表中,必须包含目的网络地址、下一跳地址以及目的网络的子网掩码。
4.4.3.5 CIDR
  • 什么是CIDR

    CIDR是无分类域间路由选择的英文简称,它是在变长子网掩码的基础上提出的一种消除传统A、B、C类网络划分,并且可以在软件的支持下实现超网构造的一种IP地址划分方法。

    CIDR使用了“网络前缀”的概念代替子网的概念,其与传统分类IP地址的最大区别就是,网络前缀的位数是不固定的,可以任意选取,即使用CIDR的IP地址被记为**{<网络前缀>,<主机号>}**。

    在这里插入图片描述

    CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。CIDR 把网络前缀都相同的连续的 IP 地址组成“CIDR 地址块”。一个CIDR地址块可以表示很多地址,这种地址的聚合称为路由聚合,或构成超网

    例如128.14.32.0/20 表示的地址块共有 212 个地址(因为斜线后面的 20 是网络前缀的位数,所以这个地址的主机号是 12 位)。由此地址可以得出下列结论:

    • 这个地址块的起始地址是 128.14.32.0。
    • 在不需要指出地址块的起始地址时,也可将这样的地址块简称为“/20 地址块”。
    • 128.14.32.0/20 地址块的最小地址:128.14.32.0
    • 128.14.32.0/20 地址块的最大地址:128.14.47.255
    • 全 0 和全 1 的主机号地址一般不使用。
  • 为什么要使用CIDR

    随着互联网的发展,世界上有越来越多的网络设备接入因特网中,在1992年的时候B类地址就已经快被分配完了,且此时的B类地址的路由表的表项也十分的庞大,维护起来十分困难。因此,人们开始使用CIDR进行IP编址,企图进一步解决IP地址不够用的情况。

  • CIDR的最长匹配规则

    在使用CIDR时,路由表中的每个项目由“网络前缀”和“下一跳地址”组成,在路由器查找路由表时可能会得到不止一个匹配结果(与路由表中的网络掩码逐位"与"运算),此时,应当从匹配结果中选择具有最长网络前缀的路由,因为网络前缀越长,其地址块就越小,因此路由就越具体。

    例如当路由器收到的分组的目的地址为:206.0.71.130,此时路由表中有两个表项分别为206.0.68.0/22与206.0.71.128/25

    206.0.71.130转换为点分十进制=11001110 00000000 01000111 10000010(记为D)

    206.0.68.0/22的地址掩码转换为点分十进制=11111111 11111111 11111100 00000000(记为A)

    206.0.71.128/25的地址掩码转换为点分十进制=11111111 11111111 11111111 10000000(记为B)

    将D分别与A和B进行逐位"与"运算

    D AND A = 11001110 00000000 01000100 00000000 = 206.0.68.0/22(与地址块A进行匹配,网络前缀位数与A保持一致,也记为22),此时目标地址与206.0.68.0/22匹配上了。

    D AND B = 11001110 00000000 01000111 10000000 = 206.0.71.128/25,此时目的地址与206.0.71.128/25也匹配上了。

    由于第二个表项的前缀比第一个表项的前缀更长,因此路由器会选择第二个表项。

  • CIDR的二叉搜索

    当路由表的项目数很大时,怎样设法减小路由表的查找时间就成为一个非常重要的问题,为了进行更加有效的查找,通常是将无分类编址的路由表存放在一种层次的数据结构中,然后自上而下地按层次进行查找。这里最常用的就是二叉线索

    IP 地址中从左到右的比特值决定了从根结点逐层向下层延伸的路径,而二叉线索中的各个路径就代表路由表中存放的各个地址。为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

4.4.4 网络层转发分组的过程

学习完了IP地址的各种编址方法,接下来我们就该学习在网络层分组到底是如何进行转发的了

4.4.4.1 网络层转发与链路层转发区别

在数据链路层,数据的转发是通过交换机,将数据链路层的帧,根据MAC地址转发到具体的接口,而在网络层,由于互联网上的网络数远小于主机数,因此,网络层的分组转发都是基于目的主机所在网络的。当分组到达路由器后,路由器根据目的IP地址的网络前缀来查找转发表,确定下一跳应当到哪一个路由器。当IP数据报到达最后一个路由器后,该路由器才会试图向目的主机进行直接交付。

4.4.4.2 采用CIDR编址时的特殊处理

如果采用了CIDR编址,路由器为了加快查询转发表的速度,会按照前缀的长短,将前缀最长的放在第一个,如果匹配成功,就不用匹配后面的表项了。(因为是最长前缀匹配规则)

4.4.4.3 特殊的路由

在转发表中,会存在两种特殊的路由:

  • 主机路由

    对特定目的主机的IP地址专门指明一个路由,可以方便管理员控制和测试网络。

  • 默认路由

    用特殊前缀0.0.0.0/0表示默认路由,全0掩码和任何目的地址进行逐位"与"运算,结果必然为0,即所有的目的地址必然会与转发表中的该默认路由匹配上,只要目的网络不在该转发表中,就会选择默认路由。

4.4.4.4 网络层的分组转发算法

由上面几个小节的介绍,可以总结出路由器执行的分组转发算法如下:

  1. 路由器从收到的IP分组的首部提取出目的主机的IP地址(记为D)。
  2. 根据地址D查找特定主机路由,如果查找到了,就按该路由的下一跳进行分组转发。如果没有查到,则从转发表的下一跳(按照网络前缀的长度进行排序)开始检查,执行步骤3。
  3. 将这一行的子网掩码与目的地址D进行逐位“与”运算。如果运算结果与本行的前缀相匹配,则说明匹配成功,按照该行的下一跳进行分组转发(或者直接交付到本网络中的目的主机),如果没有匹配上,则对下一行进行检查,如果不存在下一行表项,就说明该目的网络不存在该转发表中,就会执行步骤4。
  4. 如果转发表有默认路由,则把分组转发给默认路由,否则,报告转发分组出错。

注意:

  • 转发表并未指明到某个网络的完整路径,只是指明了到目的网络的下一跳地址,当分组到达下一跳的路由器后,再通过查找转发表继续寻找下一跳的地址,通过这样不断重复的一步一步的转发,最终到达才能到达目的网络。
  • 当路由器得到下一跳路由的IP地址后,并不会直接将该地址填入待发送的数据报,而是将该IP地址转换成MAC地址,将此MAC地址放到MAC帧首部中,然后根据这个MAC地址找到下一跳路由器。(即,网络层查找出下一跳的路由器后,交由链路层进行转发数据)
4.4.5 ARP、DHCP以及ICMP
4.4.5.1 IP地址与硬件地址

IP 地址与硬件地址是不同的地址。

  • 从层次角度看,IP地址是网络层使用的地址,硬件地址是数据链路层和物理层使用的地址。

在这里插入图片描述

  • IP地址放在IP数据报的首部,硬件地址放在MAC帧的首部,通过帧的封装,IP数据报分组封装为MAC帧后,数据链路层“看不见”数据报分组中的IP地址。即,网络层看不到MAC地址,数据链路层看不到IP地址

  • 通过路由器转发IP分组时,IP分组在每个网络中都会被路由器解封装和重新封装,其MAC帧首部中的源地址和目的地址会不断地发生变化。

  • 尽管互联在一起的网络的硬件地址体系各不相同,但是IP层抽象的互联网屏蔽了下层的这些复杂的细节,只要我们在网络层讨论问题,就能够使用统一的、抽象的IP地址研究主机与主机或路由器之间的通信。

    路由器由于互联多个网络,因此一台路由器不仅有多个IP地址也有多个MAC地址。

4.4.5.2 ARP
  • 什么是ARP

    ARP是地址解析协议的英文简称,它是用于将IP地址映射为MAC地址的一种协议。在每台主机中都会设有一个ARP高速缓存,用来存放本局域网上各个主机和路由器的IP地址到MAC地址的映射表,这个映射表被称为ARP表,各个主机和路由器通过ARP协议来动态的维护ARP表。

    ARP表项的结构:<IP地址,MAC地址,TTL>

    其中TTL表示有效时间

  • 为什么要是用ARP

    由之前学习的章节可知,网络层转发分组时,通过目的IP地址,查到下一跳路由器的IP地址后,就会将IP数据报封装在MAC帧中,交由数据链路层继续传递该分组,封装MAC帧的过程中,必须要知道目的MAC地址才能完成,因此,我们必须要有一种方法,实现将下一跳路由器的IP地址转换成对应的MAC地址。于是就有了ARP。

  • ARP的工作原理

    • 当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。

    • 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址。

    • 如没有, ARP 进程在本局域网上广播发送一个 ARP 请求分组。收到 ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存,然后按照查询到的MAC地址发送MAC帧。

      ARP请求分组(广播发送):包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。

      ARP响应分组(单播发送):包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。

    注意

    ARP用于解决同一个局域网上的主机或路由器的IP地址和MAC地址的映射问题。如果所要找的主机和源主机不在同一个局域网内,那么就需要通过ARP找到另一个位于本局域网中的某个路由器的硬件地址,把分组转发给该路由器后,由这个路由器转发到下一个网络,然后再下一个网络中继续使用ARP来寻找目标路由器。

  • ARP的4种典型场景

    接下来,我们将用一个例子,来讲解使用ARP过程中可能会遇到的4种经典的场景。现在,我们有如下图所示的一个网络情况。

    在这里插入图片描述

    • 发送方是主机(H1),要把 IP 数据报发送到本网络(网1)上的另一个主机(H2)。这时用 ARP在本网络(网1) 找到目的主机(H2)的硬件地址。
    • 发送方是主机(H1),要把 IP 数据报发送到另一个网络(网2)上的一个主机H3。这时用 ARP 找到本网络(网1)上的一个路由器(R1)的硬件地址。剩下的工作由这个路由器(R1)来完成。
    • 发送方是路由器(R1),要把 IP 数据报转发到本网络(网2)上的一个主机(H3)。这时用 ARP 在本网络(网2)上找到目的主机(H3)的硬件地址。
    • 发送方是路由器(R1),要把 IP 数据报转发到另一个网络(网3)上的一个主机(H4)。这时用 ARP 找到本网络(网2)上另一个路由器(R2)的硬件地址。剩下的工作由这个路由器(R2)来完成。

    ARP对于用户是透明的,ARP的解析过程是自动进行的,只要主机或路由器和本网络上的另一个已知IP地址的主机或路由器进行通信,ARP就会自动地执行,将该IP地址解析为MAC地址。

    那么,为什么不直接使用MAC地址进行通信呢?

    这是因为,由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,因此几乎是不可能的事。IP 编址把这个复杂问题解决了。连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为上述的调用 ARP 的复杂过程都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。因此,在虚拟的 IP 网络上用 IP 地址进行通信给广大的计算机用户带来了很大的方便。

4.4.5.3 DHCP
  • 给一台主机分配IP地址的方式

    目前有两种给一台主机分配IP地址的方式,一种是静态的,一种是动态的。

    静态方式是指,由网络管理员手工的指定当前网络中每台主机的IP地址,这种方式常常用于学校的机房等较小的局域网络中。

    动态方式是指,给主机分配IP地址这个过程是动态的,不需要人工干预,由网络自动分配,这种动态地分配IP地址的方式就是基于DHCP协议进行的。

  • 什么是DHCP

    DHCP是动态主机配置协议的英文简称,它是用于给主机动态地分配IP地址的一种协议,它提供了即插即用的联网机制。

    注意:DHCP是一种应用层协议,是一种基于UDP的协议。

  • DHCP的工作原理

    DHCP协议使用C/S模式,其具体工作流程如下:

    1. 当一台主机A接入到某个网络后,会立即向该网络广播发送DHCP发现报文,该网络中的所有主机都会收到这个报文,只有DHCP服务器才会回复这个报文。

      DHCP发现报文中的源地址是0.0.0.0,目的地址为255.255.255.255

      可以理解为,主机在网络中询问:“有没有DHCP服务器?”

    2. 当DHCP服务器收到发现报文后,DHCP服务器会先从其数据库中查找主机A的配置信息,若找到,则返回找到的信息,若没找到,则从服务器的IP地址池中选择一个地址分配给主机A,随后DHCP服务器会将要分配的IP地址封装到DHCP提供报文中,并广播DHCP提供报文。

      DHCP提供报文中的源地址是DHCP服务器的IP地址,目的地址是255.255.255.255

      可以理解为,DHCP服务器在网络中回复:”我在!“。

    3. 主机A收到提供报文后,如果接受该IP地址,则广播DHCP请求报文,请求使用该IP地址。

      DHCP请求报文中的源地址是0.0.0.0,目的地址是255.255.255.255

      可以理解为,主机在网络中广播:“我要使用刚才分配给我的IP地址了!”。

    4. DHCP服务器接收到DHCP请求报文后,就会广播DHCP确认报文,正式地将该IP地址分配给该主机。

      DHCP确认报文的源地址是DHCP服务器的IP地址,目的地址是255.255.255.255

      可以理解为,DHCP服务器在网络中广播:”没问题,你用吧!“。

    那么为什么DHCP需要使用广播报文的方式来进行交互呢?

    原因在于,在HDCP执行的初期,主机不知道DHCP服务器的IP地址,并且在执行过程中,主机未被分配IP地址,从而导致双方之间的通信必须采用广播的方式。

    注意:DHCP允许网络上配置多台DHCP服务器,当主机发出DHCP发现报文时,有可能收到多个应答信息,此时主机只会挑选其中一个,通常会挑选最先到达的。

4.4.5.4 ICMP
  • 什么是ICMP

    ICMP是网际控制报文协议的英文简称,它是为了更有效地转发 IP 数据报和提高交付成功的机会的一种使用在网络层的协议。ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

  • ICMP报文

    ICMP报文的格式如下图所示。

    在这里插入图片描述

    ICMP报文是作为IP数据报的数据部分,加上数据报的首部,组成IP数据报发送的。

  • ICMP报文的分类

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

  • ICMP询问报文

    ICMP询问报文有四种类型,回送请求和回答报文、时间戳请求和回答报文、地址掩码请求和回答报文、路由器询问和通告报文。其中地址掩码请求和回答报文以及路由询问和通告报文已经不再被使用,因此我们主要介绍前两种报文。

    • 回送请求和回答报文

      主机或路由器向特定目的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送报文。这种报文主要用于测试目的主机是否可达。

    • 时间戳请求和回答报文

      请求某个主机或路由器回答当前日期和时间。这种报文主要用于进行时钟同步和测量时间。

    ICMP询问报文的应用

    回送请求和回答报文,常用于PING命令

  • ICMP差错报文

    ICMP差错报文有五种类型,终点不可达、源点抑制、时间超过、参数问题以及改变路由(重定向)。其中源点抑制已经不再使用。

    • 终点不可达

      当路由器或主机不能交付数据报时,就向源点发送终点不可达报文。

    • 时间超过

      当路由器收到生存时间(TTL)为0的数据报时,除了丢弃该数据报外,还会向源点发送时间超过报文。

      当终点在预先规定的时间内不能收到一个数据报的全部数据报分片时,除了丢弃已收到的该数据报的分片外,还会向源点发送时间超过报文。

    • 参数问题

      当路由器或目的主机收到的数据报的首部中有的字段的值不正确时,除了丢弃该数据包外,还会向源点发送参数问题报文。

    • 改变路由(重定向)

      路由器把改变路由报文发送给源点,让源点主机知道下次应该将数据报发送给另外的路由器(更好的路由)。

    除了上述的会发送差错报文的情况外,以下几种场景不会发送ICMP差错报告报文

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

    ICMP差错报告报文的应用

    差错报告报文常用于Traceroute命令(该命令是UNIX的命令,Windows中的命令是Tracert),该命令可以用于跟踪当前主机到目的主机所经过的路由器的情况。

    原理是,使用该命令后,会连续的发出一系列的报文,第一个报文的TTL是1,第二个报文的TTL是2,依次类推。当第一个路由器收到第一个报文后,会将其TTL减少1,此时该报文的TTL为0,该路由器就会向源点发送一个差错报告报文。基于这种反馈机制,第二个报文就会在第二跳路由器的时候被反馈给源点。以此类推,就能得到当前主机到源主机之间经过的路由器的情况。

4.4.6 NAT
4.4.6.1 相关概念
  • 私有地址与专用网络

    私有地址,是指那些被专门划分出来,只用于LAN的IP地址,目的地址是私有地址的数据报在因特网的所有路由器中是不会被转发的。使用私有地址的网络就被称为专用网络。

    私有地址可以被重复利用

    私有IP地址的网段如下:

    地址分类个数网段
    A类110.0.0.0~10.255.255.255
    B类16172.16.0.0~172.31.255.255
    C类256192.168.0.0~192.168.255.255
  • 什么是NAT

    NAT是网络地址转换的英文简称,是指通过将专用网络地址转换为公用网络地址,从而对外隐藏内部管理的IP地址。

  • NAT路由器

    使用NAT需要在路由器上安装NAT软件,我们把安装了NAT软件的路由器称为NAT路由器。NAT路由器至少有一个有效的外部全球ILP地址。

  • NAT转换表

    NAT路由器使用NAT转换表,将私有IP地址转换成全球IP地址。

    NAT转换表中的表项的结构为:[{本地IP地址:端口号},{全球IP地址:端口号}]

4.4.6.2 NAT的原理

举例说明NAT的原理,例如,某个专用网络由一台NAT路由器,其中的NAT转发表如下表所示。

WAN端LAN端
139.76.12.7:4550192.168.0.5:6650
139.76.12.7:4560192.168.0.6:1554

当路由器从LAN端口收到源IP及端口号为192.168.0.5:6650的IP数据报时,就会将其映射成139.76.12.7:4550,然后从WAN端口转发到因特网中。当路由器从WAN端口收到目的IP及目的端口号为139.76.12.7:4560的IP数据报时,就会将其映射成192.168.0.6:1554,然后从LAN端口转发给相应的本地主机。

这里所谓的映射成xxxIP是指,将IP地址改为xxx

这样就使得一个全球IP地址可以被多个本地主机共享

注意:普通的路由器转发数据报时,不会修改源IP地址和目的IP地址,而NAT路由器在转发数据报时,一定会改变其IP地址。

4.4.6.3 NAT的优缺点
  • 优点:
    1. 节省了IP地址,使得一个全球IP地址可以被多个本地主机共享
    2. 对外部网络隐藏了内部管理细节
  • 缺点:
    1. 影响性能,相较于普通路由器,NAT路由器多了IP地址转换的操作。
    2. 使用NAT,其实是违反了每个主机的IP地址全球唯一的约定,使得一个全球IP地址可以被多个主机共享,丢失了端到端的IP追溯性。

4.5 IPv6协议

4.5.1 IPv6解决的问题

在上面的章节我们了解到IPv4地址已经被分配完了,为了解决IPv4地址耗尽问题,采用了以下三种措施:

  • 采用CIDR,使IP地址的分配更加合理
  • 采用NAT节省全球IP地址
  • 采用具有更大空间地址的IPv6协议

其中前两个方法都属于“治标不治本”,只有第三种方法才能从根本上解决IPv4地址耗尽的问题。

举例说明:

假设你买了一套120平米的房子,你为了可以让这个房子装更多的东西,你可以选择在房子里添加很多储物柜,合理地利用每一个角落(这正是CIDR和NAT做的事情)。然而你的这个房间总会有被用完的一天。

那么如果你可以买下一整个足球场,用来存放物品,那么你就可以放下更多的东西…

以上这个例子各位同学对比理解一下即可,千万不要牛角尖哟~

由此,我们可以得出,IPv6主要是为了解决IPv4地址空间耗尽这个问题。

4.5.2 IPv6数据报的格式

IPv6数据报结构图如下图所示:

在这里插入图片描述

IPv6数据报由两个部分组成:基本首部有效载荷

4.5.2.1 IPv6的基本首部

IPv6 将首部长度变为固定的 40 字节,称为基本首部,并且去掉了IPv4首部的一些不必要字段,使得IPv6数据报的首部字段数量只有8个。

IPv6首部中的字段调整如下:

  • 取消了首部长度字段,因为首部长度固定为40字节
  • 取消了服务类型字段
  • 取消了总长度字段,改用有效载荷长度字段
  • 把 TTL 字段改称为跳数限制字段
  • 取消了协议字段,改用下一个首部字段
  • 取消了检验和字段
  • 取消了选项字段,而用扩展首部来实现选项功能

IPv6的基本首部结构图如下图所示:

在这里插入图片描述

主要字段解释如下:

  • 版本

    占4 位。它指明了协议的版本,对 IPv6 该字段总是 6。

  • 通信量类

    占8 位。这是为了区分不同的 IPv6 数据报的类别或优先级。目前正在进行不同的通信量类性能的实验。

  • 流标号

    占20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。

  • 有效载荷长度

    占16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。

  • 下一个首部

    占8 位。它相当于 IPv4 的协议字段或可选字段。

    用于指向下一个扩展首部或者上层协议首部

  • 跳数限制

    占8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。
    当跳数限制的值为零时,就要将此数据报丢弃。

  • 源地址

    占128 位。是数据报的发送站的 IP 地址。

  • 目的地址

    占128 位。是数据报的接收站的 IP 地址。

4.5.2.2 IPv6的扩展首部

IPv6 把原来 IPv4 首部中选项的功能都放在扩展首部中,并将扩展首部留给路径两端的源站和目的站的主机来处理。数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部),这种设计大大地提高了路由器的处理效率

每一个扩展首部都由若干个字段组成,它们的长度也各不相同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段。此字段的值指出了在该扩展首部后面的字段是什么

4.5.3 IPv6地址
4.5.3.1 IPv6地址格式

由于IPv6的每个地址站128位,地址空间大于3.4*10^38,因此为了使IPv6地址记法更加简洁,使用了冒号十六进制记法

  • 冒号十六进制记法

    每个16位的值用十六进制值表示,各值之间用冒号分隔,例如:68E6:8C64:FFFF:FFFF:0:1180:960A:FFFF

  • 零压缩记法

    在冒号十六进制记法中,允许把数字前面的 0 省略。例如把 0000 中的前三个 0 省略,写成 1 个 0。并且冒号十六进制记法可以允许零压缩,即一连串连续的零可以为一对冒号所取代,例如FF05:0:0:0:0:0:0:B3可以压缩为FF05::B3。

    注意:在任一IPv6地址中只能使用一次零压缩

  • 点分十进制记法与冒号十六进制记法结合

    冒号十六进制记法可结合使用点分十进制记法的后缀,这种结合在 IPv4 向 IPv6 的转换阶段特别有用。

    例如:[0:0:0:0:0:0:128.10.2.1],再使用零压缩即可得出IPv6地址[::128.10.2.1]

    并且CIDR 的斜线表示法仍然可用。

    例如:60 位的前缀 12AB00000000CD3 可记为:[12AB:0000:0000:CD30:0000:0000:0000:0000/60]

    或12AB::CD30:0:0:0:0/60(零压缩)或12AB:0:0:CD30::/60(零压缩)

4.5.3.2 IPv6地址的类型以及分类

IPv6地址的目的地址有三种基本类型:单播多播以及任播

  • 单播

    传统的点对点通信使用的地址类型。

  • 多播

    一点对多点的通信使用的地址类型。

  • 任播

    这是 IPv6 增加的一种类型。任播的目的站是一组计算机,但数据报在交付时只交付其中的一个,通常是距离最近的一个。

IPv6地址的分类如下表所示

地址类型二进制前缀
未指明地址00…0(128位),可记为 ::/128。
环回地址00…1(128位),可记为 ::1/128。
多播地址11111111(8位),可记为 FF00::/8。
本地链路单播地址1111111010(10位), 可记为 FE80::/10。
全球单播地址(除上述四种外,所有其他的二进制前缀)
  • 未指明地址

    这是 16 字节的全 0 地址,可缩写为两个冒号“::”,只能为还没有配置到一个标准的 IP 地址的主机当作源地址使用,并且这类地址仅此一个。

  • 环回地址

    即 0:0:0:0:0:0:0:1(记为 ::1),作用和 IPv4 的环回地址一样,并且这类地址仅此一个。

  • 多播地址

    功能和 IPv4 的一样,这类地址占 IPv6 地址总数的 1/256。

  • 本地链路单播地址

    有些单位的网络使用 TCP/IP 协议,但并没有连接到互联网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和互联网上的其他主机通信,这类地址占 IPv6 地址总数的 1/1024。

  • 全球单播地址

    IPv6 的这一类单播地址是使用得最多的一类。

4.5.4 IPv6与IPv4的区别
  • IPv6将地址从32位(4B)扩大到128位(16B),具有更大的地址空间。

  • IPv6将IPv4的校验和字段彻底移除,以减少每跳的处理时间。

  • IPv6将IPv4的可选字段移出首部,变成了扩展首部,路由器通常不对扩展首部进行检查,大大地提高了路由器的处理效率。

  • IPv6支持即插即用(即自动配置),不需要使用DHCP协议。

  • IPv6首部长度必须是8B的整数倍,IPv4首部是4B的整数倍。

  • IPv6只能在主机处分片,IPv4可以在路由器和主机处分片。

    当在路由器接收到的IPv6的分组过大时,就只能丢弃该分组,并向源主机发送ICMPv6报文(分组过大报文)。

  • IPv6支持资源预分配,支持实时视像等要求,保证一定的带宽和时延的应用。

  • IPv6取消了协议字段,改用下一个首部字段。

  • IPv6取消了总长度字段,改用有效载荷长度字段。

  • IPv6取消了服务类型字段。

4.5.5 IPv4如何过渡到IPv6

IPv4和IPv6本身是互不兼容的,因此人们就需要考虑,如何将IPv4过渡到IPv6(兼容历史版本)。

目前最常用的从IPv4向IPv6的过渡策略有两种:双协议栈隧道技术

4.5.5.1 双协议栈

双协议栈是指在完全过渡到 IPv6 之前,使一部分主机(或路由器)装有两个协议栈,一个 IPv4 和一个 IPv6。双协议栈的主机(或路由器)记为 IPv6/IPv4,表明它同时具有两种 IP 地址(一个 IPv6 地址和一个 IPv4 地址)。双协议栈主机在和 IPv6 主机通信时是采用 IPv6 地址,而和 IPv4 主机通信时就采用 IPv4 地址。根据 DNS 返回的地址类型可以确定使用 IPv4 地址还是 IPv6 地址。

DNS(域名系统),会在后面的章节进行介绍。

下图表示使用双协议栈实现从IPv4到IPv6过渡的过程

在这里插入图片描述

可以看到上图中,路由器B通过IPv6协议接收到主机A发送的数据后,将IPv6数据报中的数据部分封装为IPv4数据报,在IPv4网络中使用IPv4协议进行通信。路由器E通过IPv4协议接收到路由器D发送过来的IPv4数据报后,再将其数据部分重新封装成IPv6数据报,并发送给主机F。

4.5.5.2 隧道技术

隧道技术,就是将IPv4协议当作隧道,负责传送IPv6数据报,在 IPv6 数据报要进入 IPv4 网络时,把 IPv6 数据报封装成为 IPv4 数据报,整个的 IPv6 数据报变成了 IPv4 数据报的数据部分。当 IPv4 数据报离开 IPv4 网络中的隧道时,再把数据部分(即原来的 IPv6 数据报)交给主机的 IPv6 协议栈。

下图表示使用隧道技术实现从IPv4到IPv6过渡的过程

在这里插入图片描述

可以看到上图中,路由器B在接收到主机A发送的IPv6数据报后,将整个IPv6数据报作为数据部分封装为一个新的IPv4数据报,并将此IPv4数据报在IPv4网络中传递。路由器E接收到IPv4数据报后,再将其中的数据部分的IPv6数据报解封装后,发送给主机F。

4.5.6 ICMPv6

ICMPv6是IPv6使用的ICMP协议,即,IPv6通过ICMPv6来反馈差错信息。

值得一提的是,ICMPv6包含了地址解析协议 ARP 和网际组管理协议 IGMP 协议的功能,下图表示新旧版本中的网络层的协议比较。

在这里插入图片描述

注意:IPv6相关的知识了解即可。

4.6 路由协议

4.6.1 路由协议的相关概念
4.6.1.1 因特网采用的路由选择协议

因特网采用分层次的路由选择协议

  • 分层次的路由选择协议

    因特网将互联网划分为了许多较小的自治系统,每个自治系统有权自主地决定本系统内采用的路由选择协议。通过不断的划分各种自治系统达到分层的目的,减少由于网络规模过大导致的性能问题。

  • 为什么采用分层次的路由选择协议

    • 互联网的规模非常大。如果让所有的路由器知道所有的网络应怎样到达,则这种路由表将非常大,处理起来也太花时间。而所有这些路由器之间交换路由信息所需的带宽就会使互联网的通信链路饱和。
    • 许多单位不愿意外界了解自己单位网络的布局细节和本部门所采用的路由选择协议(这属于本部门内部的事情),但同时还希望连接到互联网上。
4.6.1.2 自治系统

自治系统(AS),是指在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。

使用自治系统的互联网示意图如下:

在这里插入图片描述

4.6.1.3 域内路由与域间路由
  • 域内路由

    一个自治系统内部所使用的路由选择协议被称为域内路由。

  • 域间路由

    多个自治系统之间使用的路由选择协议被称为域间路由。

4.6.2 内部网关协议
4.6.2.1 简介

内部网关协议(Interior Gateway Protocol,IGP),是在一个自治系统内部使用的路由选择协议,它与互联网中其他自治系统选用的路由选择协议无关。

目前使用最广泛的IGP协议由RIP协议OSPF协议

4.6.2.2 RIP协议
  • 简介

    路由信息协议(Routing Information Protocol,RIP),是一种分布式的基于距离向量算法的一种路由选择协议。

    距离向量算法,在4.3.4小节已经为各位读者介绍过了。

  • 相关规定

    1. 网络中的每个路由器都要维护从它自身到其他每个目的网络的距离。
    2. 距离也被称为跳数,RIP规定从一个路由器到直接连接网络的距离为1,每经过一个路由器,距离就会加1。
    3. RIP 认为一个好的路由就是它通过的路由器的数目少,即“距离短”。
    4. RIP 允许一条路径最多只能包含 15 个路由器,当距离等于16时,表示目的网络不可达。由此可见RIP只适合小型网络。
    5. RIP默认在任意两个使用RIP的路由器之间每30秒广播一次RIP路由更新信息,从而动态维护路由表。
    6. RIP 不能在两个网络之间同时使用多条路由。
    7. RIP 选择一个具有最少路由器的路由(即最短路由),哪怕还存在另一条高速(低时延)但路由器较多的路由。
  • 特点

    • 使用RIP协议的路由器,仅与相邻路由器交换信息。
    • 使用RIP协议的路由器之间交换的信息是路由器的路由表,即所知道的全部路由信息。
    • 使用RIP协议的路由器之间会按照固定的时间间隔交换路由信息,从而到达动态维护路由表的目的。
    • 使用RIP协议的路由器,最初只知道与自己直接连接的邻接路由器的路由信息,通过每隔30秒的RIP广播,相邻的路由器会互相将自己的路由表同步给对方,以此类推,最终,所有的路由器都会知道整个网络的路由表,从而到达最终的“收敛”。
  • 工作原理

    在RIP协议中,每个路由表的表项都具有三个关键数据:<目的网络N,距离D,下一跳路由器地址X>。

    例如有如下网络结构

    在这里插入图片描述

    其中路由器1的路由表为:

    目的网络距离下一跳路由器地址
    网络11直接交付
    网络21直接交付
    网络32路由器2

    注意:当目的网络可以被直接交付时,距离也是1。

    使用RIP协议的路由器对于每个相邻路由器发送过来的RIP报文,都会执行如下步骤:

    1. 对地址X的相邻路由器发送来的RIP报文中的所有项目进行修改,得到修改后的表项。修改的原则为:把"下一跳路由器地址"全部改为X,并且把”距离“字段的值加1。
    2. 对比自身的路由表和被修改后的RIP报文中的表项,执行如下步骤:
      • 当原来的路由表中没有目的网络N时,直接把该表项加入路由表中。
      • 当原来的路由表中有目的网络N,且下一跳路由器的地址是X时,用报文中对应的表项更新原路由表中的对应表项。
      • 当原来的路由表中有目的网络N,且下一跳路由器的地址不是X,则进一步对比“距离”字段的值,如果原来的路由表中的距离大于RIP报文中表项的距离d,则用RIP报文中的表项替换原有的路由表中的表项,否则不做更新。
    3. 如果180秒(RIP默认超时时间是180秒),还没有收到相邻路由器的RIP报文信息,则就会把此相邻路由器的距离记为16,即不可达。
    4. 结束

    举例说明RIP的工作原理:

    已知路由器R1的路由表如下表所示

    目的网络距离下一跳路由器地址
    Net23R3
    Net34R4
    Net11直接交付

    路由器R1收到了路由器R3发送的路由更新信息如下表所示

    目的网络距离下一跳路由器地址
    Net23R2
    Net31直接交付
    Net54R6

    接下来,我们尝试更新R1的路由表信息,我们先将收到的R3发送来的路由信息进行修改,修改后的表项如下表所示。

    目的网络距离下一跳路由器地址
    Net24R3
    Net32R3
    Net55R3

    根据上面修改后的表,对比R1原有的路由表,可以得出R1更新之后的路由表如下表所示。

    目的网络距离下一跳路由器地址
    Net24R3
    Net32R3
    Net11直接交付
    Net55R3

    更新过程:

    目的网络Net2,对比两个路由表的表项可以发现,修改后的路由表以及R1原有的路由表中下一跳路由器地址都是R3,因此用修改后的路由表的表项直接替换R1原有的路由表中的对应的表项。

    目的网络Net3,对比两个路由表的表项可以发现,修改后的路由表的表项中距离为2小于R1原有的路由表中的对应表项的距离4,因此用修改后的路由表的表项替换R1原有的路由表中的对应的表项。

    目的网络Net1,对比两个路由表的表项可以发现,修改后的路由表中没有该表项,则不做任何处理。

    目的网络Net5,对比两个路由表的表项可以发现,R1原有的路由表中没有对应的表项,则将该表项添加到R1的路由表中。

  • RIP报文格式

    在这里插入图片描述

    • RIP报文由首部和路由部分组成。

    • 路由部分:由若干个路由信息组成。每个路由信息需要用 20 个字节。

    • 地址族标识符:又称为地址类别,用来标志所使用的地址协议。

    • 路由标记:填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息。

    • 网络地址:指出该RIP报文对应的目的网络地址。

    • 子网掩码:目的网络地址对应的子网掩码。

    • 下一跳路由器地址:到该目的网络地址的下一跳路由器地址。

    • 距离:到该目的网络的距离。

    注意:由上图可以看出,RIP报文是封装在UDP数据报的数据部分中,因此RIP协议是应用层协议,依托于UDP进行数据传输。

  • 优点

    • 实现简单
    • 开销小
    • 收敛过程较快
  • 缺点

    • 限制了网络规模,它能使用的最大距离为15。

    • 路由器之间交换的是整个路由表,因此网络规模越大,开销也越大。

    • “坏消息传的慢”,即当网络出现故障时,会出现慢收敛现象。(当网络出现故障时,要经过比较长的时间 (例如数分钟) 才能将此信息传送到所有的路由器。)

      举例说明:

      已知有如下网络结构

      在这里插入图片描述

      • 正常情况下,路由器1会向路由器2发送RIP报文,其中表项为<网络1,1,直接交付>,路由器2收到该报文后就会更新其路由表,其中表项为<网络1,2,路由器1>。

        路由器1中的表项为<网络1,1,直接交付>,路由器2中的表项为<网络1,2,路由器1>

      • 此时如果网络1出现故障

      • 第二次RIP广播时,路由器1得知网络1不可达,会将其表项更新为<网络1,16,直接交付>,由于此时路由器2还未收到路由器1发送的最新的RIP报文,因此它还会按照自己的路由表信息向路由器1发送路由表信息,其中的表项为<网络1,2,路由器1>。由于路由器1收到了路由器2发送的RIP报文,其中包含表项<网络1,2,路由器1>,根据RIP表项的更新规则,将该路由器表项进行修改后为<网络1,3,路由器2>,此时路由器1就会误以为可以通过路由器2到达网络1,它就会更新自己的路由表的表项为<网络1,3,路由器2>。

      • 第三次进行RIP广播时,路由器1会向路由器2发送RIP报文,表项为<网络1,3,路由器2>,路由器2收到该表项后,会更新自己的路由表表项为<网络1,4,路由器1>。

      • 以此类推,直到路由器1和路由器2的路由表中的到达网络1的表项中的距离都增大到16时,路由器1和路由器2才知道网络1是不可达的。

4.6.2.3 OSPF协议
  • 简介

    开放最短路径协议(OSPF)是基于分布式链路状态路由算法的一种协议,该协议是为克服 RIP 的缺点在 1989 年开发出来的。“开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法SPF。

    链路状态算法,在4.3.5小节已经为各位读者介绍过了。

    注意:OSPF 只是一个协议的名字,它并不表示其他的路由选择协议不是“最短路径优先”。

  • 链路状态数据库

    由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库,这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。

  • OSPF区域

    为了使OSPF能够用于规模很大的网络,OSPF将一个自治系统再划分为若干个更小的范围,叫做区域。每一个区域都有一个 32 位的区域标识符(用点分十进制表示),区域不能太大,在一个区域内的路由器最好不超过 200 个。

    OSPF区域示意图如下图所示

    在这里插入图片描述

    OSPF使用层次结构的区域划分。在上层的区域叫做主干区域,主干区域的标识符规定为0.0.0.0。主干区域的作用是用来连通其他在下层的区域。

    划分区域的好处就是将利用洪泛法交换链路状态信息的范围局限于每一个区域而不是整个的自治系统,这就减少了整个网络上的通信量。在一个区域内部的路由器只知道本区域的完整网络拓扑,而不知道其他区域的网络拓扑的情况。

  • OSPF的分组

    OSPF分组结构如下图所示

    在这里插入图片描述

    OSPF协议中,路由器会使用五种不同类型的报文,来实现信息交换。

    • 问候分组(Hello)

      用于发现和维持邻站的可达性。

    • 数据库描述分组(Database Description,DD)

      向邻站给出自己的链路状态数据库中的所有链路状态项目的摘要信息。

    • 链路状态请求分组(Link State Request,LSR)

      向对方请求发送某些链路状态项目的详细信息。

    • **链路状态更新分组(Link State Update,LSU) **

      用洪泛法对全网路由器更新链路状态。

    • 链路状态确认分组(Link State Acknowledgment,LSA)

      对链路更新分组的确认。

  • 工作原理

    1. 每个10秒,每两个相邻的路由器要通过问候分组来发现并了解邻居结点的网络地址以及可达性。
    2. 设置每个路由器到自己的每个邻居路由器的度量。
    3. 每个路由器使用数据库描述分组和其相邻的路由器交换各自数据库中已有的链路状态摘要信息。
    4. 每个路由器收到相邻路由器的数据库描述分组后,与自己的链路状态数据库进行对比,如果分组中的摘要信息自己有,则不做处理;如果没有或者信息有所更新,则向对方发送链路状态请求分组,请求自己缺少或者需要更新的链路状态项目信息。
    5. 当路由器收到相邻路由器发送的链路状态请求分组后,发送链路状态更新分组
    6. 当路由器根据链路状态更新分组更新完信息后,会向发送链路状态更新分组的路由器发送链路状态确认分组,进行更新确认。
    7. 使用Dijkstra算法根据自己的链路状态数据库构造出其到各个路由器的最优路径,以此构造路由表。

    注意

    在网络运行的过程汇总,只要有一个路由器的链路状态发生变化,就会使用洪泛法向全网的路由器发送链路状态更新分组,收到该链路状态更新分组的路由器,在更新完自己数据库信息后,就会返回一个链路状态确认分组

    这里使用的洪泛法,其实是路由器A给相邻路由器B发送数据后,其相邻的路由器B继续给相邻的路由器C发送数据,以此达到全网其他的各个路由器都收到该数据的效果。

    虽然使用Dijkstra算法能够的到本身到其他所有路由器的最优路径,但是路由表中并不会存储完整路径,而是只存储“下一跳路由器地址”,到了下一跳路由器后,才会知道再下一跳的地址。

    为了确保链路状态数据库与全网的状态保持一致,OSPF规定每隔一段时间(30分钟)就刷新以此数据库中的链路状态。

  • 与RIP协议的区别

    1. OSPF通过洪泛法向本自治系统中的所有路由器发送信息,RIP仅向自身相邻的路由器发送信息。
    2. 使用OSPF协议的路由器发送的信息是与本路由器相邻的所有路由器的链路状态,所谓的链路状态就是指该路由器与哪些路由器相邻以及对应链路的“度量”。RIP中发送的信息是路由器的整个路由表。
    3. OSPF协议规定只有当链路状态发生变化时,路由器才使用洪泛法向所有路由器发送此信息,并且收敛过程快,不会出现“坏消息传递的慢”的问题。RIP协议无论网络拓扑是否发生变化,路由器之间都会定期地交换信息。
    4. OSPF是网络层协议,直接使用IP数据报传送。RIP是应用层协议,使用UDP传送。
  • 特点

    1. OSPF对于不同链路可以根据IP分组的不同服务类型设置成不同的代价。
    2. OSPF协议可以实现多路径间的负载均衡,如果到同一个目的网络有多条相同代价的路径,可以将通信量分配给这几条路径,从而达到负载均衡的效果。
    3. 使用OSPF协议的路由器之间交换的分组具有鉴别功能。
  • 优点

    适用于大型网络,没有“坏消息传播得慢”的问题。

  • 缺点

    实现较为复杂。

4.6.2 外部网关协议
4.6.2.1 简介

外部网关协议(External Gateway Protocol,EGP),是指在不同自治系统之间交换路由信息的协议。

目前使用最多的外部网关协议是BGP-4协议

4.6.2.2 BGP协议
  • 简介

    **边界网关协议(Border Gateway Protocol,BGP)**是不同自治系统的路由器之间交换路由信息的一种外部网关协议,其常常被用于互联网的网关之间。

    BGP较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。 可以将 BGP-4 简写为 BGP。

  • 目标

    由于互联网的规模太大,使得自治系统之间路由选择非常困难。对于自治系统之间的路由选择,要寻找最佳路由是很不现实的。

    当一条路径通过几个不同 AS 时,要想对这样的路径计算出有意义的代价是不太可能的。比较合理的做法是在 AS 之间交换“可达性”信息。

    自治系统之间的路由选择必须考虑有关策略,因此,BGP只能是力求寻找一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要寻找一条最佳路由。

  • BGP发言人

    每一个自治系统的管理员要选择至少一个路由器作为该自治系统的“ BGP 发言人” (BGP speaker) 。一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器。

    下图表示了BGP发言人和AS的关系

在这里插入图片描述

每个BGP发言人除了要运行BGP之外,还必须运行所在的AS的内部网关协议,如OSPF或者RIP。

  • 工作原理

    1. BGP发言人与其他AS中的BGP发言人建立TCP连接。

    2. 在TCP连接上交换BGP报文以建立BGP会话。

    3. 通过BGP会话交换路由信息。

    4. 当所有BGP发言人都相互交换网络可达性的信息后,各BGP发言人就可以找出到达各个自治系统的较好路由。

      网络可达性信息就是要到达某个目的网络索要经过的一系列AS路径。

    下面两张图举例说明了BGP发言人之间交换路径向量

    在这里插入图片描述

    在这里插入图片描述

  • 特点

    • BGP交换路由信息的结点数量级是自治系统的数量级,比这些自治系统内的网络数量少很多。
    • 每个自治系统中的BGP发言人数目很少,使得自治系统之间的路由选择不至于过分复杂。
    • BGP支持CIDR,因此BGP的路由表也包括目的网络前缀、下一跳路由器以及到达该目的网络所要经过的各个AS序列。
    • 当BGP初次运行时,BGP的邻站交换整个BGP路由表。以后只需要在发生变化是更新有变化的部分。这种机制节省了网络带宽和路由器的处理开销。
  • BGP-4报文

    • BGP-4共使用4中报文

      • 打开 (OPEN) 报文,用来与相邻的另一个BGP发言人建立关系。
      • 更新 (UPDATE) 报文,用来发送某一路由的信息,以及列出要撤消的多条路由。
      • 保活 (KEEPALIVE) 报文,用来确认打开报文和周期性地证实邻站关系。
      • 通知 (NOTIFICATION) 报文,用来发送检测到的差错。
    • BGP-4的报文格式

      在这里插入图片描述

      由上图可以看出,BGP使用TCP协议来进行传输信息。

  • RIP、OSPF以及BGP的对比

    协议RIPOSPFBGP
    类型内部内部外部
    路由算法距离-向量链路状态路径-向量
    传递协议UDPIPTCP
    路由选择跳数最少代价最低较好路由
    交换结点和自身相邻的结点本AS中的所有结点和自身相邻的结点
    交换内容当前路由器的整个路由表当前路由器相邻的所有路由器的链路状态首次交换整个路由表,非首次仅交换有变化的部分

4.7 IP多播

4.7.1 多播的相关概念
4.7.1.1 IP数据报的传输方式

IP数据报有三种传输方式:单播、广播以及多播。

  • 单播

    用于发送数据报到单个目的地并且每发送一份数据报都要使用一个单播IP地址作为目的地址,属于点对点传输方式。

  • 广播

    发送数据报到同一广播域或子网内的所有设备,属于点对多点传输方式

  • 多播

    当网络中的某些用户需要特定数据时,多播数据发送者仅发送以此数据,借助多播路由协议为多播数据报建立多播分发树,被传递的数据到达距离用户端尽可能仅的节点后才开始复制数据报以及分发,属于点对多点的传输方法。

    相较于广播,使用多播可以对数据接收者进行额外的筛选。

4.7.1.2 使用多播的目的

为了能够支持视频点播、视频会议等多媒体应用,网络必须要能够支持一点对多点的通信。虽然我们可以使用单播方式复制多份数据报来模拟一点对多点的通信,但是这样会大大的增加网络性能的开销。因此,多播技术就诞生了,使用多播技术可以在满足一点对多点通信的基础上大大地节约网络资源。

接下来,我将以视频分发为例,讲解多播是如何节约网络资源的。

例如,我们有90台主机在同时观看同一个视频节目,如果使用单播方式,则数据报分发情况如下图所示。

在这里插入图片描述

此时我们需要在源点复制出90份相同的数据报,发送90份单播数据报。

如果使用多播方式,则数据报分发情况如下图所示。

在这里插入图片描述

此时我们只需要在源点发送一个数据报,只有数据在传送路径上出现分岔时才需要将分组进行复制,因此对于发送者而言,指需要发送一次就可以发送到所有接收者,大大地减轻了网络的负载以及发送者的负担。

4.7.1.3 多播地址

使用IP多播时,需要使用IP多播地址,IP多播地址让源设备能够将一个分组发送给一组设备,属于同一个多播组的设备将被分配一个相同的多播地址。IP多播地址使用的D类地址格式,范围是224.0.0.0~239.255.255.255,该范围内的每一个D类IP地址代表着一个多播组。

4.7.1.4 多播数据报

多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP。

其中需要注意的是:

  1. 多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。
  2. 多播地址只能用于目的地址,不能用于源地址。
  3. 对多播数据报不产生 ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。
  4. 并非所有的D类地址都可以作为多播地址。
4.7.2 局域网中的硬件多播
4.7.2.1 多播的分类

IP多播可以被分为两种:因特网中的多播以及局域网中的硬件多播。

4.7.2.2 硬件多播的原理

在因特网上进行多播的最后阶段,需要把多播数据报在局域网上用硬件多播交付给多播组中的所有成员。

在局域网的硬件多播中,我们会将D类IP地址与MAC多播地址进行映射,通过映射关系以及路由器的多播路由算法,可以将多播报文转发给指定的主机。

D类IP地址与MAC多播地址的映射关系如下图所示。

在这里插入图片描述

互联网号码指派管理局 IANA 拥有的MAC地址块的高 24 位为 00-00-5E。因此 TCP/IP 协议使用的MAC地址块的范围是00-00-5E-00-00-00~00-00-5E-FF-FF-FF ,由此可以看出,在每一个地址中,只有23位可用作多播。D 类 IP 地址可供分配的有 28 位,在这 28 位中的前 5 位不能用来构成MAC地址。

由上图可以看出,由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层利用软件进行过滤,把不是本主机要接收的数据报丢弃。

4.7.3 IGMP与多播路由选择协议

IP多播需要使用两种协议:网际组管理协议 IGMP (Internet Group Management Protocol)以及多播路由选择协议

4.7.3.1 IGMP

IGMP协议可以使路由器知道多播组成员的信息。

  • IGMP的使用范围

    IGMP 并非在互联网范围内对所有多播组成员进行管理。并且其 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。

    在这里插入图片描述

    上图中显示了有四个主机加入了226.15.37.123这个多播组,此时如果在网络中有一个主机向多播组226.15.37.123发送了多播数据报,那么R1、R2、R3、R4这些路由器就可以通过IGMP来知道对应的局域网中是否有主机加入了该多播组。因此,此时只有R1、R2、R3会转发该数据报,R4不做处理。

  • IGMP工作的两个阶段

    1. 当某台主机加入新的多播组时,该主机向多播组的多播地址发送一个IGMP报文,声明自己想要成为该组的成员。当本地的多播路由器收到IGMP报文后,会利用多播路由选择协议将这组成员关系转发给因特网上的其他多播路由器。
    2. 由于多播组成员的关系是动态的,因此本地多播路由器需要周期性地探询本地局域网上的主机,以便知道这些主机是否仍然是多播组的成员。只要某个多播组中有一台主机响应,就表示该多播组是活跃的,当一个多播组经过几次探询后仍然没有主机进行响应时,多播路由器就不会再将该组的成员关系转发给其他的多播路由器里。
4.7.3.2 多播路由选择协议

多播路由选择协议的目的是为了找出以源主机为根节点的多播转发树,其中每个分组在每条链路上只传送一次(即,在多播转发树上的路由器不会收到重复的多播数据报)。不同的多播组对应于不同的多播转发树,同一个多播组,对不同的源点也会有不同的多播转发树。

多播转发树示意图如下图所示。

在这里插入图片描述

多播路由选择协议在转发多播数据报时常用的三种算法:

  1. 基于链路状态的路由选择
  2. 基于距离-向量的路由选择
  3. 协议无关多播(稀疏/密集)

前两种算法在上面的章节中已经介绍给大家,第三种算法各位同学如果感兴趣可以自行理解。对于IP多播相关的知识仅了解一下即可。

未完待续…

参考文献

《计算机网络:自顶向下方法第七版》- Kurose
《计算机网络(第7版)》-谢希仁
《2023年计算机网络考研复习指导》-王道论坛

如果这篇文章有帮助到你,不妨点赞、转发、收藏一下喽~

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值