漫谈计算机网络:网络层 —— 重点:IP协议与互联网路由选择协议

 面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它👇 深入浅出,用你的空闲时间来探索计算机网络的硬核知识!

👇博主的上篇连载文章《初识图像处理技术》

图像处理技术:数字图像分割 —— 图像分割、边界分割(边缘检测)、区域分割 – slowlydance2me – 博客园 (cnblogs.com)

 

漫谈计算机网络 连载的其他章节👇:

1.漫谈计算机网络:概述 —— 从起源开始到分层协议结构,初识究竟什么是计算机网络? – slowlydance2me – 博客园 (cnblogs.com)

2.漫谈计算机网络:物理层 —– 双绞线&光纤?,从最底层开始了解计算机网络 – slowlydance2me – 博客园 (cnblogs.com)

3.漫谈计算机网络:数据链路层 —– 数据链路路在何方? –从点对点数据传输 到 “广泛撒网,重点捕获”的局域网 – slowlydance2me – 博客园 (cnblogs.com)

 

前言:

2022/11/27

  众所周知,计算机网络在程序员的学习以及面试中占据十分重要的位置,同时它也是我们开启互联网世界的钥匙🔑。

  因此,从今天(11/27)开始更新《漫谈计算机网络》一文,读者们可以跟着博主一起深入浅出,了解计算机网络知识,学习计算机网络的应用。

  博主仍在不断学习进步中,在本文中对于计算机网络的理解与认识尚浅,如有错误之处烦请批评指正。

  如有疑问欢迎评论区留言。

 

正文分割线:


今天更新!11/29

漫谈计算机网络:第四章-网络层

 

老规矩我们先来看看网络层在计算机网络体系结构中的位置

 

 

 

4.1 网络层的几个重要概念

4.1.1 网络层提供的两种服务

在网络层一开始的定义中有这两种争论:

争论:
  网络层应该向运输层提供怎样的服务?面向连接还是无连接?
  在计算机通信中,可靠交付应当由谁来负责?是网络还是端系统?
 
这两种争论分别对应以下这两种观点:
 
2 种观点:
  面向连接的可靠交付。
  无连接的、尽最大努力交付的数据报服务,不提供服务质量的承诺。
 
接下来,让我们分别来了解一下这两种观点:

  一种观点:让网络负责可靠交付

  计算机网络模仿电信网络,使用面向连接的通信方式。
  通信之前先建立虚电路 VC (Virtual Circuit) (即连接),以保证双方通信所需的一切网络资源。
   如果再使用可靠传输的网络协议,可使所发送的分组无差错按序到达终点,不丢失、不重复。

 

    什么是虚电路服务?

如图👇

虚电路只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,并不是真正建立了一条物理连接

 

  另一种观点:网络提供数据报服务

互联网采用的设计思路:
  网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务
    网络在发送分组时不需要先建立连接
    每一个分组(即 IP 数据报)独立发送,与其前后的分组无关(不进行编号)。
    网络层不提供服务质量的承诺。即所传送的分组可能出错、丢失、重复和失序(不按序到达终点),也不保证分组传送的时限。
  由主机中的运输层负责可靠的通信。
数据报服务如图👇

 

虚电路服务与数据报服务的对比

 

 

4.1.2 网络层的两个层面

  不同网络中的两个主机之间的通信,要经过若干个路由器转发分组来完成。
  在路由器之间传送的信息有以下 2 大类:
    1. 数据。
    2. 路由信息(为数据传送服务)。
 

网络层的 2 个层面:数据层面和控制层面

 

 

数据层面

• 路由器根据本路由器生成的转发表,把收到的分组从查找到的对应接口转发出去。
独立工作。
• 采用硬件进行转发,
 

控制层面

• 根据路由选择协议所用的路由算法计算路由,创建出本路由器的路由表
• 许多路由器协同工作
• 采用软件计算,
 

软件定义网络 SDN (Software Defined Network)

 

 

 

 

 

重点在这里👇

4.2 网际协议 IP

  与网际协议 IPv4 配套的 3 个协议:
    1. 地址解析协议 ARP (Address Resolution Protocol)
    2. 网际控制报文协议 ICMP (Internet Control Message Protocol)
    3. 网际组管理协议 IGMP (Internet Group Management Protocol)

 

 

4.2.1 虚拟互连网络

实现网络互连、互通时需要解决许多问题,如以下“不同”:

如何将异构的网络互相连接起来?
 
实现异构网络的互连互通方法,哪种好?

使用中间设备进行设备互连

注意:

使用转发器或网桥不称为网络互连

 转发器、网桥或交换机仅把一个网络扩大了,仍然是一个网络

互连网络与虚拟互连网络

IP 网的概念
 

IP 网的意义

  当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。
  如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就是现在的互联网 (Internet)
 

分组传输路径

 

 

 

4.2.2 IP 地址

  在 TCP/IP 体系中,IP 地址是一个最基本的概念。
  没有IP地址,就无法和网上的其他设备进行通信。
  本部分重点👇:

    1. IP 地址及其表示方法

点分十进制:

互联网上的每台主机(或路由器)的每个接口分配一个在全世界唯一的 IP 地址。由互联网名字和数字分配机构 ICANN (Internet Corporation for AssignedNames and Numbers) 进行分配。

点分十进制举例:

 

 

IP 地址采用 2 级结构

2 级结构
2 个字段:网络号和主机号

IP地址在整个互联网范围内是唯一的。
IP 地址指明了连接到某个网络上的一个主机

 

 

 

    2. 分类的 IP 地址

 

 

 

各类 IP 地址的网络号字段和主机号字段

 

 

 

 

 

 

 

 

 

 

 

 

 

各类 IP 地址的指派范围:

 

 

一般不使用的特殊的 IP 地址

分类的 IP 地址的优点和缺点

 

 

 

 

    3. 无分类编址 CIDR

   CIDR (Classless Inter-Domain Routing) :无分类域间路由选择
   消除了传统的 A 类、B 类和 C 类地址以及划分子网的概念,可以更加有效地分配 IPv4 的地址空间,但无法解决 IP 地址枯竭的问题
  要点:

    (1) 网络前缀

2 级结构
2 个字段:网络前缀和主机号 

 

 

 

 

    (2) 地址块

  CIDR 把网络前缀都相同的所有连续的 IP 地址组成一个 CIDR 地址块
   一个 CIDR 地址块包含的 IP 地址数目,取决于网络前缀的位数n。 232-n – 2 个可派地址

二进制代码表示:10000000 00001110 0010*

