概述
网络层的功能从表面上看就是将分组从一台发送主机移动到一台接收主机上。
转发与路由选择
网络层有两个重要的功能:
- 转发:当一个分组到达路由器的一条输入链路时,路由器必须将该分组移动到适当的输出链路。
- 路由选择:当分组从发送方向流向接收方时,网络层必须决定这些分组采用的路由或路径,这些路径的算法被称为路由选择算法(routing algorithm)
每台路由器具有一张转发表(forwarding table)。路由器通过检查到达分组首部字段的值来转发分组,然后使用该值在该路由器的转发表中索引查询。分组首部中的值可能是该分组的目的地址或该分组所属连接的指示,这取决于网络层协议。
交换机与路由器
某些分组交换机称为链路层交换机(link-layer switches),基于链路层字段中的值做转发决定,其他分组交换机称为路由器(router),基于网络层字段中的值做转发决定。
网络服务模型
网络服务模型定义了分组在发送与接收端系统之间的端到端运输特性。
网络层可能提供的特定服务包括:
- 确保交付:该服务确保分组将最终到达其目的地
- 具有时延上界的确保交付:该服务不仅确保分组的交付,而且在特定的主机到主机时延上界内(例如在100ms内)交付。
- 有序分组交付:确保以发送顺序到达目的地
- 确保最小宽带:只要发送主机以低于特定比特率的速率传输比特,则分组不会丢失,且每个分组会在预定的主机到主机时延内到达。
- 确保最大时延抖动:确保位于发送方的两个相继分组之间的时间量等于在目的地接收到它们之间的时间量
- 安全性服务:机密性,数据完整性和源鉴别服务等
因特网的网络层提供了单一的服务,称为尽力而为服务,基本上没有提供特殊服务。
虚电路和数据报网络
与运输层类似,网络层也能在两台主机之间提供无连接服务或连接服务。虽然网络层的服务与运输层有许多类似之处,但也存在重大差异:
- 网络层提供的服务是向运输层提供的主机到主机的服务;而运输层提供的服务是向应用层提供的进程到进程的服务
- 网络层不会同时提供无连接和连接两种服务。提供连接服务发计算机网络称为虚电路(Virtual-Circuit,VC)网络;仅在网络层提供无连接服务的计算机网络称为数据报网络(datagram network)(因特网用的是无连接服务)
- 运输层面向连接的服务是网络边缘的端系统中实现的;网络层除了在端系统中,也在位于网络核心的路由器中实现。
虚电路
虚电路需要先建立连接,如下图是电话线的建立:

数据报网络

路由器的工作原理
路由器主要承担了网络层的转发功能,即实际将分组从一台路由器的入链路传送到适当的出链路
路由器的体系结构:

数据通过数据链路层进入,数据链路层出去。
- 输入端口:输入的物理链路与路由器相连接的物理层功能;它还有查找功能,需要根据输入分组的IP地址,查询相关转发表,决定路由器的输出端口
- 交换结构:将路由器的输入端口与输出端口相连,完全包含在路由器中,是一个网络路由器中的网络
- 输出端口:存储从交换结构接收的分组,并在物理层和链路层上传输这些分组。当链路是双向时,输出端口通常和输入端口在同一个线路卡上。
- 路由选择处理器:执行路由选择协议,维护路由选择表以及连接的链路状态信息,并为路由器计算转发表,它还执行网络管理功能。
转发数据平面用硬件实现,以纳秒时间尺度运行,路由器控制平面通常用软件实现,并在路由选择处理器上执行(通常是一种传统的CPU),以毫秒时间尺度运行
交换结构
三种交换结构:

- 经内存交换:最简单、最早的路由器是传统的计算机。需要由路由选择处理器CPU进行交换,就像共享内存一样。
- 经总线交换:输入端口经一根共享总线,如果多个分组同时到达这根总线,总线一次只能通过一个分组,除了这个分组外其他分组必须等待。
- 经互联网络交换(纵横式):一次能够转发多个分组。
何处出现排队
输入端口和输出端口处都能够形成分组队列,排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率。
输出端
当交换结构的处理速度比较快,多个输入端口的分组进入同一个输出端口时,输出端口就会产生排队

在输出端口上会有一个分组调度程序,一般采用先来先服务,或者加权公平排队策略等。如果没有足够的缓存存储新来的分组,就会产生丢包。
输入端
如果交换结构不能快得使所有到达分组通过它传送,则在输入端口将出现分组排队。在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口是空闲的),因为它被位于线路前部的另一个分组所阻塞,称为前部(Head-Of-the-Line,HOL)阻塞

