当前位置:网站首页>不同主机收不到组播消息原因分析
不同主机收不到组播消息原因分析
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地址上。
边栏推荐
- 第叁章模块大全之《 os模块》
- LeetCode-922. Sort Array By Parity II
- Recommend a few had better use the MySQL open source client, collection!
- 【服务器数据恢复】raid5崩溃导致lvm信息和VXFS文件系统损坏的数据恢复案例
- 如何修改gif图片尺寸?教你一键裁剪gif尺寸
- “低代码”编程或将是软件开发的未来
- LeetCode-692. Top K Frequent Words
- Servlet简单项目操作
- A Sina Weibo semantic sentiment analysis tool developed by ABAP
- 简述 Mock 接口测试
猜你喜欢
8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路
Yi Gene|In-depth review: epigenetic regulation of m6A RNA methylation in brain development and disease
异形屏为led显示行业带来更多希望
二叉树详解
WinUI 3 Fundamentals 5小时教学视频
web安全入门-Kill Chain测试流程
Cesium Quick Start 4-Polylines primitive usage explanation
秒杀项目收获
安克创新每一个“五星好评”背后,有怎样的流程管理?
Cesium快速上手4-Polylines图元使用讲解
随机推荐
机器学习天降福音!数据科学家、Kaggle大师发布「ML避坑宝典」
二维费用的背包问题 ← 模板题
推荐几款最好用的MySQL开源客户端,建议收藏!
关于“算力”,这篇文章值得一看
一个 ABAP 开发的新浪微博语义情感分析工具
Software Test Cases
LeetCode-922. Sort Array By Parity II
FP6378AS5CTR SOT-23-5 高效1MHz2A同步降压调节器
怎么截取视频做gif动图?手把手教你视频在线转gif制作
Chapter II Module Encyclopedia "collections Module"
MS | 使用小技巧不完全总结
IPC:Interrupts and Signals
8月Meetup | “数据调度+分析引擎”解锁企业数字化转型之路
如何修改gif图片尺寸?教你一键裁剪gif尺寸
Asterisk SIP media path
秒杀项目收获
MySQL命令行导出导入数据库
数据类型与整型存储
PNG如何变gif?教你一招png秒变gif动图的方法
FP6378AS5CTR SOT - 23-5 effective 1 mhz2a synchronous buck regulator