地址与地址块识别规范

 

 

 

    (3) 地址掩码

  又称为子网掩码 (subnet mask)。
  位数:32 位。
  目的:让机器从 IP 地址迅速算出网络地址。
  由一连串 1 和接着的一连串 0 组成,而 1 的个数就是网络前缀的长度

 

 

默认地址掩码

网络地址 = (二进制的 IP 地址) AND (地址掩码)

例题:

 

 

 补充:

常用的 CIDR 地址块

 

构造超网 

  每一个 CIDR 地址块中的地址数一定是 2 的整数次幂。
  👆上图中除最后几行外,CIDR 地址块都包含了多个 C 类地址(是一个 C 类地址的 2n 倍,n 是整数)。
   因此在文献中有时称 CIDR 编址为“构造超网” 。

 

 

三个特殊的 CIDR 地址块

 

路由聚合 (route aggregation)

 

CIDR 地址块划分举例

 

 

 

 

 

    4. IP 地址的特点

  (1) 每个 IP 地址都由网络前缀和主机号两部分组成。
    IP 地址是一种分等级的地址结构。
      方便了 IP 地址的分配和管理。
    实现路由聚合,减小了转发表所占的存储空间,以及查找转发表的时间。
 
  (2) IP 地址是标志一台主机(或路由器)和一条链路的接口。
  当一台主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP
地址,其网络号必须是不同的。这种主机称为多归属主机 (multihomed host)。
  一个路由器至少应当连接到两个网络,因此一个路由器至少应当有两个不同的 IP 地址。
 
  (3) 转发器或交换机连接起来的若干个局域网仍为一个网络
  按照互联网的观点,一个网络(或子网)是指具有相同网络前缀的主机的集合。
  转发器或交换机连接起来的若干个局域网都具有同样的网络号,它们仍为一个网络。
  具有不同网络号的局域网必须使用路由器进行互连。
 
  (4) 在 IP 地址中,所有分配到网络前缀的网络都是平等的。
  互联网同等对待每一个 IP 地址,不管是范围很小的局域网,还是可能覆盖很大地理范围的广域网

 

 

 

 

 

 

4.2.3 IP 地址与 MAC 地址

IP 地址

• 虚拟地址、软件地址、逻辑地址。
• 网络层和以上各层使用。
• 放在 IP 数据报的首部。
 
MAC 地址
• 固化在网卡上的 ROM 中。
• 硬件地址、物理地址。
• 数据链路层使用。
• 放在 MAC 帧的首部’

IP 地址与 MAC 地址的区别

 

 

 

 

 

不同层次、不同区间使用的源地址和目的地址

  尽管互连在一起的网络的 MAC 地址体系各不相同,但 IP 层抽象的互联网却屏蔽了下层这些很复杂的细节。
  只要我们在网络层上讨论问题,就能够使用统一的、抽象的 IP 地址研究主机和主机或路由器之间的通信。
 
问题:
主机或路由器怎样知道应当在 MAC 帧的首部填入什么样的 MAC 地址?下一节告诉你答案👇

 

4.2.4 地址解析协议 ARP

实现 IP 通信时使用了两个地址:
1. IP 地址(网络层地址)
2. MAC 地址(数据链路层地址)

 

问题:已经知道了一个机器(主机或路由器)的 IP 地址,如何找出其相应的 MAC 地址?

 

 

ARP 高速缓存 (ARP cache)

   存放 IP 地址到 MAC 地址的映射表。
   映射表动态更新(新增或超时删除)。

 

ARP 工作流程

当主机 A 欲向本局域网上的某个主机 B 发送 IP 数据报时:

ARP 查找 IP 地址对应的 MAC地址

  本局域网上广播发送 ARP 请求(路由器不转发 ARP 请求)。
  ARP 请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址。
  单播 ARP 响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址。
  ARP 分组封装在以太网帧中传输。

       

ARP 高速缓存的作用

  存放最近获得的 IP 地址到 MAC 地址的绑定。
  减少 ARP 广播的通信量。
   为进一步减少 ARP 通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到 MAC 地址的映射写入 ARP 请求分组。
  当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的 IP 地址及其对应的 MAC 地址映射写入主机 B 自己的 ARP 高速缓存中。不必再发送 ARP 请求。
 

2 台主机不在同一个局域网上怎么办?

过程演示如下👇

 

 

 

 

 

 

 

 

 

使用 ARP 的四种典型情况

1. 发送方是主机,要把 IP 数据报发送到本网络上的另一个主机。这时用 ARP 找到目的主机的硬件地址。

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

 

灵魂拷问:为什么要使用两种地址:IP 地址和 MAC 地址?

   不同网络不同的 MAC 地址。MAC 地址之间的转换非常复杂。
  对以太网 MAC 地址进行寻址也是极其困难的。
  IP 编址把这个复杂问题解决了。
     连接到互联网的主机只需各自拥有一个唯一的 IP 地址,它们之间的通信就像连接在同一个网络上那样简单方便,即使必须多次调用 ARP 来找到 MAC 地址,但这个过程都是由计算机软件自动进行的,对用户来说是看不见的。
    因此,在虚拟的 IP 网络上用 IP 地址进行通信非常方便。

 

 

4.2.5 IP 数据报的格式

 

 

 

 

 

 

 

 

 

IP 数据报首部的固定部分中的各字段

如图👇

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

【例4-1】 IP 数据报分片

 

 

 

 

 

 

 

 

 

 

 

 

IP 协议支持多种协议,IP 数据报可以封装多种协议 PDU。

 

 

常用的一些协议和相应的协议字段值

 

 

 

 

 

数据报每经过一个路由器,路由器都要重新计算一下首部检验和

 

 

 

 

IP 数据报首部的可变部分

   IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富。
  长度可变:从 1 个字节到 40 个字节不等,取决于所选择的项目。
   增加了 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的,增加了每一个路由器处理数据报的开销。
  实际上这些选项很少被使用。

重点在这里👆

4.3 IP 层转发分组的过程

4.3.1 基于终点的转发

l 分组在互联网中是逐跳转发的。
l 基于终点的转发:基于分组首部中的目的地址传送和转发。

 

 

 

 

问:主机 H1 发送出的、目的地址是 128.1.2.132 的分组是如何转发的?

 

 

128.1.2.132 AND 255.255.255.192 = 128.1.2.128 不匹配!

 

128.1.2.132 AND 255.255.255.128 = 128.1.2.128 匹配!

进行分组的直接交付(通过路由器 R1 的接口 1)。

