《IP组播(第1卷)》一1.4 三层组播是建立在TCP/IP协议栈中的

简介:

本节书摘来自异步社区《IP组播(第1卷)》一书中的第1章,第1.4节,作者【美】Josh Loveless(乔希 勒夫莱斯) , Ray Blair(雷 布莱尔) , Arvind Durai(阿温德 杜莱),更多章节内容可以访问云栖社区“异步社区”公众号查看

1.4 三层组播是建立在TCP/IP协议栈中的

IP组播是建立在TCP/IP协议栈中的。也就是说,传输组播数据帧和数据包所需的协议是由Internet工程任务组(IETF)进行控制的。IETF成员通过RFC发布和管理相关协议,也就是说IP组播协议是开放标准。

注释
 

组播协议IETF标准适用于IPv4和IPv6组播技术;但和其他IP协议一样,这并不意味着所有厂商处理组播的方式都是相同的,同时也不意味着所有组播协议的实施都能够与标准完美兼容。
使用TCP/IP协议栈也意味着IP组播隶属于互联网数字分配机构(IANA)。IANA负责控制和协调公共地址空间中的IP地址,也包括分配组播地址。

1.4.1 这是个组

三层单播、广播和组播的对比和比较可以从组播传输的唯一性入手。广播和组播之间最主要的区别在于,组播接收方可以连接在任意网段或子网中,而子网的范围却决定了广播的边界,也称为广播域。因此路由器和交换机必须能够知道哪些网段或子网中连接着对(某个或某些)组播组感兴趣的组播主机。发送方和接收方通过组成员身份来管理这一过程。

在使用广播时,设备会在数据包中使用特定的目的 IP 地址,以便将这个广播数据包发送给所有接收方主机。路由器和交换机无须借助上层协议负载就能够识别出组播,因为子网指定了组播边界。下面我们把数据包头部的格式画出来,对比单播IPv4数据包、广播IPv4数据包和组播IPv4数据包的区别。图1-9展示了基本的单播IP数据包。


ce7b16322709ab104d5a8be6dfa7a4d8f048e9b1

转发单播消息的工作很简单——沿着去往IP目的地的方向转发。广播的转发也很简单。广播数据包也是沿着去往目的地的方向转发,只不过需要把它复制多份,向所有本地以太网段(VLAN或子网)中的交换机端口进行转发。广播分为两类:所有主机广播和定向广播。所有主机广播是发给所有子网中的所有IP主机的数据包。定向广播是发给某个子网/超网或VLAN中所有IP主机的数据包。

注释
 

复制是指对数据包进行简单的拷贝,然后将其转发到网络中。只要单个数据包有多个接收方,就需要执行复制,比如广播或组播。复制也是所有网络设备(比如交换机或路由器)的基本功能。
如果组播中包含所有主机,那么本地交换机会根据收到这个数据包的逻辑网段,复制并向所有属于这个逻辑网段的接口发送这个广播数据包。

图 1-10 描绘了一个本地网段上的所有主机广播。路由器默认不会转发从属于某个子网的接口收到的所有主机广播,这样就把广播域与网络的其他部分隔离开来。


0556a84359c80a44b599dd574f38ff4906ab8ab3

如果是定向广播的话,路由器会把它转发到目的子网,并且由那个子网中的交换机将其复制给所有主机,如图1-11所示。


50ad689cfc86f6ba4b7bd9bd5bd010cca685698d

同一个子网中组播和广播主机的区别比较有趣。如果子网中只有一部分主机需要接收数据包该怎么办?这些主机可以注册一个组地址,然后发送方向这个组地址发送消息,这样可以减轻发送数据包的负担,只向网段中的某些主机发送,减少了复制成本,并且只会占用主机所属LAN中的带宽。图1-12展示了这种情景。


c33200c0526018159440467bea319e5c44344c0d

广播和组播之间的主要区别在于,组播流的注册主机可以位于多个网段中。如何能够让路由器和交换机只把组播数据包复制给这些注册主机,而不会复制给一个网络中或Internet中所有网段上的所有主机?组播发送方使用特殊的目的IP地址传输IP数据包,这种目的IP地址称为组地址,这个IP地址对应着特殊的组播MAC地址。你可能已经注意到了,组播数据帧中的二层目的地址并不是本地子网中的地址。第2章将对组播MAC地址进行详细说明。

1.4.2 IPv4三层组播编址中定义的组

组地址(Group Address)代表一组对这条数据流感兴趣的节点。组地址与源IP地址结合在一起标识了组播流。接收方主机要向上游组成员网络设备表达它对这个组播流感兴趣的意愿。表达意愿的行为称为加入组。

IPv4和IPv6组地址的编址由几个IETF RFC进行控制。最重要并且当前使用的RFC是5771,这个文档记录了组播组地址空间的最终分配方案,以及空间中的每个组类型。组播组使用的地址空间来自于IPv4有类地址空间。表1-2中列出了有类路由编址的划分方案。


3423c0634c537f0b3f16a1fcfa24078f700210b6