网际协议
目前有两个版本的IP正在使用,广泛部署的IP协议版本4,通常简称为IPv4,新版的IP协议版本6,简称为IPv6。
IPv4数据报格式

- 版本号:规定了数据报的IP协议版本
- 首部长度:数据报首部中存在可变的选项,所以有首部长度指示首部的大小。
- 服务类型(Type of Service TOS):可以用于标识数据报(要求低时延、高吞吐量或可靠性的数据报)能相互区分开。例如将实时数据报与非实时流量区分开,提供特定等级的服务。
- 数据报长度:包括首部长度+数据长度,是IP数据报的总长度,以字节为单位。
- 标识、标志、片偏移:与IP分片有关,新版本的IPv6不允许在路由器上对分组分片
- 寿命:寿命(Time-To-Live,TTL),每当数据报由一台路由器处理时,确保数据报不会永远在网络中循环。
- 上层协议:仅在IP数据报到达其最终目的地才会有用,指定了运输层使用的协议。例如值为6表明数据部分要脚跟TCP,而值17表明要交给TCP
- 首部校验和:利用反码运算对首部求和,用于检测首部数据是否有比特差错。每经过一个路由器都需要重新计算。因为有值发生了变化如TTL会发生改变
- 源和目的IP地址:源主机通常通过DNS查找来决定目的地址。
- 选项:允许对IP首部进行扩展,不包括选项能够节约开销,在IPv6首部中已去掉了IP选项。
- 数据:有效载荷,是数据报存在的首要理由。
IPv4数据报分片
不是所有链路层协议都能承载相同长度的网络层分组,例如以太网帧能够承载不超过1500字节的数据,而某些广域网链路的帧可承载不超过576字节的数据,所以要进行数据报分片。分片的过程是在端系统中执行的,而不会在路由器中进行
- 标识号:标识每个数据片属于哪一个数据报
- 标志:用于标志这个数据片是否为某个数据报的最后一个数据片,用于确保数据片的尾部没有丢失
- 偏移字段:用于标识数据片的顺序。因为偏移的单位是字节,所以分片时,每个数据片的大小需要为8的倍数


在目的地,数据报的有效载荷仅在当在IP层已完全重构为初始IP数据报时,才会被传递给目的地运输层。
IPv4编址
接口
主机与物理链路之间的边界叫做 接口。路由器与它任意一条链路之间的边界也叫做接口,因此一台路由器有多个接口,每个接口有其链路。因为每台主机与路由器都能发送和接收IP数据报,IP要求每台主机和路由器的接口拥有自己的IP地址。
因此IP地址是与一个接口关联的。每个IP地址长度为32bit(大约有40亿个IP地址),这些地址一般按所谓点分十进制(dotted-decimal notation)书写,即地址中的每个字节用它的十进制形式书写,各字节间以点号隔开。
子网
最左侧,互联的这3各主机接口与1个路由器接口的网络形成一个子网,它们的前24位IP地址相同。IP编址为这个子网分配一个地址:223.1.1.0/24,其中的/24记法,有时称为子网掩码(networkmask),指示了32比特中的最左侧24比特定义了子网地址。

为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫做一个子网。如下图有6个子网(路由器与路由器两个接口间也会形成一个子网)

CIDR
因特网的地址分配策略被称为无类别域间路由选择(Classless Interdomain Routing,CIDR)。CIDR将子网寻址的概念一般化了,因为对于子网寻址,32比特的IP地址被划分为两部分,并且也具有点分十进制数形式a.b.c.d/x,其中x指示了地址的第一部分中的比特数,这个第一部分被称为网络部分。在CIDR之前,IP地址的网络部分被限制为长度为8、16或24比特,这是一种称为分类编址的编址方案,这是因为具有8、16和24比特子网地址的子网分别称为A、B、C类网络。
IP广播地址:255.255.255.255,该报文会交付给同一个网络中的所有主机
获取地址
为了获取一块IP地址用于一个组织的子网,网络管理员会通过ISP获取地址,而ISP的IP地址是由ICANN(Internet Corporation for Assigned Names and Numbers因特网名字和编号分配机构,它是非盈利的组织,不仅分配IP地址,还管理DNS根服务器)管理和分配的。
动态主机配置协议
某组织获得了一块地址,它就可以为本组织内的主机与路由器接口逐个分配IP地址。系统管理员可以手动配置主机地址,但是这项任务目前通常是通过使用动态主机配置协议(Dynamic Host Configuration,DHCP)来完成的。
DHCP是一个客户-服务器协议,每个子网将具有一台DHCP服务器,如果网中没有服务器,则需要一个DHCP中继代理(通常是一台路由器)这个代理直到用于该网络的DHCP服务器地址。
对于一台新到达的主机而言,DHCP协议是一个4个步骤的过程(如图,图中yi addr表示"你的因特网地址"被分配给该新到达客户的地址。)
DHCP发现:客户主机发送请求给广播IP地址。DHCP也通过广播提供客户主机的IP地址。

