首页 > 技术文章 > 计算机网络:网络层

mots 2021-03-11 11:41 原文

网际协议 IP

网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一

与IP地址配套使用的协议还有三个协议: 地址解析协议ARP 网络控制报文协议ICMP 网际组管理协议 IGMP

网络通信要用到的设备:

物理层中继系统:转发器 (repeater)。
数据链路层中继系统:网桥 或 桥接器 (bridge)。
网络层中继系统:路由器 (router)。
网桥和路由器的混合物:桥路器 (brouter)。
网络层以上的中继系统:网关 (gateway)。

  • 当中继系统是转发器或网桥时,一般并不称之为网络互连,因为这仅仅是把一个网络扩大了,而这仍然是一个网络
  • 网关由于比较复杂,目前使用得较少
  • 网络互连都是指用路由器进行网络互连和路由选择
  • 由于历史的原因,许多有关 TCP/IP 的文献将网络层使用的路由器称为网关

虚拟互联网络

所谓虚拟互连网络也就是逻辑互连网络,它的意思就是互连起来的各种物理网络的异构性本来是客观存在的,但是我们利用 IP 协议就可以使这些性能各异的网络从用户看起来好像是一个统一的网络

实际上IP是标志的是一个主机或者路由器和一条链路的接口

当一个主机同时连接到两个网络上时,该主机就必须同时具有两个相应的 IP 地址,其网络号 net-id 必须是不同的。这种主机称为多归属主机

使用 IP 协议的虚拟互连网络可简称为 IP 网

IP地址的表示方法

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

IP地址的编址方法有三种:分类IP地址,划分子网,构成超网

分类IP地址

  • 将IP地址划分为若干个固定类
  • 每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,而另一个字段则是主机号 host-id,它标志该主机(或路由器)。
  • 主机号在它前面的网络号所指明的网络范围内必须是唯一的
  • 由此可见一个IP地址在整个互联网范围内是唯一的

结构如下

IP地址可以分为ABCDE 五个类别,但都为32位

A类地址前8位为网络号,后24位为主机号
B类地址前16位为网络号,后16位为主机号
C类地址前24位为网络号,后8位为主机号
D类地址为多播地址,E类地址作保留

点分十进制计法

每八位为一组。
10000000 00001011 00000011 00011111 就是 128.11.3.31

几类特殊的IP地址:

  • 网络号为0,主机号为0: 在本网络上的本主机
  • 网络号为0,主机号为任意Host-ID: 在本网络上的某台主机
  • 网络号全为1,主机号全为1: 对所有网络所有主机进行广播,但是路由器不转发所以就是在自己的网络上进行广播
  • 网络号为127,主机号为非全0或者全1的任何数字:用作本地软件环回测试(根本就不会通过网卡发送出去!!!)

划分子网

从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。这种做法叫做划分子网 **
划分子网纯属一个单位内部的事情。单位
对外仍然表现为没有划分子网的网络**.

凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器,然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。最后就将 IP 数据报直接交付目的主机

所以说:子网不是给外面看的,只是给自己网络的包括路由器在内的所有主机看的

划分子网只是把 IP 地址的主机号 host-id 这部分进行再划分,而不改变 IP 地址原来的网络号 net-id

子网掩码

使用子网掩码 (subnet mask) 可以找出 IP 地址中的子网部分,子网掩码长度32位

路由器在和相邻路由器交换路由信息时,必须把自己所在网络(或子网)的子网掩码告诉相邻路由器

路由器的路由表中的每一个项目,除了要给出目的网络地址外,还必须同时给出该网络的子网掩码

**在引入了子网掩码之后,必须要用子网掩码和IP地址才能确定的表示一个网络地址

子网的划分方法:固定子网长度划分,变长子网划分

无分类编址CIDR

CIDR使用各种长度的“网络前缀”(network-prefix)来代替分类地址中的网络号和子网号,IP 地址从三级编址(使用子网掩码)又回到了两级编址

CIDR 使用“斜线记法”(slash notation),它又称为 CIDR 记法,即在 IP 地址面加上一个斜线“/”,然后写上网络前缀所占的位数(这个数值对应于三级编址中子网掩码中 1 的个数)。例如: 196.78.187.0/24

一个 CIDR 地址块可以表示很多地址,这种地址的聚合常称为路由聚合,它使得路由表中的一个项目可以表示很多个(例如上千个)原来传统分类地址的路由。
路由聚合有利于减少路由器之间的路由选择信息的交换,从而提高了整个互联网的性能。

