IP Multicast Application Development BOF Bob Quinn Stardust Technologies, Inc. February 8, 1998
Agenda <ul><li>What are the  Challenges? </li></ul><ul><li>What  Applications  are possible? </li></ul><ul><li>What is  Mu...
IP Multicast is... <ul><li>A protocol mechanism: </li></ul><ul><ul><li>that enables the Network to send a single data stre...
IP Multicast in Action Multicast Sender Multicast Routers Data Replicated Multicast Receivers Entities: Actions: Single Da...
Multicast Application Categories <ul><li>One-to-Many </li></ul><ul><ul><li>Uni-directional traffic </li></ul></ul><ul><ul>...
Multicast Application Sketches <ul><li>Any application with a UDP (or raw) socket can Send to a multicast address </li></u...
Original Multicast API <ul><li>Described in the readme for the original 4.3 BSD UNIX Multicast implementation by Steve Dee...
Join Multicast Group <ul><li>This is (arguably) the most significant API </li></ul><ul><ul><li>To receive multicast traffi...
IGMP v1 in Action <ul><li>When a Multicast receiver joins a group IGMP Host Membership Report generated </li></ul><ul><ul>...
IGMP v1 in Action <ul><li>Router and hosts transparently maintain the group membership </li></ul>Muliicast Receiver joins ...
Other Sockets Multicast APIs <ul><li>These other multicast APIs are also significant (some more than others): </li></ul><u...
Multicast API Subtleties <ul><li>It  should  be possible to have either: </li></ul><ul><ul><li>same socket join multiple m...
Sample  Multicast Applications <ul><li>Sender and Receiver application pair: </li></ul><ul><ul><li>Sender (server) multica...
Get a UDP socket <ul><li>Necessary in both sender and receiver </li></ul><ul><ul><li>This sample is WinSock-compatible, so...
Name the socket <ul><li>Calling bind() is only necessary in receiver </li></ul><ul><ul><li>BSD Sockets doesn’t require thi...
Join the Multicast Group <ul><li>This is only necessary in a receiver </li></ul><ul><ul><li>As mentioned earlier, this ini...
Receive Multicast Data <ul><li>This sample blocks on recvfrom() waiting for data to arrive, then processes it </li></ul>fo...
Leave the Multicast Group <ul><li>When complete, receiver leaves the group </li></ul><ul><ul><li>With IGMP v1 this is a no...
In the Sender... <ul><li>Set the TTL -- the scope of the multicast </li></ul><ul><ul><ul><li>0: restricted to the same hos...
Disable Loopback <ul><li>Sender may want to disable loopback only if it is also a receiver (member of group) </li></ul><ul...
Send to Multicast Address <ul><li>Send on UDP socket won’t fail </li></ul><ul><ul><li>generally true, but especially with ...
IGMP v2 <ul><li>Features:  <IGMPv2: ftp://ds.internic.net/rfc/rfc2236.txt> </li></ul><ul><ul><li>Leave Group message mappe...
IGMP V2 <ul><li>Message Types: </li></ul><ul><ul><li>0x11 - Membership Query </li></ul></ul><ul><ul><li>0x16 - Version 2 M...
Other APIs <ul><li>Apple Open Transport APIs </li></ul><ul><ul><li>Modeled after standard BSD Sockets APIs </li></ul></ul>...
Multicast Application Similarities & Differences <ul><li>Many varied multicast applications possible </li></ul><ul><li>All...
Range of Application Requirements <ul><li>Delay and Loss Tolerance are key factors </li></ul>Delay In tolerant Delay Toler...
QoS  not  tied to Multicast <ul><li>Quality of Service (QoS) parameters </li></ul><ul><ul><li>Delay  between sending and r...
Reliability Requirements <ul><li>Data Recovery  or  Loss Avoidance  are key reliability requirements for many multicast ap...
Can Reliable Multicast Protocols use TCP model? <ul><li>TCP is  “sender-based”:  Receivers return acknowledgements (with f...
Multicast protocols  are Receiver-Based <ul><li>The implosion problem can be  reduced  by using  Negative Acks  (NAKS) </l...
Shared Recovery <ul><li>When loss detected, use timer and leverage multicast’s advantage of shared traffic: </li></ul><ul>...
Local Recovery <ul><li>Allow Local Agents to receive NAKs and send retransmissions on behalf of sender </li></ul><ul><ul><...
Local Recovery in Action Multicast Sender Multicast Routers 3) Data Retransmitted by Recovery Designates Multicast Receive...
Send Redundant Data <ul><li>Trade-off: More bandwidth = More reliable </li></ul><ul><li>Example Strategies: </li></ul><ul>...
FEC techniques Data 7 Data 5 Data 3 Data 1 Data 2 ta 4  6 D Dat  Data 8 “ Striped” Data Data 7 Parity4 Data with Parity Da...
Rate Adaptive <ul><li>Reduce data rate when loss increased </li></ul><ul><ul><li>When NAKs increase, slow sender down </li...
Send Layered Data <ul><li>Multiple encodings combined </li></ul><ul><ul><li>The more data received, the better the quality...
Reliable Multicast Transports - A Summary <ul><li>Development of a reliable multicast transport protocol is a  hot  resear...
Other Issues  with Multicast <ul><li>Lack of multicast-capable   infrastructure </li></ul><ul><li>No standard for  dynamic...
Solutions in the works <ul><li>More Multicast-capable routers </li></ul><ul><li>IGMP version 3 </li></ul><ul><li>Domain-Wi...
More Multicast Infrastructure <ul><li>Most Dial-up Servers now shipping have “IGMP Proxy” support </li></ul><ul><li>Educat...
IGMP v3 <ul><li>Significant update will bring new services: </li></ul><ul><ul><li>Source Filtering (squelch senders) </li>...
Domain-Wide Group Membership Reports <ul><li>A routing (infrastructure) protocol that may back-end IGMP, to inform inter-d...
Multicast Address Management Protocols <ul><li>Allocate multicast addresses, and manage their domains </li></ul><ul><ul><l...
Multicast Address Management Architecture MDHCP router MASC router Multicast Address Domain MASC  to other Domains Client ...
MDHCP APIs <ul><li>Enumerate the Scopes </li></ul><ul><ul><li>Scope list entries include Scope ID value, Server Address an...
MDHCP APIs <ul><li>Request an Address (or more than one) </li></ul><ul><ul><li>Each address has a “Lease” time and a Scope...
MDHCP APIs <ul><li>Renew & Release Addresses </li></ul><ul><ul><li>Prototypes for these APIs very similar to the Address R...
Conclusions <ul><li>Simple Multicast applications are easy </li></ul><ul><ul><li>There are some holes, but most of what’s ...
References <ul><li>Writing IP Multicast-enabled Applications,  an IPMI White Paper:   http://www.ipmulticast.com/cgi-bin/i...
Upcoming SlideShare
Loading in...5
×