网络地址转换
子网中接入的主机越来越多,子网变的越来越大,原有分配的IP地址块不够用,就需要网络地址转换(Network Address Translation NAT)
NAT路由器对外界的行为反过来就如同一个具有单一IP地址的单一设备。ISP会直接给NAT一个具体的单一的IP地址,NAT使能路由器对外界隐藏了家庭网络中的IP分配细节。NAT路由器通过NAT转换表,利用端口号区分内部主机。
这使得内网的IP地址可以重复,大大提升了IP地址的可用性。

因特网控制报文协议ICMP
ICMP被主机和路由器用来彼此沟通网络层的信息,ICMP最典型的应用是差错报告。
ICMP报文有一个类型字段和一个编码字段,并且包含引起该ICMP报文首次生成的IP数据报的首部和前8字节内容(以便发送方能确定引发该差错的数据报)
IPv6
32 bit的IP地址空间即将用尽。为了应对这种大IP地址空间的需求,开发了一种新的IP协议,即IPv6,在IPv4积累的运行经验基础上改进和强化了IPv4的其他方面。
IPv6的数据报格式

IPv6中引入的最重要的变化显示在其数据报格式中:
- 扩大的地址容量:IPv6将IP地址长度从32比特增加到128比特
- 简化高效的40字节首部,形成了定长的40字节首部。
- 流标签与优先级:流可以"给属于特殊流的分组加上标签"
IPv6中定义的字段:
- 版本:通常为6,如果强行改为4并不能创建一个合法的IPv4数据报
- 流量类型:与IPv4中的TOS(服务类型)字段的含义相似
- 流标签:用于标识一条数据报的流
- 有效载荷长度:数据长度
- 下一个首部:该字段标识数据报中的内容需要交付给哪个协议(TCP/UDP),该字段与IPv4首部中协议字段的值相同
- 跳限制:数据报每经过一台路由器,该字段的值减一,当计数到达0时,则该数据报将被丢弃。放置陷入转发循环。
- 源地址和目的地址:128比特地址
- 数据:有效载荷部分
在IPv4数据报中出现却在IPv6数据报中不存在的字段:
- 分片/重新组装:IPv6不允许在中间路由器上进行分片与重新组装,这种操作只能在源于目的地上执行,如果报文太大无法转发,则路由器丢掉该数据报,并向发送方回一个"分组太大"的ICMP差错报文。因为分片与重新组装是一个耗时的操作
- 首部检验和:在TCP与UDP协议中进行了检验操作,并且检验是一个耗时的操作,所以就删除该功能。
- 选项:选项不再放在IP的首部中,但他可以出现在IPv6首部中由"下一个首部"指出的位置上。也就是说"下一个首部"不仅可以是"TCP/UDP协议"也可以是选项字段。删除了选项字段使得IP的首部成为定长的40字节。
从IPv4到IPv6的迁移
一种可选的方法是宣布一个标志日,即指定某个日期和时间,届时因特网所有机器都关机并从IPv4升级到IPv6
另一个方法是一种双栈(dualstack)方法,即使用该方法的IPv6结点还具有完整的IPv4实现,这样的结点在RFC 4213中被称为IPv6/IPv4结点。但是在执行IPv6到IPv4的转换时,IPv6数据报中一些IPv6特定的字段(如流标签字段)在IPv4数据报中无对应部分,这些字段就会丢失,

还有一个双栈方法,叫做建隧道(tunneling),假定两个IPv6结点(如上图的B和E)要使用IPv6进行交互,但它们是经由IPv4路由器互联的,我们将这种IPv4路由器的集合称作隧道。我们可以将需要发送的完整的IPv6数据报当作一个有效载荷,让隧道放到IPv4的数据报的有效载荷中(也就是说这个数据报的数据是一个完整的IPv6数据报),然后将这个IPv4数据报发送。