CIDR 虽然不使用子网了,但仍然使用“掩码”这一名词(但不叫子网掩码)对于 /20 地址块,它的掩码是 20 个连续的 1。 斜线记法中的数字就是掩码中1的个数

地址解析协议:ARP协议(协议发送的报文没有ip报文的头部)

通信时使用了两个地址:IP 地址,MAC地址(硬件地址)

ARP协议的作用:从网络层的IP地址解析出数据在数据链路层的硬件地址

因为不管上层使用到什么地址,最终还是要通过MAC地址来实现信息传输

每一个主机都设有一个 ARP 高速缓存(里面有所在的局域网上的各主机和路由器的 IP 地址到硬件地址的映射表)

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

  • 如有,就可查出其对应的硬件地址,再将此硬件地址写入 MAC 帧,然后通过局域网将该 MAC 帧发往此硬件地址
  • 如没有, ARP 进程在本局域网上广播发送一个ARP 请求分组。收到ARP 响应分组后,将得到的 IP 地址到硬件地址的映射写入 ARP 高速缓存。然后继续发送

ARP高速缓存的作用:存放最近获得的 IP 地址到 MAC 地址的绑定,以减少 ARP 广播的数量。为了减少网络上的通信量,主机 A 在发送其 ARP 请求分组时,就将自己的 IP 地址到硬件地址的映射写入 ARP 请求分组。当主机 B 收到 A 的 ARP 请求分组时,就将主机 A 的这一地址映射写入主机 B 自己的 ARP 高速缓存中。方便了主机 B 以后向 A 发送数据报。

ARP请求分组:包含发送方硬件地址 / 发送方 IP 地址 / 目标方硬件地址(未知时填 0) / 目标方 IP 地址的一组信息。
ARP响应分组:包含发送方硬件地址 / 发送方 IP地址 / 目标方硬件地址 / 目标方 IP 地址的一组信息。

应当注意的问题

ARP请求和响应只在本地广播,路由器不会转发ARP请求。ARP 分组封装在物理网络的帧中传输

ARP解决同一个局域网上的主机或路由器的 IP 地址和硬件地址的映射问题。如果所要找的主机和源主机不在同一个局域网上,那么就要通过 ARP 找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做。

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

IP数据报

  • 一个 IP 数据报由首部和数据两部分组成
  • 首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。
  • 在首部的固定部分的后面是一些可选字段,其长度是可变的

  • 版本:占4位,指IP协议的版本号:目前的 IP 协议版本号为 4 (即 IPv4)
  • 首部长度:占4位(可表示0到15)采取一个单位表示4个字节的方法,就可以让IP数据报首部长度的最大值为60字节(实际上可以决定的只有后面的可选字段)
  • 区分服务:只有在区分服务时,这个字段才起作用,在一般情况下都不使用这个字段
  • 总长度:占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。一般为1500字节
  • 标识:占16位,是一个计数器,用来产生IP数据报的标识(数据报的不同分片标识一样)
  • 标志:占 3 位,目前只有前两位有意义。MF(more fragment)= 1时候,表示后面还有分片,DF(Do not fragment)= 1时,表示不要分片
  • 片偏移:占13 位,指出:较长的分组在分片后,某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位(这个分片,是对上层传递下来的数据进行的操作,然后再给每个片段加一个IP的片头)
    TIP:片偏移是以字节为单位。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值(比如分片之后总长度要改正)
  • 生存时间TTL:占8位,表示跳数限制,就是通过路由器被转发的数值,每过一个路由器减少1,到0丢弃。不同的操作系统给定的TTL有所不同(可以通过TTL来判断操作系统)
  • 协议:占8位,指出该数据报携带的数据使用什么协议,便于接收方的IP层把数据部分上交给对应的模块(比如网络层的ICMP,IGMP,OSPF和传输层的TCP UDP)
  • 首部检验和:占16位 只检验数据报的首部,不检验数据部分,具体方法把IP数据报的头部划分成一个一个的,把检验和字段归零,用反码算术运算把所有的字相加后的结果的反码写入首部检验和,接收方再次计算(不把首部检验和归零)如果结果为0,就说明没有问题,不然就丢弃
  • 原地址和目的地址都占用了四个字节
  • IP 首部的可变部分就是一个选项字段,用来支持排错、测量以及安全等措施,内容很丰富,选项字段的长度可变,从 1 个字节到 40 个字节不等,取决于所选择的项目,增加首部的可变部分是为了增加 IP 数据报的功能,但这同时也使得 IP 数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销,但实际上这些选项很少被使用

IP转发分组

分类IP转发分组

路由表:一般是按主机所在的网络地址来制作路由表,就可以大大简化路游表,(路游表大概是下图的样子)