4.3.2 最长前缀匹配

  使用 CIDR 时,在查找转发表时可能会得到不止一个匹配结果
   最长前缀匹配 (longest-prefix matching) 原则:选择前缀最长的一个作为匹配的前缀。
   网络前缀越长,其地址块就越小,因而路由就越具体。
   可以把前缀最长的排在转发表的第 1 行

问:路由器 R1 如何转发目的地址是 128.1.2.196 的分组?

128.1.2.196 AND 255.255.255.192 = 128.1.2.192 不匹配!

128.1.2.196 AND 255.255.255.128 = 128.1.2.128 匹配!

128.1.2.196 AND 255.255.255.192 = 128.1.2.192 匹配!

问题:R1 从哪个接口向外转发分组?

 

 

网络前缀越长,其地址块就越小,路由就越具体(more specific)

可以把前缀最长的排在转发表的第 1 行,以加快查表
 

转发表中的 2 种特殊的路由

  主机路由 (host route)

    又叫做特定主机路由。
    是对特定目的主机的 IP 地址专门指明的一个路由。
    网络前缀就是 a.b.c.d/32
    放在转发表的最前面。

  默认路由 (default route)

    不管分组的最终目的网络在哪里,都由指定的路由器 R 来处理
    用特殊前缀 0.0.0.0/0 表示。
 
默认路由举例

只要目的网络不是 N1 和 N2,就一律选择默认路由,把 IP 数据报先间接交付默认路由器 R1,让 R1 再转发给下一个路由器。

路由器分组转发算法

 

 

4.3.3 使用二叉线索查找转发

  二叉线索 (binary trie):一种特殊结构的树,可以快速在转发表中找到匹配的叶节点。
   从二叉线索的根节点自顶向下的深度最多有 32 层,每一层对应于IP 地址中的一位。
  为简化二叉线索的结构,可以用唯一前缀 (unique prefix) 来构造二叉线索。
  为了提高二叉线索的查找速度,广泛使用了各种压缩技术。

用 5 个唯一前缀构成的二叉线索

 

 

 

 

(补充)4.3*划分子网

 

4.3.1 划分子网

1. 从两级 IP 地址到三级 IP 地址

在 ARPANET 的早期,IP 地址的设计确实不够合理:
(1) IP 地址空间的利用率有时很低。
(2) 给每一个物理网络分配一个网络号会使路由表变得太大因而使网络
性能变坏。
(3) 两级的 IP 地址不够灵活
 

三级 IP 地址

   从 1985 年起在 IP 地址中又增加了一个“子网号字段” ,使两级的P 地址变成为三级的 IP 地址。
  这种做法叫做划分子网 (subnetting) 。
  划分子网已成为互联网的正式标准协议。

划分子网的基本思路

  划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。
  从主机号借用若干个位作为子网号 subnet-id,而主机号 host-id也就相应减少了若干个位。
  凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。
  然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。
  最后就将 IP 数据报直接交付目的主机。

 

 

一个未划分子网的 B 类网络145.13.0.0

划分为三个子网后对外仍是一个网络

 

 

 

划分子网后变成了三级结构

当没有划分子网时,IP 地址是两级结构。
  划分子网后 IP 地址就变成了三级结构。
  划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id。

 

 

划分子网后变成了三级结构的优点

优点
1. 减少了 IP 地址的浪费
2. 使网络的组织更加灵活
3. 更便于维护和管理
  划分子网纯属一个单位内部的事情,对外部网络透明,对外仍然表现为没有划分子网的一个网络。
 
子网掩码
  从一个 IP 数据报的首部并无法判断源主机或目的主机所连接的网络是否进行了子网划分。
  使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分。
规则:
  子网掩码长度 = 32 位
     子网掩码左边部分的一连串 1,对应于网络号和子网号
  子网掩码右边部分的一连串 0,对应于主机号

IP 地址的各字段和子网掩码

 

 

(IP 地址) AND (子网掩码) =网络地址

默认子网掩码

 

 

 

 

子网掩码是一个重要属性子网掩码是一个网络或一个子网的重要属性。
  路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器。
  路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码。
  若一个路由器连接在两个子网上,就拥有两个网络地址和两个子网掩
码。
子网划分方法:
   有固定长度子网和变长子网两种子网划分方法。
   在采用固定长度子网时,所划分的所有子网的子网掩码都是相同的。
  虽然根据已成为互联网标准协议的 RFC 950 文档,子网号不能为全 1或全 0,但随着无分类域间路由选择 CIDR 的广泛使用,现在全 1 和全 0 的子网号也可以使用了,但一定要谨慎使用,确认你的路由器所用的路由选择软件是否支持全 0 或全 1 的子网号这种较新的用法。
l 划分子网增加了灵活性,但却减少了能够连接在网络上的主机总数

