2017-09-19 10 views
1

저는 골란 프로그램 및 멀티 캐스트 프로그래밍에있어 새로운 사람입니다. 골란 멀티 캐스트에 관한 프로그램을 https://gist.github.com/fiorix/9664255에 보았습니다. 인터넷을 통한 멀티 캐스트 구현을 위해 golang을 사용하는 방법은 무엇입니까?

import (
    "encoding/hex" 
    "log" 
    "net" 
    "time" 
) 

const (
    srvAddr   = "224.0.0.1:9999" 
    maxDatagramSize = 8192 
) 

//send multicast data 
func ping(a string) { 
    addr, err := net.ResolveUDPAddr("udp", a) 
    if err != nil { 
     log.Fatal(err) 
    } 
    c, err := net.DialUDP("udp", nil, addr) 
    for { 
     c.Write([]byte("hello, world\n")) 
     time.Sleep(1 * time.Second) 
    } 
} 

//print received data 
func msgHandler(src *net.UDPAddr, n int, b []byte) { 
    log.Println(n, "bytes read from", src) 
    log.Println(hex.Dump(b[:n])) 
} 

//join multicast group and receive multicast data 
func serveMulticastUDP(a string, h func(*net.UDPAddr, int, []byte)) { 
    addr, err := net.ResolveUDPAddr("udp", a) 
    if err != nil { 
     log.Fatal(err) 
    } 
    l, err := net.ListenMulticastUDP("udp", nil, addr) 
    l.SetReadBuffer(maxDatagramSize) 
    for { 
     b := make([]byte, maxDatagramSize) 
     n, src, err := l.ReadFromUDP(b) 
     if err != nil { 
      log.Fatal("ReadFromUDP failed:", err) 
     } 
     h(src, n, b) 
    } 
} 

나는 멀티 캐스트 패킷 등을 보내는 기능 핑을 실행 대학 실험실 LAN.One 컴퓨터에서 여러 컴퓨터에서 코드를 실행 한 멀티 캐스트 packets.It이 seccessed받을 기능 serveMulticastUDP를 달렸다. 그러나 한 컴퓨터에서 ping 기능을 실행하고 인터넷의 다른 컴퓨터 (두 대의 컴퓨터가 LAN에 연결되어 있지 않음)에서 함수 serveMulticastUDP를 실행하면 데이터를 수신 할 수 없습니다. 수신기에 NAT가 있고 공용 IP가 없었습니다 주소.

인터넷에서 멀티 캐스트를 지원하지 않는다는 사람들의 답변을 보았습니다. 그러나 VOIP가 멀티 캐스트 기술의 한 예임을 알고 있으므로 인터넷에서 멀티 캐스트를 구현할 수 있습니다.

수신기가 패킷을받을 수없는 이유는 무엇입니까? 인터넷을 통한 멀티 캐스트를 구현하기 위해 코드를 수정하려면 어떻게해야합니까?

답변

5

멀티 캐스트 라우팅은 유니 캐스트 라우팅과 다른 매우입니다. 멀티 캐스트는 브로드 캐스트의 한 형태이며 일반적으로 라우터를 가로 지르지 않습니다. 멀티 캐스트 라우팅을 사용하도록 설정할 수 있지만 경로의 모든 라우터에서 동일한 멀티 캐스트 라우팅 유형을 사용하도록 설정해야하며 공용 인터넷에서는이 라우팅을 사용할 수 없습니다. 공용 인터넷은 고밀도 모드 멀티 캐스트로 인해 붕괴되고 ISP는 리소스를 스파 스 모드로 전용하지 않습니다.

왜 VoIP가 멀티 캐스트를 사용한다고 생각하는지 잘 모르겠습니다.

공개 인터넷을 통해 한 사이트에서 다른 사이트로 멀티 캐스트하려면 멀티 캐스트를 지원하는 터널을 사용해야합니다. GRE. 이렇게하면 유니 캐스트 패킷에 멀티 캐스트 패킷이 래핑되어 공용 인터넷을 통과하게됩니다. 멀티 캐스트 라우팅을 지원하려면 각면의 라우터를 구성해야합니다.