RFC 5771为组播组保留了D类地址空间,这个RFC文档代替或更新了几个RFC,其中包括RFC 988。RFC 988是1986年颁布的,它是最初将1110保留为IPv4组播组地址开头4比特的文档。RFC 988代替了RFC 966,后者是最初的IP组播理论RFC。RFC 988和RFC 966都是重要的组播历史文档,如果读者希望更深入地学习组播技术和术语,可以从这个两个文档入手,详细了解组播的理论。

1.4.3 IPv4组播组地址的分配

RFC 5771根据IANA对于组播组地址的分配和部署建议,进一步细化了D类地址的分配。表1-3中列出了分配方式。


68b98821e007eca595dd158846ef08a021a38417

接下来简要解释一下每个组播类别及其适用场合。

本地网络控制(224.0.0.0/24):本地控制地址块用于具体的协议控制流量。路由器接口会侦听但不会转发本地控制组播;比如OSPF“所有路由器”(224.0.0.5)。IANA负责控制这个地址块中的地址分配。在IANA网站(www.iana.org)中可以看到完整的本地网络控制地址列表。
注释
 

只有当节点上启用了控制组特性,路由器才会侦听本地控制数据包。比如路由器接口上只启用了RIPv2,那么这个接口就只会处理RIPv2的控制组数据包(组地址为224.0.0.9)。
互联网络控制(224.0.1.0/24):互联网络控制地址块用于路由器接口可能会转发到ASN(自治系统编号)或Internet中的协议控制流量。比如RFC 4330中定义的NTP(网络时间协议),组播地址为224.0.1.1,或者RFC 2730中定义的组播DHCP发现协议,组播地址为224.0.1.68。互联网络控制组中的地址分配也是由IANA进行统一管理的。
点对点(I:224.0.2.0~224.0.255.255;II:224.3.0.0~224.4.255.255;III:233.252.0.0~233.255.255.255):传统上这些地址块中的地址是分配给既不属于本地,也不属于互联网络控制的应用。路由器接口可能会在全球范围内转发点对点(AD-HOC)数据包。大多数使用点对点地址块的应用都需要多个地址(比如小于/24的地址空间)。IANA负责控制公共点对点地址块的分配,未来将会从点对点III中分配地址,如果相关应用无法与本地控制或互联网络控制相符合的话。在公共网络中也可以使用为分配的点对点地址。
SDP/SAP(224.2.0.0/16):会话描述协议/会话通知协议(SDP/SAP)地址块用于通过SAP接收地址的应用,定义在RFC 2974中。
指定源组播(232.0.0.0/8):SSM(指定源组播)编址定义在RFC 4607中。SSM是一种IP组播组模式,在这种模式中,组播流会被转发给接收方,同时接收方会明确表达它们只希望接收一些组播源发来的组播流。SSM多用于一对多应用中。使用SSM地址块不需要IANA的官方分配,因为这些应用对于主机来说是位于本地的;不过依照IANA的策略,这些个址块是专为SSM应用保留的,不能用于其他目的。本章及其他章节中会进一步讨论SSM。
注释
 

IANA最早将232.0.0.0/8分配给VMTP(多用消息处理协议)。
GLOP(233.0.0.0/8):这些地址是在全球范围内静态分配的。每个静态分配的GLOP都对应着一个16比特的ASN(自治系统编号),ASN也是由IANA分配的。ASN会以点分十进制格式(X.Y)插入到组播组地址中,成为组播组地址中间的2字节。比如ASN为X.Y,GLOP分配的地址就是233.X.Y.0/24。被分配了32比特ASN的域应该请求点对点III地址块中的地址分配。另一种用法是用在IPv6组播组编址中。因为SAN是公共的,因此IANA无须分配GLOP组。GLOP地址块是用于公共事务、网络和Internet运营商的。IANA将GLOP编址当作实验性编址,233.252.0.0~233.255.0.0是保留地址。
管理范围(239.0.0.0/8):管理范围的地址旨在用于私有域本地,定义在RFC 2365中。这些组地址的功能与RFC 1918私有IP地址块(比如10.0.0.0/8或172.16.0.0/16~172.31.0.0/16地址块)的功能类似。网络架构中可以使用这个地址块来创建地址规划方案,要求这个方案能够完美符合私有域的需求,并且未来还可以因为不同的地址位置、应用或网络进一步细分。第5章详细介绍了这个地址块中的地址划分。

相关文章
|
7月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
124 4
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
24天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
66 2
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
2月前
|
网络协议 安全 大数据
TCP/IP协议栈中何时使用TCP?
【10月更文挑战第20天】TCP/IP协议栈中何时使用TCP?
35 2
|
3月前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
497 2
|
4月前
|
网络协议 算法 Linux
在Linux中,TCP/IP协议栈的工作原理是什么?
在Linux中,TCP/IP协议栈的工作原理是什么?
|
6月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
56 3
|
7月前
|
网络协议 Java 程序员
java网络编程什么是TCP/IP协议栈?
java网络编程什么是TCP/IP协议栈?
59 2
|
缓存 网络协议 Unix
最详细的Linux TCP/IP 协议栈源码分析
最详细的Linux TCP/IP 协议栈源码分析