B 类地址的子网划分选择(使用固定长度子网

 

 例题:

 

 

 

 

4.3.2 使用子网时分组的转发

  在不划分子网的两级 IP 地址下,从 IP 地址得出网络地址是个很简单的事。
  但在划分子网的情况下,从 IP 地址却不能唯一地得出网络地址来,这是因为网络地址取决于那个网络所采用的子网掩码,但数据报的首部并没有提供子网掩码的信息。
  因此分组转发的算法也必须做相应的改动。
 
1.在划分子网情况下路由器转发分组的算法从收到的分组的首部提取目的 IP 地址 D。
2. 先用各网络的子网掩码和 D 逐位相“与”,看是否和相应的网络地址匹配。若
匹配,则将分组直接交付。否则就是间接交付,执行(3)。
3. 若路由表中有目的地址为 D 的特定主机路由,则将分组传送给指明的下一跳路由器;否则,执行 (4)。
4. 对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器;否则,执行 (5)。
5. 若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器;否则,执行 (6)。
6. 报告转发分组出错
 

 

 

 

主机 H1 首先将本子网的子网掩码 255.255.255.128
与分组的 IP 地址 128.30.33.138 逐比特相与”(AND 操作)

 

 

因此 H1 必须把分组传送到路由器 R1然后逐项查找路由表
 

 

 

 

 

 

 

 

4.4 网际控制报文协议 ICMP

  ICMP (Internet Control Message Protocol) 允许主机或路由器报告差错情况和提供有关异常情况的报告。
   ICMP 是互联网的标准协议
  但 ICMP 不是高层协议,而是IP 层的协议。

ICMP 报文的格式

 

4.4.1 ICMP 报文的种类

2 种:差错报告报文询问报文

几种常用的 ICMP 报文类型

ICMP 差错报告报文的数据字段的内容

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

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

ICMP 询问报文

   (1) 回送请求和回答
    由主机或路由器向一个特定的目的主机发出的询问。
    收到此报文的主机必须给源主机或路由器发送 ICMP 回送回答报文。
    这种询问报文用来测试目的站是否可达,以及了解其有关状态。
  (2) 时间戳请求和回答:
    请某台主机或路由器回答当前的日期和时间。
    时间戳回答报文中有一个 32 位的字段,其中写入的整数代表从1900 年 1 月 1 日起到当前时刻一共有多少秒。
    时间戳请求与回答可用于时钟同步和时间测量。

4.4.2 ICMP 的应用举例

PING (Packet InterNet Groper)

   用来测试两个主机之间的连通性。
   使用了 ICMP 回送请求与回送回答报文。
   是应用层直接使用网络层 ICMP 的例子,没有通过运输层的 TCP或 UDP。
 
例如:
👇

用 PING 测试邮件服务器 mail.sina.com.cn 的连通性

 

Traceroute

  这是UNIX操作系统中名字。在 Windows 操作系统中这个命令是 tracert。
  用来跟踪一个分组从源点到终点的路径。
   它利用 IP 数据报中的 TTL 字段、ICMP 时间超过差错报告报文和
  ICMP 终点不可达差错报告报文实现对从源点到终点的路径的跟踪。
例如
👇

用 tracert 命令获得到新浪网的邮件服务器 mail.sina.com.cn 的路由信息

4.5 IPv6

    IP 是互联网的核心协议。

   IPv4 地址耗尽问题:

      到 2011 年 2 月,IANA IPv4 的 32 位地址已经耗尽。
      各地区互联网地址分配机构也相继宣布地址耗尽。
      我国在 2014 – 2015 年也逐步停止了向新用户和应用分配 IPv4地址。
      根本解决措施:采用具有更大地址空间的新版本的 IP,即 IPv6。

4.5.1 IPv6 的基本首部

  IPv6 仍支持无连接的传送。
  将协议数据单元 PDU 称为分组 (packet) 。
   主要变化(1/2):
1. 更大的地址空间。 将地址从 IPv4 的 32 位 增大到了 128 位。
2. 扩展的地址层次结构。可以划分为更多的层次。
3. 灵活的首部格式。定义了许多可选的扩展首部。
4. 改进的选项。允许数据报包含有选项的控制信息,其选项放在有效载荷中。
5.允许协议继续扩充。更好地适应新的应用。
6.支持即插即用(即自动配置)。不需要使用 DHCP。
7.支持资源的预分配。支持实时视像等要求保证一定的带宽和时延的应用。
8.IPv6 首部改为 8 字节对齐。首部长度必须是 8 字节的整数倍。

4.5.2 IPv6 的地址

  由两大部分组成:
1. 基本首部 (base header)
2. 有效载荷 (payload)。有效载荷也称为净负荷。有效载荷允许有零个或多个扩展首部 (extension header),再后面是数据部分。
如图👇

IPv6 数据报的基本首部

  首部长度:固定的 40 字节,称为基本首部。
     首部字段数:只有 8 个。

IPv6 对首部的主要更改

基本首部每一个字段的意义:

 

通信量类(traffic class)

流标号(flow label)
流标号(flow label)—— 20 位。 “流”是互联网络上从特定源点到特定终点的一系列数据报, “流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。
 
 有效载荷长度(payload length)
有效载荷长度(payload length)—— 16 位。它指明 IPv6 数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内),其最大值是 64 KB。
 
下一个首部(next header)
下一个首部(next header)—— 8 位。相当于 IPv4 的协议字段或可选字段
 
跳数限制(hop limit)—— 8 位。
跳数限制(hop limit)—— 8 位。源站在数据报发出时即设定跳数限制。路由器在转发数据报时将跳数限制字段中的值减 1。当跳数限制的值为零时,就要将此数据报丢弃
 
源地址—— 128 位。
源地址—— 128 位。是数据报的发送站的 IP 地址。
 
目的地址—— 128 位。
目的地址—— 128 位。是数据报的接收站的 IP 地址。
 

IPv6 的六种扩展首部

   逐跳选项
  路由选择
   分片
   鉴别
   封装安全有效载荷
   目的站选项 

三种基本类型(目的地址):

1. 单播 (unicast):传统的点对点通信。
2. 多播 (multicast):一点对多点的通信。
3. 任播 (anycast):IPv6 增加的一种类型。任播的终点是一组计算机,但数据报在交付时只交付其中的一个。通常是按照路由算法得出的距离最近的一个。
 

节点与接口

   IPv6 将实现 IPv6 的主机和路由器均称为节点
   一个节点可能有多个与链路相连的接口。
  IPv6 地址是分配给节点上接口的。
    1. 一个具有多个接口的节点可以有多个单播地址。
    2. 其中的任何一个地址都可以当作到达该节点的目的地址。
 

冒号十六进制记法

   在 IPv6 中,每个地址占 128 位,地址空间大于 3.4  1038 。
   使用冒号十六进制记法(colon hexadecimal notation, 简写为 colonhex)(为何?):16 位的值用十六进制值表示,各值之间用冒号分隔。

两个技术:零压缩点分十进制记法的后缀

零压缩
   零压缩 (zero compression):一串连续的零可以用一对冒号取代。
如:

FF05:0:0:0:0:0:0:B3
可压缩为:

FF05::B3
举例:👇

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

 

点分十进制记法的后缀
  结合使用点分十进制记法的后缀在 IPv4 向 IPv6 的转换阶段特别有用。
  例如:0:0:0:0:0:0:128.10.2.1 -> ::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 (零压缩)

 

IPv6 地址分类

IPv6 单播地址的划分方法

 

 

 

4.5.3 从 IPv4 向 IPv6 过渡

   方法:逐步演进,向后兼容。
  向后兼容:IPv6 系统必须能够接收和转发 IPv4 分组,并且能够为 IPv4 分组选择路由。
  两种过渡策略:

    1. 使用双协议栈

Pv6/IPv4 双协议栈主机(或路由器)

使用双协议栈进行从 IPv4 到 IPv6 的过渡

    2. 使用隧道技术

 

 

4.5.4 ICMPv6

   IPv6 也需要使用 ICMP 来反馈一些差错信息。新的版本称为 ICMPv6。

新旧版本中的网络层的比较

ICMPv6 报文的分类

 

 

 

重点在这里👇

4.6 互联网的路由选择协议

4.6.1 有关路由选择协议的几个基本概念

 

 

 路由选择协议属于网络层控制层面的内容

 

 