根据目的网络地址就能确定下一跳路由器,这样的话,IP 数据报最终一定可以找到目的主机所在目的网络上的路由器(可能要通过多次的间接交付)但是只有到达最后一个路由器时,才试图向目的主机进行直接交付

虽然互联网所有的分组转发都是基于目的主机所在的网络,但在大多数情况下都允许有这样的特例,即为特定的目的主机指明一个路由,这样的话能更方便地控制网络和测试网络,同时也可在需要考虑某种安全问题时采用这种特定主机路由

路由器还可采用默认路由以减少路由表所占用的空间和搜索路由表所用的时间。这种转发方式在一个网络只有很少的对外连接时是很有用的,如果一个主机连接在一个小网络上,而这个网络只用一个路由器和互联网连接,那么在这种情况下使用默认路由是非常合适的,比如自己家。

当路由器收到待转发的数据报,不是将下一跳路由器的 IP 地址填入 IP 数据报,而是送交下层的网络接口软件,网络接口软件使用 ARP 负责将下一跳路由器的 IP 地址转换成硬件地址,并将此硬件地址放在链路层的 MAC 帧的首部,然后根据这个硬件地址找到下一跳路由器。

**路由表没有给分组指明到某个网络的完整路径,路由表只是指出,到某个网络应当先到某个路由器(即下一跳路由器)在到达下一跳路由器后,再继续查找其路由表,知道再下一步应当到哪一个路由器,这样一步一步地查找下去,直到最后到达目的网络

子网划分转发分组

路由器的路由表中,包含了目的网络地址和该网络的子网掩码

所以此时,路由器接收到转发分组的请求的时候会
1.从收到的分组的首部提取目的 IP 地址
2.先用各网络的子网掩码和 D 逐位相“与”,看是否和网络下相应的子网络地址匹配。若匹配,则将分组直接交付。否则就采取间接交付
3.若路由表中有目的地址为 D 的特定主机路由,则直接转发给他
4.对路由表中的每一行,将子网掩码和 D 逐位相“与”。若结果与该行的目的网络地址匹配,则将分组传送给该行指明的下一跳路由器
5.若路由表中有一个默认路由,则将分组传送给路由表中所指明的默认路由器
6.以上还没有找到,就报告分组错误

网际控制报文协议 ICMP

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

ICMP 报文是装在 IP 数据报中,作为其中的数据部分

ICP报文有两种即 ICMP 差错报告报文和 ICMP 询问报文

ICMP报文的格式

ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关

ICMP差错报告共有四种:终点不可达 时间超过 参数问题 改变路由

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

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

ICMP 询问报文有两种:
回送请求和回答报文:主机或者路由器向一个特定的目的主机发出询问,受到此报文的主机必须给源主机或者路由器发送回答报文
时间戳请求和回答报文:请某台主机或者路由器回答当前的日期或者时间,可以用来时钟同步或者时间测量

应用举例

PING

PING用来测试两个主机之间的连通性
PING 使用了 ICMP 回送请求与回送回答报文。并没有通过TCP/UDP层面

traceroute

用来跟踪一个分组从源点到终点的路径

从源主机向目的主机发送一连串的IP数据,第一个数据报的TTL设为1,然后经过的第一个路由器向源主机发送一个ICMP时间超过的报文。然后发送第二个TTL为2的报文......最后,数据到达主机,主机不转发数据报,也不会把TTL减少1,但因为IP数据报封装的数据是无法传输给运输层德UDP数据报因此会返回终点不可到达

这样源主机达到了自己的目的,他知道了途径路由器的IP地址,以及其中每一个路由器的往返时间

互联网的路由选择协议

静态路由选择策略:即非自适应路由选择,其特点是简单和开销较小,但不能及时适应网络状态的变化
动态路由选择策略:即自适应路由选择,其特点是能较好地适应网络状态的变化,但实现起来较为复杂,开销也比较大