路由选择算法
网络层必须为发送方到接收方的分组确定所采用的路径。路由的选择工作是:确定从发送方到接收方通过路由器网络的好路径(最低费用的路径)。
主机通常直接与一台路由器相连接,该路由器即为该主机的默认路由器,又称为该主机的第一跳路由器,我们将源主机的默认路由器称为源路由器(source router),把目的主机的默认路由器称为目的路由器(destination router)。
对路由选择算法的一种广义分类方式是根据该算法是全局式的还是分散式的来加以区分
- 全局式路由选择算法用完整的、全局性的网络知识计算出从源到目的地之间的最低费用路径。
- 分散式路由选择算法以迭代、分布式的方式计算出最低费用路径。没有结点拥有所有路径的费用信息。
第二种广义分类方式是根据算法是静态的还是动态的进行分类:
- 在静态路由选择算法中,通常是人工干预进行调整。
- 动态路由选择算法能够当网络流量负载或拓扑发生变化时改变路由选择路径。
第三种分类方式是根据算法是负载敏感的还是负载迟钝的进行划分:
- 在负载敏感算法中,链路费用会动态地变化以反映出底层链路的当前拥塞水平,算法会趋于避开拥塞链路。当今的因特网路由选择算法(如RIP、OSPF和BGP)都是负载迟钝的。
链路状态路由选择算法
在链路状态算法(LS算法)中,网络拓扑和所有的链路费用都是已知的。实践中这是通关让每个结点向网络中所有其他结点广播链路状态分组来完成的,其中每个链路状态分组包含它所连接的链路的特征和费用。
Dijkstra(迪杰特斯拉算法)
下面给出的路由选择算法叫做Dijkstra(迪杰特斯拉算法),这是一个迭代算法,其性质是经过算法的第k次迭代后,可知道k个目的结点的最低费用路径。算法中定义了下列记号:
- u:源节点
- v:节点
- D(v):到算法的本次迭代,源节点到目的节点v最低费用路径的费用
- p(v):从源到v沿着当前最低费用路径的前一个节点(v的邻居)
- N':节点子集,如果从源到v的最低费用路径已确定,v就被储存在N'中
算法思路:
初始化部分:直接得出并初始化源节点u的所有邻居的最低费用,其余非邻居节点的最低费用初始化为无穷大
循环部分:1)找到一个不在N'集合中的节点,假设为w,使得D(w)是以当前节点为源节点,所有节点的D(v)的最小值,并将w放入N'中。2)更新w的每一个不在N'中的邻居,更新它们的D(v),(D(v)= min(D(v),D(w)+c(w,v)))。

该算法共需要搜寻n(n+1)/2个节点,其时间复杂度为O(n²)
经过路由选择算法的计算后,储存在u节点的转发表类似于下图:

距离向量选择算法
距离向量(Distance-Vector ,DV)算法是一种迭代的、异步的和分布式算法。每个节点都要从一个或多个直接相连邻居接收某些信息,执行计算,然后将其计算结果分发给邻居。
计算x到y的最低费dx(y)用的著名方程:Bellman-Ford方程:
dx(y)=minv{c(x,v)+dv(y)}
方程中的minv是对于x的所有邻居的。
基本思想:每个节点x以Dx(y)开始,对在N中的所有节点,估计从它自己到节点y最低费用路径的费用。令Dx = [Dx(y):y属于N]是节点x的距离向量,该向量是从x到在N中的所有其他节点y的费用估计的向量。每个节点x维护下列路由选择信息:
- 对于每个邻居v,从x到直接相连邻居v的费用为c(x,y)。
- 节点x的距离向量,即Dx = [Dx(y):y属于N],包含了x到N中所有目的地y的费用的估计值
- 它的每个邻居的距离向量,即对x的每个邻居v,有Dv = [Dv(y):y属于N]
每个节点不时地向它的每个邻居发送它的距离向量副本,当节点x从它的任何一个邻居v接收到一个新距离向量,它保存v的距离向量,然后使用Bellman-Ford方程更新它自己的距离向量。
链路费用改变与链路故障
当某条链路费用降低时,该算法的更新只需要经过少量迭代就会进入静止状态
但当某条链路费用增加时,根据该算法需要经过大量迭代,甚至出现循环迭代(无穷计数)的问题
LS与DV路由选择算法的比较
- 报文复杂性:LS算法要求每个节点都知道网络中每条链路的费用,而且无论何时一条链路的费用改变时,必须向所有节点发送新的链路费用。DV算法要求在每次迭代时,在两个直接相连邻居之间交换报文。
- 收敛速度:LS算法的时间复杂度是O(|N||E|)个报文的O(n²)。DV算法收敛较慢,且在收敛时可能遇到路由选择环路,还可能遭遇无穷计数的问题
- 健壮性:LS会将某个节点的状态广播至所有节点,路由计算在某种程度上是分离的,提供了一定程度的健壮性。在DV算法下,一个节点的不正确计算值会扩散到整个网络
层次路由选择
在整个互联网中,因规模巨大、管理自治等问题不可能单独只使用LS或DV一个算法管理所有的网络节点。因此引入自治系统(Autonomous System,AS)来解决,每个AS由一组通常处在相同管理控制下的路由器组成(例如由相同的ISP运营或属于相同的公司网络)。在相同的AS中的路由器全部运行同样的路由选择算法。
在一个自治系统内运行的路由选择算法叫做自治系统内部路由选择协议。当然将AS彼此互联是必需的,因此在一个AS内的一台或多台路由器将负责在本AS之外的目的地转发分组。这些路由器被称为网关路由器(gateway router)

