当前位置:网站首页>不同主机收不到组播消息原因分析
不同主机收不到组播消息原因分析
2022-08-10 15:44:00 【_七里香】
不同主机收不到组播消息原因分析
目录
背景
写了个脚本,可支持收发组播消息,代码中默认组播组地址为9000端口
需要注意的是发送方定义组播内容时,需通过ResolveUDPAddr来设置成*net.UDPAddr类型的地址,这时候这个地址你可以设置为127.0.0.1,也可设置为本机IP。
调查发现测试收发的时候,发送和接收全部放在本机时正常,但是分别在不同机器上时就收不到了,经过验证发送方实际都没有发出去,所以
接收方怎么可能收到。
那怎么办?
发送和接收时不要用127.0.0.1,要让它过协议栈,改成各自本机IP即可,再尝试立即成功。
原因总结
1,UDP端口未开放
如你的组播组地址为9000,则
iptables -A INPUT -p udp -m multiport --dports 8888 -j ACCEPT
2,Ip设置的不对
正常情况下:
发送方:
./xx -send -addr=192.168.31.33:9000
接收方:
./xx -receive -addr=192.168.31.34:9000
即不能是127.0.0.1
附:组播地址分类及地址范围
这个问题也是许多童鞋非常关心的地方,这里摘录了另外一篇文章,总结的较好:
组播报文的目的地址使用D类IP地址, D类地址不能出现在IP报文的源IP地址字段。
D类IP地址不分网络地址和主机地址,是一个专门保留的地址,其地址范围为224.0.0.0~239.255.255.255。D类IP地址主要用于多点广播(Multicast,也称为多播)之中作为多播组IP地址。单播数据传输过程中,一个数据包传输的路径是从源地址路由到目的地址,利用“逐跳”的原理在IP网络中传输。然而在ip组播环中,数据包的目的地址不是一个,而是一组,形成组地址。所有的信息接收者都加入到一个组内,并且一旦加入之后,流向组地址的数据立即开始向接收者传输,组中的所有成员都能接收到数据包。组播组中的成员是动态的,主机可以在任何时刻加入和离开组播组。
组播地址分类
组播组可以是永久的也可以是临时的。组播组地址中,有一部分由官方分配的,称为永久组播组。永久组播组保持不变的是它的ip地址,组中的成员构成可以发生变化。永久组播组中成员的数量都可以是任意的,甚至可以为零。那些没有保留下来供永久组播组使用的ip组播地址,可以被临时组播组利用。
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
组播地址列表
列表如下:
224.0.0.0 基准地址(保留)
224.0.0.1 所有主机的地址 (包括所有路由器地址)
224.0.0.2 所有组播路由器的地址
224.0.0.3 不分配
224.0.0.4 dvmrp路由器
224.0.0.5 所有ospf路由器
224.0.0.6 ospf DR/BDR
224.0.0.7 st路由器
224.0.0.8 st主机
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp路由器
224.0.0.11 活动代理
224.0.0.12 dhcp 服务器/中继代理
224.0.0.13 所有pim路由器
224.0.0.14 rsvp封装
224.0.0.15 所有cbt路由器
224.0.0.16 指定sbm
224.0.0.17 所有sbms
224.0.0.18 vrrp
224.0.0.22 IGMPv3
以太网传输单播ip报文的时候,目的mac地址使用的是接收者的mac地址。但是在传输组播报文时,传输目的不再是一个具体的接收者,而是一个成员不确定的组,所以使用的是组播mac地址。组播mac地址是和组播ip地址对应的。iana(internet assigned number authority)规定,组播mac地址的高24bit为0x01005e,mac 地址的低23bit为组播ip地址的低23bit。
由于ip组播地址的后28位中只有23位被映射到mac地址,这样就会有32个ip组播地址映射到同一mac地址上。
边栏推荐
猜你喜欢

面了个腾讯25k+出来的,他让我见识到什么基础的天花板

JVM学习——2——内存加载过程(类加载器)

Introduction to the functional logic of metaForce Fosage 2.0 system development

Spike project harvest

Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

Allwinner V853 development board transplants LVGL-based 2048 games

openpyxl绘制堆叠图

Gif动图怎么用视频做?一键在线完成视频转gif制作

产品说明丨如何使用MobPush快速创建应用

Oracle database backup DMP file is too big, what method can be split into multiple DMP when backup?
随机推荐
MS | 使用小技巧不完全总结
fuse简介
Data Types and Integer Storage
Cesium Quick Start 4-Polylines primitive usage explanation
FFmpeg 交叉编译
uniapp使用scroll-view,设置横向,内容重叠的问题解决
Cesium快速上手4-Polylines图元使用讲解
面了个腾讯25k+出来的,他让我见识到什么基础的天花板
拆分整数为2的幂次项和 → 理解多重背包问题二进制优化的核心思想
FP6378AS5CTR SOT - 23-5 effective 1 mhz2a synchronous buck regulator
秒杀项目收获
持续集成实战 —— Jenkins自动化测试环境搭建
Chapter II Module Encyclopedia "collections Module"
使用 ABAP 正则表达式解析 uuid 的值
全志V853开发板移植基于 LVGL 的 2048 小游戏
NPM - Cannot read properties of null (reading 'pickAlgorithm') 解决方案
【每日一题】【leetcode】25. 数组-旋转数组的最小数字
推荐几款最好用的MySQL开源客户端,建议收藏!
全部内置函数详细认识(中篇)
字符串压缩(三)之短字符串压缩