文章目录
- 一、路由器的构成
- 1、路由器结构
- 2、交换结构
- 二、IP多播
- 1、IP多播的概念
- 2、在局域网上进行硬件多播
- 三、网际组管理协议IGMP和多播路由选择协议
- 1、IP 多播需要两种协议
- 2、网际组管理协议 IGMP
- 3、多播路由选择协议
一、路由器的构成
1、路由器结构
路由器是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。从路由器某个输入端口收到的分组,按照分组要去的目的地(即目的网络),把该分组从路由器的某个合适的输出端口转发给下一跳路由器。
下一跳路由器也按照这种方法处理分组,直到该分组到达终点为止。
路由器的转发分组正是网络层的主要工作。
从上图可以看出,整个的路由器结构可划分为两大部分:路由选择部分和分组转发部分。
路由选择部分也叫作控制部分,或控制层面,其核心构件是路由选择处理机。路由选择处理机的任务是根据所选定的路由选择协议构造出路由表,同时经常或定期地和相邻路由器交换路由信息而不断地更新和维护路由表。
分组转发部分是本节所要讨论的问题,也就是数据层面,它由三部分组成:交换结构,一组输入端口和一组输出端口(请注意:这里的端口就是硬件接口)。小型路由器的端口只有几个。但某些ISP使用的边缘路由器的高速10Gbit/s端口,则可以有多达几百个之多。下面分别讨论每一部分的组成。
交换结构(switching fabric)又称为交换组织,它的作用就是根据转发表(forwarding table)对分组进行处理,将某个输入端口进入的分组从一个合适的输出端口转发出去。交换结构本身就是一种网络,但这种网络完全包含在路由器之中,因此交换结构可看成是“在路由器中的网络”。
请注意“转发”和“路由选择”是有区别的。在互联网中,“转发”就是路由器根据转发表把收到的IP 数据报从路由器合适的端口转发出去。“转发”仅仅涉及一个路由器。但“路由选择”则涉及很多路由器,路由表则是许多路由器协同工作的结果。这些路由器按照复杂的路由算法,得出整个网络的拓扑变化情况,因而能够动态地改变所选择的路由,并由此构造出整个的路由表。路由表一般仅包含从目的网络到下一跳(用IP地址表示)的映射而转发表是从路由表得出的。转发表必须包含完成转发功能所必需的信息。这就是说,在转发表的每一行必须包含从要到达的目的网络到输出端口和某些MAC地址信息(如下一跳的以太网地址)的映射。将转发表和路由表用不同的数据结构实现会带来一些好处,这是因为在转发分组时,转发表的结构应当使查找过程最优化,但路由表则需要对网络拓扑变化的计算最优化。路由表总是用软件实现的,但转发表则可用特殊的硬件来实现。请读者注意,在讨论路由选择的原理时,往往不去区分转发表和路由表的区别,而可以笼统地都使用路由表这一名词。
路由器的输入和输出端口里面都各有三个方框,用方框中的1,2和3分别代表物理层、数据链路层和网络层的处理模块。物理层进行比特的接收。数据链路层则按照链路层协议接收传送分组的帧。在把帧的首部和尾部剥去后,分组就被送入网络层的处理模块。
- 若接收到的分组是路由器之间交换路由信息的分组(如RIP或OSPF分组等),则把这种分组送交路由器的路由选择部分中的路由选择处理机。
- 若接收到的是数据分组,则按照分组首部中的目的地址查找转发表,根据得出的结果,分组就经过交换结构到达合适的输出端口。
一个路由器的输入端口和输出端口就做在路由器的线路接口卡上。
输入端口中的查找和转发功能在路由器的交换功能中是最重要的。为了使交换功能分散化,往往把复制的转发表放在每一个输入端口中(如上图中的虚线箭头所示)。路由选择处理机负责对各转发表的副本进行更新。这些副本常称为“影子副本”(shadow copy)。分散化交换可以避免在路由器中的某一点上出现瓶颈。
当一个分组正在查找转发表时,后面又紧跟着从这个输入端口收到另一个分组。这个后到的分组就必须在队列中排队等待,因而产生了一定的时延。图4-55给出了在输入端口的队列中排队的分组的示意图。
我们再来观察在输出端口上的情况(如图4-56所示)。输出端口从交换结构接收分组,然后把它们发送到路由器外面的线路上。在网络层的处理模块中设有一个缓存区,实际上它就是一个队列。当交换结构传送过来的分组的速率超过输出链路的发送速率时,来不及发送的分组就必须暂时存放在这个队列中。数据链路层处理模块把分组加上链路层的首部和尾部交给物理层后发送到外部线路。
从以上的讨论可以看出,分组在路由器的输入端口和输出端口都可能会在队列中排队等候处理。若分组处理的速率赶不上分组进入队列的速率,则队列的存储空间最终必定减少到零,这就使后面再进入队列的分组由于没有存储空间而只能被丢弃。以前我们提到过的分组丢失就是发生在路由器中的输入或输出队列产生溢出的时候。当然,设备或线路出故障也可能使分组丢失。
2、交换结构
交换结构是路由器的关键构件[KURO17]。正是这个交换结构把分组从一个输入端口转移到某个合适的输出端口。
实现这样的交换有多种方法,下图给出了三种常用的交换方法。输入端口是 A,B和C,输出端口是X,Y和Z。下面简单介绍它们的特点。
最早使用的路由器就是利用普通的计算机,用计算机的CPU作为路由器的路由选择处理机。路由器的输入和输出端口的功能和传统的操作系统中的IO设备一样。当路由器的某个输入端口收到一个分组时,就用中断方式通知路由选择处理机。然后分组就从输入端口复制到存储器中。路由器处理机从分组首部提取目的地址,查找路由表,再将分组复制到合适的输出端口的缓存中。若存储器的带宽(读或写)为每秒M个分组,那么路由器的交换速率(即分组从输入端口传送到输出端口的速率)一定小于M/2。
这是因为存储器对分组的读和写需要花费的时间是同一个数量级。
- 通过储存器:许多现代的路由器也通过存储器进行交换,(a)的示意图表示分组通过存储器进行交换。与早期的路由器的区别就是,目的地址的查找和分组在存储器中的缓存都是在输入端口中进行的。
- 通过总线:(b)是通过总线进行交换的示意图。采用这种方式时,数据报从输入端口通过共享总线直接传送到合适的输出端口,而不需要路由选择处理机的干预。但是,由于总线是共享的,因此在同一时间只能有一个分组在总线上传送。当分组到达输入端口时若发现总线忙(因为总线正在传送另一个分组),则被阻塞而不能通过交换结构,并在输入端口排队等待。因为每一个要转发的分组都要通过这一条总线,因此路由器的转发带宽就受总线速率的限制
- 通过互连网络:
- ( c )画的是通过纵横交换结构(crossbar switch fabric)进行交换。这种交换机构常称为互连网络(interconnection network),它有 2N条总线,可以使N个输入端口和 N个输出端口相连接,这取决于相应的交叉节点是使水平总线和垂直总线接通还是断开。当输入端口收到一个分组时,就将它发送到与该输入端口相连的水平总线上。若通向所要转发的输出端口的垂直总线是空闲的,则在这个节点将垂直总线与水平总线接通,然后把该分组转发到这个输出端口。例如,一个分组到达输入端口A,应转发到输出端口Y。这时交换结构的控制器就把总线A和Y的交叉节点闭合,因此分组就从输入端口A传送到了输出端口Y。请注意如果与此同时还有一个分组要从输入端口B转发到输出端口Z,那么也可同时进行,因为A→Y和B→Z的转发是使用不同的总线的转发。和前两种交换机制不同,这种纵横交换结构是一种无阻塞的交换结构,其特点是分组可以转发到任何一个输出端口,只要这个输出端口没有被别的分组占用。
- 如果这个输出端口(即对应的垂直总线)已被占用(有另一个分组正在转发到同一个输出端口),那么后到达的分组就必须在输入端口排队等待。
二、IP多播
1、IP多播的概念
由于有许多的应用需要由一个源点发送到许多个终点,即一对多的通信。例如,实时信息的交付(如新闻、股市行情等)、软件更新、交互式会议等。随着互联网的用户数目的急剧增加,以及多媒体通信的开展,有更多的业务需要多播来支持。
与单播相比,在一对多的通信中,多播可大大节约网络资源。图(a)是视频服务器用单播方式向 90台主机传送同样的视频节目。为此,需要发送90个单播,即同一个视频分组要发送 90个副本。图(b)是视频服务器用多播方式向属于同一个多播组的90个成员传送节目。这时,视频服务器只需把视频分组当作多播数据报来发送,并且只需发送一次。路由器 R1在转发分组时,需要把收到的分组复制成3个副本,分别向R2,R3和R4各转发个副本。当分组到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制分组,在局域网上的多播组成员都能收到这个视频分组。
当多播组的主机数很大时(如成千上万个),采用多播方式就可明显地减轻网络中各种资源的消耗。在互联网范围的多播要靠路由器来实现,这些路由器必须增加一些能够识别多播数据报的软件。能够运行多播协议的路由器称为多播路由器(multicast router)。多播路由器当然也可以转发普通的单播IP 数据报。
在互联网上进行多播就叫作IP 多播。IP 多播所传送的分组需要使用多播地址。
我们知道,在互联网中每一台主机必须有一个全球唯一的IP地址。如果某台主机现在想接收某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机?
显然,这个多播数据报的目的地址一定不能写入这台主机的IP地址。这是因为在同一时间可能有成千上万台主机加入到同一个多播组。多播数据报不可能在其首部写入这样多的主机的IP地址。在多播数据报的目的地址写入的是多播组的标识符,然后设法让加入到这个多播组的主机的卫地址与多播组的标识符关联起来。
其实多播组的标识符就是IP地址中的D类地址。D类I地址的前四位是1110,因此D类地址范围是 224.0.0.0到 239.255.255.255。我们就用每一个 D类地址标志一个多播组。这样,D类地址共可标志 2 28 2^{28} 228个多播组,也就是说,在同一时间可以允许有超过2.6亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。
显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP 差错报文。因此,若在PING命令后面键入多播地址,将永远不会收到响应。IP多播可以分为两种。
- 一种是只在本局域网上进行硬件多播
- 另一种则是在互联网的范围进行多播。
前一种虽然比较简单,但很重要,因为现在大部分主机都是通过局域网接入到互联网的。在互联网上进行多播的最后阶段,还是要把多播数据报在局域网上用硬件多播交付多播组的所有成员(如图(b)所示)。下面就先讨论这种硬件多播。
2、在局域网上进行硬件多播
互联网号码指派管理局IANA拥有的以太网地址块的高24位为00-00-5E,因此 TCP/IF协议使用的以太网地址块的范围是从00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在前面已讲过,以太网 MAC 地址字段中的第1字节的最低位为1时即为多播地址,这种多播地址数占 IANA 分配到的地址数的一半。但IANA 只拿出 2 23 2^{23} 223个地址,即01-00-5E-0000-00到01-00-5E-7F-FF-FF的地址作为以太网多播地址。或者说,在48位的多播地址中,前 25 位都固定不变,只有后 23位可用作多播。但D类IP地址可供分配的有 28 位。这 28位中只有后 23位才映射以太网多播地址中的后 23位,因此是多对一的映射关系(如下图所示),即28位中的前5位不能用来构成以太网多播地址。例如,IP多播地址224.128.64.32(即E0-80-40-20)和另一个多播地址 224.0.64.32(即E0-00-40-20)转换成以太网的多播地址都是01-00-5E-00-40-20。因此收到多播数据报的主机,还要在层利用IP数据报首部的IP地址进行过滤,把不是本主机要接收的数据报丢弃。
三、网际组管理协议IGMP和多播路由选择协议
1、IP 多播需要两种协议
下图是在互联网上传送多播数据报的例子。图中标有地址的四台主机都参加了一个多播组,其组地址是226.15.37.123。显然,多播数据报应当传送到路由器 R1,R2和 R3,,而不应当传送到路由器 R4,因为与R4连接的局域网上现在没有这个多播组的成员。但这些路由器又怎样知道多播组的成员信息呢?这就要利用一个协议,叫作网际组管理协议IGMP(Internet Group Management Protocol).
上图强调了IGMP的本地使用范围。请注意,IGMP并非在互联网范围内对所有多播组成员进行管理的协议。IGMP不知道IP多播组包含的成员数,也不知道这些成员都分布在哪些网络上。IGMP协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。
显然,仅有IGMP协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员这就需要使用多播路由选择协议。
然而多播路由选择协议要比单播路由选择协议复杂得多。我们可以通过一个简单的例子来说明。我们假定图4-61中有两个多播组。多播组M的成员有主机A,B和C,而多播组 M,的成员有主机 D,E和F。这些主机分布在三个网络上(N1,N2和 N3)。
路由器R不应当向网络 N3转发多播组M1的分组,因为网络N3上没有多播组 M1的成员。但是每一台主机可以随时加入或离开一个多播组。例如,如果主机G现在加入了多播组 M1,那么从这时起,路由器R就必须也向网络 N3转发多播组M1的分组。这就是说,多播转发必须动态地适应多播组成员的变化(这时网络拓扑并未发生变化)。请注意,单播路由选择通常在网络拓扑发生变化时才需要更新路由。
再看一种情况。主机E和F都是多播组M2的成员。当E向F发送多播数据报时,路由器R把这个多播数据报转发到网络N3。但当F向E发送多播数据报时,路由器R则把多播数据报转发到网络N2。如果路由器R收到来自主机A的多播数据报(A不是多播组M2的成员,但也可向多播组发送多播数据报),那么路由器就应当把多播数据报转发到N2和N3。由此可见,多播路由器在转发多播数据报时,不能仅仅根据多播数据报中的目的地址而是还要考虑这个多播数据报从什么地方来和要到什么地方去。
还有一种情况。主机G没有参加任何多播组,但G却可向任何多播组发送多播数据报。例如,G 可向多播组 M1或 M2发送多播数据报。主机G所在的局域网上可以没有任何多播组的成员。显然,多播数据报所经过的许多网络,也不一定非要有多播组成员。总之,多播数据报可以由没有加入多播组的主机发出,也可以通过没有组成员接入的网络。
正因为如此,IP多播就成为比较复杂的问题。下面介绍这两种协议的要点
2、网际组管理协议 IGMP
和网际控制报文协议ICMP相似,IGMP使用IP数据报传递其报文(即IGMP报文加上IP 首部构成IP 数据报),但它也向 IP 提供服务。因此,我们不把 IGMP 看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。
从概念上讲,IGMP的工作可分为两个阶段。
- 第一阶段:当某台主机加入新的多播组时,该主机应向多播组的多播地址发送一个IGMP 报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP 报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其他多播路由器。
- 第二阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。
IGMP 设计得很仔细,避免了多播控制信息给网络增加大量的开销。IGMP采用的一些具体措施如下:
- 在主机和多播路由器之间的所有通信都使用IP 多播。只要有可能,携带IGMP 报文的数据报都用硬件多播来传送。因此在支持硬件多播的网络上,没有参加IP多播的主机不会收到 IGMP 报文。
- 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文而不需要对每一个组发送一个询问报文(虽然也允许对一个特定组发送询问报文)。默认的询问速率是每125秒发送一次(通信量并不太大)。
- 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。因此,网络上多个多播路由器并不会引起IGMP 通信量的增大。
- 在IGMP的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10 秒)当收到询问时,主机在0到N之间随机选择发送响应所需经过的时延。因此,若一台主机司时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。
- 同一个组内的每一台主机都要监听响应,只要有本组的其他主机先发送了响应,自已就可以不再发送响应了。这样就抑制了不必要的通信量。
多播路由器并不需要保留组成员关系的准确记录,因为向局域网上的组成员转发数据报是使用硬件多播。多播路由器只需要知道网络上是否至少还有一台主机是本组成员即可。
实际上,对询问报文每一个组只需有一台主机发送响应。
如果一台主机上有多个进程都加入了某个多播组,那么这台主机对发给这个多播组的每个多播数据报只接收一个副本,然后给主机中的每一个进程发送一个本地复制的副本。
最后我们还要强调指出,多播数据报的发送者和接收者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。
3、多播路由选择协议
虽然在TCP/IP中IP多播协议已成为建议标准,但多播路由选择协议(用来在多播路由器之间传播路由信息)则尚未标准化。
在多播过程中一个多播组中的成员是动态变化的。例如在收听网上某个广播节目时,随时会有主机加入或离开这个多播组。多播路由选择实际上就是要找出以源主机为根节点的多播转发树。在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报但在多播转发树上的路由器不会收到重复的多播数据报(即多播数据报不应在互联网中兜圈子)。不难看出,对不同的多播组对应于不同的多播转发树。同一个多播组,对不同的源点也会有不同的多播转发树。
已有了多种实用的多播路由选择协议,它们在转发多播数据报时使用了以下的三种方法:
-
洪泛与剪除。这种方法适合于较小的多播组,而所有的组成员接入的局域网也是相邻接的。一开始,路由器转发多播数据报使用洪泛的方法(这就是广播)。为了避免兜圈子采用了叫作反向路径广播RPB(Reverse Path Broadcasting)的策略。RPB 的要点是:每一个路由器在收到一个多播数据报时,先检查数据报是否是从源点经最短路径传送来的。进行这种检查很容易,只要从本路由器寻找到源点的最短路径上(之所以叫作反向路径,因为在计算最短路径时是把源点当作终点的)的第一个路由器是否就是刚才把多播数据报送来的路由器。若是,就向所有其他方向转发刚才收到的多播数据报(但进入的方向除外),否则就弃而不转发。如果本路由器有好几个相邻路由器都处在到源点的最短路径上(也就是说,存在几条同样长度的最短路径),那么只能选择一条最短路径,选择的准则就是看这几条最短路径中的相邻路由器谁的IP地址最小。
为简单起见,在下图中的网络用路由器之间的链路来表示。我们假定各路由器之间的距离都是 1。路由器 R1收到源点发来的多播数据报后,向 R2和 R3转发。R2发现 R1就在自己到源点的最短路径上,因此向 R3和R4转发收到的数据报。R3发现 R2不在自己到源点的最短路径上,因此丢弃R2发来的数据报。其他路由器也这样转发。R7到源点有两条最短路径:R7→R4→R₂→R1→源点:R7→R5→R3→R1→源点。我们再假定R4的IP 地址比 R5的IP 地址小,所以我们只使用前一条最短路径。因此R7只转发R4传过来的数据报,而丢弃R5传过来的数据报。最后就得出了用来转发多播数据报的多播转发树(图中用粗线表示),以后就按这个多播转发树来转发多播数据报。这样就避免了多播数据报兜圈子,同时每一个路由器也不会接收重复的多播数据报。
如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组的成员,就应把它和下游的树枝一起剪除。例如,在下图中虚线椭圆表示剪除的部分当某个树枝有新增加的组成员时,可以再接入到多播转发树上。 -
隧道技术(tunneling)。隧道技术适用于多播组的位置在地理上很分散的情况。例如在下图中,网 N1和网 N2都支持多播。现在 N1中的主机向 N2中的一些主机进行多播。但路由器 R1和 R2之间的网络并不支持多播,因而R1和R2不能按多播地址转发数据报。为此,路由器R1就对多播数据报进行再次封装,即再加上普通数据报首部,使之成为向单一目的站发送的单播(unicast)数据报,然后通过**“隧道”(tunnel)"**从 R1发送到 R2。
单播数据报到达路由器R2后,再由路由器R2剥去其首部,使它又恢复成原来的多播数据报,继续向多个目的站转发。这一点和英吉利海峡隧道运送汽车的情况相似。英吉利海峡隧道不允许汽车在隧道中行驶。但是,可以把汽车放置在隧道中行驶的电气火车上来通过隧道。过了隧道后,汽车又可以继续在公路上行驶。这种使用隧道技术传送数据报又叫作IP中的IP(IP-in-IP) -
基于核心的发现技术。这种方法对于多播组的大小在较大范围内变化时都适合。这种方法是对每一个多播组G指定一个核心(core)路由器,给出它的IP单播地址。核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。如果有一个路由器R1向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。当数据报到达参加了多播组 G的路由器R2时,R2就处理这个数据报。如果R1发出的是一个多播数据报,其目的地址是G的组地址,R2就向多播组G的成员转发这个多播数据报。如果R1发出的数据报是一个请求加入多播组G的数据报,R2就把这个信息加到它的路由中,并用隧道技术向R1转发每一个多播数据报的一个副本。这样,参加到多播组G的路由器就从核心向外增多了,扩大了多播转发树的覆盖范围。
目前还没有在整个互联网范围使用的多播路由选择协议。下面是一些建议使用的多播路由选择协议。
- **距离向量多播路由选择协议 DVMRP (Distance Vector Multicast Routing Protocol)**是在耳联网上使用的第一个多播路由选择协议[RFC 1075]。由于在 UNIX系统中实现 RIP 的程序叫作 routed,所以在 routed 的前面加表示多播的字母m,叫作 mrouted,它使用 DVMRP 在路由器之间传播路由信息。
- 基于核心的转发树CBT(Core Based Tree)[RFC 2189,2201]。这个协议使用核心路由器作为转发树的根节点。一个大的自治系统 AS可划分为几个区域,每一个区域选择一个核心路由器(也叫作中心路由器 center router,或汇聚点路由器 rendezvous router)。
- 开放最短通路优先的多播扩展MOSPF (Multicast extensions toOSPF)[RFC 1585]。这个协议是单播路由选择协议OSPF的扩充,使用于一个机构内。MOSPF使用多播链路状态路由选择创建出基于源点的多播转发树。
- 协议无关多播-稀疏方式 PIM-SM(Protocol Independent Multicast-Sparse Mode)[RFC7761,STD83]。这是唯一成为互联网标准的一个协议,它使用和CBT 同样的方法构成多播转发树。采用“协议无关”这个名词是强调:虽然在建立多播转发树时是使用单播数据报来和远程路由器联系的,但这并不要求使用特定的单播路由选择协议。这个协议适用于组成员的分布非常分散的情况。
- 协议无关多播-密集方式:PIM-DM (Protocol Independent Multicast-Dense Mode)[RFC3973]。这个协议适用于组成员的分布非常集中的情况,例如组成员都在一个机构之内。PIM-DM 不使用核心路由器,而是使用洪泛方式转发数据报。