当源AS具有两条或更多条链路通向外部AS,此时向何处转发分组的问题变得更具挑战性(以上图的AS1为例):
- 知道经AS2可达哪些目的地,经AS3可达哪些目的地
- 向AS1中的所有路由器传播这些可达性信息,因此每台路由器能够配置它的转发表以处理外部AS目的地。
从相邻AS获取可达性信息和该AS中所有路由器传播可达性信息是由自治系统间路由选择协议处理的。这两个通信的AS必须运行相同的自治系统间路由选择协议(一般采用BGP4)。
因特网中的自治系统内部的路由选择RIP
AS内部路由选择协议又称为内部网关协议,历史上有两个协议被广泛应用:路由选择信息协议(Routing Information Protocol,RIP)与开放最短路优先(Open Shortest Path First,OSPF)。
RIP是一种距离向量协议,类似于理想化的DV协议,它将每条链路的费用都假设为1,即RFC 1058中定义的RIP版本使用的跳数概念。跳是沿着从源路由器到目的子网(包括目的子网)的最短路径所经过的子网数量。
RIP中一条路径的最大费用被限制为15,因此RIP的使用限制在网络直径不超过15跳的自治系统内。
在RIP中,路由选择更新信息在邻居之间通过一种RIP响应报文来交换,大约每30秒相互交换一次。响应报文又叫做RIP通告。
因特网中的自治系统内部的路由选择OSPF
OSPF路由选择,开放最短路径优先(Open Shortest Path First,OSPF),通常都设置在上层的ISP中。其核心是一个使用洪泛链路状态信息的链路状态协议和一个Dijkstra最低费用路径算法。使用OSPF时,路由器向自治系统内所有其他路由器广播路由选择信息。其有以下优点:
- 安全:其报文经过特殊算法加密
- 多条相同费用的路径:如果有多条路径可供使用,OSPF允许使用多条链路
- 对单播与多播路由选择的综合支持
- 支持在单个路由选择域内的层次结构
自治系统间的路由选择BGP
边界网关协议(Broder Gateway Protocol,BGP)版本4是当今因特网中域间路由选择协议事实上的标准。BGP为每个AS提供了进行以下工作的手段:
- 从相邻AS处获得子网可达性信息
- 向本AS内部的所有路由器传播这些可达性信息
- 基于可达性信息和AS策略,决定到达子网的"好"路由
BGP基础
BGP极其复杂,但BGP是因特网中绝对至关重要的协议。
在BGP中,路由器对通过使用179端口的半永久TCP连接来交换路由选择信息。两个AS之间(网关路由器)都有一条该半永久TCP连接。跨越AS的会话(沿着连接发送BGP报文)称为外部BGP会话(eBGP)会话,在同一AS中的两台路由器之间的会话称为内部BGP(iBGP)会话。
在BGP中,目的地不是主机而是CDIR化的前缀,每个前缀表示一个子网或一个 子网的集合。
BGP路径属性
在BGP中,一个自治系统由其全局唯一的自治系统号(Autonomous System Number,ASN),AS号由ICANN地区注册机构分配。当一台路由器通过BGP会话通告一个前缀时,它在前缀中包括一些BGP属性,其中较为重要的属性的AS-PATH和NEXT-HOP。
- AS-PATH该属性包含了前缀的通过已经通过了哪些AS。路由器使用该AS-PATH属性来检测和防止循环通告。如果路由器检测到自己的AS已经存在于AS-PATH,它将拒绝该通告。
- NEXT-HOP是一个开始某AS-PATH的路由器接口。NEXT-HOP属性提供了它的AS内部路由选择模块的IP地址(类似于找到一个"最合适"的网关以及去往目标AS的"最优"路径)。路由器使用NEXT-HOP属性可以正确配置它们的转发表。
BGP路由选择
如果对相同前缀存在两条或多条路由,则BGP顺序地调用下列消除规则,直到留下一条路由:
- 路由被指派一个本地偏好值作为它们的属性之一,这是一条由管理员自行决定的属性。偏好值最高的路由将被选择
- 余下的路由中,具有最短AS-PATH的路由将被选择,其中距离测度使用的是AS跳的数量,而不是路由器的跳数
- 余下的路由中,具有最靠近NEXT-HOP路由器的路由将被选择,其距离由AS内部距离测度决定。
- 如果仍有多条路由,该路由器使用BGP标识符来选择路由。
广播和多播路由选择
- 广播路由选择中,网络层提供了一种从源结点到网络中的所有其他结点交付分组的服务
- 多播路由选择中,单个源结点能够向其他网络结点的一个子集发送分组的副本
广播-无控制洪泛
实现广播最显而易见的技术是洪泛(flooding)方法,该方法要求源结点向它的所有邻居发送分组的副本,当某结点接收了一个广播分组时,它复制该分组并向它的所有邻居转发。虽然这种方案简单而优雅,但它有致命缺点:如果该图具有圈,则每个广播分组的一个或多个分组副本将无休无止地循环,这被称为广播风暴。
广播-受控洪泛
避免广播风暴的关键是每个结点明智地选择何时洪泛分组。
- 在序号控制洪泛。源结点将其地址以及广播序号放入广播分组。每个结点维护它已经收到的、复制发和转发的源地址和每个广播分组的序号列表。如果新到的分组的广播序号已存在于序号列表中,丢弃该分组。
- 反向路径转发(Reverse Path Forwarding,RPF),有时也称为反向路径广播(RPB):当一台路由器接收到具有给定源地址的广播分组时,仅当该分组到达的链路正好是位于它自己的返回其源的最短单播路径上时,它才接收该分组。
广播-生成树广播
虽然序号控制洪泛和RPF可以有效控制广播风暴,但是不可避免的产生了冗余广播分组的传输。在理想情况下,每个结点应该只接收到一份广播分组。
该想法是想要在图中构建一颗生成树,它需要包含每个结点。如果每段链路具有相应的费用且一棵树的费用就是其链路费用之和,则在该图的所有生成树中费用最小的生成树被称为最小生成树。
与生成树方法相关的复杂性主要是生成树的生成和维护,这里有一个简单的算法:基于中心的方法。要定义一个中心结点,结点向中心结点单播加入树(tree-join)报文,直到它到达一已经属于生成树的结点或中心结点,该加入树报文的路径能够定义这棵生成树的新分支。
多播-IGMP
多播数据报使用间接地址来编地址,用一个标识标识一组接收方。这种表示一组接收方的单一标识就是一个D类多播地址(在224.0.0.0~239.255.255.255范围内的IP地址)。与一个D类地址相关联的接收方小组被称为一个多播组。关于多播组内各成员的管理均由因特网组管理协议(IGMP)负责。
IGMP只有三种报文类型,其报文是承载在一个IP数据报中。(由一台路由器向所有与主机相连的接口发送一个membership_query报文,以确定该接口上主机已加入的所有多播组集合。主机用一个membership_report报文来响应membership_query报文。还有一种IGMP报文leave_group,这个报文是可选的,可以通过不回应member_query报文来实现相同的效果。)
多播-路由选择算法
多播路由选择的目标就是发现一棵链路的树,这些链路连接了所有具有属于该多播组的相连主机的路由器。
- 使用一棵组共享的链路树,与广播生成树的生成方式相同:结点向中心结点单播加入报文,直到它到达一已经属于生成树的结点或中心结点,该加入树报文的路径能够定义这棵生成树的新分支。
- 使用一棵基于源生成的链路树,在实践中使用RPF(反向路由选择)算法来构造一棵多播转发树
图片来源于网络