1: 交換機的默認行爲是把多播幀向除源端口之外的所有端口擴散。Cisco執行專有的CGMP和非專有的IGMP Snooping,來協助管理網絡中的多播流量。
交換機洪泛多播流量的原因是在橋接表中沒有目的地址的表項。多播地址從不作爲源地址出現。
2: 默認情況下路由器不轉發多播流量,除非它們具有多播能力,並有一個多播路由選擇協議,例如DVMRP(Distance Vector Multicast Routing Protocol)或PIM(Protocol-Independent Multicast)。
一個網絡管理員爲一個應用分配一個多播第3層地址。接着從第3層多播地址中計算出第2層端口地址。配置一個多播應用時,NIC將端口地址加入它的有效MAC地址列表中。通常這個列表由內置的MAC地址和任何用戶配置的地址組成。只要工作站收到一個具有匹配的多播目的地址的幀時,接收者將幀發送給CPU。
Layer 3 Multicast Address:
<1>保留鏈路本地地址 (從不被Router轉發,且必須保持在本地的LAN網段上,並且一直以1的生存時間進行發送)
224.0.0.1 本子網中的所有系統
224.0.0.2 本子網中的所有路由器
224.0.0.5 OSPF DROther
224.0.0.6 OSPF DR
224.0.0.9 RIPv2 路由器
224.0.0.10 EIGRP路由器
224..0.0.12 DHCP Server/中繼代理
224.0.0.13 所有PIM路由器
224.0.0.22 IGMP
224.0.0.25 Router to Switch(Such as:RGMP-路由器端口組管理協議)
<2>全球範圍地址 (用於組織間和跨越Internet的多播數據)
224.0.1.0 ~ 238.255.255.255
<3>受限範圍地址 (限制到一個本地組或組織)
239.0.0.0 ~ 239.255.255.255
<4>GLOP地址(保留給已有一個保留AS號的組織)
233.0.0.0 /8
域的AS號嵌入在233.0.0.8/8範圍的第2和第3個字節中。
例:AS 62010 被寫成16進制的F23A ,分開兩個字節F2和3A 的結果是十進制的242和58,這提供給子網233.242.58.0,它全球保留給AS 62010使用.
Layer 2 Multicast Address:
分配了一個第3層多播地址後,第2層多播地址會自動從這個IP地址中產生。
主機將IP地址後23比特複製到MAC地址的最後24位中,高比特爲0。
MAC多播前3字節(24比特)是0x01-00-5E。這是爲多播保留的。
Layer3組播地址爲28 bits,Layer2組播地址爲23 bits,這樣layer3組播地址的5個bits被忽略。至使一個MAC多播對應32個IP多播。即一個第2層多播地址對應32個第3層多播。
將layer3組播地址轉換爲layer2組播地址方式:
1>取出layer3組播地址的後23位
2>前邊加上layer2組播專用的 01.00.5e.
例:
224.0.0.1
1>後23位爲00.0001
2>前邊加上01.00.5e
3>結果爲:0100.5e00.0001
Layer 2 Multicast vs. Layer 3 Multicast Address
IP to MAC:
- write down 0100.5e and ignore the first (from the left) octet of the IP address
- If the second octet of the IP is > 128, then subtract 128 from it (to compensate for the ignored 24th bit)
- convert the three octets to hex and copy into the MAC address
- write down 0100.5e and ignore the first (from the left) octet of the IP address
- If the second octet of the IP is > 128, then subtract 128 from it (to compensate for the ignored 24th bit)
- convert the three octets to hex and copy into the MAC address
MAC to IP
- Drop the 0100.5e
- Convert each pair of nybbles left into decimal
- The valid multicast groups are then {224-239}.{x1,y1}.x2.x3 where y1 = the first decimal number + 128
- Convert each pair of nybbles left into decimal
- The valid multicast groups are then {224-239}.{x1,y1}.x2.x3 where y1 = the first decimal number + 128
PC’s Multicast Protocol:IGMPv1,IGMPv2,IGMPv3
IGMP(主機成員協議)主要由多播主機使用,它通知本地多播路由器它們想加入一個特定多播組時並開始接收組流量。
使用通過IGMP獲得的信息,路由器基於每個接口維護一張多播組成員表。
Cisco IOS 11.3(2)T及以後的版本默認使用IGMPv2,IGMPv3可用於Cisco IOS 12.0(15)S及以後的版本。
IGMPv1:(隱式離開多播組)
IGMPv1消息類型:
² 主機成員查詢 (由路由器發起,默認爲60 s/t)
² 主機成員報告
主機成員查詢消息在第3層中的目的地址:224.0.0.1;第2層地址:01-00-5E-00-00-01;IGMP頭組地址:0.0.0 .0,轉換爲網段上所有組的所有多播主機的查詢。IGMPv1不能針對特定組查詢。
每個網段上只有一臺路由器發佈成員查詢消息。IGMPv1中,由DR發出查詢;IGMPv2中,該網段上有最低IP地址的多播路由器發出查詢。3個查詢後沒有特定多播組的成員報告,則路由器停止轉發這個組的多播分組。
每個網段上只有一臺主機發送主機成員報告。主機接收到成員查詢時,如果它想繼續接收這個多播組的多播幀,它等待一個10秒的隨機定時器過期後發送一個成員報告。如果在等待期間監控到同網段上另一個主機回覆了一個主機成員報告,則它取消定時器並抑制報告。這個行爲避免網段和路由器遭遇主機成員報告的洪泛。
IGMPv2:(顯式離開多播組)
IGMPv2消息類型:
² 0x11 – 成員查詢 (IGMPv2允許對一個特定組查詢)
² 0x12 – 版本1成員報告
² 0x16 – 版本2成員報告
² 0x17 – 離開組
路由器收到特定網段上的主機的離開組消息,不會立刻停止對該網段轉發多播分組。因爲它保存了一張活動在子網上的惟一組成員列表,而不是成員的個別主機,所以在收到主機離開組消息後,它會發送對該網段的一個特定多播組查詢,如果有其它機還想接收,它們會回覆一個成員報告;否則路由器會超時這個查詢分組,並停止轉發多播分組到這個網段上。
IGMPv1和IGMPv2互操作:
² 路由器使用IGMPv1,主機混合使用IGMPv1與IGMPv2,則主機必須使用IGMPv1。因爲IGMPv1路由器不理解IGMPv2的成員離開消息。
² 路由器使用IGMPv2,主機混合使用IGMPv1與IGMPv2,則路由器只發送IGMPv1。因爲IGMPv1主機不理解特定組的成員查詢消息。如果IGMPv2主機發送了成員離開消息,路由器必須忽略它,因爲它必須仍然發佈常規的查詢以防IGMPv1的成員仍在網段中。
² IGMPv1與IGMPv2路由器在同一網段中出現,IGMPv2路由器必須被配置爲IGMPv1,且IGMPv1路由器不會發覺到IGMPv2路由器的存在。
IGMPv3:(源過濾支持)
它允許多播主機通知路由器它想接收哪個組的多播分組,以及期望這個分組來自哪個源,進而達到保留帶寬的目的。
IGMPv3支持明確定義主機希望接收的分組源,可以使用以下2種模式通知作爲一個多播組的成員:
² Include Mode:主機宣佈作爲一個多播組的成員,並指定它想要接收的分組源地址列表。
² Exclude Mode:主機宣佈作爲一個多播組的成員,並指定它不想接收的分組源地址列表。爲了接收所有源的多播分組(IGMPv2默認),可以使用一個空Exclude Mode列表。
Switch’s Multicast Protocol:
² IGMP Snooping:LAN交換機檢查或“嗅探”主機和路由器之間的IGMP分組中的一些第3層信息。將加入的主機的端口號放到交換機的多播表項,離開的主機從表中移除。
² CGMP:Cisco專有的協議,CGMP基於客戶/服務器模型。路由器被認爲一個CGMP服務器,交換機則是客戶。IP多播路由器查看所有IGMP分組,因此當特定主機加入或離開多播組時可以通知交換機。交換機於是使用這個信息來構建一個轉發表。
IGMP Snooping:
IGMP控制消息作爲多播分組發送,不能從第2層多播數據中區分出多播數據與多播控制消息,所以交換機必須檢查每個多播分組來確定其是不是控制消息。當數據高速傳輸時,在低端交換機上啓動IGMP Snooping會嚴重影響性能。
IGMP Snooping默認是全局啓動的,它也可以基於每個VLAN啓動或關閉。
IGMP Snooping Configuration:
Swtich(config)#ip igmp snooping //全局開啓IGMP Snooping
Switch(config)#no ip igmp snooping vlan 2 //關閉VLAN上的IGMP Snooping
Switch(config)#ip igmp snooping vlan 1 mrouter serial 0/1 //指定到多播路由器的下一跳接口
在端口上檢測到IGMPv2的離開消息後,無需發送特定多播組查詢,立即從IP多播組中刪除該端口
Switch(config)#ip igmp snooping vlan 1 immediate-leave
Switch#show ip igmp snooping
Switch#show mac-address-table multicast [vlan vlan-id] [user | igmp-snooping] [count]
Multicast Packet Management:
多播地址標識一個特定的傳輸會話,而非一個特定的物理目的。
分發樹(Distribution Tree):指定源子網和包含多播組成員的每個子網間的一條惟一轉發路徑。
² 源樹(SPT):根是多播流量的源,分支形成一棵到接收者的最短路徑樹。專用符號:(S,G)
² 共享樹(CBT):根在網絡中某個選定的匯合點(RP)的公共根。專用符號:(*,G)
多播TTL門限:
多播TTL字段控制分組的生存時間。TTL功能防止分組由於路由選擇的錯誤而永遠循環下去。
啓用多播的路由器爲每個接口分配一個TTL門限,默認爲0,即轉發所有的多播分組。比較分組TTL值和接口門限,TTL值大於接口門限的分組被轉發,路由器在將分組從接口發送出去時將分組的TTL值減1;TTL值等於或小於門限的分組被丟棄。
TTL接口門限可配置的範圍:0 ~ 255
反向路徑轉發(Reverse Path Forwarding):對照單播路由表檢查來源是否正確
<1>路由器在單播路由選擇表中查找源地址來決定它是否在位於正確的接口上到達。
<2>如果分組位於的接口上到達,RPF檢查成功,轉發分組。
<3>如果RPF檢查失敗,則丟棄分組。
在多臺路由器與一個LAN網段相連的多層交換網絡中,只有一臺PIM指定路由器將來自信源的多播數據包轉發到與出站接口相連的接收方。
Router’s Multicast Protocol:
PIM不依賴與任何的IP路由選擇協議,不維護獨立的多播路由表,只使用已有的路由表執行RPF檢查。
協議無關多播密集模式(Protocol-Independent Multicast Dense-Mode):
PIM-DM假定多組成員密集分佈在整個網絡中並且帶寬充足,且大多數主機都屬於這個組。通過在網絡中每3分一次的洪泛與剪枝來建立和維護分發樹。Dense-Mode使用SPT以“推原則”來發送(S,G)多播分組。即不管你是否需要,先發送給你,在你不要時,進行剪枝。
協議無關多播稀疏模式(Protocol-Independent Multicast Sparse-Mode):
PIM-SM被認爲是更有效的多播解決方案,它是部署Auto-RP時推薦使用的模式。
PIM-SM假定多播成員稀疏分佈在整個網絡中,並帶寬不太充裕。注意:稀疏並不意味着成員少,而是它們的分佈廣泛。這時洪泛會嚴重的浪費帶寬,進而可能引發其它的性能問題。Sparse-Mode使用CBT從一棵空樹開始,以一種“拉原則”來發送(*,G)多播分組。即你需要時才發送給你,前提必須註冊。
PIM-SM模式下,發送者首先把數據發送到RP(匯合點),當一個接收者想接收數據時,到RP去註冊。當數據流從發送者到RP再到接收者時,路徑上的路由器會自動優化路徑爲SPT來移去不必要的跳。
PIM DR:
如果在兩臺PIM路由器之間有一條直接連接,則它們是鄰居。
DR選舉僅在BMA網絡中,P2P鏈路上不需要,因爲所連接的路由器是直連主機系統的有效DR。
DR的選舉過程對於PIM-DM與PIM-SM是一樣的。連接到BMA網絡上的每臺PIM路由器發佈週期的PIM路由器查詢到LAN上,具有最高IP地址的PIM路由器成爲LAN的DR。
在BMA 網絡上,DR用來輪詢LAN的主機組成員,但是所有的PIM路由器都收到來自主機的應答。
Auto-RP:
大型網絡中手式配置多個多播匯合點可能導致不一致的RP配置,並引起連接問題。Auto-RP默認關閉。
Auto-RP是Cisco私有的協議,它在一個運行PIM-SM網絡中自動發佈組到RP的映射。它也允許根據組參與者的位置在不同RP之間進行負載均衡和RP分配。
RP Candidate發送的CISCO-RP-ANNOUNCE通告消息到RP映射代理(224.0.1.39),然後RP映射代理髮送CISCO-RP-DISCOVERY發現消息(包括一致的組到RP的映射關係)到所有DR(224.0.1.40)。這種方法允許所有DR自動發現使用哪一個RP連接接收者與發送者。
Multicast Routing Protocol Configuration:
注意:正常使用多播並完成RPF檢查,必須在每個接口啓動多播。
全局啓用ip多播路由選擇:
Router(config)#ip multicast-routing
在接口上啓動PIM:
Router(config)#interface serial 0/1
Router(config-if)#ip pim sparse-mode
Router(config-if)#ip pim dense-mode
Router(config-if)#ip pim sparse-dense-mode
更改IGMP版本:
Router(config-if)#ip igmp version { 3 | 2 | 1 }
定義接口TTL門限:
Router(config-if)#ip multicast ttl-threshold ttl
手動指定RP地址:
Router(config)#ip pim rp-address rp-address
啓動Auto-RP,並做爲RP Candidate:
Router(config)#ip pim send-rp-announce type number Scope ttl group-list access-list-number
配置爲RP映射代理:
Router(config)#ip pim send-rp-discovery scope ttl
讓路由器加入一個多播組,使其響應一個多播分組:
Router(config)#ip igmp join-group group-address
顯示PIM鄰居:
Router(config)#show ip pim neighbor