本节书摘来自异步社区《IP组播(第1卷)》一书中的第2章,第2.1节,作者【美】Josh Loveless(乔希 勒夫莱斯) , Ray Blair(雷 布莱尔) , Arvind Durai(阿温德 杜莱),更多章节内容可以访问云栖社区“异步社区”公众号查看
IP组播(第1卷)第 1 章讨论了单播消息、广播消息和组播消息之间的区别。本章将深入探讨二层IP组播消息,以及它们是如何在二层域中传输的。本章的内容将包含二层域中组播功能的基本组成部分,以及组播的部署。
在学习二层组播之前,我们必须先讨论数据包转发的基础概念,这样才能为这一过程建立一条基线。封装是OSI模型中的重要概念,在数据通信尤其是IP网络中起到重要的作用。封装是指通过一种方式,在OSI参考模型的每一层上添加相关信息,这些信息的作用是处理和转发数据。把它想象成洋葱,每个洋葱有很多层皮。信息是以头部和尾部的格式添加到每一层的。在OSI参考模型的每一层上,数据都会被处理、封装,然后再发给下一层。图2-1中描绘了这个工作流程。
来自于应用层、表示层和会话层的数据会在OSI参考模型第4层上封装传输协议信息。这些信息是以特定的端口号封装在TCP和/或UDP中的。举例来说,TCP端口80表示常用的Web流量。这样操作系统就能够将数据转发给正确的应用程序或子程序了。OSI参考模型的第3层上会添加逻辑转发信息(源和目的IP地址),这样网络设备就可以决定将数据转发到目的地的最优路径了。最后在OSI参考模型的第2层,会添加硬件转发信息(源和目的MAC地址)。这样数据就能够在物理上被传输给正确的主机或网络中正确的下一跳设备。第4层传输的数据称为数据段,第3层传输的数据称为数据包,第2层传输的数据称为数据帧。
在数据穿越网络的每一步中,路由器和交换机都会使用这些封装的头部和尾部信息,来做出如何传输数据的决策。第1章中的图已经展示过这些转发行为,并且我们已经了解到IP组播数据包相比于单播和广播数据包的独特之处。从第2层的角度看来,这只是全部内容其中的一部分。
为了更好地解释数据包在网络中传输时都发生了什么,我们会分别介绍二层和三层的传输过程。图2-2中展示了这一过程中的第一步。在发送方能够封装任何数据之前,它必须知道目的地的位置。发送方会通过简单的检查,确认接收方设备是否与自己位于相同的子网。这种检查是通过将目的IP地址与本地子网进行对比完成的。在本例中,接收方不属于自己所在的子网。因此发送方必须为这个目的地使用配置中的路由,在大多数情况中,这个路由指向默认网关。
在发送方能够与默认网关通信前,它必须知道默认网关的MAC(媒体访问控制)地址。由于发送方需要发送的数据目的地位于不同的网段,因此它需要首先通过 ARP(地址解析协议)请求,发现默认网关(IP地址为10.1.1.1)的MAC地址。默认网关会以自己的MAC地址来响应这个ARP请求。最后发送方拥有了足够的信息,并使用主机A的IP地址作为目的IP地址,使用默认网关的MAC地址作为目的MAC地址来封装数据,如图2-2所示。
默认网关或路由器上拥有三层路由信息,它们通过这些信息能够知道主机 A 在物理上连接的位置。同时这些信息决定了应该从哪个出站接口将这个消息发送出去。如果与邻居路由器之间建立了路由协议邻接关系的话,路由器应该已经知道邻居路由器的MAC地址。如果不知道的话,路由器会发起与发送方相同的ARP请求过程。有了邻居路由器的MAC地址后,路由器就可以转发消息了。工程师一定要理解这一点:两个二层地址(SA和DA,也就是源地址和目的地址)会随着网络中的每一跳进行改变,而三层地址永远不变,只用于执行路由查找。
当数据包转发到了最后一跳路由器时,路由器必须进行ARP查找并确定目的IP地址对应的目的MAC地址。这个问题只是有时存在的,这是由以太网的历史导致的。以太网是连接到逻辑总线网络的物理媒介。在传统的总线网络中,多台设备能够连接到一条线缆上。如果网关路由器与目的主机之前没有进行过任何通信,它就会发出ARP请求,并在收到响应后,最终把主机的MAC地址作为目的MAC地址封装到数据帧中,如图2-3所示。
当最后一跳路由器正确地封装了消息后,接下来会由交换机负责将数据包发送给正确的主机,而且是只发送给这台主机。这也是传统二层交换机的主要功能——发现本地连接设备的位置。它会通过记录直连设备发来的数据帧中的源MAC地址,以此实现这一功能。通过这种行为,交换机会维护一个MAC地址表,并通过智能二层转发决策,提高以太网的转发效率。
这个过程对于图中展示的单播数据包来说简单易懂。在学习本章内容时,读者应该考虑以下内容。
如果数据包是组播数据包的话,并且一台交换机连接的多台主机都注册了目的组播组,会发生什么?如果有多个端口都需要复制的数据包(也就是说多个网段中的多台主机都需要复制的数据包),交换机仍然能够做出高效的转发决策吗?如果数据帧中的MAC地址不是主机的物理地址,交换机会把它当作非接收方,进行处理吗?如何在二层识别组播组?