IPv4 Multicast Application Development

5,533
-1

Published on

Multicast Intro and API Overview

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,533
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • IPv4 Multicast Application Development

    1. 1. IP Multicast Application Development BOF Bob Quinn Stardust Technologies, Inc. February 8, 1998
    2. 2. Agenda <ul><li>What are the Challenges? </li></ul><ul><li>What Applications are possible? </li></ul><ul><li>What is Multicast ? </li></ul><ul><li>What are their Requirements ? </li></ul><ul><li>What APIs are available? </li></ul><ul><li>What are the Solutions? </li></ul>
    3. 3. IP Multicast is... <ul><li>A protocol mechanism: </li></ul><ul><ul><li>that enables the Network to send a single data stream to multiple recipients </li></ul></ul><ul><li>An address range: </li></ul><ul><ul><li>that comprises the Class D IP addresses (224.0.0.0 through 239.255.255.255) </li></ul></ul><ul><li>An infrastructure: </li></ul><ul><ul><li>that support the protocols, manage state and traffic and addresses </li></ul></ul>
    4. 4. IP Multicast in Action Multicast Sender Multicast Routers Data Replicated Multicast Receivers Entities: Actions: Single Data Send Data Propagated to Receivers Data Pruned where no Receivers
    5. 5. Multicast Application Categories <ul><li>One-to-Many </li></ul><ul><ul><li>Uni-directional traffic </li></ul></ul><ul><ul><li>Only a single Sender and Multiple Receivers </li></ul></ul><ul><li>Many-to-Many </li></ul><ul><ul><li>Bi-directional traffic </li></ul></ul><ul><ul><li>Each Sender may also be a Receiver </li></ul></ul>
    6. 6. Multicast Application Sketches <ul><li>Any application with a UDP (or raw) socket can Send to a multicast address </li></ul><ul><ul><li>By default, however, the TTL is set to 1 </li></ul></ul><ul><ul><li>TTL requires modification to traverse router(s) </li></ul></ul><ul><li>To receive multicast traffic, UDP socket must join a group </li></ul><ul><ul><li>Joining a group initiates IGMP traffic </li></ul></ul><ul><li>All multicast traffic “loops-back” by default </li></ul>
    7. 7. Original Multicast API <ul><li>Described in the readme for the original 4.3 BSD UNIX Multicast implementation by Steve Deering (author of RFC 1112) </li></ul><ul><ul><li>See http://www.kohala.com/~rstevens/mcast.api.txt </li></ul></ul><ul><ul><li>Beware that socket option values differ in current implementations </li></ul></ul><ul><li>APIs use setsockopt() Sockets function and mirror the simplicity of Internet Group Management Protocol (IGMP) </li></ul>
    8. 8. Join Multicast Group <ul><li>This is (arguably) the most significant API </li></ul><ul><ul><li>To receive multicast traffic use setsockopt() optname = IP_ADD_MEMBERSHIP </li></ul></ul><ul><ul><li>Initiates IGMP “Host Membership Report” </li></ul></ul>Int setsockopt( SOCKET s, int level, int optname, const char FAR*optval, int optlen); /* The structure used to add and drop multicast addresses */ typedef struct ip_mreq { struct in_addr imr_multiaddr; /* multicast group to join */ struct in_addr imr_interface; /* interface to join on */ }IP_MREQ;
    9. 9. IGMP v1 in Action <ul><li>When a Multicast receiver joins a group IGMP Host Membership Report generated </li></ul><ul><ul><li>IGMP Packet Format (as defined by RFC 1112) </li></ul></ul>Muliicast Receiver joins group Multicast Router stores multicast address Router protocol shares group membership info with other routers. IGMP Host Membership Report (type = 2) sent to group address when application joins group 0 32 8 16 24 version type <unused> checksum Multicast Group Address
    10. 10. IGMP v1 in Action <ul><li>Router and hosts transparently maintain the group membership </li></ul>Muliicast Receiver joins group Multicast Router stores multicast address After random timer expires and no other responses seen,group member responds with another Host Membership Report After timeout, Router checks for current members by sending Host Membership Query (type=1) to “All Hosts” group (224.0.0.1)
    11. 11. Other Sockets Multicast APIs <ul><li>These other multicast APIs are also significant (some more than others): </li></ul><ul><ul><li>IP_MULTICAST_IF : Join a multicast group on a specific interface </li></ul></ul><ul><ul><li>IP_MULTICAST_TTL : Assign IP Time-to-Live value </li></ul></ul><ul><ul><li>IP_MULTICAST_LOOP : Disable multicast loopback (on by default) </li></ul></ul><ul><ul><li>IP_DROP_MEMBERSHIP : Leave a multicast group </li></ul></ul>
    12. 12. Multicast API Subtleties <ul><li>It should be possible to have either: </li></ul><ul><ul><li>same socket join multiple multicast groups </li></ul></ul><ul><ul><li>multiple sockets join same group on different port numbers </li></ul></ul><ul><ul><li>multiple sockets join same group on same port </li></ul></ul><ul><li>However, implementations differ: </li></ul><ul><ul><li>Bottom Line: To be safe, don’t share resources </li></ul></ul>
    13. 13. Sample Multicast Applications <ul><li>Sender and Receiver application pair: </li></ul><ul><ul><li>Sender (server) multicasts non-descript data </li></ul></ul><ul><ul><li>Receiver (client) receives it </li></ul></ul><ul><li>All standard multicast APIs illustrated </li></ul><ul><ul><li>compatible with BSD Sockets and WinSock </li></ul></ul><ul><li>Two applications could be combined: </li></ul><ul><ul><li>using sharable data (other than the current time) could create a many-to-many application </li></ul></ul>
    14. 14. Get a UDP socket <ul><li>Necessary in both sender and receiver </li></ul><ul><ul><li>This sample is WinSock-compatible, so uses WSAGetLastError() in place of errno </li></ul></ul>/* Get a datagram socket */ hSocket = socket(AF_INET, SOCK_DGRAM, 0); if (hSocket == INVALID_SOCKET) { printf (&quot;socket() failed, Err: %d &quot;, WSAGetLastError()); return(-1); }
    15. 15. Name the socket <ul><li>Calling bind() is only necessary in receiver </li></ul><ul><ul><li>BSD Sockets doesn’t require this, but Microsoft WinSock implementations do </li></ul></ul>/* Name the socket (assign port number to receive on) */ stLclAddr.sin_family = AF_INET; stLclAddr.sin_addr.s_addr = htonl(INADDR_ANY); stLclAddr.sin_port = htons(nPort); nRet = bind(hSocket, (struct sockaddr*) &stLclAddr, sizeof(stLclAddr)); if (nRet == SOCKET_ERROR) { printf (&quot;bind() port: %d failed, Err: %d &quot;, nPort, WSAGetLastError()); }
    16. 16. Join the Multicast Group <ul><li>This is only necessary in a receiver </li></ul><ul><ul><li>As mentioned earlier, this initiates IGMP traffic that tells the local router about membership </li></ul></ul>/* Join the multicast group so we can receive from it */ stMreq.imr_multiaddr.s_addr = inet_addr(achMCAddr); stMreq.imr_interface.s_addr = INADDR_ANY; nRet = setsockopt(hSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq)); if (nRet == SOCKET_ERROR) { printf(&quot;IP_ADD_MEMBERSHIP address %s failed, Err: %d &quot;, achMCAddr, WSAGetLastError()); }
    17. 17. Receive Multicast Data <ul><li>This sample blocks on recvfrom() waiting for data to arrive, then processes it </li></ul>for (;;) { int addr_size = sizeof(struct sockaddr_in); nRet = recvfrom(hSocket, achInBuf, BUFSIZE, 0, (struct sockaddr*)&stSrcAddr, &addr_size); if (nRet < 0) { printf (&quot;recvfrom() failed, Error: %d &quot;, WSAGetLastError()); break; } << process data received >> } /* end for(;;) */
    18. 18. Leave the Multicast Group <ul><li>When complete, receiver leaves the group </li></ul><ul><ul><li>With IGMP v1 this is a noop, but with IGMP v2 it actually sends a Leave Group message </li></ul></ul>/* Leave the multicast group */ stMreq.imr_multiaddr.s_addr = inet_addr(achMCAddr); stMreq.imr_interface.s_addr = INADDR_ANY; nRet = setsockopt(hSocket, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *)&stMreq, sizeof(stMreq)); if (nRet == SOCKET_ERROR) { printf (&quot;IP_DROP_MEMBERSHIP address %s failed, Err: %d &quot;, achMCAddr, WSAGetLastError()); } /* Close the socket */ closesocket(hSocket);
    19. 19. In the Sender... <ul><li>Set the TTL -- the scope of the multicast </li></ul><ul><ul><ul><li>0: restricted to the same host </li></ul></ul></ul><ul><ul><ul><li>1: restricted to the same subnet (default value) </li></ul></ul></ul><ul><ul><ul><li>32: restricted to the same site </li></ul></ul></ul><ul><ul><ul><li>64: restricted to the same region </li></ul></ul></ul><ul><ul><ul><li>128: restricted to the same continent </li></ul></ul></ul><ul><ul><ul><li>255: unrestricted </li></ul></ul></ul>/* Set IP TTL to traverse up to multiple routers */ nRet = setsockopt(hSocket, IPPROTO_IP, IP_MULTICAST_TTL, (char *)&lTTL, sizeof(lTTL)); if (nRet == SOCKET_ERROR) { printf (&quot;setsockopt() IP_MULTICAST_TTL failed, Err: %d &quot;, WSAGetLastError()); }
    20. 20. Disable Loopback <ul><li>Sender may want to disable loopback only if it is also a receiver (member of group) </li></ul><ul><ul><li>Moot point on Microsoft stacks, none of which support this option </li></ul></ul>/* Disable loopback */ fFlag = FALSE; nRet = setsockopt(hSocket, IPPROTO_IP, IP_MULTICAST_LOOP, (char *)&fFlag, sizeof(fFlag)); if (nRet == SOCKET_ERROR) { printf (&quot;setsockopt() IP_MULTICAST_LOOP failed, Err: %d &quot;, WSAGetLastError()); }
    21. 21. Send to Multicast Address <ul><li>Send on UDP socket won’t fail </li></ul><ul><ul><li>generally true, but especially with multicast </li></ul></ul>/* send to destination multicast address */ stDstAddr.sin_family = AF_INET; stDstAddr.sin_addr.s_addr = inet_addr(achMCAddr); stDstAddr.sin_port = htons(nPort); nRet = sendto(hSocket, (char *)&achBuf, sizeof(achBuf), 0, (struct sockaddr*)&stDstAddr, sizeof(stDstAddr)); if (nRet < 0) { printf (&quot;sendto() failed, Error: %d &quot;, WSAGetLastError()); }
    22. 22. IGMP v2 <ul><li>Features: <IGMPv2: ftp://ds.internic.net/rfc/rfc2236.txt> </li></ul><ul><ul><li>Leave Group message mapped to IP_DROP_MEMBERSHIP API </li></ul></ul><ul><ul><ul><li>Particularly important on dialups to kill traffic </li></ul></ul></ul><ul><ul><li>Compatible with IGMP v1 </li></ul></ul><ul><ul><ul><li>Version and Type Fields combined </li></ul></ul></ul><ul><ul><li>Variable Response Delays in Queries </li></ul></ul><ul><ul><ul><li>Router Alert option set in all msgs </li></ul></ul></ul><ul><li>Now widely implemented </li></ul><ul><ul><li>e.g. Microsoft TCP/IP (but watch for bug) </li></ul></ul>
    23. 23. IGMP V2 <ul><li>Message Types: </li></ul><ul><ul><li>0x11 - Membership Query </li></ul></ul><ul><ul><li>0x16 - Version 2 Membership Report </li></ul></ul><ul><ul><li>0x17 - Leave Group </li></ul></ul><ul><ul><li>0x12 - Version 1 Membership Report (for backward compatibility) </li></ul></ul>0 32 8 16 24 type Max respns time checksum Multicast Group Address IP Router Alert option (RFC 2113) enabled in all messages
    24. 24. Other APIs <ul><li>Apple Open Transport APIs </li></ul><ul><ul><li>Modeled after standard BSD Sockets APIs </li></ul></ul><ul><li>Windows Sockets version 2 </li></ul><ul><ul><li>WinSock supports standard BSD APIs </li></ul></ul><ul><ul><li>WinSock 2 also has “protocol-independent” multipoint APIs that support IP multicast as well as stricture multipoint protocols (e.g. ATM) </li></ul></ul><ul><ul><li>For samples see http://www.ipmulticast.com/cgi-bin/ipmulticast/wpform.pl </li></ul></ul>
    25. 25. Multicast Application Similarities & Differences <ul><li>Many varied multicast applications possible </li></ul><ul><li>All use the same basic APIs </li></ul><ul><li>Most differ in their service requirements: </li></ul><ul><ul><li>The basic IP multicast implementation and APIs enable simple datagram applications </li></ul></ul><ul><ul><li>Many applications require various reliability services and feedback mechanisms, which standard UDP and IP multicast do not themselves provide </li></ul></ul>
    26. 26. Range of Application Requirements <ul><li>Delay and Loss Tolerance are key factors </li></ul>Delay In tolerant Delay Tolerant Loss Tolerant Loss In tolerant Audio/Video Conferencing Distributed Interactive Simulations Audio/Video Streaming File Distribution Non-Essential Data: - Headline News, - Sports Scores - Weather Updates - Session Directories Stock Info & Online Auction Whiteboard Sharing Resource Discovery
    27. 27. QoS not tied to Multicast <ul><li>Quality of Service (QoS) parameters </li></ul><ul><ul><li>Delay between sending and receiving </li></ul></ul><ul><ul><li>Delay Variability (jitter) </li></ul></ul><ul><ul><li>Bandwidth usage </li></ul></ul><ul><li>These are not strictly Multicast related </li></ul><ul><ul><li>Differentiated Services and Resource Reservation are separate issues with their own protocols, algorithms, architectures and APIs (e.g. RSVP, 802.1p, CBQ, IP TOS, etc.) </li></ul></ul>
    28. 28. Reliability Requirements <ul><li>Data Recovery or Loss Avoidance are key reliability requirements for many multicast applications </li></ul><ul><li>Data Ordering (without duplicates) is another </li></ul><ul><li>One might immediately think of using TCP’s reliable data delivery mechanisms, since TCP provides exactly these services </li></ul>
    29. 29. Can Reliable Multicast Protocols use TCP model? <ul><li>TCP is “sender-based”: Receivers return acknowledgements (with flow window) </li></ul><ul><ul><li>Model results in ACK implosion with multicast </li></ul></ul>Multicast sender sends a single message Multicast receivers simultaneously respond with a storm of ACKs
    30. 30. Multicast protocols are Receiver-Based <ul><li>The implosion problem can be reduced by using Negative Acks (NAKS) </li></ul><ul><ul><li>but NAK implosion potential still exists ... </li></ul></ul>Multicast sender sends a single message Multicast receivers respond with NAKs (only) when they detect missing data
    31. 31. Shared Recovery <ul><li>When loss detected, use timer and leverage multicast’s advantage of shared traffic: </li></ul><ul><ul><li>Start random timer </li></ul></ul><ul><ul><li>Watch for NAKs sent by others </li></ul></ul><ul><ul><li>Watch for retransmissions </li></ul></ul><ul><li>This is analogous to how IGMP hosts respond to Host Membership Requests, and congestion avoidance measures in TCP </li></ul>
    32. 32. Local Recovery <ul><li>Allow Local Agents to receive NAKs and send retransmissions on behalf of sender </li></ul><ul><ul><li>Who should the agents be? </li></ul></ul><ul><ul><ul><li>Need to detect and locate agents close to the “crying babies” </li></ul></ul></ul><ul><ul><li>Need to handle Agent disconnects </li></ul></ul><ul><ul><ul><li>Requires detection of disconnect </li></ul></ul></ul><ul><ul><ul><li>Requires designation of new agent </li></ul></ul></ul><ul><li>Effective, but not a simple solution </li></ul>
    33. 33. Local Recovery in Action Multicast Sender Multicast Routers 3) Data Retransmitted by Recovery Designates Multicast Receivers Entities: Actions: 1) NAK Sent by Receivers after missing data detected 2) NAK detected by Recovery Designates Local Recovery Designates
    34. 34. Send Redundant Data <ul><li>Trade-off: More bandwidth = More reliable </li></ul><ul><li>Example Strategies: </li></ul><ul><ul><li>FEC: Forward Error Correction </li></ul></ul><ul><ul><ul><li>Can reduce overhead by sending FEC only in retransmissions </li></ul></ul></ul><ul><ul><ul><li>FEC striped across multiple address streams, can potentially send at a faster data rate </li></ul></ul></ul><ul><ul><ul><li>FEC only thing that works when no “back-channel” (e.g. one-way satellite, IPoVBI, pagers, etc.) </li></ul></ul></ul><ul><ul><li>“ Round-Robin” retransmissions </li></ul></ul>
    35. 35. FEC techniques Data 7 Data 5 Data 3 Data 1 Data 2 ta 4 6 D Dat Data 8 “ Striped” Data Data 7 Parity4 Data with Parity Data 6 Parity3 Data 5 Parity2 Data 4 Parity1 These representations are simplified versions of the real thing and there are many different algorithms, but these give some FEC techniques. Notice that data is spread over time, to avoid fate sharing (due to burst errors). time time
    36. 36. Rate Adaptive <ul><li>Reduce data rate when loss increased </li></ul><ul><ul><li>When NAKs increase, slow sender down </li></ul></ul><ul><li>A few rotten apples... </li></ul><ul><ul><li>All receivers limited by worst case </li></ul></ul><ul><ul><li>A lower data rate means lower quality </li></ul></ul><ul><li>Limited usefulness to apps that: </li></ul><ul><ul><li>Are tolerant of loss, or of delay </li></ul></ul><ul><ul><li>Have multiple choices between codecs </li></ul></ul>
    37. 37. Send Layered Data <ul><li>Multiple encodings combined </li></ul><ul><ul><li>The more data received, the better the quality </li></ul></ul><ul><ul><li>Analogous to receiving a monophonic signal from FM stereo radio when the signal is weak </li></ul></ul><ul><li>One signal fits all </li></ul><ul><ul><li>Scales very nicely on heterogeneous net </li></ul></ul><ul><li>Limited applicability </li></ul><ul><ul><li>Not useful for loss intolerant apps! </li></ul></ul>
    38. 38. Reliable Multicast Transports - A Summary <ul><li>Development of a reliable multicast transport protocol is a hot research topic </li></ul><ul><ul><li>See http://research.ivv.nasa.gov/RMP/links.html </li></ul></ul><ul><ul><li>See http://www.isi.edu/people/katia/transport-related.ps.gz </li></ul></ul><ul><li>Some commercial implementations: </li></ul><ul><ul><li>GlobalCast and StarBurst Communications </li></ul></ul><ul><li>Consensus is there’s no universal solution: </li></ul><ul><ul><li>Protocols will be application-specific </li></ul></ul><ul><ul><li>Utilize various techniques as appropriate </li></ul></ul>
    39. 39. Other Issues with Multicast <ul><li>Lack of multicast-capable infrastructure </li></ul><ul><li>No standard for dynamic address allocation </li></ul><ul><li>No mechanism to find multicast routers </li></ul><ul><li>Unable to limit senders </li></ul><ul><li>Unable to authenticate senders or receivers </li></ul><ul><li>No standard for authentication or key exchange </li></ul><ul><li>No standard for firewall traversal </li></ul><ul><li>Scoping with TTL insufficient </li></ul><ul><li>Managing many-to-many is difficult (scaling problem) </li></ul><ul><li>Transmission on heterogeneous nets is problematic </li></ul><ul><li>Tools for Debugging </li></ul>
    40. 40. Solutions in the works <ul><li>More Multicast-capable routers </li></ul><ul><li>IGMP version 3 </li></ul><ul><li>Domain-Wide Multicast Reports </li></ul><ul><li>MDHCP and infrastructure (MASC, et al) </li></ul><ul><li>Reliable Multicast Implementations (IRTF) </li></ul><ul><li>Firewall traversal standards (see AFT WG) </li></ul><ul><li>Administratively Scoped Multicast </li></ul><ul><li>Multicast Router Advertisements </li></ul>
    41. 41. More Multicast Infrastructure <ul><li>Most Dial-up Servers now shipping have “IGMP Proxy” support </li></ul><ul><li>Education of ISPs and Corporate Network Managers is underway </li></ul><ul><ul><li>FUD due to misconceptions & inexperience </li></ul></ul><ul><li>Content will be the Killer Application! </li></ul><ul><ul><li>Infrastructure becoming less of a problem </li></ul></ul><ul><ul><li>Demand will increase support from ISPs </li></ul></ul><ul><ul><li>IPMI is making headway! </li></ul></ul>
    42. 42. IGMP v3 <ul><li>Significant update will bring new services: </li></ul><ul><ul><li>Source Filtering (squelch senders) </li></ul></ul><ul><li>Still early in specification development, but so far IGMP v3 is significantly more complex than its predecessors </li></ul><ul><ul><li>See IGMP v3: draft-ietf-idmr-igmp-v3-00.txt </li></ul></ul><ul><li>Sample API: </li></ul>int IPMulticastListen(socket, interface, // interface as in m_req multicast-address, // group address as in m_req filter-mode, // INCLUDE or EXCLUDE source-list); // list (<64) of source addresses
    43. 43. Domain-Wide Group Membership Reports <ul><li>A routing (infrastructure) protocol that may back-end IGMP, to inform inter-domain routers of group memberships in domains </li></ul><ul><ul><li>See DWR: draft-ietf-idmr-membership-reports-00.txt </li></ul></ul>
    44. 44. Multicast Address Management Protocols <ul><li>Allocate multicast addresses, and manage their domains </li></ul><ul><ul><li>MDHCP : Multicast Dynamic Host Configuration Protocol responds to host requests </li></ul></ul><ul><ul><li>AAP : Address Allocation Protocol </li></ul></ul><ul><ul><li>MASC: Multicast Address Set Claim Protocol </li></ul></ul><ul><li>Also includes APIs, which will be available in NT Beta 2 </li></ul>
    45. 45. Multicast Address Management Architecture MDHCP router MASC router Multicast Address Domain MASC to other Domains Client Client Server listening on well-known multicast address MDHCP Unicast MDHCP Multicast AAP or other protocols provide address ranges See http://north.east.isi.edu/malloc/ for more information
    46. 46. MDHCP APIs <ul><li>Enumerate the Scopes </li></ul><ul><ul><li>Scope list entries include Scope ID value, Server Address and a description </li></ul></ul>int MDhcpEnumerateScopes( IN OUT SCOPE *ScopeList, IN OUT int *ScopeListLen, OUT int *ScopeCount); typedef struct scope { int ScopeId, IP_ADDR ServerIpAddress; STRING ScopeDescription; } SCOPE;
    47. 47. MDHCP APIs <ul><li>Request an Address (or more than one) </li></ul><ul><ul><li>Each address has a “Lease” time and a Scope (each of which may be requested). </li></ul></ul>int MDhcpRequestAddress( IN OUT REQUEST_ID *RequestUID, IN SCOPE *Scope, IN LEASE_INFO *AddrRequest, IN OUT LEASE_INFO *AddrResponse); typedef struct lease_info { TIME StartTime, TIME EndTime, int TTL; int AddrCount; IP_ADDR Address[1]; } LEASE_INFO;
    48. 48. MDHCP APIs <ul><li>Renew & Release Addresses </li></ul><ul><ul><li>Prototypes for these APIs very similar to the Address Request function call </li></ul></ul>int MDhcpRenewAddress( IN OUT REQUEST_ID *RequestUID, IN SCOPE *Scope, IN LEASE_INFO *RenewRequest, IN OUT LEASE_INFO *RenewResponse); int MDhcpReleaseAddress( IN OUT REQUEST_ID *RequestUID, IN SCOPE *Scope, IN int *ReleaseRequest);
    49. 49. Conclusions <ul><li>Simple Multicast applications are easy </li></ul><ul><ul><li>There are some holes, but most of what’s needed is available </li></ul></ul><ul><li>Complexity increases dramatically when service requirements increase, and there are some significant standards still missing </li></ul><ul><li>Development of solutions is underway! </li></ul><ul><ul><li>Reliable Multicast, Address Mgmt, Security, etc. </li></ul></ul>
    50. 50. References <ul><li>Writing IP Multicast-enabled Applications, an IPMI White Paper: http://www.ipmulticast.com/cgi-bin/ipmulticast/wpform.pl </li></ul><ul><li>Quinn, B., Internet Multicasting, Dr. Dobbs Journal, Oct ‘97 http://www.ddj.com/ddj/1997/1997_10/quin.htm </li></ul><ul><li>Obraczka, K., Multicast Transport Protocols: A Survey and Taxonomy , IEEE Communications Magazine, Jan ‘98 (Vol. 36 No. 1) </li></ul><ul><li>Windows Sockets Network Programming, http://www.sockets.com/ch16.htm </li></ul><ul><li>Multicast Address Allocation: http://north.east.isi.edu/malloc </li></ul><ul><li>ftp://ftp.ietf.org/internet-drafts/draft-bradner-multicast-problem-00.txt </li></ul><ul><li>Multicast Debugging Handbook: ftp://ftp.ietf.org/internet-drafts/draft-ietf-mboned-mdh-00.txt </li></ul><ul><li>IGMPv1: ftp://ds.internic.net/rfc/rfc1112.txt </li></ul><ul><li>IGMPv2: ftp://ds.internic.net/rfc/rfc2236.txt </li></ul><ul><li>IGMPv3: ftp://ftp.ietf.org/internet-drafts/draft-ietf-idmr-igmp-v3-00.txt </li></ul><ul><li>WinSock 2 API: ftp://ftp.microsoft.com/bussys/winsock/winsock2/ </li></ul>

    ×