刚看 udp 组播,写了个 demo ,组播地址是 224.0.0.250 ,监听端口是 9985

发送方代码

func stdlibClient() {
	ip := net.ParseIP("224.0.0.250")
	srcAddr := &net.UDPAddr{IP: net.IPv4zero, Port: 0}
	dstAddr := &net.UDPAddr{IP: ip, Port: 9985}
	conn, err := net.DialUDP("udp", srcAddr, dstAddr)
	if err != nil {
		log.Println(err)
	}
	defer conn.Close()
	conn.Write([]byte("hello"))
	log.Printf("stdlibClient <%s>\n", conn.RemoteAddr())
}

我在想 dstAddr 指定的是组播的地址,如果接收方在广域网上,他是如何找到对方的?又没有指定对方的公网 IP 。

最新回复 (10)
  • tool2dx5月前
    引用2
    组播好像是要发送 IGMP 包,用 IP_ADD_MEMBERSHIP 加入才行。
  • b821025551b5月前
    引用3
    组播,需要加组的啊,通过 IGMP 协议进行组内设备管理,你这里当然只管发送就行了。
  • kenvix5月前
    引用4
    你对网络路由的理解有一些问题,组播路由是组播路由,单播路由是单播路由。

    然后答案是不可能,你发不出去。因为广域网没有路由组播地址。
  • kenvix5月前
    引用5
    @kenvix #3 如果一定要组播,必须要用 VPN 承载流量,封装到单播里面。IPV4 广域网只路由了单播地址
  • julyclyde5月前
    引用6
    广域网就基本别想了
    IGMP 协议、acl 都没开放的
  • cnbatch5月前
    引用7
    想要使用组播,是需要事先在路由器里面做好配置才行的,并不是发送方说了算

    想要在广域网发送组播,意味着需要修改广域网路由器的设置,然而这些路由器是运营商的,普通用户哪能改得了
  • pagxir5月前
    引用8
    需要组播路由,需要中间设备支持 igmp snooping. 终端设备发送 IP_ADD_MEMBERSHIP 请求加入主播组,中间设备就会一级级上报创建一条组播路由,当发送的时候路由器根据创建的组播路由表逐个网口进行转发,最后到终端。这就是 IPTV 直播的技术基础
  • dyllen楼主5月前
    引用9
    @kenvix
    @cnbatch

    就是说 ucp 组播说是可以广域网,实际基本也就是只能局域网了吗?
  • dyllen楼主5月前
    引用10
    @julyclyde
    @cnbatch
    就是说 ucp 组播说是可以广域网,实际基本也就是只能局域网了吗?
  • julyclyde5月前
    引用11
    @dyllen 技术上并没禁止广域网,但运营商在实际业务中禁止了
  • 回复请 登录 or 快速注册
返回