1. 理想的路由算法

 

 

 

关于“最佳路由”

• 不存在一种绝对的最佳路由算法。
• 所谓“最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。
 
路由选择非常复杂
• 需要所有节点共同协调工作的。
• 环境不断变化,而这种变化有时无法事先知道。
• 当网络发生拥塞时,很难获得所需的路由选择信息。
 
路由算法分类(动态&自适应 / 静态&非自适应)

分层次的路由选择协议

  互联网:
    采用自适应的(即动态的)、分布式路由选择协议。
    把整个互联网划分为许多较小的自治系统 AS,采用分层次的路由选择协议。
   分为 2 个层次:
  自治系统之间的路由选择 或 域间路由选择 (interdomain routing);
  自治系统内部的路由选择 或 域内路由选择 (intradomain routing);
 

自治系统 AS (Autonomous System)

自治系统 AS :
是在单一技术管理下的许多网络、IP地址以及路由器,而这些路由器使用一种自治系统内部的路由选择协议和共同的度量。每一个 AS 对其他 AS 表现出的是一个单一的和一致的路由选择策略
 

2 大类路由选择协议 (内部 IGP / 外部 EGP)

 

自治系统和内部网关协议、外部网关协议

4.6.2 内部网关协议 RIP

协议 RIP 的工作原理

  路由信息协议 RIP (Routing Information Protocol) 是一种分布式的、基于距离向量的路由选择协议。
   互联网的标准协议。
   最大优点:简单
   要求网络中的每个路由器都要维护从它自己到其他每一个目的网络的距离记录
 

RIP“距离”的定义

  路由器到直接连接的网络的距离 = 1。
  路由器到非直接连接的网络的距离 = 所经过的路由器数 + 1。
  RIP 协议中的“距离”也称为“跳数”(hop count),每经过一个路由器,跳数就加 1。
举例👇

路由 A-B-E 的距离 = 2,路由 A-C-D-E 的距离 = 3。

  好路由 = “距离短”的路由。最佳路由 = “距离最短”的路由

  一条路径最多只能包含 15 个路由器。
   “距离”的最大值为 16 时即相当于不可达
   RIP 不能在两个网络之间同时使用多条路由,只选择距离最短”的路由。

路由 A-B-E 的距离 = 2,路由 A-C-D-E 的距离 = 3。 最佳路由为 A-B-E

 

RIP 协议的三个特点

1. 仅和相邻路由器交换信息。
2. 交换的信息是当前本路由器所知道的全部信息,即自己的路由表
3. 按固定时间间隔交换路由信息,例如,每隔 30 秒。当网络拓扑发生变化时,路由器也及时向相邻路由器通告拓扑变化后的路由信息。
 

路由表的建立

   路由器在刚刚开始工作时,路由表是空的
  然后,得到直接连接的网络的距离(此距离定义为 1)。
  之后,每一个路由器也只和数目非常有限的相邻路由器交换并更新路由信息
  经过若干次更新后,所有的路由器最终都会知道到达本自治系统中任何一个网络的最短距离下一跳路由器的地址
   RIP 协议的收敛 (convergence) 过程较快。 “收敛”就是在自治系统中所有的结点都得到正确的路由选择信息的过程。

路由表主要信息和更新规则

 

距离向量算法

对每个相邻路由器(假设其地址为 X)发送过来的 RIP 报文,路由器:
(1) 修改 RIP 报文中的所有项目(即路由):把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1。
(2) 对修改后的 RIP 报文中的每一个项目,重复以下步骤
若路由表中没有目的网络N,则把该项目添加到路由表中。否则
  若路由表中网络 N 的下一跳路由器为 X,则用收到的项目替换原路由表中的项目。否则
    若收到项目中的距离小于路由表中的距离,则用收到项目更新原路由表中的项目。否则什么也不做。
(3) 若 3 分钟还未收到相邻路由器的更新路由表,则把此相邻路由器记为不可达路由器,即将距离置为 16(表示不可达)。
(4) 返回。
 
  算法基础:Bellman-Ford 算法(或 Ford-Fulkerson 算法)。
  算法要点:
  设 X 是结点 A 到 B 的最短路径上的一个结点。
  若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。
 

例题1:

👇

 

 例题2:

👇

 

RIP2 报文

RIP2 的报文用使用 UDP 传送(使用 UDP 端口 520)。

  组成:首部路由 2 个部分。
   路由部分:由若干个路由信息组成。每个路由信息共 20 个字节。
    地址族标识符(又称为地址类别)字段用来标志所使用的地址协议。
    路由标记填入自治系统的号码。
     后面为具体路由,指出某个网络地址、该网络的子网掩码、下一跳路由器地址以及到此网络的距离。
  一个 RIP 报文最多可包括 25 个路由,因而 RIP 报文的最大长度是4+20 x25=504 字节。如超过,必须再用一个 RIP 报文来传送。
   RIP2 具有简单的鉴别功能。
 

RIP 协议特点(坏事不出门,好事传千里)

  RIP 协议特点:好消息传播得快,坏消息传播得慢。
   问题:坏消息传播得慢(慢收敛)。
导致:
当网络出现故障时,要经过比较长的时间才能将此信息(坏消息)传送到所有的路由器。
例如:
👇

 

 

 

 

 

 

 

 

 

这就是好消息传播得快,而坏消息传播得慢。这是 RIP 的一个主要缺点。

 

RIP 协议的优缺点

   优点:
1. 实现简单,开销较小。
   缺点:
1. 网络规模有限。最大距离为 15(16 表示不可达)。
2. 交换的路由信息为完整路由表,开销较大
3. 坏消息传播得慢收敛时间过长

4.6.3 内部网关协议 OSPF

 

 

 

l 开放最短路径优先 OSPF (Open Shortest Path First)是为克服RIP 的缺点在 1989 年开发出来的。
l 原理很简单,但实现很复杂。
l 使用了 Dijkstra 提出的最短路径算法 SPF
l 采用分布式的链路状态协议 (link state protocol)。
l 现在使用 OSPFv2。

三个主要特点

  采用洪泛法 (flooding),向本自治系统中所有路由器发送信息。
  发送的信息是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。
     链路状态(网络拓扑结构):说明本路由器都和哪些路由器相邻,以及该链路的度量 (metric)。
  当链路状态发生变化或每隔一段时间(如30分钟),路由器才用洪
泛法向所有路由器发送此信息
 

