示例:配置无显式隧道的自动 IP 组播
了解 AMT
自动组播隧道 (AMT) 可跨仅单播网络孤岛促进启用组播的网络之间的动态组播连接。此类连接使服务提供商、内容提供商及其客户即使缺乏端到端组播连接,也能参与提供组播流量。
具有模块化端口集中器 (MPC) 且运行 Junos 13.2 或更高版本的 MX 系列以太网服务路由器支持 AMT。基于 i-chip 的 MPC 也支持 AMT。AMT 支持平稳重启 (GR),但不支持 平稳路由引擎切换 (GRES)。
AMT 在已知的启用组播的中继点(AMT 中继)和只能通过单播(AMT 网关)访问的网络点之间动态建立单播封装隧道。 图 1 显示了自动组播隧道连接。
AMT 协议在中继和网关之间提供发现和握手功能,以动态建立隧道,而无需显式配置每隧道。
AMT 中继通常是具有本机 IP 组播连接的路由器,可聚合潜在的大量 AMT 隧道。
Junos OS 实现支持以下 AMT 中继功能:
IPv4 组播流量和 IPv4 封装
位于组播网络上的已知源
通过快速丢弃来自网关的组播数据包来防止拒绝服务攻击。
将每路由复制到所需的所有 AMT 隧道的完全扇出
能够收集 AMT 隧道上的正常接口统计信息
不支持位于 AMT 网关后面的组播源。
AMT 支持 PIM 稀疏模式。AMT 不支持密集模式操作。
AMT 应用程序
由于许多本地服务提供商未启用组播,因此传输服务提供商在互联网方面面临挑战。挑战在于如何吸引内容所有者通过其骨干网传输视频和其他组播流量。如果内容所有者必须为大多数订阅者的单播流付费,则他们的成本模型可能会高得令人望而却步。
在更多的本地提供商启用组播之前,互联网工程任务组 (IETF) 提出了一个过渡策略,并在开源软件中实施。此策略称为无显式隧道的自动 IP 组播 (AMT)。AMT 涉及在组播网络中的对等点设置中继,这些点可以从连接到单播网络的主机上安装的网关访问。
如果没有 AMT,当连接到仅单播网络的用户想要接收多播内容时,内容所有者可以允许用户通过单播加入。但是,内容所有者会产生额外的成本,因为所有者需要额外的带宽来支持单播订阅者。
AMT 允许任何主机接收多播。客户端上是一个作为单个主机的 AMT 网关。网关找到 AMT 中继(可能是主机,但更典型的是路由器)后,网关会定期通过动态创建的 UDP 隧道向中继发送互联网组管理协议 (IGMP) 消息。AMT 中继和网关协同合作,将来自组播网络中的组播流量传输到最终用户站点。AMT 中继在本地接收流量,并将其单播封装到网关。这允许互联网上的任何人创建动态隧道来下载组播数据流。
借助 AMT,支持多播的服务提供商可以为内容所有者提供多播服务。当仅单播本地提供商的客户想要接收内容并使用 AMT 加入进行订阅时,启用多播的传输提供商可以有效地将内容传输到仅单播本地提供商,后者将其发送给最终用户。
对于传输服务提供商(可以访问内容,但没有很多最终用户)来说,AMT 是向内容所有者提供多播服务的绝佳方式,否则这在经济上是不可行的。对于尚未在所有下游设备上获得组播支持的本地服务提供商来说,这也是一种有用的过渡策略。
AMT 还可用于连接由仅单播服务提供商分隔的两个启用多播的服务提供商。
同样,网络启用组播的本地服务提供商可以使用 AMT,通过组播功能有限的传统边缘设备(如数字用户线接入复用器 (DSLAM))传输组播流量。
AMT 实施的技术细节如下:
三次握手用于加入来自单播接收器的组,以防止欺骗和拒绝服务 (DoS) 攻击。
充当复制服务器的 AMT 中继加入多播组,并将多播流量转换为多个单播流。
发现机制使用任播,从而可以发现网络拓扑中最靠近网关的中继。
充当客户端的 AMT 网关是加入多播组的主机。
中继上的隧道计数限制可以限制带宽使用并避免服务降级。
互联网草案draft-ietf-mboned-auto-multicast-10.txt无 显式隧道的自动 IP 组播 (AMT) 中详细介绍了 AMT。
AMT 操作
AMT 用于跨仅单播网络孤岛在启用组播的网络之间动态创建组播隧道。为此,将依次执行几个步骤。
AMT 中继(通常为路由器)将任播地址前缀和路由播发到单播路由基础结构中。
AMT 网关(主机)将 AMT 中继发现消息发送到可通过仅单播基础结构访问的最近 AMT 中继。为了减少重放攻击或字典攻击的可能性,中继发现消息包含加密随机数。加密随机数是仅使用一次的随机数。
拓扑中最近的中继接收 AMT 中继发现消息,并在 AMT 中继通告消息中返回发现消息中的随机数。这使网关能够学习中继的唯一 IP 地址。AMT 中继现在有一个地址,用于它将加入的所有后续 (S,G) 条目。
AMT 网关向 AMT 中继的唯一 IP 地址发送 AMT 请求消息,以开始加入 (S,G) 的过程。
AMT 中继将 AMT 成员身份查询发送回网关。
AMT 网关接收 AMT 查询消息,并发送包含 IGMP 联接消息的 AMT 成员身份更新消息。
AMT 中继向源发送加入消息,以在本地组播基础结构中构建本机组播树。
从源接收数据包时,AMT 中继会将数据包复制到传出接口列表中的所有接口,包括 AMT 隧道。然后,组播流量封装在单播 AMT 组播数据消息中。
为了维护 AMT 中继中的状态,AMT 网关会定期发送 AMT 成员身份更新。
建立隧道后,将刷新 AMT 隧道状态,并发送每条成员资格更新消息。刷新消息的超时为 240 秒。
当 AMT 网关离开组时,AMT 中继可以释放与隧道关联的资源。
请注意以下操作详细信息:
AMT 中继创建 AMT 伪接口(隧道接口)。AMT 隧道接口作为通用 UDP 封装 (UD) 逻辑接口实现。这些逻辑接口的标识符格式为 ud-fpc/pic/port.unit。
所有组播数据包(数据和控制)都封装在单播数据包中。UDP 封装用于使用 IANA 为 AMT 保留的 UDP 端口号 (2268) 的所有 AMT 控制和数据包。
AMT 中继为每个组播会话维护一个接收方列表。中继维护已加入特定组或 (S,G) 对的每个网关的组播状态。
配置 AMT 协议
要配置 AMT 协议,请包含以下 amt
语句:
amt { relay { accounting; family { inet { anycast-prefix ip-prefix</prefix-length>; local-address ip-address; } } secret-key-timeout minutes; tunnel-limit number; } traceoptions { file filename <files number> <size size> <world-readable | no-world-readable>; flag flag <flag-modifier> <disable>; } }
您可以在以下层次结构级别包含此语句:
[edit protocols]
[edit logical-systems logical-system-name protocols]
[edit routing-instances routing-instance-name protocols]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols]
在以下示例中,仅 [edit protocols]
标识层次结构。
启用 AMT 的最低配置是指定 AMT 本地地址和 AMT 任播前缀。
参见
为 AMT 接口配置默认 IGMP 参数
您可以选择为所有 AMT 隧道接口配置默认 IGMP 参数。虽然,通常您不需要更改值。要配置所有 AMT 中继隧道的默认 IGMP 属性,请包含以下 amt
语句:
amt { relay { defaults { (accounting | no-accounting); group-policy [ policy-names ]; query-interval seconds; query-response-interval seconds; robust-count number; ssm-map ssm-map-name; version version; } } }
您可以在以下层次结构级别包含此语句:
[edit protocols igmp]
[edit logical-systems logical-system-name protocols igmp]
[edit routing-instances routing-instance-name protocols igmp]
[edit logical-systems logical-system-name routing-instances routing-instance-name protocols igmp]
在层次结构级别包含的 [edit protocols igmp amt relay defaults]
IGMP 语句与在 或 [edit protocols igmp interface interface-name]
层次结构级别包含[edit protocols igmp]
的 IGMP 语句具有相同的语法和用途。这些语句如下:
您可以收集 IGMP 加入和离开事件统计信息。要启用所有 AMT 接口的 IGMP 加入和离开事件统计信息的收集,请包含以下
accounting
语句:user@host# set protocols igmp amt relay defaults accounting
启用 IGMP 记帐后,您必须配置路由器以将记录的信息过滤到文件中或显示给终端。您可以存档事件文件。
要禁用收集所有 AMT 接口的 IGMP 加入和离开事件统计信息,请包含以下
no-accounting
语句:user@host# set protocols igmp amt relay defaults no-accounting
您可以在接口级别过滤不需要的 IGMP 报告。要过滤不需要的 IGMP 报告,请使用策略的
route-filter
语句匹配组地址,从而定义仅匹配 IGMP 组地址(对于 IGMPv2)的策略。通过使用策略的语句匹配组地址,并使用策略的route-filter
source-address-filter
语句匹配源地址,定义策略以匹配 IGMP (S,G) 地址(对于 IGMPv3)。在以下示例中,将创建amt_reject策略以匹配组地址和源地址。user@host# set policy-options policy-statement amt_reject from route-filter 224.1.1.1/32 exact user@host# set policy-options policy-statement amt_reject from source-address-filter 192.168.0.0/16 orlonger user@host# set policy-options policy-statement amt_reject then reject
要在不希望接收特定组或 (S,G) 报告的接口上应用 IGMP 报告过滤,请包含该
group-policy
语句。以下示例将 amt_reject 策略应用于所有 AMT 接口。user@host# set protocols igmp amt relay defaults group-policy amt_reject
您可以更改所有 AMT 接口的 IGMP 查询间隔,以减少或增加发送的主机查询消息数。在 AMT 中,发送主机查询消息是为了响应来自网关的成员资格请求消息。中继上配置的查询间隔必须与网关上配置的成员资格请求计时器兼容。要修改此间隔,请包含
query-interval
语句。以下示例将主机查询间隔设置为 250 秒。user@host# set protocols igmp amt relay defaults query-interval 250
IGMP 查询器路由器定期发送常规主机查询消息。这些消息请求组成员身份信息,并发送到所有系统多播组地址 224.0.0.1。
您可以更改 IGMP 查询响应间隔。查询响应间隔乘以可靠计数是查询器路由器发送主机查询消息与从主机接收响应之间可以经过的最长时间。通过改变此间隔,您可以调整 AMT 接口上的 IGMP 消息数。要修改此间隔,请包含
query-response-interval
语句。以下示例将查询响应间隔配置为 20 秒。user@host# set protocols igmp amt relay defaults query-response-interval 20
您可以更改 IGMP 稳健计数。可靠计数用于调整 AMT 接口上的预期数据包丢失。增加可靠计数允许更多的数据包丢失,但会增加子网的离开延迟。若要修改可靠计数,请包含
robust-count
语句。以下示例将可靠计数配置为 3。user@host# set protocols igmp amt relay defaults robust-count 3
可靠的计数会自动更改 IGMPv2 和 IGMPv3 的某些 IGMP 消息间隔。
在运行 IGMPv2 的共享网络上,当查询路由器收到 IGMP 离开消息时,它必须发送指定次数的 IGMP 组查询消息。发送的 IGMP 组查询消息数由可靠计数决定。查询消息之间的间隔由最后一个成员查询间隔确定。此外,IGMPv2 查询响应间隔乘以可靠计数,以确定发送主机查询消息和从主机接收响应之间的最长时间量。
有关 IGMPv2 可靠计数的详细信息,请参阅 RFC 2236, 互联网组管理协议,版本 2。
在 IGMPv3 中,接口状态的更改会导致系统立即从该接口传输状态更改报告。如果一个或多个组播路由器错过了状态更改报告,则会重新传输该报告。重新传输的次数是稳健计数减去 1。在 IGMPv3 中,稳健计数也是确定组成员间隔、旧版本查询器间隔和其他查询器存在间隔的一个因素。
有关 IGMPv3 可靠计数的详细信息,请参阅 RFC 3376, 互联网组管理协议,版本 3。
您可以将特定于源的组播 (SSM) 映射应用于 AMT 接口。SSM 映射将 IGMPv1 或 IGMPv2 成员资格报告转换为 IGMPv3 报告,从而允许运行 IGMPv1 或 IGMPv2 的主机参与 SSM,直到主机过渡到 IGMPv3。
SSM 映射适用于与策略匹配的所有组地址,而不仅仅是符合 SSM 寻址约定(IPv4 为 232/8)的组地址。
在此示例中,您将创建一个策略来匹配 232.1.1.1/32 组地址,以便转换为 IGMPv3。然后,定义将策略与找到这些组地址的 192.168.43.66 源地址相关联的 SSM 映射。最后,将 SSM 映射应用于所有 AMT 接口。
user@host# set policy-options policy-statement ssm-policy-example term A from route-filter 232.1.1.1/32 exact user@host# set policy-options policy-statement ssm-policy-example term A then accept user@host# set routing-options multicast ssm-map ssm-map-example policy ssm-policy-example user@host# set routing-options multicast ssm-map ssm-map-example source 192.168.43.66 user@host# set protocols igmp amt relay defaults ssm-map ssm-map-example
参见
示例:配置 AMT 协议
此示例说明如何配置自动组播隧道 (AMT) 协议,以便跨仅单播网络孤岛促进启用组播的网络之间的动态组播连接。
要求
准备工作:
配置路由器接口。
配置内部网关协议或静态路由。请参阅 Junos OS 路由协议库。
概述
在此示例中,主机 0 和主机 2 是单播云中的组播接收器。其默认网关设备是 AMT 网关。R0 和 R4 仅配置了单播协议。R1、R2、R3 和 R5 配置了 PIM 组播。主机 1 是组播云中的源。R0 和 R5 配置为执行 AMT 中继。主机 3 和主机 4 是组播接收器(或直接连接到接收器的源)。此示例显示配置了 AMT 中继本地地址和任播前缀作为其自己的环路地址的 R1。该示例还显示了配置了已启用隧道服务的 R0。
配置
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,将命令复制并粘贴到层次结构级别的 CLI [edit]
中,然后从配置模式进入 commit
。
set protocols amt traceoptions file amt.log set protocols amt traceoptions flag errors set protocols amt traceoptions flag packets detail set protocols amt traceoptions flag route detail set protocols amt traceoptions flag state detail set protocols amt traceoptions flag tunnels detail set protocols amt relay family inet anycast-prefix 10.10.10.10/32 set protocols amt relay family inet local-address 10.255.112.201 set protocols amt relay tunnel-limit 10 set protocols pim interface all mode sparse-dense set protocols pim interface all version 2 set protocols pim interface fxp0.0 disable set chassis fpc 0 pic 0 tunnel-services bandwidth 1g
程序
分步过程
以下示例要求您在配置层次结构中导航各个级别。有关导航 CLI 的信息,请参阅《Junos OS CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要在 R1 上配置 AMT 协议,请执行以下操作:
配置 AMT 跟踪操作。
[edit protocols amt traceoptions] user@host# set file amt.log user@host# set flag errors user@host# set flag packets detail user@host# set flag route detail user@host# set flag state detail user@host# set flag tunnels detail
配置 AMT 中继设置。
[edit protocols amt relay] user@host# set relay family inet anycast-prefix 10.10.10.10/32 user@host# set family inet local-address 10.255.112.201 user@host# set tunnel-limit 10
在 R1 的接口上配置 PIM。
[edit protocols pim] set interface all mode sparse-dense set interface all version 2 set interface fxp0.0 disable
启用隧道功能。
[edit chassis] set fpc 0 pic 0 tunnel-services bandwidth 1g
如果完成设备配置,请提交配置。
user@host# commit
结果
在配置模式下,输入 show chassis 和 show protocols 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的说明以更正配置。
user@host# show chassis fpc 0 { pic 0 { tunnel-services { bandwidth 1g; } } }
user@host# show protocols amt { traceoptions { file amt.log; flag errors; flag packets detail; flag route detail; flag state detail; flag tunnels detail; } relay { family { inet { anycast-prefix 10.10.10.10/32; local-address 10.255.112.201; } } tunnel-limit 10; } } pim { interface all { mode sparse-dense; version 2; } interface fxp0.0 { disable; } }
验证
要验证配置,请运行以下命令:
显示 AMT 统计信息
显示 AMT 摘要
显示 AMT 隧道