自治系统 AS 的定义:在单一的技术管理下的一组路由器,而这些路由器使用一种 AS 内部的路由选择协议和共同的度量以确定分组在该 AS 内的路由,同时还使用一种 AS 之间的路由选择协议用以确定分组在 AS之间的路由。(简单来说就是尽管AS 使用了多种内部路由选择协议和度量,重要的是一个 AS 对其他 AS 表现出的是一个单一的和一致的外部路由选择策略

内部网关协议IGP:在一个自治系统内部使用的路由选择协议

目前使用的多的协议RIP协议和OSPF协议

外部网关协议EGP:若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议 EGP

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

差不多就是一个自治域内部通信用内部网关协议IGP,自治域之间通信用外部网关协议EGP

内部网关协议RIP

分布式的基于距离向量的路由选择协议

距离的定义

从一个路由器到直接连接的网络的距离定义为 1
从一个路由器到非直接连接的网络的距离定义为所经过的路由器数加 1

实际上就是经过的路由器的个数

RIP的策略

RIP 认为一个好的路由就是它通过的路由器的数目少,即 距离短
RIP 允许一条路径最多只能包含 15 个路由器
距离的最大值为 16 时即相当于不可达。可见 RIP 只适用于小型互联网
RIP 不能在两个网络之间同时使用多条路由,就算还存在另一条高速(低时延)但路由器较多的路由,他也只选择一个。

RIP协议路由的策略

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

路由表的建立

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

距离向量算法

路由器收到相邻路由器(其地址为 X)的一个 RIP 报文
1.先修改此 RIP 报文中的所有项目:把“下一跳”字段中的地址都改为 X,并把所有的“距离”字段的值加 1
2.对修改后的 RIP 报文中的每一个项目,重复以下步骤

  • 如果目的网络不再路由表中,则把该项目添加到路由表中
  • 如果在再路由表中,若下一跳字段给出的路由器地址是同样的,则把收到的项目替换原路由表中的项目。
  • 如果下一跳给出的地址不一样,而且收到项目中的距离小于路由表的距离则进行更新,否则,什麼都不作
  • 如果三分钟之内还没能收到相邻路由器的更新路由表,则把此相邻路由表计为不可达路由器将其距离设置为16

距离向量算法的基础就是 Bellman-Ford 算法(或 Ford-Fulkerson 算法)思想如下:
设X是结点 A 到 B 的最短路径上的一个结点。
若把路径 A→B 拆成两段路径 A→X 和 X→B,则每一段路径 A→X 和 X→B 也都分别是结点 A 到 X 和结点 X 到 B 的最短路径。

RIP 协议让互联网中的所有路由器都和自己的相邻路由器不断交换路由信息,并不断更新其路由表,使得从每一个路由器到每一个目的网络的路由都是最短的(即跳数最少)

虽然所有的路由器最终都拥有了整个自治系统的全局路由信息,但由于每一个路由器的位置不同,它们的路由表当然也应当是不同的

RIP2协议的报文格式

使用运输层的UDP来传输,加入到网络层的时候要加入UDP的头部

首部:命令(1表示路由请求信息,2表示路由请求信息的回复或者未被请求而发出的路由更新报文),版本,对齐(必为0)

数据部分:

地址族标识符:如采用IP地址就把这个地方设置为2(原来考虑到不一定用TCP/IP的情况)
每个路由器的信息占有20字节,最多可以重复出现25次
路由标记填入自治系统的号码,这是考虑使 RIP 有可能收到本自治系统以外的路由选择信息

RIP 存在的问题:
当网络出现故障时,要经过比较长的时间 (例如数分钟) 才能将此信息传送到所有的路由器。
RIP 限制了网络的规模,它能使用的最大距离为 15(16 表示不可达)。
路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
“坏消息传播得慢”,使更新过程的收敛时间过长

开放最短路径优先OSPF协议

“开放”表明 OSPF 协议不是受某一家厂商控制,而是公开发表的.“最短路径优先”是因为使用了 Dijkstra 提出的最短路径算法 SPF,采用分布式的链路状态协议 (link state protocol)

向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息。

链路状态:就是说明本路由器都和哪些路由器相邻,以及该链路的度量(具体就是费用距离时延带宽,通俗来讲就是好不好)

只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息

由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库

这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)OSPF 的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表,快速更新就是它的优点

因为每个条目所占用的空间比较大,所以OSJF将一个自治区域划分为不同的范围叫做区域,这样OSJF就能适应规模较大的网络

划分区域的好处是洪泛法发送的信息只局限于此区域以内进行通信,这就减少了整个网络的通信量

OSJF划分为两个不同的区域(主干区域和自治区域)
主干区域的作用是用来连通其他在下层的区域。

OSPF不用UDP而直接用IP数据报进行传送

  • 版本:当前的版本号为2
  • 类型:可能是五种类型的其中一种,