链路状态数据库 (link-state database)

  每个路由器最终都能建立。
  全网的拓扑结构图。
  在全网范围内是一致的(这称为链路状态数据库的同步)。
   每个路由器使用链路状态数据库中的数据构造自己的路由表(例如,使用Dijkstra的最短路径路由算法)。
链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。

重要优点:OSPF 更新过程收敛速度快。

 

 

OSPF 将自治系统划分为两种不同的区域 (area)

主干区域 (backbone area) 标识符= 0.0.0.0,作用=用来连通其他下层区域。

OSPF 中的路由器:区域边界路由器 ABR (area border router)
OSPF 中的路由器:主干路由器 BR (backbone router)
OSPF 中的路由器:自治系统边界路由器 ASBR (AS border router)

 

划分区域优点和缺点

分层次划分区域的好处:使每一个区域内部交换路由信息的通信量大大减小,因而使 OSPF 协
议能够用于规模很大的自治系统中。
  优点:
    减少了整个网络上的通信量
    减少了需要维护的状态数量
  缺点:
    交换信息的种类增多了。
    使 OSPF 协议更加复杂
 

划分区域的其他特点

   对于不同类型的业务可计算出不同的路由。
   可实现多路径间的负载均衡(load balancing)
  所有在 OSPF 路由器之间交换的分组都具有鉴别的功能。
   支持可变长度的子网划分无分类编址 CIDR
  32 位的序号,序号越大状态就越新。全部序号空间在 600 年内不会产生重复号。

OSPF 的五种分组类型

1. 问候 (Hello) 分组。
2. 数据库描述 (Database Description) 分组。
3. 链路状态请求 (Link State Request) 分组。
4. 链路状态更新 (Link State Update) 分组。
5. 链路状态确认 (Link State Acknowledgment)分组。
 

OSPF 分组用 IP 数据报传送

 

 

OSPF 工作过程

   1,确定邻站可达。
    相邻路由器每隔 10 秒钟要交换一次问候分组。
    若有 40 秒钟没有收到某个相邻路由器发来的问候分组,则可认为该相邻路由器是不可达的。
 
  2,同步链路状态数据库。
    同步:指不同路由器的链路状态数据库的内容是一样的。
    两个同步的路由器叫做完全邻接的 (fully adjacent) 路由器。
不是完全邻接的路由器:它们虽然在物理上是相邻的,但其链路状态数据库并没有达到一致。
 
   3,更新链路状态。
    只要链路状态发生变化,路由器就使用链路状态更新分组,采用可靠的洪泛法向全网更新链路状态。
    为确保链路状态数据库与全网的状态保持一致,OSPF 还规定:每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态
 
OSPF 链路状态只涉及相邻路由器与整个互联网的规模并无直接关系
因此当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多。
OSPF 没有“坏消息传播得慢”的问题,收敛数度快
 

 

 

 

 

指定的路由器 DR
  多点接入的局域网采用了指定的路由器 DR (designated router)的方法,使广播的信息量大大减少。
  指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息。

4.6.4 外部网关协议 BGP

 

 

 

  BGP 是不同自治系统的路由器之间交换路由信息的协议。
   BGP 较新版本是 2006 年 1 月发表的 BGP-4(BGP 第 4 个版本),即 RFC 4271 ~ 4278。
  可以将 BGP-4 简写为 BGP。

协议 BGP 的主要特点

   用于自治系统 AS 之间的路由选择。
  只能是力求选择出一条能够到达目的网络且比较好的路由(不能兜圈子),而并非要计算出一条最佳路由
  1. 互联网的规模太大,使得自治系统AS之间路由选择非常困难。
  2. 自治系统AS之间的路由选择必须考虑有关策略。
   采用了路径向量 (path vector) 路由选择协议
 

BGP 发言者 (BGP speaker)

 

 

(外)eBGP 连接和(内) iBGP 连接

 

 

在 AS 之间, BGP 发言者在半永久性 TCP 连接(端口号为179)上建立 BGP 会话(session)。这种连接又称为 eBGP 连接。
在 AS 内部,任何相互通信的两个路由器之间必须有一个逻辑连接(也使用 TCP 连接)。AS 内部所有的路由器之间的通信是全连通的。这种连接常称为 iBGP 连接。
eBGP (external BGP) 连接:运行 eBGP 协议,在不同 AS 之间交换路由信息。
iBGP (internal BGP) 连接:运行 iBGP 协议, 在 AS 内部的路由器之间交换 BGP 路由信息。
 

IGP、iBGP 和 eBGP 的关系

  在 AS 内部运行:
    内部网关协议 IGP(可以是协议 OSPF 或 RIP)。
    协议 iBGP
  在 AS 之间运行:
    协议 eBGP
 

