  Multicast over TCP/IP HOWTO

  Juan-Mariano de Goyenechejmseyas@dit.upm.es
  <mailto:jmseyas@dit.upm.es>
  v1.0, 20 March 1998
  khp@kldp.org <mailto:khp@kldp.org>
  v0.9, 10 July 2000

    TCP/IP Ʈ ƼĳƮ õ  
  Ѵ.  κ  ѵǴ  ƴϴ.
  (..GNU/   쿡) ƼĳƮ ݱ Ȱ
    о̴.    ۼ  ǥؾ κ
  ʾ(draft) ̴.  ο ΰ ñ ٶ.
  ______________________________________________________________________

  

  1. Ұ
     1.1 ƼĳƮ(Multicast) ΰ?
     1.2 ĳƮ(Unicast) 

  2. ƼĳƮ
     2.1 Multicast ּ
     2.2  ܰ(Levels of Conformance)
     2.3 ƼĳƮ ͱ׷ 
        2.3.1 TTL.
        2.3.2 (Loopback)
        2.3.3 ̽ 
     2.4 ƼĳƮ ͱ׷ 
        2.4.1 ƼĳƮ ׷ (Join)
        2.4.2 ƼĳƮ Group Ż
        2.4.3 IP ƼĳƮ ּҿ Ethernet/FDDI ּҷ  (mapping)

  3. Ŀ 䱸 װ 
  4. The MBone.
  5. ƼĳƮ α׷
  6. ƼĳƮ α׷
     6.1 IP_MULTICAST_LOOP.
     6.2 IP_MULTICAST_TTL.
     6.3 IP_MULTICAST_IF.
     6.4 IP_ADD_MEMBERSHIP.
     6.5 IP_DROP_MEMBERSHIP.

  7. ƼĳƮ 
     7.1 IGMP.
     7.2 IGMP version 1.
     7.3 IGMP  2.
     7.4 Ŀ  

  8.  å  
  9. ƼĳƮ ƮƮ 
  10.  ڷ
     10.1 RFC 
     10.2 ͳ ʾ(draft)
     10.3  
     10.4  

  11. ۱ǰ å Ѱ 
  12.  
  13.  Ѹ

  ______________________________________________________________________

  1.  Ұ

     TCP/IP Ʈ ƼĳƮ   
  ϸ ֽ ׸ Ȯ  ٷ絵  ̴.
    ǰ̶ ȯѴ.  ߿  ְų  
  ߰  ִٸ ڿ ֱ ٶ.

  1.1.  ƼĳƮ(Multicast) ΰ?

  ƼĳƮ  ʿ伺̴.  ͳݻ -ü
  ƴ-ȣƮԷ ؾ ѷ   ִٸ ٷ
  ƼĳƮ  ش̴.  , ͳݿ лǾ ȣƮ 
  ȸǸ ϱ  ǽð   ϴ , ƼĳƮ
     ִ.

  ƼĳƮ ڰ ڽ ű⸦ ( ִ  ä ļ
  )μ  ޴´ٴ  TV  ϴ. ٸ 
  ĵΰ ڽ̿ϴ ͸ Ѵ.

  1.2.  ĳƮ(Unicast) 

  εĳƮ(Broadcast) ƴϸ ƼĳƮ ƴ  ĳƮ
  Ѵ.     ...Ŷ   ۽ μ
  ϳ,  μ ϳ   ̰ ĳƮ Ѵ. TCP
   ü   ĳƮ Ѵ.  , UDP ξ پ
      ϴ μ   ϳ   
  ĳƮ   ִ.

  ͳ ʱ⿡ ĳƮ ߾. 1993  4.4 BSD ʷ
  ƼĳƮ ؼ    ƹ װ ʿ
  ϴ    ʾҴ. ׷  ƼĳƮ Ҹ   
  ϱ?

   ʿ䵵  ͳ ʱ κ û ȭ ޾.
  Ư   Ȳ  ڹٲپ Ҵ.  mail, FTP 
  ̻ , ڽŵ Ȩ ׸  ߰  ư 
   ߴ.

  ó ̶,   ϴ   ̿ ĳƮ
   Ѵٰ ص   "(cost)"   ִ. 
  ̳    Ѵٸ û 뿪 ʿϴ.
  ƼĳƮ  ִ´ٸ    ִ. ƴ, ƼĳƮ
  ϱ     ߾. ĳƮ   
  ں    ΰ, ƴϸ εĳƮ  ΰ.

  ڴ ϴ. /    뿪 
  ε ̷   Ǵ õ̶  . Ƹ 
  ǻͿ Ʈ رϰ  ̴.

  εĳƮ ش   װ͵ Ȯ  . 츮 LAN
  ִ  ȣƮ ȸǿ Ѵٸ εĳƮ Ȯ ش 
   ִ.  Ŷ ѹ ۵Ǹ ٸ  ȣƮ εĳƮ
  ּҸ  Ŷ  ̴.  ,  Ϻ ȣƮ 
  Ŷ Ϸ  . Դٰ,  ȸǿ ϰϴ 
  ϳ ȣƮ   ͸ ľ     ִ ܺ LAN
  Ѵٸ   ȴ. ˴ٽ, εĳƮ  LAN
  ο ѵ, εĳƮ Ŷ Ͽ ܺ LAN 
   .

  ּ ذå Ŷ -ġ TV  äó-Ϻ Ư ּҷθ
   ̴. ׷ ȸǿ ϰϴ  ȣƮ  Ŷ
  Ʈ  ,  ּ(destination address) Ͽ
  о  ڽ IP(layer) 
  ȣȭ(demultiplexing)Ѵ. , ƼĳƮ Ŷ  ѹ
  ۽ŵǾ Ʈ  ȣƮ װ  д´ٴ 
  εĳƮ ,  Ŷ  Ŀ(kernel)  쿡
  а  óѴٴ  εĳƮ ٸ.

   Ư Ŷ IP Ŷ̱  Ŀ (kernel level)
  Ѵ. Ŀο  θ ˷ִ  ˰ 
   ̴.

  2.  ƼĳƮ

  2.1.  Multicast ּ

  IP ּҴ 32Ʈ ߿  Ʈ鿡 ؼ Ŭ(class) зȴ.

       Bit -->  0                           31            Address Range:
               +-+----------------------------+
               |0|       Class A Address      |       0.0.0.0 - 127.255.255.255
               +-+----------------------------+
               +-+-+--------------------------+
               |1 0|     Class B Address      |     128.0.0.0 - 191.255.255.255
               +-+-+--------------------------+
               +-+-+-+------------------------+
               |1 1 0|   Class C Address      |     192.0.0.0 - 223.255.255.255
               +-+-+-+------------------------+
               +-+-+-+-+----------------------+
               |1 1 1 0|  MULTICAST Address   |     224.0.0.0 - 239.255.255.255
               +-+-+-+-+----------------------+
               +-+-+-+-+-+--------------------+
               |1 1 1 1 0|     Reserved       |     240.0.0.0 - 247.255.255.255
               +-+-+-+-+-+--------------------+

  츮     "D Ŭ ּ".  ּҰ "1110"
  ϴ IP  ͱ׷ ƼĳƮ ͱ׷̴.

   28Ʈ ۽ ͱ׷ ƼĳƮ׷  ϴµ
  δ.       ļ ߴ Ͱ ϰ
  Ư ƼĳƮ ׷ ۵Ǿ Ŷ ϱ ؼ 츮
  Ŀ Ư ׷쿡 ߾ Ѵ.   ̷  ,
  ȣƮ,  ̽  ׷쿡 ߴٰ   ִ. Ŀ
   ڼ ٷ ̴.

   ƼĳƮ ׷(well known multicast groups)̶ Ҹ Ư
  ׷ ִµ ̷ ׷   Ư 뵵 ̱ 
   α׷  ÿ   .

  o  224.0.0.1  ü ȣƮ ׷̴. ƼĳƮ ̽ õ
      ׷쿡 ؾϹǷ  ּҷ ping   ƼĳƮ
     ȣƮ  ̴.

  o  224.0.0.2  ü  ׷̴.

  o  224.0.0.4  ü DVMRP  ׷̴.

  o  224.0.0.5  ü OSPF  ׷̴.

  o  224.0.013  ü PIM  ׷̴.

  o  ...

   Ư ׷  RFC "Assigned Numbers" 
  ϵȴ.

   , 224.0.0.0 224.0.0.225  
  (  /)  Ǿ  ƼĳƮ ͵鵵
     ּҷ  ϴ ͱ׷   ̴.
  ̿ ϰ 239.0.0.0 239.255.255.255 "administrative
  scoping" Ͽ Ǿ ִ. ("administrative scoping") ؼ
  2.3.1  ).

  2.2.   ܰ(Levels of Conformance)

  ȣƮ ؾϴ ƼĳƮ ԰ݿ    ܰ谡 ִ.

  Level 0 : the no support for IP Multicasting IPv4 ƼĳƮ
  ǹ ؾϴ  ƴϱ  ͳݿ ִ  ȣƮ
  ͵ Level 0 ¿ ִ. ( IPv6 ǹ
  ƼĳƮ ϵ ϰ ִ.)  ̻  ʿ . 
  ¿ ִ ȣƮ ƼĳƮ Ŷ ų   ,
  ƼĳƮ Ŷ  Ѵ.

  Level 1 :  the support for  sending but not receiving multicast IP
  datagrams , ͱ׷  ؼ ƼĳƮ ׷쿡 
  ʿ . Level 0 ȣƮ Level 1 ȣȯ ·  ؼ IP
    ణ ؾ Ѵ. ڼ  2.3 ٷ.

  Level 2 :   the full support for IP multicasting Level 2 ȣƮ
  ƼĳƮ ͱ׷ ۽Ű  ؾ Ѵ. , ƼĳƮ
  ׷쿡 ϰ Ż  ־ ϸ  ŵ ƼĳƮ 
  Ϳ    ־ Ѵ. , ȣƮ TCP/IP ÿ ͳ
  ׷  Internet Group Management Protocol  (IGMP) 
  Ǿ ־ Ѵ.

  2.3.  ƼĳƮ ͱ׷ 

  ̻ ̷, ƼĳƮ Ʈ UDP ƮƮ 
  óϴ  иϴ. TCP (point-to-point) ϴ
  ̹Ƿ ƼĳƮ Ʈȿ  ʴ. (ο  ƼĳƮ 
  ƮƮ      Ȱ ̴. 9
  "ƼĳƮ ƮƮ "  )

  ̷л, α׷  UDP   class D ƼĳƮ
  ּҸ  ϴ ͱ׷ ξֱ⸸ ϸ ȴ. ׷, ۽
  μ    ؼ ־  ۾ ִ.

  2.3.1.  TTL.

  IP  TTL(Time To Live) ʵ ƼĳƮ ߿ ǹ̸
  .  ʵ   Ͽ ͱ׷ Ʈ 
  ƴٴϴ  Ѵ.  ʹ Ʈ ̵ϴ ͱ׷
  TTL ʵ带 ҽŰ TTL ʵ尡 0 Ǵ ͱ׷  (drop).
  IPv4 ƼĳƮ TTL ΰ(threshold) ǹ̸ Ѵ.  
      뵵 и.

  츮 μ  ȣƮ ϴ   뿪  ϴ
  ȸǸ Ѵٰ . 츮 LAN û 뷮 Ʈ
  ߻ ̸, Ƹ 츮 μ پ LAN ϴ ū Ʈ
  ̴.   츮 LAN Ͽ ȸǸ  , 츮
  ƼĳƮ Ʈ  ͳ ü رǴ  ġ  ̴.
  , ƼĳƮ Ʈ Ͱ 󸶳 ̵ָ  ֵ 
    ʿ䰡 ִ. ̰ TTL 뵵̴.

  ʹ  ̽  TTL ġ(threshold) Ҵϰ
    ġ ū TTL  ͱ׷ ȴ.
  ͱ׷,  ġ ҴǾִ ͸  , TTL
  ġŭ ҵǴ  ƴ϶  ϶.  񱳸
  ̷ (տ ߵ TTL ͱ׷ ͸  
  1 ҵȴ).

   Ʈ TTLġ ׿ شǴ  ǥõǾ ִ.

    ----------------------------------------------------------------------
    TTL     Scope
    ----------------------------------------------------------------------
       0    ȣƮ η . ̽ µ .
       1      . ʹ  .
     <32     Ʈ(site), ü μ .
     <64     (region) .
    <128      .
    <255    . .
    ----------------------------------------------------------------------

  "Ʈ(site)"  "(region)"   Ȯ Ǵ .  װ
     ڿ ޷ִ.

   TTL  䱸  ŭ   ϸ, Ư
   (overlapping regions) ٷų (geographic)̰ų
  (topologic) ׸ 뿪  ῡ  ʴ.
  ̷  ذϱ Ͽ 1994 administratively scoped IPv4
  multicast regions  Ǿ (D. Meyer's "Administratively Scoped
  IP Multicast" Internet draft ). ̰ TTL ̿ ʰ IP
  ּҸ ̿Ͽ (scoping) Ѵ. 239.0.0.0 
  239.255.255.255 IPּҰ     Ǿ
  ִ.

  2.3.2.  (Loopback)

   ȣƮ Level 2  ܰ迡  ͱ׷ ϴ ׷
   ϰ  , Ŷ 纻  ȴ. ̰ Ʈ
  ̽ ī尡 ش Ʈ ̽  ڽ Ʈ 
  Ŷ Ʈκ ٽ о´ٴ  ƴ϶, IP 
  ͱ׷ νϿ   Ŷ IP Է ť  ִ 
  ǹϸ   ⺻ (default) Ǿ ִ.

  ̷  ʿ 쵵 ְ ׷  쵵 ִ.  
  μ   Ѵٸ Ѱų   ִ.

  2.3.3.  ̽ 

  ټ Ʈ ̽ Ǿ ִ ȣƮ 
  α׷ Ͽ  ̽  ؾϴ  
  ֵ  ־Ѵ.    ٸ Ŀ  
  Ͽ ⺻  Ѵ.

  2.4.  ƼĳƮ ͱ׷ 

  2.4.1.  ƼĳƮ ׷ (Join)

  εĳƮ ƼĳƮ  ϱ . εĳƮ
  Ŀο Ŷ ó Ģ ߰ ˷ ʿ䰡 . Ŀ εĳƮ
  Ŷ а  α׷ ϴ  ˰ ִ.

  ׷ ƼĳƮ 츮  ׷쿡  ִ Ŀο ˷
  ʿ䰡 ִ.  , Ŀο  ׷쿡 "(join)@quot;ϵ ûؾ
  Ѵٴ ̴. ϵ , ƼĳƮ ͱ׷ ϵ
   ͸ϰų ƴϸ IP  ϴ 쵵 ִ.   쿡
    ο  ̷⵵  Ѵ.    " (join)" ؼ
  ϵ ׷츸 ޾Ƶ鿩.

   츮 ׷쿡 Ѵٴ  Ŀο   ̾߱⸦
  ϴ  ǹѴ. " ⺻  ƼĳƮ ͱ׷ ó
  ʴ´ٴ  ˰ ,   ƼĳƮ ׷쿡 ϰ Ѵٴ
   ֱ ٶ.  ׷  Ʈ ̽ ̴
  Ŷ,  ƼĳƮ ׷ ּҸ  ʵ忡 ϰ ִ
  ƼĳƮ ͱ׷ а (Ӹ ƴ϶ װͿ   ִ
  ) μ  ֱ ٶ. ".

    : 켱 ׷쿡   ϴ    ƴ϶ 
  ָ϶. 츮 Ư Ʈ ̽ 󿡼 ׷쿡 Ѵ.
  , ϳ ̻ ̽  ׷쿡 ϴ  ϴ.
   ̽ Ȯ  ʴ´ٸ ͱ׷ ۵ 
   ̺ ǰϿ Ŀ  ̴. , ϳ ̻
  μ  ̽  ƼĳƮ ׷쿡 ϴ ͵
  ϴ.  μ ش ̽  ͱ׷
  Ѵ.

   ߵ,  ƼĳƮ ȣƮ õÿ ü ȣƮ
  ׷쿡 ϱ  224.0.0.1  ping   Ʈ  
  ȣƮ   ̴.

  , μ ƼĳƮ  ͱ׷ ޱ ؼ  , Ŀο,
  ׷쿡   ͱ׷ ۽ϴ Ʈ   (bind)  ûؾ
  Ѵ.   UDP   Ŷ ؼ(demultiplex)ϱ   ּҿ
  Ʈȣ  ϸ   Ȥ   ϵ Ŷ
    Ѵ.

  2.4.2.  ƼĳƮ Group Ż

  μ ƼĳƮ ׷   Ŀο  ׷ 
  Ѵٰ ˸.  ̰ Ŀ  ׷  ƼĳƮ ͱ׷
   ̻   ǹϴ  ƴ϶  ؾ Ѵ. 
  "multicast join" û  μ  ְ  ׷쿡 
    ִ ¶ Ŀ  Ŷ  ̴. ̷
   ȣƮ  μ  ׷    
  ׷쿡  ְԵȴ.

  ߰ : ׷  ,  ϴ Ʈ  (bind)
  ä  ̸  ƼĳƮ ׷쿡 ϰ ִ μ
     ƼĳƮ traffic  ϰ  ̴.

  ƼĳƮ group  Կ ־,  IP  data link 
  ش ׷ ϴ ƼĳƮ ͱ׷  ޵ ϴ ̴.
  (쿡 󼭴  ϵ ϴ 쵵 ִ) ̰
  μ (per-process membership) ƴ϶  ȣƮ (per-host
  membership)̴.

  2.4.3.  IP ƼĳƮ ּҿ Ethernet/FDDI ּҷ  (mapping)

  Ethernet FDDI  (frames) 48 Ʈ  ּҰ
  . ƼĳƮ IP ּҸ ethernet/FDDI ϱ   ƼĳƮ
  ARP   ϱ ؼ, IANA ƼĳƮ  ּҰ
  ߴ. , 01-00-5e-00-00-00  01-00-5e-ff-ff-ff
  (16)  ethernet/FDDI  ƼĳƮ ׷ 
  ͸ . ξ(prefix) 01-00-5e  ش  ƼĳƮ
   Ÿ, ٷ  Ʈ  ׻ 0̴. ,  23
  Ʈ ƼĳƮ ּҸ  ȴ. ׷, ƼĳƮ ׷
  IP 28Ʈ ̹Ƿ 11  Ұϴ.   IP ƼĳƮ
  ׷ 23  Ʈ(Least Significant Bit) ӿ ġѴ.
   5  Ʈ  õǸ32(2^5=32)  ٸ ƼĳƮ
  ׷  ethernet/FDDI addressȴ. ̰ ethernet 
   ͷ ۿ   ǹϸ, IP  data link 
  ؿ ͱ׷     ؾ   ̴.
  IP   Ϻ ̴.

  FDDI   IP   Ƽĳÿ       ڼ      RFC   1390
  "Transmission of IP and ARP over FDDI Networks"  ִ. IP
  Multicast  ּ ethernet        ڼ 
  draft-ietf-mboned-intro-multicast-03.txt "Introduction to IP Multicast
  Routing" ϶.

  Token-Ring LAN 󿡼 IP ƼĳƮ   ִٸ RFC 1469
  ϶.

  3.  Ŀ 䱸 װ 

  Linux 翬( ǽ?)  Level 2 ƼĳƮ Ѵ.
   ۼ 䱸 ϸ ƼĳƮ ͱ׷ ؼ
  (mrouter)ó ۵Ѵ.

  ƼĳƮ ۼ ϰʹٸ Ŀ   "IP: multicasting"
  yes ֱ⸸ ϸ ȴ. Linux box ƼĳƮ   (mrouter)
  ϰ ʹٸ "IP: forwarding/gatewaying", "IP: multicast routing"
  ׸ "IP: tunneling" ָ ȴ. ڴ ο 
  mrouted ƼĳƮ ͱ׷ ĳƮ ͱ׷
  ĸȭ(encapsulation)ؼ   IP tunneling  ϱ
  ̴. ̰ ĳƮ   Ʈ лǾִ ƼĳƮ
  ȣƮ鰣 (tunneling) ؼ ʿϴ.  (mrouted 
  ˰- å- ϰ Ŀο ƼĳƮ  ͱ׷
     ˷ִ daemon̴).

    Ŀε ƼĳƮ   "EXPERIMENTAL" зϰ
  ֱ , "Code maturity level options"ǿ  "Prompt for
  development  and/or incomplete code/drivers"ɼ ϰ  ־
  Ѵ.  mrouted   츮 Linux box ִ 
  Ʈ  traffic  ٸ Ʈ ִµ,
  ٸ Ʈ traffic    ٸ ICMP ޽ ް
  ʴ Ȯ .   찡 IP tunneling Ȱȭ ѳ
     ̴. ϴ ˰   , ,
  𸣴 쿡 ð ϳ ɸ   縮 ˱ ƴ. ̷
  Ȳ (sniffer)  ϴ!

  (ƼĳƮ ÿ ؼ "Routing Policies and Forwarding
  Techniques" ǿ, mrouted  tunnel  ؼ "The MBone" 
  "Multicast applications" ߰ Ѵ).

  ϴ Ŀ ϰ ġ Ŀ ƼĳƮ Ʈ  ⺻
  ðθ   ؾѴ. 츮 ǥ 224.0.0.0 Ʈ
  θ ߰ϴ ̴.

  κ   ܰ迡 ޴  ũ  
  ̴.  Terry Dawson  NET-3-HOWTO оٸ, ùٸ
   ˾ ߱   ̴.   ߵ,
  ݸũ(subnetmask) 츮 IP ּ Ʈ κ  1 ä
  ȣƮ κ  0 ä 32Ʈ ̴.  2.1 ҵ
  ŬD ƼĳƮ ּҴ Ʈ/ȣƮ еǾ ʴ.
   18Ʈ ׷ ڿ  4Ʈ ŬD ڷ ̷ִ. 
  4Ʈ Ʈ κп ǰ 28Ʈ ȣƮ  κп ȴ.
   ݸũ 11110000000000000000000000000000  ڸ,
  240.0.0.0 ȴ. ׷  ɾ    ̴.
  route add 224.0.0.0 netmask 240.0.0.0 dev eth0

  route α׷   addڿ -net  ٿ ϴ 쵵
  ִ.

  ⼭ eth0 ƼĳƮ ϴٰ , ޸  
   ƼĳƮ Ʈ eth0 µ ̴. ̰ 츮
  ش ʴ´ٸ dev   ٸ  ٲپ ־Ѵ.

  ⼭ ٽ ѹ /proc  Ͻý 뼺 ȴ.  츮
  츮ȣƮ ϰ ִ ׷ /proc/net/igmp ؼ Ȯ  
  ִ.

  4.  The MBone.

   Բ  ִ ̴.  ,  иϴٴ
  ̴. ֵ    ȣƮ, Ư ͵ 
   ʰ ִٴ ̴.   ƼĳƮ ϴ
   ο  ϰ ü ϸ ڽ ҿ
  ƼĳƮ  . ׸ ׵ ٸ  ڽŰ 
   ϰ ִ    ˰Եȴ. ׵ 
  ƼĳƮ  ʴ  ϳ  ...

  ش иϴ. ׵  ƼĳƮ Ʈ ͳ  ܿ
   Ѵ.   ƼĳƮ ͸  Ʈ ׵鰣
   ϴ ̴.  ĳƮ ͸ ؼ 
  Ʈ ٸ ƼĳƮ  ĳƮ ȭ ƼĳƮ
  Ʈ   ̴. ߰  ͵-ĳƮ
  ͵- ĳƮ Ʈ ٷ  ǹǷ   ʴ´.
     ĸȭ Ʈ ٽ  ƼĳƮ
  Ʈ ؼ  ̴. ̷ ƼĳƮ Ʈ ĳƮ
  Ʈ ٽ ƼĳƮ Ʈ ȯϴ  ƼĳƮ
  ͳθ(tunneling)̶ Ѵ.

  , MBone Ǵ ƼĳƮ 麻(Multicast Backbone) ƼĳƮ 
  ƼĳƮ ͳη ִ̾  ƼĳƮ Ʈ(virtual multicast
  network)̴.

   MBone  Ȱ Ȱϴ. ׷ ݸ ݵ ͳݿ
  ǽð    ǳ ȸǰ ̷ ̴. ֱ
  Linus Torvalds Silicon Valley Linux Users Group ǥ 
  ̺ ͳ ۵  ִ.

  MBone   ڼ ڷ  ϶.
  <http://www.mediadesign.co.at/newmedia/more/mbone-faq.html>

  5.  ƼĳƮ α׷

  ƼĳƮ ٷ κ    MBone  ̸
  mrouted ʿ  ̴. 츮  ƼĳƮͰ  ¿
  ٸ  ƼĳƮ Ʈ ϱ Ѵٸ mrouted
  ʿϴ. mrouted ƼĳƮ ͱ׷ ĳƮ 
  ĸȭϿ (IP IP) ĳƮ ͸  ƼĳƮ Ʈ
    ֵ ָ,  ܿ    ִ.  ߿
   ƼĳƮ ͱ׷ ߽  Ͽ 
     ƴϸ     Ŀο ˷شٴ ̴.
  ƼĳƮ ͸  ִٰ ϴ mrouted Ŀο
  ͱ׷   ˷ش. (԰ ƴ϶ ̴.
  mrouted "̰  ̽  Ʈ ϶."
  ,   Ŀ Ѵ.)   ۾
  κ(  ΰ)  ˰ κ(  ΰ)
  ϸ  ڵ带  ѹ ۼؼ Ŀο  Ǳ 
   ϴ.  ˰ å Ŀ   (user
  space daemon) Ǹ, , Ŀ    ʿ 
   å    ִ.

   Ʈ  õ mrouted   ִ.
  <ftp://www.video.ja.net/mice/mrouted/Linux/>  Ʈ ̷ 
  ϶.  <ftp://www.video.ja.net/mice/README.mirrors>

    õ ƼĳƮ α׷  MBone
  ϵ ۼ ͵鿡  ˾ƺ. ⿡ ִ Ʈ Michael
  Esler "Linux Multicast Information" Դ.
  <http://www.cs.virginia.edu/~mke2e/multicast/>.  ƼĳƮ 
      õ  ϴ.

   ȸ(Audio Conference)

  o  NeVoT- NetworkVoice Terminal   <http://www.fokus.gmd.de/step/nevot>

  o  RAT -UCL Robust-Audio Tool    <http://www-
     mice.cs.ucl.ac.uk/mice/rat>

  o  vat - LBL visual audio tool    <http://www-nrg.ee.lbl.gov/vat/>

   ȸ(Video Conference)

  o  ivs     -Inria     videoconferencing     system
     <http://www.inria.fr/rodeo/ivs.html>

  o  nv - Network video tool    <ftp://ftp.parc.xerox.com/pub/net-
     research/>

  o  nv w/  Meteor -   Release of nv   w/ support for   the Matrox
     Meteor (UVa) <ftp://ftp.cs.virginia.edu/pub/gwtts/Linux/nv-
     meteor.tar.gz>

  o  vic - LBL video conferencing tool    <http://www-
     nrg.ee.lbl.gov/vic/>

  o  vic w/  Meteor -  Release  of vic  w/ support  for  the Matrox
     Meteor (UVa)
     <ftp://ftp.cs.virginia.edu/pub/gwtts/Linux/vic2.7a38-meteor.tar.gz>

  Ÿ ƿƼ

  o  mmphone     Multimediaphone     service
     <http://www.eit.com/software/mmphone/phoneform.html>

  o  wb - LBL shared white board  <http://www-nrg.ee.lbl.gov/wb/>

  o  webcast - Reliable multicast application  for linking Mosaic
     browsers
     <http://www.ncsa.uiuc.edu/SDG/Software/XMosaic/CCI/webcast.html>

  ȸ (Session Tools)

  ణ  ʿ䰡 ־ ̰͵ ڿ Ҵ.  ȸǸ ϰԵǸ
  ȸǸ  񽺵(, ,  ĥ, ...) ƼĳƮ
  ׷ Ʈ ҴѴ. ȸǸ ϸ ƼĳƮ ׷ Ʈ,
  α׷(vic, vat, ...)   ֱ MBone
  ۵ȴ. ȸ   ̷  " "츮  ִ ȸǰ
   ִ (Ȥ ) ˾ƺ  ˷ش.  , ȸǿ
  ϴ   ش. α׷ Ѽ 
  ׷/Ʈȣ ˷ִ  Ŭϴ ͸ ǵ 
  α׷ Ű  α׷   Ѵ.
  ȸǵ   ڽ ȸǸ MBone ˸ ҵ Ѵ.

  o  gwTTS - University of Virginia tele-tutoring system
     <http://www.cs.Virginia.EDU/~gwtts>

  o  isc - Integrated session controller
     <http://www.fokus.gmd.de/step/isc>

  o  mmcc - Multimedia onference control
     <ftp://ftp.isi.edu/confctrl/mmcc>

  o  sd - LBL session directory tool
     <ftp://ftp.ee.lbl.gov/conferencing/sd>

  o  sd-snoop - Tenet Group session directory snoop utility
     <ftp://tenet.berkeley.edu/pub/software>

  o  sdr - UCL's next generation session directory
     <ftp://cs.ucl.ac.uk/mice/sdr>

  6.  ƼĳƮ α׷

  ƼĳƮ α׷... Ȥ, 츮 α׷ ۼϱ.

  ƼĳƮ ϱ ؼ   Ȯ  α׷
  ̽(API) ʿϴ.   κ setsockopt() (Ŀο
   )  getsockopt() (ƼĳƮ   )  
  ý ȣ  óѴ. ο ý ȣ ΰ ƼĳƮ
  ϱ  ߰Ǿٴ  ƴϴ. setsockopt()/getsockopt()
  4.2 BSD  ־.  Ŀο  ־ϴ ο
  ƼĳƮ ɼ ߰Ǿ ̴.

  setsockopt()/getsockopt() Լ ̴.

  ______________________________________________________________________
        int getsockopt(int s, int level, int optname, void* optval, int* optlen);

         int setsockopt(int s, int level, int optname, const void* optval, int optlen);
  ______________________________________________________________________

  ù °  s ý ȣ  ̴. ƼĳƮ 
   AF_INET 迭  ̾ϸ,  Ÿ SOCK_DGRAM Ǵ
  SOCK_RAW   ִ. κ SOCK_DGRAM ,  
  ϰų  ȹ̶ SOCK_RAW  ʿ 𸥴.

   °  level ɼ̳, (query), ޽(message) ó
  ̾ ǹѴ.   ̾ SOL_SOCKET, IP ̾ IPPROTO_IP,
  ̴. ƼĳƮ α׷ֿ level ׻ IPPROTO_IP ̾ Ѵ.

  optname 츮   ϴ   ϴ 
  ǹѴ.   ü(Ŀο ϰų Ŀηκ о  
  ) optval̴. ƼĳƮ α׷ֿ optnames  .

        optname              setsockopt()          getsockopt()
    IP_MULTICAST_LOOP           yes                     yes
    IP_MULTICAST_TTL            yes                     yes
    IP_MULTICAST_IF             yes                     yes
    IP_ADD_MEMBERSHIP           yes                      no
    IP_DROP_MEMBERSHIP          yes                      no

  optlen optval Ű ͱ ũ⸦ ǹѴ. ,
  getsockopt() ȯ  ȴ. Ŀ optname  optval
  Ű ۿ   optlen  ڷ ũ⸦ ˷ش.

  setsockopt()/getsockopt()   ϸ 0,  ߻ϸ
  -1 ȯѴ.

  6.1.  IP_MULTICAST_LOOP.

  α׷Ӷ, ͸ ȣƮ  ų  ؾѴ.
  , μ  ̰ų ͸ "listening" ڰ
  ִٸ  ϰ ؾѴ. , ī޶ ̹ ϴµ
  ڱ ȭ鿡 ̹  ʿ䰡 ٸ, Ƹ  ʿ 
  ̴.   α׷ ǻͿ  ī޶κ ڷḦ
  ̹   ̱ , ٽ κ ڷḦ ޱ ϴ
   幰 ̴.  ⺻  ȰȭǾ ִ.

  optval ̱  ó ؼ  ȴ.

  setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, 0, 1);

   Ű   ϰ

  u_char loop; setsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop,
  sizeof(loop));

   ȰȭŰ loop 1, Ű 0 Ѵ.

    ¸ ȮϷ   Ѵ.

  u_char loop; int size;

  getsockopt(socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, &size)

  6.2.  IP_MULTICAST_TTL.

  Ư  ʴ´ٸ, ƼĳƮ ͱ׷  Ʈ ܺη
  ۵Ǵ  ϱ  TTL 1 ⺻  ۵ȴ. TTL ϴ
  (0 255) ٲٱ ؼ TTL  ְ α׷
    ָ ȴ.(⼭ "ttl"̶ ߴ.)

  u_char ttl; setsockopt(socket, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,
  sizeof(ttl));

  IP_MULTICAST_LOOP ϴ.

  6.3.  IP_MULTICAST_IF.

  Ϲ ý ڴ ⺻ ̽ ϸ, ƼĳƮ
  ͱ׷  . α׷Ӵ  ɼ Ͽ 
  ⺻ ̽ ϰ  Ͽ  ̽  
   ִ.

  struct in_addr interface_addr; setsockopt (socket, IPPROTO_IP,
  IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr));

  ĺ  Ͽ   ƼĳƮ Ʈ  
  ̽ µȴ.   ȸϿ    ϰ
  Ŀ ܺ  ̽ ϵ Ϸ ̽
  INADDR_ANY ϰ   ɼ setsockopt() ȣѴ.

  ܺ  ̽ Կ ־,  ioctl  ̴.
  SIOCGIFADDR (̽ ּ ), SIOCGIFCONF (ü ̽ 
  ), SIOCGIFFLAGS (̽  ÷(flag) 
  ̽ ƼĳƮ  Ȯ - IFF_MULTICAST ÷-).
  ȣƮ ƼĳƮ ͷ ۵Ѵٸ,  ̽ 
  ְų IP_MULTICAST_IFɼ Ǿ   , ٸ
  ̽ ƼĳƮ  ϴ ƼĳƮ ⺻
  ̽  ̷.

  6.4.  IP_ADD_MEMBERSHIP.

  Ŀο 츮  ׷쿡  ִ ˷־ Ѵٰ ߴ 
  ٽ  .  ׷쿡  ִ μ ϳ ٸ, 
  ׷ ؼ ۵Ǿ Ŷ  ȴ.  Ŀο 츮
   ׷ ˸, ׷ ȸ(member) Ǳ ؼ 
  ʿϴ. 켱 ip_mreq ü   ä. ׸, optval
  Ͽ  setsockopt() ȣؼ Ŀο  ü Ѱָ ȴ.

  ip_mreq ü (/usr/include/linux/in.h )  .

  ______________________________________________________________________
  struct ip_mreq
  {
          struct in_addr imr_multiaddr;   /* IP multicast address of group */
          struct in_addr imr_interface;   /* local IP address of interface */
  };
  ______________________________________________________________________

   :  ü ""  Ǵ  Ͽ õǾ ִ. ,
  ڵ ̽ļ ؼ <linux/in.h>  (include)Ѽ  ȴ.
   <linux/in.h> ϴ <netinet/in.h> ԽѶ.

  ù ° , imr_multiaddr 츮  ׷ּҸ Ѵ.
  ȸ(membership) ׷Ӹ ƴ϶ ̽   ִٴ 
  ؾѴ. ,  ° , imr_interface ˷־ Ѵ.
  츮 л ȣƮ ִ ̷   ٸ ̽
  ̿Ͽ  ׷쿡   ִ. imr_interface ϵī
  ּ(INADDR_ANY) ̿      ̽ ϴ
   Ŀ Ѵ.

  ϴ  ü ä (struct ip_mreq  mreq;   ߴٰ ϸ)
    setsockopt() ȣϸ ȴ.

  setsockopt (socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,
  sizeof(mreq));

     ׷쿡    ִٴ  ָ϶. ׷ 
   IP_MAX_MEMBERSHIPS ǵǾ  Ŀι 2.0.33
  20̴.

  6.5.  IP_DROP_MEMBERSHIP.

    ׷쿡 ϴ Ͱ ϴ.

  struct ip_mreq mreq; setsockopt (socket, IPPROTO_IP,
  IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));

  ⼭ mreq ׷쿡    ߴ Ͱ  ü.
  imr_interface INADDR_ANY Ѵٸ Ŀ  ù °
  ̽ ŵȴ.

      ׷쿡    ϱ  
  ȸ 踦  ʿ .     ȸ 
  Ŀ  ȴ.   μ (kill)ų 
  ϴ.
   ׷쿡 ȸ ϴ  ȣƮ Ͽ  ׷
  µͱ׷  ϵ ϴ  ǹϴ   ƴϴ. 
  ̽  ׷쿡   IP_DROP_MEMBERSHIP °
  Ǵ ȣƮ ׷   Ѵ.

  ADD_MEMBERSHIP  DROP_MEMBERSHIP  ,  θ  ȯѴ.
  (nonblocking operations)

  7.  ƼĳƮ 

     ƼĳƮ  ۵ϴ ϴµ ʿ
   ϴ    ƴϰ ƼĳƮ α׷ֿ  
  ڴ ͵ ƴϴ.  ƼĳƮ  ̷ ݰ
   캽μ   Ǽ  ߸ ظ   
  ̴.

  7.1.  IGMP.

  IP_ADD_MEMBERSHIP  IP_DROP_MEMBERSHIP   Ŀο 
    ƼĳƮ ͱ׷ ް    
  ϴµ δٰ ߴ. ´ ̶   ,  ´ 
  ƴϴ. ̷ Ϲȭ     ƼĳƮͱ׷ 츮
  ȣƮ ޵ , ȣƮ μ  ȸ踦 Ȯ 
  ͱ׷  θ Ѵٴ  ȴ.  ʿ䵵 ,
  ̰ û 뿪    ִ.

  δ ȣƮ ڽ Ϳ,  ʹ  Ϳ,
  ׸   Ϳ.... ƼĳƮ ׷쿡  ִ
  ˷ش.  ƼĳƮ ׷ Ʈ     ϴ
  ˰ ü  ȭ ѵ,  Ѱ  ʴ 
  ִٸ,   ϴ ̴. ̰ IGMP(Internet Group
  Management Protocol  ̿Ѵ. ݹȣ 2 IGMP ICMP 
  ο ε IP ͱ׷ ̿ϸ  2 ܰ
  ȣƮ   ǹ ؾ Ѵ.  ٿ 
  ̰ Ϳ ȸ ϴ ȣƮ ͻ  
   Ѵ.  ۿ ȣƮ-Ͱ 踸 ϱ Ѵ.
  ֳϸ mroutedҽ ڵ带 ϰ -Ͱ  ؼϴ
  ڷḦ ã Ͽ  ̴. (RFC 1075-Distance  Vector Multicast
  Routing Protocol   , mrouted  ȭ
    DVMRP ϰ ִ.)

  RFC 988-IGMP  0   ʴ´.

  IGMP  1 RFC-1112 ǵǾ ְ, RFC-2236 (IGMP version 2) 
  Ǿ   ϰ ִ.   Ŀο IGMP  1
  ü  2Ϻΰ Ǿ ִ.

  ݺ  ݿ  ļ . RFC-2236  
  Ȯ    ͵ .

   IGMP ޽   .

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |      Type     | Max Resp Time |           Checksum            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Group Address                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

  IGMP  1 ( IGMPv1)  ۽ "Max Resp Time"  "Unused",
   0  ϰ Žÿ Ѵ. "Type" 4Ʈ  
  "Version" "Type" Ѵ. IGMPv1  "ȸ(Membership
  Query)" 0x11  (version  1, type 1) Ȯϰ, IGMPv2  0x11
   Ȯϱ  8Ʈ ǻ ϰ ؼ Ѵ.

  IGMPv2  ַ ߰׵ ̷ ֱ  IGMPv1  ϴ 
   IGMPv2 ߰ ϴ    .

   ǿ ʹ  IP  ƼĳƮ ͱ׷ ޴´ٴ 
  ϶.

  7.2.  IGMP version 1.

  ʹ ֱ(1п 2п ѹ) TTL 1  IGMP ȣƮ ȸ
  Ǹ ü ȣƮ ׷(224.0.0.1) .  ƼĳƮ
  ȣƮ  ޽ IGMP ȣƮ ȸ (Host  Membership
  Report) (storm)ϴ  ϱ    ʴ´.
   Ǹ  ̽ ϴ  ׷쿡 ,   
  Ÿ̸Ӹ Ѵ.

    Ÿ̸Ӱ ϷǸ ȣƮ  TTL 1 IGMP ȸ 
  ƼĳƮ ׷巹 Ѵ.  ޽ ̹  ׷쿡 ϰ
  ִ  ȣƮ Ÿ̸Ӱ ϷǱ⸦ ٸ ִ ȣƮ鿡
  ޵ȴ. ׷  ȣƮ Ÿ̸Ӹ ϰ  ̻ ƹ 
    ʴ´.  ̰ ʹ ڽ ݿ  ƼĳƮ
  ׷  Ѵٴ ͸ ˸ Ǳ  ȸ ̳ ִ
  ˱   ̻,   ʿ䰡 .

     Ŀ  ׷쿡  ƹ ȸ   ʹ
     ϰ ش ׷ Ʈ  
  ʴ´. IGMPv1  "׷ Ż ޽(Leave Group messages)"
  ٴ  ָ϶.

  ȣƮ  ׷쿡 ϸ Ŀ ׷   
   μ ο ȸ ǰ  (1,2 ) ٸ
  ʿ䰡 .  "IP_ADD_MEMBERSHIP"  Ұ,  IGMP Ŷ
  IP_ADD_MEMBERSHIɿ   Ŀ Ѵ. " ׷"̶
     .  ȣƮ ̹  ׷쿡  μ
  IP_ADD_MEMBERSHIP     츮  ̹   ׷ Ʈ
  ް ֱ   ƹ IGMP Ŷ   ̴. 
  ׷ īͰ Ѵ. IGMPv1 IP_DROP_MEMBERSHIP  
  ͱ׷ Ű ʴ´.

  ȣƮ ȸ Ǵ Ÿ 0x11, ȣƮ ȸ   Ÿ 0x12
  Ѵ.

  ü ȣƮ ׷쿡  ʴ´.  ׷ ȸ ̴.

  7.3.  IGMP  2.

   뿡  ߰   ߿  Ѱ ׷ Ż
  ޽(Ÿ0x17) ԵǾٴ ̴.  ޽ ݿ
   ȣƮ ׷ Żϴ   ð Ǿ Ͱ
   ̻ ׷쿡 ִ ȸ ٰ ϴ   뿪
  (Ż -leave latency) ̱  ߰Ǿ. ׷ Ż
  ޽ ׷ ٸ 鿡Դ ʿ ̱  ִ
  ׷캸 ü  ׷(224.0.0.2) ؾ Ѵ. (Ŀ 
  2.0.33 Ͽ  ޽ ׷ ¾. ȣƮμ ظ
    ,  ̱     óϴ 
  ð ̴.)  Ż ޽  ΰ,   
  ΰ ϴ  ؼ   ̹  ִ.  ִٸ
  RFC  .

  IGMPv2Ͱ Ż ޽  ʹ ׷ Ͽ(group-
  specific) ִ ׷쿡 Ǹ . ̰͵ IGMPv2  ߰
  ̴. IGMPv1 ׷  Ǵ .  ǰ ü ȣƮ
  ׷  ǿ. IGMP  ǵ Ÿ  
  ʾ( ϰ 0x11), "׷ ּ(Group Address)"ʵ
  ִ ƼĳƮ ׷ ּҷ ä.

  IGMPv1 ۽ 0  ä Ž  ϱ Ͽ  "Max Resp
  Time" ʵ "Membership  Query" ǹ̰ ִ.  ʵ
  ؾ Ѱ ð ϴµ  δ.  ϴ
  Ŀ Ѵٰ   ִ.

  IGMPv2 ο  ޽ Ÿ  0x16 ߰Ǿ.   ̰ "Version 2
  Membership Report"μ IGMPv2 ȣƮ IGMPv2  ͸ ߰  
  Ѵ. (IGMPv2  ȣƮ "Max Response" ʵ尡 0  ä Ŷ
  ȮϿ IGMPv1 Ͱ Ѵٴ  ˾Ƴ).

  ÿ  Ͱ Ǹ  , IGMPv2   "discussions" ȸϴ
  Ŀ Ѵ.    IP ּҸ  Ͱ
  (querier) ǰ ٸ ʹ Ÿ̸Ӹ Ѵ.  ȣ
  Ͱ    ۵ ϸ Ÿ̸Ӱ   ٽ
  ڸ Ѵ.

  7.4.  Ŀ  

     Ŀο ƼĳƮ   нϱ  Ǹ
   ̴.   ü  ʴ´.   ã
   ˷ִ.

    2.0.32 ̹Ƿ    д   
   𸥴.  (Ʈ ڵ 2.1.x  Ǿ.

   Ŀο  ƼĳƮ ڵ  ׻ #ifdef    CONFIG_IP_MULTICAST
  / #endif  ѷο ֱ  ʿϴٸ  Ŀο
  (inclusion/exclusion)Űų  ų  ִ. ( /
   ÿ   #ifdef  óⰡ ϴ ۾̶ 
  ˰  ̴. Կ make config, make menuconfig Ǵ
  make xconfig ų    ִ.)

  ƼĳƮ   ϰ ʹٸ #ifdef CONFIG_IP_MROUTE /
  #endif  ڵ Ȱȭ Ѿ Ѵ.

  Ŀ ҽ  /usr/src/linux ִ.  ġ   ִ
  ̱  Ŀ ҽ ġ  ϰ LINUX   .
     Ŀμҽ /usr/src/linux     Ǯ   ,
  LINUX/net/ipv4/udp.c  /usr/src/linux/net/ipv4/udp.c  ǹѴ.

   α׷ ƼĳƮ ̽ ƼĳƮ α׷
    setsockopt()/ getsockopt()     ־. 
   Լ ޹  ȿ ˻ , ٸ   Լ
  ȣϿ ߰  ˻ϰ,  ٸ Լ ȣϴ 
  Ǿ. (  Լ ȣ⿡  ִٸ LINUX/net/socket.c
  (Լ sys_socketcall()  sys_setsockopt()), LINUX/net/ipv4/af_inet.c
  (Լ inet_setsockopt()) ׸ LINUX/net/ipv4/ip_sockglue.c (Լ
  ip_setsockopt())  ϶.)

  LINUX/net/ipv4/ip_sockglue.c         ƾ  Ѵ.
  ⿡   Լ ip_setsockopt()  ip_getsockopt()   ִµ
  κ (  üũ  Ŀ)  optname ˻ϴ  ġ
  ̴. ĳƮ ɼǰ Բ, IP_MULTICAST_TTL, IP_MULTICAST_LOOP,
  IP_MULTICAST_IF, IP_ADD_MEMBERSHIP, IP_DROP_MEMBERSHIP 
  ƼĳƮ ɼ óѴ.   ġ  ɼ ˻Ͽ װ
  ƼĳƮ   ɼ̶  Լ ip_mroute_setsockopt() 
  ip_mroute_getsockopt()   ȴ. ( LINUX/net/ipv4/ipmr.c 
  ).
  LINUX/net/ipv4/af_inet.c    ߴ    ⺻
      ִ.  (loopback enabled, TTL=1, Լ inet_create()
  ߿)

  ______________________________________________________________________
    #ifdef CONFIG_IP_MULTICAST
            sk->ip_mc_loop=1;
            sk->ip_mc_ttl=1;
            *sk->ip_mc_name=0;
            sk->ip_mc_list=NULL;
    #endif
  ______________________________________________________________________

   ڵ尡 "  Ŀ  Ͽ ִ  ȸ
  ŻŲ"   ش. (   Լ
  inet_release())

  ______________________________________________________________________
    #ifdef CONFIG_IP_MULTICAST
                    /* Applications forget to leave groups before exiting */
                    ip_mc_drop_socket(sk);
    #endif
  ______________________________________________________________________

  ũ   (Link  Layer)   ġ  (Device   independent)
   LINUX/net/core/dev_mcast.c  ִ.

     ߿ Լ  ʾҴ. Է  ó Լ
  ƼĳƮ ͱ׷  Լ̴. ٸ   ͱ׷  
  Է  ͱ׷   ġ ̹κ ip_rcv()
  ռ(LINUX/net/ipv4/ip_input.c) ޵ȴ.  Լ 
  κ  ƼĳƮ Ŷ Ϻϰ
  ͸Ѵ(̾ ִ ͸, IP  츮
    ִ ׷쿡  100% ˰ ֱ   Ŷ ϰ
  ͸Ѵٰ ߴ .) ȣƮ ƼĳƮ ͷ
  ۵̶    Լ Ŷ  θ  ϰ ϰ
  ipmr_forward() ȣѴ. (ipmr_forward()  LINUX/net/ipv4/ipmr.c
  Ǿ ִ.).

  Ŷ  ӹ  ڵ LINUX/net/ipv4/ip_output.c 
  ִ. ̰ Ŷ       (Ѵٸ
  ip_queue_xmit()ȣ)  ˻ϱ IP_MULTICAST_LOOP ɼ ȿ
  ϴ ̴. , ܺη ϴ Ŷ ƼĳƮ
  ĳƮ ǰϿ TTL ϴ ̱⵵ ϴ.  ܿ
  IP_MULTICAST_TTL       ޵      Ѵ(Լ
  ip_build_xmit()).

  mrouted(Ŀο ƼĳƮ ͱ׷   ˷ִ
  α׷)  ۾ϴ , 츮 ƼĳƮ ͷ ۵ϴ 츮
   ڽ  Ŷ ,  Ʈ 
  ƼĳƮ ͱ׷  ϰ õǴ  ߰ߴ.
  ip_input.c       ۵ϰ ִ°    ip_output.c 
  ׷ ʾҴ.  α׷ ҽ ڵ带 д  ܺη 
  ͱ׷  θ ϴ  Լ ipmr_forward() ġ
  ʴ  ߰ߴ. Ŷ  Ʈ µǾ Ʈ
  ī ڽ ϴ  ͱ׷    , ̷
  ͱ׷ õ ʾҴ. 츮  ip_build_xmit() Լ
    ڵ带 ߰   ùٷ ۵Ͽ. (ҽ 
  ġ  ͵ ôϴ ͵ ƴϴ; ʿ!)

  ipmr_forward()    ߾. ipmr_forward()  츮 
  ߸ ϰ ִ  Ǯ  ֱ   ߿ Լ̴.
  ƼĳƮ Ʈ  , Ŷ 纻   װ ùٸ
  ڿ ϴ  mroutedü ƴϴ.  mrouted 
  ƼĳƮ Ʈ Ͽ,    ٰϿ , ƼĳƮ 
  ̺   Ŀο   ˷ش. " ̽
    ׷ ͱ׷  ̽ ."

          mrouted   (raw        
   IPPROTO_IGMP̾ Ѵ.)  raw   Ͽ
  setsockopt()   ȣϿ Ŀο   Ѵ.      ɼ
  LINUX/net/ipv4/ipmr.c  ip_mroute_setsockopt()Լ óѴ.
  Ͽ  ù° ɼ(would be  better to call them commands
  rather than options) MRT_INIT̾ Ѵ. ù  °   ɼ
  MRT_INIT  ƴ϶  ٸ       Ѵ. (-EACCES ݳ)
   ȣƮ 󿡴 mrouted νϽ  ϳ   ִ. ̰
  ϱ   ù ° MRT_INIT  ޾   ü sock*
  mroute_socket MRT_INIT    Ű ȴ.  MRT_INIT
    mroute_socket (null)  ʴ´ٸ ̹ ٸ
  mrouted ۵ ǹϹǷ -EADDRINUSE  ݳѴ.
      ٸ     ɵ(MRT_DONE,    MRT_ADD_VIF, MRT_DEL_VIF,
  MRT_ADD_MFC, MRT_DEL_MFC and MRT_ASSERT) mroute_socket ٸ
  Ͽ   -EACCES  ݳѴ.

  õ ƼĳƮ ͱ׷  ̽ Ȥ  ()
  ͳ  ϱ , Ϲ ߻ȭ(abstraction) ܰ踦 VIFs,
  ,  ̽ (Virtual InterFaces)س´. mrouted 
  Ȥ ͳ ̽  Ű vif ü   ̺
  ߰ϱ Ͽ Ŀο Ѱְ, ͱ׷  
  ˷ִ ƼĳƮ  (multicast forwarding entries)
  ˷ش.

  VIFs  MRT_ADD_VIF  ߰ϰ MRT_DEL_VIF   Ѵ. Լ 
  vifctl ü Ŀη ѱ.  ( /usr/include/linux/mroute.h) 
    ϰ ִ.

  ______________________________________________________________________
    struct vifctl {
            vifi_t  vifc_vifi;              /* Index of VIF */
            unsigned char vifc_flags;       /* VIFF_ flags */
            unsigned char vifc_threshold;   /* ttl limit */
            unsigned int vifc_rate_limit;   /* Rate limiter values (NI) */
            struct in_addr vifc_lcl_addr;   /* Our address */
            struct in_addr vifc_rmt_addr;   /* IPIP tunnel addr */
    };
  ______________________________________________________________________

     vif_device ü .

  ______________________________________________________________________
    struct vif_device
    {
            struct device   *dev;                   /* Device we are using */
            struct route    *rt_cache;              /* Tunnel route cache */
            unsigned long   bytes_in,bytes_out;
            unsigned long   pkt_in,pkt_out;         /* Statistics */
            unsigned long   rate_limit;             /* Traffic shaping (NI) */
            unsigned char   threshold;              /* TTL threshold */
            unsigned short  flags;                  /* Control flags */
            unsigned long   local,remote;           /* Addresses(remote for tunnels)*/
    };
  ______________________________________________________________________

        ü     dev      ׸     ָ϶.      device
  ü /usr/include/linux/netdevice.h  ϰ ִ.  ū
  ü 츮  ʵ忡  θ ȴ.

  struct ip_mc_list*    ip_mc_list;   /* IP multicast filter chain    */

  ip_mc_list ü /usr/include/linux/igmp.h   ϰ
  ִ. :

  ______________________________________________________________________
    struct ip_mc_list
    {
            struct device *interface;
            unsigned long multiaddr;
            struct ip_mc_list *next;
            struct timer_list timer;
            short tm_running;
            short reporter;
            int users;
    };
  ______________________________________________________________________

  dev ü  ip_mc_list  ip_mc_list  ü  ḮƮ
  Ű ̴.  ip_mc_list  ش Ʈ ̽ 
  ϰ ִ ƼĳƮ ׷ ִ. ⼭ ٽ ѹ, ȸ
  ̽ 谡    ִ.  LINUX/net/ipv4/ip_input.c 
  ͱ׷ (ͱ׷  ̽ ϴ ׷ )
   ׷쿡   ϱ   ḮƮ ȸѴ.

  ______________________________________________________________________
    #ifdef CONFIG_IP_MULTICAST
                    if(!(dev->flags&IFF_ALLMULTI) && brd==IS_MULTICAfST
                       && iph->daddr!=IGMP_ALL_HOSTS
                       && !(dev->flags&IFF_LOOPBACK))
                    {
                            /*
                             *      Check it is for one of our groups
                             */
                            struct ip_mc_list *ip_mc=dev->ip_mc_list;
                            do
                            {
                                    if(ip_mc==NULL)
                                    {
                                            kfree_skb(skb, FREE_WRITE);
                                            return 0;
                                    }
                                    if(ip_mc->multiaddr==iph->daddr)
                                            break;
                                    ip_mc=ip_mc->next;
                            }
                            while(1);
                    }
    #endif
  ______________________________________________________________________

  ip_mc_listü users ʵ "IGMP  1" ߴ 
  ϱ  Ѵ. μ ׷쿡  Ҷ, ̽ ̹
   ׷ ȸ̶ (ٽ ؼ,  ̽  ׷쿡
   μ ̹ )  (users) Ų.  IGMP
  ޽  ,  ڵ忡   ִ.  (ip_mc_inc_group()
         ,      ip_mc_join_group()       
  LINUX/net/ipv4/igmp.c ȣѴ.)

  ______________________________________________________________________
            for(i=dev->ip_mc_list;i!=NULL;i=i->next)
            {
                    if(i->multiaddr==addr)
                    {
                            i->users++;
                            return;
                    }
            }
  ______________________________________________________________________

   Ż  ī͸ ϸ, īͰ 0  ٴٶ 
  ΰ ۾ Ѵ. (ip_mc_dec_group()).

  MRT_ADD_MFC  MRT_DEL_MFC   ƼĳƮ  ̺  
  ׸ ϰų Ѵ.         mfcctl    ü    
      Բ Ŀη    ѱ. (/usr/include/linux/mroute.h 
  )

  ______________________________________________________________________
    struct mfcctl
    {
            struct in_addr mfcc_origin;             /* Origin of mcast      */
            struct in_addr mfcc_mcastgrp;           /* Group in question    */
            vifi_t  mfcc_parent;                    /* Where it arrived     */
            unsigned char mfcc_ttls[MAXVIFS];       /* Where it is going    */
    };
  ______________________________________________________________________

  ̻  , ipmr_forward()   VIFs "ƴٴѴ". ׸
  ġϴ  ׸ ߰ϸ ͱ׷ Ͽ
  ipmr_queue_xmit() ȣѴ. ׷, ipmr_queue_xmit()  Ŷ
  ͳ     ̺   ġ  ּҸ
  ̿  Ѵ. (, ݴ ͳ  ĳƮ ּ) Լ
  ip_rt_event() (°     ip_output.c   
  ִ.) ġ Ȱȭ ޽  Ʈ ġ õ ̺Ʈ(event)
  ޴´.  Լ ġ ü ȣƮ ׷쿡 ϴ  Ѵ.

  IGMP Լ LINUX/net/ipv4/igmp.c  Ѵ.   Լ鿡 
  ߿  /usr/include/linux/igmp.h  /usr/include/linux/mroute.h
     ִ.  /proc/net    IGMP     ׸
  LINUX/net/ipv4/ip_output.c ִ ip_init()  .

  8.   å  

     ˰ ƼĳƮ   ǻ  
   Ʈ . ̷ ȭ   ˰  
      ˰ ߵǾ.

  Ÿ    ƼĳƮ    DVMRP   (Distance Vector
  Multicast Routing Protocol)  Ƹ ó ƼĳƮ 
  κ ϰ ִ ˰ ̴. ̰ е(dense mode)
   , ,  뿪  е лǾִ
  ִ ȯ濡  ۵Ѵ. ,   е ִ
   (scalability problem) ִ.

  DVMRP  е  ݷ ƼĳƮ Ȯ ִܰŸ 켱
   MOSPF (Multicast Extensions to OSPF -Open Shortest Path
  First-) ,     ƼĳƮ PIM-DM  (Protocol-
  Independent Multicast Dense Mode) ׸ ߽  Ʈ CBT (Core
  Based Trees)  ִ.

  OSPF  2  RFC 1583 , MOSPF  RFC  1584 , PIM-SM  CBT  
  RFC 2117  2201  ԰ ϰ ִ.

       ݵ   flooding, Reverse   Path Broadcasting
  (RPB), Truncated Reverse Path Broadcasting (TRPB), Reverse Path
  Multicasting  (RPM) or Shared Trees   ƼĳƮ  
  Ѵ.

   ʹ Ƿ   ͵ ⼭  ʰڴ.
  ̰͵鿡  ؼ  ãƺ   ̴. draft-ietf-mboned-
  in.txt  о    Ѵ.  RFC  ִ   
  ̸,   å鿡  ణ ڼ  ִ.

  9.  ƼĳƮ ƮƮ 

  ݱ UDP ̿ ƼĳƮ ۿ  ˾ƺҴ. TCP
  Ұϱ  ̻ Ϲ ̴. ׷,  ο
  ƼĳƮ  ƮƮ  (Multicast Transport Protocols) 
       Ⱓ   ӵǰ ִ.

   ߵ      ܰ踦  ׽Ʈ ܰ
  ̸ ִ.    뿡  Ϲ ƼĳƮ ƮƮ
    ʴ´ٴ ,     .

   ϰ ϱ  ݿ    
   .  (Ƽ̵ ȸǿ), ڷ ս, Ŷ
  (ordering), , 帧  ȥ⵵ , ׷  .....Դٰ
  ڰ ϳ ƴ϶  õ  е л
  ȣƮ̶...̷ 쿡  ū   ̴. ,
    Ŷ   Ȯ(ACKs)  ,  
  Ŷ ؼ  ҷ ȣ(NACKs)   ˰
  Ѵ. RFC 1458  ƼĳƮ  䱸 ϰ ִ.

  ƼĳƮ ݿ  ڼ ؼ   ѱ  
  ̻   , ,  ̸ ڷḦ ã  
  ִ  ¤ Ѿ ϰڴ. Real-Time Transport Protocol
  (RTP)  л Ƽ̵ ȸ(multi-partite multimedia
  conferences)  , Scalable Reliable Multicast (SRM)  wb
  (the distributed White-Board tool,  see section ``Multicast
  applications'') Ѵ. Uniform Reliable  Group Communication
  Protocol (URGC)  ߾ ߽  ڷ ó(transaction) 
  ŷ̸  ̷  ֵ ش. Muse  MBone 
     ֵ Ư α׷ ȵ ̸, Multicast
  File Transfer Protocol (MFTP)   ״   ۰  ȸǿ
  ϵ   Ҽ  ֵ  ִ   ̴. Log-Based
  Receiver-reliable Multicast (LBRM)   (logging server) 
    Ŷ Ͽ  ͸ ٽ ؾϴ
  ƴϸ ̻  ŵǾ ˷ִ Ư ̴.  Ѱ,
  ƼĳƮ  ̸鼭 STORM (STructure-Oriented Resilient
  Multicast)̶ ִ ̸  ݵ ִ.  ãƺ
   ܿ  ƼĳƮ   ƼĳƮ ̿ ο
  ϵ ̷  ִ  ۵鵵 .( , ƼĳƮ
  ̿   ڵ   )

  ƼĳƮ ݰ ŷڼ񱳴
  <http://www.tascnets.com/mist/doc/mcpCompare.html> ϶.

  ƼĳƮ  ̷ο ũ ֽ (ͳ ʾ, RFC,
  , ũ)    Ʈ.
  <http://research.ivv.nasa.gov/RMP/links.html>

  ⵵   .  <http://hill.lut.ac.uk/DS-Archive/MTP.html>

  Katia Obraczka "Multicast Transport Protocols: A Survey and
  Taxonomy"    ݿ    ϰ ɻ
   зϰ ִ.   IEEE Communications magazine,
  January 1998, vol. 36, No. 1.  Ƿִ.

  10.   ڷ

  10.1.  RFC 

  o  RFC 1112 "Host Extensions for IP Multicasting".  Steve Deering.
     August 1989.

  o  RFC 2236 "Internet  Group Management Protocol,  version 2".
     W.Fenner.  November 1997.

  o  RFC 1458   "Requirements for   Multicast Protocols".   Braudes, R
     and Zabele, S.  May 1993.

  o  RFC 1469  "IP Multicast  over Token-Ring  Local Area   Networks".
     T.  Pusateri.  June 1993.

  o  RFC 1390 "Transmission of IP and ARP over FDDI Networks". D. Katz.
     January 1993.

  o  RFC 1583 "OSPF Version 2". John Moy. March 1994.

  o  RFC 1584 "Multicast Extensions to OSPF". John Moy. March 1994.

  o  RFC 1585 "MOSPF: Analysis and Experience". John Moy. March 1994.

  o  RFC 1812 "Requirements for IP  version 4 Routers". Fred  Baker,
     Editor.  June 1995

  o  RFC 2117 "Protocol Independent Multicast-Sparse Mode (PIM-SM):
     Protocol Specification". D. Estrin, D. Farinacci, A. Helmy, D.
     Thaler; S. Deering, M. Handley, V. Jacobson, C. Liu,  P. Sharma,
     and L. Wei. July 1997.

  o  RFC 2189 "Core Based Trees  (CBT version 2) Multicast  Routing".
     A.  Ballardie. September 1997.  RFC 2201  "Core Based   Trees (CBT)
     Multicast   Routing Architecture". A.  Ballardie.  September 1997.

  10.2.  ͳ ʾ(draft)

  o  "Introduction   to   IP   Multicast   Routing".   draft-ietf-
     mboned-intro- multicast- 03.txt. T. Maufer, C. Semeria. July 1997.

  o  "Administratively    Scoped    IP    Multicast".  draft-ietf-
     mboned-admin-ip-space-03.txt. D. Meyer. June 10, 1997.

  10.3.   

  o  Linux      Multicast      Homepage.
     <http://www.cs.virginia.edu/~mke2e/multicast.html>

  o  Linux    Multicast     FAQ.
     <http://andrew.triumf.ca/pub/linux/multicast-FAQ>

  o  Multicast    and    MBONE    on    Linux.
     <http://www.teksouth.com/linux/multicast/>

  o  Christian   Daudt's   MBONE-Linux    Page.
     <http://www.microplex.com/~csd/linux/mbone.html>

  o  Reliable     Multicast     Links
     <http://research.ivv.nasa.gov/RMP/links.html>

  o  Multicast    Transport     Protocols   <http://hill.lut.ac.uk/DS-
     Archive/MTP.html>

  10.4.   

  o  "TCP/IP Illustrated: Volume 1 The Protocols". Stevens, W. Richard.
     Addison Wesley Publishing Company, Reading MA, 1994

  o  "TCP/IP Illustrated: Volume 2, The Implementation". Wright, Gary
     and W. Richard Stevens. Addison Wesley Publishing Company, Reading
     MA, 1995
  o  "UNIX Network Programming Volume 1. Networking APIs: Sockets and
     XTI". Stevens, W. Richard. Second Edition, Prentice Hall, Inc.
     1998.

  o  "Internetworking with TCP/IP Volume 1 Principles, Protocols, and
     Architecture". Comer, Douglas E. Second Edition, Prentice Hall,
     Inc.  Englewood Cliffs, New Jersey, 1991

  11.  ۱ǰ å Ѱ 

  Copyright 1998 Juan-Mariano de Goyeneche.

   Ͽ  Free Software Foundation  GNU General
  Public License  2 Ǵ, ֽ  License  Ӱ 
       ִ.

      Ǳ⸦ ϴ ǵ  Ͽ.
     ʴ´.ڼ  GNU General Public License
   ϶.

  GNU General Public License Ʒ ּҷ     ִ.

  The Free Software Foundation, 59 Temple Place -  Suite 330, Boston, MA
  02111-1307, USA

    CD-ROM̳ ٸ ü Ͽ   ڿ 纻
  ָ ڴ. GNU/Linux ȭ  Linux Documentation Project
   Free Software Foundation   ֱٶ. ڼ
   Linux HOWTO , Tim Bynum  <linux-
  howto@sunsite.unc.edu> ϸ ȴ.

  12.   

  ̰  帱    ȸΰ .   
  ټ Ŀ ..... · ̰- ־-  
  ߿ κ̴.

  켱, Elena Apolinario Fernandez de Sousa (Elena ̸,
  ̴ ;-) ) 帮 ʹ. 츮 μ MBone ϴ ,
  ׸ 츮 ƼĳƮ ͳο  CSCV Ʈ
  ϴ  ׳ Բ ϸ     
  ݿϷ Ͽ. ׳ Ʈ  ãƳ ذϰ Ŀ
  ׸ ϴµ   ־, ӵǴ ׿ ο򿡼
  Ӱ  ʾҴ. , ׳ ̹ ʾ а 
  ־ ߿   ־.   鿡  Ǿٸ
  κ ׳  ̴.  , Elena!

     λ  ֿ   ٰ ϴ ,
  ڱ ð ɰ ̷ ο      ü
  ϴ  ٴ ̴. ׺е ڽ ̹ ƴ 
  ־  Ӹ ƴ϶ å ְ ڷ  
  ־.  ̷ е  ˰  ׺е鿡  
  ϰ Ѵ.

  Pablo Basterrechea  ͳ ʺ϶   ־.
   å  ϰ  α׷   
  ־.  , Pablo.

    Ի Pepe Mas   ־. ״ ǻ
  α׷ ġ ̾µ,   ׺  Ȧȴ.
   å    ̶  µ ̸
   ʰ Ǿ å ־.    å , Comer
  "Internetworking with TCP/IP, Volume 1"    ó
  TCP/IP ߴ.  å       ķ
  TCP/IP  о߰ Ǿ.

       ִٸ, ĺ  ;-), Jos Manuel 
  Paco Moya  θ̴.     ñ   
  .(C, C++, Linux, security, Web, OSs, signals & systems,
  electronics, ... ׿ ͵ !)  ӵǴ  ұϰ
   ģϰ ˷־. GNU/Linux  ͵ ׵ ̸
   帮 е̴.

  Igo Mascaraque  ʺ    ְ  ʵ ⸦
  ϵ ־.

   ߿ θԲ 帮 ʹ.    ȸ ̴ּ.
   帰.

   ó ý   Ҷ root н带    
  Ͼ Joaqu SeoaneԵ 帰. ,  ̰ DIT  
  ȸ  Santiago PavԵ 帰.

  W. Richard Stevens å   ÿ͵  å̾.(Ѱ
  ̱ )   Ȥö   Ŵٸ  帮
  ʹ. ,   ֽñ⸦ Ź帰. 츮   
  ̴.

   Richard Stallman, Linus Torvalds, Alan Cox,  ܿ, 츮
  ̷ Ǹ ü Ȱ Linux Ŀ  free software ڵ鿡
  帰.

      ..˼...  е鿡 ϰ ִٴ
   ˰ ø ȮѴ.

  13.   Ѹ

  ⺸ ġ ʱ. Ư   ϴ. ߸ κ
  ְų ٸ ϰ   ִٸ  Ź帳ϴ.  
   ϵ ϰڽϴ.  Ǿ⸦ ٶ鼭....

