Multicast Source Discovery Protocol and Anycast RP
MSDP was developed for peering of Multicast Sources announcements between Internet service providers (ISPs). MSDP is a mechanism that allows RPs on different domains (peers) to share information about active sources across the two autonomously administrated domains. The RPs know about the receivers in their own local domain and inform / get informed (according to specific configuration) about sources on other domains via their MSDP peering sessions. When an MSDP RP peer hears from a peer of another domain about an active source on that domain, it evaluates it and eventually accepts its streaming on the MSDP session. The streaming then passes through from a domain to the other (*). When the receiving MSDP peer wants to have that stream it joins that directly on the peering direction or otherwise prunes the flooding if does not require that source and/or group. Consequently streaming flows from one domain to the other through the MSDP peering link. MSDP offers the possibility to filter active Source announcements in incoming and outgoing directions. MSDP and MPBGP together provide a solution to inter-domain multicast.
(*) MP BGP for the multicast address family completes MSDP functionalities for inter-domain multicast routing. MP BGP alone does only provide a tool for spreading (unicast) topology knowledge across the two domains. MSDP does not require MP BGP per definition, because it relies anyway on PIM SM for the RFP check. The point is that in case of inter-domain routing PIM-SM on the two domains requires knowledge of the unicast routing table of the ither domain, being this a possible conflict element with unicast communication between the two domains based on unicast BGPv4.
MP BGP allows the two domains to learn topology elements that can be used for PIM-SM RPF check, without influencing the policed unicast route table. Functionally what MP BGP does is similar to DVRMP or Multicast static routes: it can influence the RPF check, without interaction with the unicast table. Where it differs is that MPBGP allows this across domains and based on administration policy. But MPBGP requires a “signaling mechanism” for announcing sources to allow PIM-SM to build the tree: this is achieved by MSDP. MSDP is a sort of multi-domain extension of the source registering process native of intra-domain PIM-SM. When used together MSDP/MPBGP/PIM-SM allow for a complete solution:
- Sources are recognized and registered (using MSDP) across the domains;
- Topology for multicast is spread according to administrator’s will (using MPBGP);
- A MDT (Multicast Distribution Tree) is built based on the knowledge of both Source location and applicable topology for the RPF check as applied by the two separates PIM-SM domains;
See BGP (and MP-BGP / address family configuration) for multicast extensions to BGP.
Use of MSDP within a single Domain for AnycastRP
While MSDP is primarily defined to build peering between autonomous domains, it can be used also internally on a domain to allow an efficient failover mechanism, called AnycastRP. In AnycastRP, two or more RPs of the SAME domain is configured with a SAME IP address on a loopback interface. The AnycastRP loopback address should be configured with a 32-bit mask, making it a host address and routed in the network. All the Mcast routers in the domain are be configured to statically know that this AnycastRP loopback address is the IP address of their local RP. IP routing will automatically direct each source and receiver to the topologically closest real RP.
Assuming that the sources are evenly spaced around the network, an equal number of sources will register with each RP. That is, the process of registering the sources will be shared equally by all the RPs in the network.
While a source may register with one RP and receivers may join to a different RP, the MSDP peering method serves the exchange of source information between the “real” RPs. Through the MSDP peering link eventually the stream is flooded to the other real RP an through it to all receivers. This information exchange done with MSDP is performed on a MSDP peering built upon other unique IP addresses than the common AnycastRP /32 address. Because the topology in intra-domain, no MPBGP is required (it can be used though).
SM flow optimization (reversion from shared to source tree) happens as usual (unless “ip pim spt-threshold infinity” is used). The RP is needed only to start new sessions with sources and receivers.
The main advantage of AnycastRP is that JUST a single static mapping is needed throughout the rest of the network, with no election mechanism needed and automatic FAILOVER of real RPs. If in fact a RP physically goes down, the registration will be directed (by the IP routing) to the same Anycast RP /32 address but running on another real RP. No re-election or RP re-convergence takes place. If a multicast data flow is already established between a source and the receiver, a RP failure will not affect that session. Anycast RP ensures that new sessions with sources and receivers can begin at any time.
IDEA for failover and load sharing design using AnycastRP and MSDP:
Example:
======> Step 1: Configure common Loopback /32 address and route it (AnycastRP address).
RT6(config)int lo100
RT6(config-if)ip address 192.168.100.1 255.255.255.255
RT6(config-if)router eigrp 1
RT6(config-router)network 192.168.100.1 0.0.0.0
RT1(config)int lo100
RT1(config-if)ip address 192.168.100.1 255.255.255.255
RT1(config-if)router eigrp 1
RT1(config-router)network 192.168.100.1 0.0.0.0
======> Step 2: Set up MSDP peering and Source-Active (SA) messages advertisements
2.1 MSDP Peering
RT6(config)ip msdp peer 138.1.15.11 connect-source serial 0/0.2 <<<<<< Peer address
RT6
Apr 1 17:15:47: MSDP(0): 138.1.15.11: Sending TCP connect
Apr 1 17:15:48: %MSDP-5-PEER_UPDOWN: Session to peer 138.1.15.11 going up
Apr 1 17:15:48: MSDP(0): 138.1.15.11: TCP connection established
Apr 1 17:15:48: MSDP(0): 138.1.15.11: Sending Keepalive message to peer
Apr 1 17:15:49: MSDP(0): 138.1.15.11: Sending Keepalive message to peer
Apr 1 17:15:49: MSDP(0): 138.1.15.11: Building SA message from SA cache
Apr 1 17:15:49: MSDP(0): start_index = 0, sa_cache_index = 0, Qlen = 0
Apr 1 17:15:49: MSDP(0): Sent entire sa-cache, sa_cache_index = 0, Qlen = 0
Apr 1 17:15:49: MSDP(0): Received 20-byte TCP segment from 138.1.15.11
Apr 1 17:15:49: MSDP(0): Append 20 bytes to 0-byte msg 0 from 138.1.15.11, qs 1
Apr 1 17:15:49: MSDP(0): 138.1.15.11: Received 20-byte msg 0 from peer
Apr 1 17:15:49: MSDP(0): 138.1.15.11: SA TLV, len: 20, ec: 1, RP: 138.1.15.11
Apr 1 17:15:49: MSDP(0): 138.1.15.11: Peer RPF check passed for single peer
Apr 1 17:15:49: MSDP(0): WAVL Insert SA Source 192.168.1.1 Group 239.255.1.1 RP 138.1.15.11 Successful
RT1(config)ip msdp peer 138.1.15.10 connect-source serial1.1
RT1
Apr 1 17:15:48: %MSDP-5-PEER_UPDOWN: Session to peer 138.1.15.10 going up
Apr 1 17:15:48: MSDP(0): 138.1.15.10: TCP connection established
Apr 1 17:15:48: MSDP(0): Received 3-byte TCP segment from 138.1.15.10
Apr 1 17:15:48: MSDP(0): Append 3 bytes to 0-byte msg 0 from 138.1.15.10, qs 1
Apr 1 17:15:48: MSDP(0): 138.1.15.10: Received 3-byte msg 0 from peer
Apr 1 17:15:48: MSDP(0): 138.1.15.10: Keepalive TLV
Apr 1 17:15:49: MSDP(0): Received 3-byte TCP segment from 138.1.15.10
Apr 1 17:15:49: MSDP(0): Append 3 bytes to 0-byte msg 1 from 138.1.15.10, qs 1
Apr 1 17:15:49: MSDP(0): 138.1.15.10: Received 3-byte msg 1 from peer
Apr 1 17:15:49: MSDP(0): 138.1.15.10: Keepalive TLV
Apr 1 17:15:49: MSDP(0): 138.1.15.10: Originating SA message
Apr 1 17:15:49: MSDP(0): Sent entire mroute table, mroute_cache_index = 0, Qlen
Apr 1 17:15:49: MSDP(0): 138.1.15.10: Send 20-byte message to peer
Apr 1 17:15:49: MSDP(0): 138.1.15.10: Building SA message from SA cache
Apr 1 17:15:49: MSDP(0): start_index = 0, sa_cache_index = 0, Qlen = 0
Apr 1 17:15:49: MSDP(0): Sent entire sa-cache, sa_cache_index = 0, Qlen = 0
2.2 Allow both RPs to send Source-Active (SA) messages, to announce Sources they received.
RT6(config)ip msdp originator-id serial0/0.2 <<<<< Source and Originator of MSDP msgs
RT1(config)ip msdp originator-id serial 1.1
RT1sh ip msdp peer
MSDP Peer 138.1.15.10 (?), AS ?
Description:
Connection status:
State: Up, Resets: 0, Connection source: Serial1.1 (138.1.15.11)
Uptime(Downtime): 00:06:14, Messages sent/received: 7/8
Output messages discarded: 0
Connection and counters cleared 00:06:51 ago
Elapsed time since last message: 00:00:42
Local Address of connection: 138.1.15.11
Local Port: 639, Remote Port: 11001
SA Filtering:
Input (S,G) filter: none, route-map: none
Input RP filter: none, route-map: none
Output (S,G) filter: none, route-map: none
Output RP filter: none, route-map: none
SA-Requests:
Input filter: none
Peer ttl threshold: 0
SAs learned from this peer: 0
Input queue size: 0, Output queue size: 0
Message counters:
RPF Failure count: 0
SA Messages in/out: 0/7
SA Requests in: 0
SA Responses out: 0
Data Packets in/out: 0/0
RT1sh ip msdp summary
MSDP Peer Status Summary
Peer Address AS State Uptime/ Reset SA Peer Name
Downtime Count Count
138.1.15.10 ? Up 00:06:19 0 0 ?
Verify it:
RT5ping 239.255.1.1
Type escape sequence to abort.
Sending 1, 100-byte ICMP Echos to 239.255.1.1, timeout is 2 seconds:
Reply to request 0 from 10.1.23.3, 60 ms
Reply to request 0 from 10.1.23.3, 108 ms
Reply to request 0 from 10.1.23.3, 104 ms
Reply to request 0 from 10.1.23.3, 104 ms
> the Mpath leads to RT1:
RT5sh ip pim rp
Group: 239.255.1.1, RP: 138.1.15.11, v2, uptime 00:36:33, expires 00:02:58
Group: 239.255.255.250, RP: 138.1.15.11, v2, uptime 00:36:33, expires 00:02:58
On RT5:
(150.1.1.1, 239.255.1.1), 00:01:48/00:01:47, flags: FT
Incoming interface: Ethernet0/0.33, RPF nbr 0.0.0.0, Registering
Outgoing interface list:
Serial0/0, Forward/Sparse, 00:01:48/00:02:40
On RT6:
(150.1.1.1, 239.255.1.1), 00:02:43/00:00:47, flags:
Incoming interface: Serial0/0.1, RPF nbr 138.1.11.155
Outgoing interface list:
Serial0/0.2, Forward/Sparse, 00:02:43/00:03:09
On RT1
(150.1.1.1, 239.255.1.1), 00:00:05/00:02:54, flags: A
Incoming interface: Serial1.1, RPF nbr 138.1.15.10
Outgoing interface list:
Serial0, Forward/Sparse, 00:00:05/00:03:24
RT1 <<<<<<< No only forwards as usual, but also sends copy to RT6 (SA’s only).
RT6 anyway has no joiners for it
Apr 1 17:23:45: MSDP(0): 138.1.15.10: Send 100-byte SA encapsulated data for (138.1.56.5, 239.255.1.1), RP 138.1.15.11
Apr 1 17:23:45: MSDP(0): 138.1.15.10: Send 100-byte SA encapsulated data for (192.168.1.120, 239.255.1.1), RP 138.1.15.11
Apr 1 17:23:45: MSDP(0): 138.1.15.10: Send 100-byte SA encapsulated data for (138.1.11.155, 239.255.1.1), RP 138.1.15.11
Apr 1 17:23:45: MSDP(0): 138.1.15.10: Send 100-byte SA encapsulated data for (150.1.1.1, 239.255.1.1), RP 138.1.15.11
RT6sh ip msdp summary <<<<<<<< RT6 receives the SA’s
MSDP Peer Status Summary
Peer Address AS State Uptime/ Reset SA Peer Name
Downtime Count Count
138.1.15.11 ? Up 00:14:58 0 5 ?
======> Step 3: Configure all routers with new static RP (including RPs themselves, as usual):
ip pim rp-address 192.168.100.1 override
======> Summary of Configs:
hostname RT6
!
ip multicast-routing
!
interface Loopback100
description * AnycastRP address *
ip address 192.168.100.1 255.255.255.255
!
interface Ethernet0/0.104
ip pim sparse-mode
!
interface Serial0/0.1 multipoint
ip pim sparse-mode
!
interface Serial0/0.2 point-to-point
ip pim sparse-mode
!
router eigrp 1
network 192.168.100.1 0.0.0.0
…..
!
ip pim rp-address 192.168.100.1 override
!
ip msdp peer 138.1.15.11 connect-source Serial0/0.2
ip msdp originator-id Serial0/0.2
Router_X
hostname RT3
!
ip multicast-routing
!
interface XXXYYYY
ip pim sparse-mode
!
router eigrp 1
….
!
ip pim rp-address 192.168.100.1 override
Other MSDP commands, Inter-Domain –
While Anycast is a simple Interdomain feature (more or less like a sort of iBGP for Multicast), MSDP is very much a protocol used at border between Service Providers and Autonomous Systems. It allows in fact injection of Sources and definition of conditions and limits for this to happen.
RT6(config)ip msdp ?
redistribute Inject multicast route entries into MSDP
ip msdp redistribute [list ALC] [asn AS-PATH] [route-map <name>]
By default only only local sources are advertised,
In border provider to provider, ASn to ASn, The
“ip msdp redistribute asn” forces to advertise all
sources sending to any group that pass through the
autonomous system path access list. The autonomous
system path access list number refers to the “ip as-path”
command, which specifies an access list.
If no portion of this command is configured and if
the “ip msdp border sa-address” command is configured,
all local sources are advertised.
Example:
ip msdp redistribute route-map customer-sources
ip as-path access-list ^109$
route-map customer-sources permit
match as-path customer-as
default-peer
Default MSDP peer to accept SA messages from
in case multiple peer are configured.
sa-filter [in | out]
Filter Source Active messages from peer.
To configure an incoming filter list for Source-Active
(SA) messages received from the specified MSDP peer,
use:
ip msdp peer 192.168.1.3 connect-source Ethernet0/0
ip msdp sa-filter in 192.168.1.3 list 1
sa-limit
Configure max SA limit for a peer
ip msdp sa-limit 172.16.0.0 100
filter-sa-request
Filter SA-Requests from peer (peer asking for a Source).
By default, the router honors all SA request
messages from peers. Use this command if you want
to control exactly which SA request messages the
router will honor.
ip msdp filter sa-request 172.16.2.2 list 1
access-list 1 permit 192.4.22.0 0.0.0.255
mesh-group
Configure an MSDP mesh-group (similar to iBGP)
Mesh group is a group of MSDP speakers that have
fully meshed MSDP connectivity among themselves.
Source-Active (SA) messages received from a peer
in a mesh group are not forwarded to other peers
in the same mesh group. The ip_address is the
address of a peer of theis router which is included
along with the local route in the mesh.
Mesh groups can be used to achieve two goals:
• To reduce SA message flooding
• To facilitate RPF evaluation
border
Used to inject in MSDP Sources from a Dense Domain
It should be used by a Sparse Domain MSDP peer
which is on the border with the Dense Domain
“ip msdp border sa-address Ethernet 0”
shutdown
Administratively shutdown MSDP peer
timer
MSDP timer
ttl-threshold
Configure TTL Thresold for MSDP Peer