eBGP 和 iBGP 的异同

  同一个协议 BGP(使用的报文类型、使用的属性、使用的状态机等都完全一样)。
  但它们在通报前缀时采用的规则不同:(由外到内可以,由内到位也可以,内到内不行
    在 eBGP 连接的对等端得知的前缀信息,可以通报给一个 iBGP连接的对等端。反过来也是可以的。
      但从 iBGP 连接的对等端得知的前缀信息,则不能够通报给另一个 iBGP 连接的对等端
举例:

  R3 从 eBGP 连接的对等端 R4 得到的前缀信息可以通报给 iBGP 连接的对等端 R1 或 R2。
  R3 从 iBGP 连接的对等端 R1 和 R2 得到的前缀信息可以通报给 eBGP 连接的对等端 R4。
  但 R3 从 iBGP 连接的对等端 R1 得到的前缀信息不允许再通报给另一个 iBGP 连接的对等端 R2。

BGP 路由信息

BGP 路由 = [ 前缀, BGP属性 ] = [ 前缀, AS-PATH, NEXT-HOP ]
   前缀:指明到哪一个子网(用 CIDR 记法表示)。
   BGP 属性:最重要的两个属性是
    自治系统路径 AS-PATH
     下一跳 NEXT-HOP。

AS2 可经 IP3a 到前缀 X 的路由 = [前缀, AS-PATH, NEXT-HOP] = [X, AS3, IP3a]

路由 1:AS1 可经 IP2a 到前缀 X 的路由 = [前缀, AS-PATH, NEXT-HOP] = [X, AS2 AS3 , IP2a]

路由2:AS1 可经 IP3c 到前缀 X 的路由 = [前缀, AS-PATH, NEXT-HOP] = [X, AS3, IP3c]

路由器 R1a 的转发表中,沿 BGP 路由 1 到达前缀 X 的项目是:
(匹配前缀X,下一跳路由器 R1b)或(匹配前缀X,转发接口 0)。
 

三种不同的自治系统 AS

末梢 AS:不会把来自其他 AS 的分组再转发到另一个 AS。必须向所连接的 AS 付费。

多归属 AS (multihomed AS):同时连接到两个或两个以上的 AS。增加连接的可靠性。
穿越 AS:为其他 AS 有偿转发分组。
对等 AS:经过事先协商的两个 AS,彼此之间的发送或接收分组都不收费。
 

问:BGP 路由如何避免兜圈子?

请记住:在属性 AS-PATH 中,不允许出现相同的 AS 号。

 

BGP 的路由选择

 

 

本地偏好 (local preference) 值最高

 

 

AS 跳数最小

AS1 选择通过路由器 R1c 到达 X 的 BGP 路由。

但事实上,分组在 AS4 中反而要经过更多次数的转发。
说明协议 BGP 不存在真正的最佳路由选择。

热土豆路由选择算法

R1a 选择 R1c 作为离开 AS1 的最佳选择,其 BGP 转发表中对应的

项目应当是:(匹配前缀 X,下一跳路由器 R1c)。
R1b 选择 R1d 作为离开 AS1 的最佳选择,其 BGP 转发表中对应的
项目应当是:(匹配前缀 X,下一跳路由器 R1d)。
 

BGP-4 的四种报文

 

 

BGP 报文具有通用首部

 

 

 

4.6.5 路由器的构成

  路由器工作在网络层,用于互连网络。
  是互联网中的关键设备。
  路由器的主要工作:转发分组
把从某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。

路由器的结构

 

 

“转发”和“路由选择”的区别

 

 

 

输入端口对线路上收到的分组的处理

 

 

输出端口将交换结构传送来的分组发送到线路

 

 

 

交换结构

常用交换方法有三种:通过存储器、通过总线、通过纵横交换结构。

 

 

通过存储器

 

 

  (1) 当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。
  (2) 路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口
缓存中。
  (3) 若存储器的带宽(读或写)为每秒 M 个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于 M/2

通过总线

 

 

  (1) 数据报从输入端口通过共享的总线直接传送到合适的输出端口,而不需要路由选择处
理机的干预。
  (2) 当分组到达输入端口时若发现总线忙,则被阻塞而不能通过交换结构,并在输入端口
排队等待
  (3)因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率
的限制。

通过纵横交换结构 (crossbar switch fabric)

 

 

 

  常被称为互连网络 (interconnection network)。
  (1) 它有 2N 条总线,控制交叉节点可以使 N 个输入端口和 N 个输出端口相连接。
  (2) 当输入端口收到一个分组时,就将它发送到水平总线上。
  (3) 若通向输出端口的垂直总线空闲,则将垂直总线与水平总线接通,把该分组转发到这个输出端口。
若输出端口已被占用,分组在输入端口排队等待
  特点:是一种无阻塞的交换结构,分组可以转发到任何一个输出端口,只要这个输出端口没有被别的
分组占用。

重点在这里👆

4.7 IP 多播

4.7.1 IP 多播的基本概念

  1988 年,Steve Deering 首次提出 IP 多播的概念。
  多播 (multicast):以前曾译为组播。
   目的:更好地支持一对多通信。
  一对多通信:一个源点发送到许多个终点。

多播可大大节约网络资源

单播👇

采用单播方式,
向 90 台主机传送同样的视频节目需要发送 90 个单播

 

 多播👇

采用多播方式,只需发送一次到多播组。路由器复制分组。局域网具有硬件多播功能,不需要复制分组。

当多播组的主机数很大时(如成千上万个),采用多播方式就可明显地减轻网络中各种资源的消耗。

 

IP 多播

  在互联网上进行多播就叫做 IP 多播。
  互联网范围的多播要靠路由器来实现。
  能够运行多播协议的路由器称为多播路由器 (multicast router)。
  多播路由器也可以转发普通的单播 IP 数据报。
   从 1992 年起,在互联网上开始试验虚拟的多播主干网 MBONE(Multicast Backbone On the InterNEt)。

多播 IP 地址

  在 IP 多播数据报的目的地址需要写入多播组的标识符。
  多播组的标识符就是 IP 地址中的 D 类地址(多播地址)。
    地址范围:224.0.0.0 ~ 239.255.255.255
  每一个 D 类地址标志一个多播组。
多播地址只能用于目的地址,不能用于源地址。

多播数据报

多播数据报和一般的 IP 数据报的区别:
    目的地址:使用 D 类 IP 地址。
    协议字段 = 2,表明使用网际组管理协议 IGMP
  尽最大努力交付,不保证一定能够交付多播组内的所有成员。
   对多播数据报不产生 ICMP 差错报文。在 PING 命令后面键入多播地址,将永远不会收到响应

4.7.2 在局域网上进行硬件多播

互联网数字分配机构(IANA )拥有的以太网地址块的高 24 位为00-00-5E。
  TCP/IP 协议使用的以太网地址块的范围是
    从 00-00-5E-00-00-00
    到 00-00-5E-FF-FF-FF
   IANA 只拿出 01-00-5E-00-00-00 到 01-00-5E-7F-FF-FF (223个地址)作为以太网多播地址。或者说,在 48 位的多播地址中,前25 位都固定不变,只有后 23 位可用作多播
 

D 类 IP 地址与以太网多播地址的映射关系

收到多播数据报的主机,还要在 IP 层对 IP 地址进行过滤,把不是本主机要接收的数据报丢弃。

4.7.3 网际组管理协议 IGMP 和多播路由选择协议

IP 多播需要两种协议

  网际组管理协议 IGMP (Internet Group Management Protocol)
     使多播路由器知道多播组成员信息(有无成员)。
  多播路由选择协议
    使多播路由器协同工作,把多播数据报用最小代价传送给多播组的所有成员。
 

IGMP 使多播路由器知道多播组成员信息

IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机参加或退出了某个多播组。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上。

多播路由选择协议更为复杂

路由器 R 不应当向网络 N3 转发多播组 M1 的分组,因为网络 N3 上没有多播组 M1 的成员。

  多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化),因为每一台主机可以随时加入或离开一个多播组。
   多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址,还要考虑这个多播数据报从什么地方来和要到什么地方去。
  多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员的接入网络。
 

网际组管理协议 IGMP

  1989 年公布的 RFC 1112(IGMPv1)已成为了互联网的标准协议。
  1997 年公布的 RFC 2236(IGMPv2,建议标准)对 IGMPv1 进
行了更新。
  2002 年 10 月公布了 RFC 3376(IGMPv3,建议标准)。