问候分组:用来发现和维持邻站的可达性(问一下,兄弟你还在吗?)
数据库描述分组:向邻站给出自己的链路状态数据库中所有的信息
链路状态请求分组:向对方请求发送某些链路状态项目的详细信息。
链路状态更新分组:用洪泛法对全网更新链路状态
链路状态确认:对链路更新分组的确认
,链路状态确认分组

  • 分组长度:包括OSPF首部在内的分组长度,以字节为单位
  • 路由标识符:标识发送该分组的路由器接口的地址
  • 区域标识符:分组所属的区域的标识符
  • 检验和:检查错误
  • 鉴别类型:0不用,1口令
  • 鉴别:为0就填入0,为1就填入八个字符的口令

OSPF 还规定每隔10s要交换一次问候分组
OSPF 还规定每隔一段时间,如 30 分钟,要刷新一次数据库中的链路状态

当互联网规模很大时,OSPF 协议要比距离向量协议 RIP 好得多

指定的路由器

指定的路由器代表该局域网上所有的链路向连接到该网络上的各路由器发送状态信息

外部网关协议 BGP

BGP 是不同自治系统的路由器之间交换路由信息的协议,互联网的规模太大,边界网关协议 BGP 只能是力求寻找一条能够到达目的网络且比较好的路由,不能兜圈子),而并非要寻找一条最佳路由。

BGB协议的最小单位是AS

BGP发言人

一般说来,两个 BGP 发言人都是通过一个共享网络连接在一起的,而 BGP 发言人往往就是 BGP 边界路由器,但也可以不是 BGP 边界路由器

一个 BGP 发言人与其他自治系统中的 BGP 发言人要交换路由信息,就要先建立 TCP 连接,然后在此连接上交换 BGP 报文以建立 BGP 会话(session),利用 BGP 会话交换路由信息,使用 TCP 连接能提供可靠的服务,也简化了路由选择协议,每一个自治系统中 BGP 发言人(或边界路由器)的数目是很少的。这样就使得自治系统之间的路由选择不致过分复杂

BGP协议的特点

BGP 支持 CIDR,因此 BGP 的路由表也就应当包括目的网络前缀、下一跳路由器,以及到达该目的网络所要经过的各个自治系统序列。在 BGP 刚刚运行时,BGP 的邻站是交换整个的 BGP 路由表。但以后只需要在发生变化时更新有变化的部分

标记字段:鉴别收到的BGP报文,当不使用鉴别的时候,标记字段要设置为1
类型字段:为1到4,对应四种BGP报文

OPEN报文:用来与相邻的另一个BGP报文建立关系,通信初始化
UPDATE报文:用来告知某一路由的信息,以及要列出要撤销的多条路由
KEEPALIVE报文:用来周期性的检验相邻站点的存活性
NOTIFICATION报文:用来发送检测到的差错

路由器

路由器的作用:连通不同的网络,选择信息传送的线路。选择通畅快捷的近路,能大大提高通信速度,减轻网络系统通信负荷,节约网络系统资源,提高网络系统畅通率,从而让网络系统发挥出更大的效益来

IP多播

目的:更好第支持一对多通信

一个源点发送到许多个终点

采用单播方式,向 90 台主机传送同样的信息需要发送 90 个单播

采用多播方式,只需发送一次到多播组。路由器复制分组。局域网具有硬件多播功能,不需要复制分组,多播可以明显的减轻网络中各种资源的消耗

能够运行多播协议的路由器称为多播路由器,当然它也可以转发普通的单播IP数据报

多播IP地址

多播组的标识符就是 IP 地址中的 D 类地址

每一个 D 类地址标志一个多播组多播地址只能用于目的地址,不能用于源地址

多播数据报和一般的 IP 数据报的区别就是它使用 D 类 IP 地址作为目的地址,并且首部中的协议字段值是 2,表明使用网际组管理协议 IGMP,对多播数据报不产生 ICMP 差错报文,所以用PING后面加上多播地址永远不会得到回复

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

**IP多播需要两种协议 网际组管理协议和多播路由选择协议

网际组管理协议IGMP

为了使路由器知道多播组成员的信息,需要利用网际组管理协议 IGMP(大概就是让自家路由器知道自家有没有主机参加了多播组)

IGMP 使用 IP 数据报传递其报文,也向 IP 提供服务

IGMP工作的方式

1.加入多播组

  • 当某个主机加入新的多播组时,该主机应向多播组的多播地址发送 IGMP 报文,声明自己要成为该组的成员
  • 本地的多播路由器收到 IGMP 报文后,将组成员关系转发给互联网上的其他多播路由器

2.探询组成员变化情况

  • 因为组成员关系是动态的,因此本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员
  • 只要对某个组有一个主机响应,那么多播路由器就认为这个组是活跃的
  • 但一个组在经过几次的探询后仍然没有一个主机响应,则不再将该组的成员关系转发给其他的多播路由器。

推荐阅读