IGMP 使用 IP 数据报传递其报文

  在 IGMP 报文加上 IP 首部构成 IP 数据报。
   但 IGMP 也向 IP 提供服务。
  因此,不把 IGMP 看成是一个单独的协议,而是整个网际协议 IP的一个组成部分。
 

IGMP 工作可分为两个阶段

  第一阶段:加入多播组。

1. 当某个主机加入多播组时,该主机向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员。

2. 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器。

  第二阶段:探询组成员变化情况。

1.本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。

2. 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的。

1. 本地多播路由器周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。

2. 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。(不活跃)

IGMP 采用的一些具体措施,以避免增加大量开销

  1.所有通信都使用 IP 多播。只要有可能,都用硬件多播来传送。
  2.对所有的组只发送一个请求信息的询问报文。默认询问速率是每125 秒发送一次。
  3.当同一个网络上连接有多个多播路由器时,能迅速和有效地选择其中的一个来探询主机的成员关系
  4.分散响应。在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)。当收到询问时,主机在 0 到 N之间随机选择发送响应所需经过的时延。若一台主机同时参加了几
个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。
  5.采用抑制机制。同一个组内的每一个主机都要监听响应,只要有本
组的其他主机先发送了响应,自己就不再发送响应了。

多播路由选择

M 个源,N 个多播组,需要 MⅹN 棵以源为根的多播转发树

转发多播数据报时使用三种方法:

(1) 洪泛与剪除
  适合于较小的多播组,所有组成员接入的局域网也是相邻接的。
  开始时,路由器转发多播数据报使用洪泛的方法(这就是广播)。
  为避免兜圈子,采用反向路径广播 RPB (Reverse PathBroadcasting) 的策略。
RPB 的要点:检查,转发

 

RPB 的要点:形成以源为根节点的多播转发树

 

 

 

 

 

RPB 的要点:剪枝与嫁接
(2) 隧道技术 (tunneling)

隧道技术在多播中的应用

(3) 基于核心的发现技术
  对于多播组的大小在较大范围内变化时都适合。
  对每一个多播组 G 指定一个核心 (core) 路由器,并给出它的 IP 单播地址
  核心路由器按照前面讲过的 2 种方法创建出对应于多播组 G 的转发树(核心路由器为根节点)。
     1.为一个多播组构建一棵转发树,而不是为每个(源,组)组合构建一棵转发树。
     2.构建转发树开销较小,扩展性较好
  如果有一个路由器 R1 向核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。
  当数据报到达参加了多播组 G 的路由器 R2 时,R2 就处理这个数据报。
    如果 R1 发出的是一个多播数据报,其目的地址是 G 的组地址,R2 就向 G 的成员转发这个多播数据报。
    如果 R1 发出的数据报是一个请求加入多播组 G 的数据报,R2 就把这个信息加到它的路由中,并用隧道技术向 R1 转发每一个多播数据报的副本。
 

几种多播路由选择协议

  距离向量多播路由选择协议 DVMRP (Distance Vector MulticastRouting Protocol)。互联网上使用的第一个多播路由选择协议。
  基于核心的转发树 CBT (Core Based Tree)
  开放最短通路优先的多播扩展 MOSPF (Multicast Extensions toOSPF)
  协议无关多播-稀疏方式 PIM-SM (Protocol Independent Multicast-Sparse Mode) 。唯一成为互联网标准的一个协议。
  协议无关多播-密集方式 PIM-DM (Protocol Independent Multicast-Dense Mode)

4.8 虚拟专用网 VPN 和网络地址转换 NAT

4.8.1 虚拟专用网 VPN

  由于 IP 地址的紧缺,一个机构能够申请到的IP地址数往往远小于本机构所拥有的主机数。
  考虑到互联网并不是很安全,一个机构内也并不需要把所有的主机接入到外部的互联网。
  如果一个机构内部的计算机通信也是采用 TCP/IP 协议,那么这些仅在机构内部使用的计算机就可以由本机构自行分配其 IP 地址。

本地地址与全球地址

  本地地址:仅在机构内部使用的 IP 地址,可以由本机构自行分配,而不需要向互联网的管理机构申请。
  全球地址:全球唯一的 IP 地址,必须向互联网的管理机构申请。
  问题:如何区分本地地址和全球地址?
  解决:RFC 1918 指明了一些专用地址 (private address)
  专用地址只能用作本地地址,而不能用作全球地址。
  互联网中的所有路由器对目的地址是专用地址的数据报一律不进行转发。

RFC 1918 指明的专用 IP 地址

 

 

专用网

  采用专用 IP 地址的互连网络称为专用互联网或本地互联网,或更简单些,就叫做专用网。
  专用 IP 地址也叫做可重用地址 (reusable address)
 

虚拟专用网 VPN

  利用公用互联网作为本机构各专用网之间的通信载体,这样的专用网又称为虚拟专用网 VPN (Virtual Private Network)。
  专用网:指这种网络是为本机构的主机用于机构内部的通信,而不是用于和网络外非本机构的主机通信。
  虚拟:表示实际上没有使用通信专线,只是在效果上和真正的专用网一样。
 

虚拟专用网 VPN 的构建

  如果专用网不同网点之间的通信必须经过公用的互联网,但又有保密的要求,那么所有通过互联网传送的数据都必须加密
   必须为每一个场所购买专门的硬件和软件,并进行配置,使每一个场所的 VPN 系统都知道其他场所的地址。

用隧道技术实现虚拟专用网

 

 

用隧道技术实现虚拟专用网

 

VPN 类型

  内联网 (intranet):同一个机构的内部网络所构成的 VPN。
  外联网 (extranet):一个机构和某些外部机构共同建立的 。
  远程接入 VPN (remote access VPN):允许外部流动员工通过接入 VPN 建立 VPN 隧道访问公司内部网络,好像就是使用公司内部的本地网络访问一样。

4.8.2 网络地址转换 NAT

  问题:在专用网上使用专用地址的主机如何与互联网上的主机通信(并不需要加密)?
  解决:
1. 再申请一些全球 IP 地址。但这在很多情况下是不容易做到的。
2. 采用网络地址转换 NAT。这是目前使用得最多的方法。
 

网络地址转换 NAT (Network Address Translation)

  1994 年提出。
  需要在专用网连接到互联网的路由器上安装 NAT 软件。
  装有 NAT 软件的路由器叫做 NAT路由器,它至少有一个有效的外部全球 IP 地址。
   所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。

网络地址转换的过程

 

 

 

 

网络地址转换 NAT