组播(又称多播)是个好东西
在学网络基础的时候听说过这个东西,今天真正用了下,发现自己一直理解的都不对.
我用点对点的思维去理解组播,闹了笑话.其实组播中的各成员的ip和port都是一样的,这样才能够保证一个人发送,别的成员都能够接收到.
组播是一种UDP(User Datagram Protocol,用户数据报协议)协议,利用了无连接的socket方法(不会用到connect).支持同网段也支持跨网段(后者需要用路由器的支持).
关于组播的代码例子: https://www.cnblogs.com/Stephen-Qin/p/12423270.html
一些组播相关的说明:
1. 这个option和下面的option是实现多播必不可少的,它用于加入一个多播组,例:
struct ip_mreq ipmr;
ipmr.imr_interface.s_addr = htonl(INADDR_ANY);
ipmr.imr_multiaddr.s_addr = inet_addr("234.5.6.7");
setsockopt(s, IPPROTO_IP, IP_ADDR_MEMBERSHIP, (char*)&ipmr, sizeof(ipmr));
2. 关于组播IP地址,当一个主机加入组播的组成为组成员,是不是IP地址变为D类?
第一个问题 他的ip地址并没有变 因为你的思想停留在单播上 所以我没办法给你解释清楚
第二个问题 224.0.0.0到239.255.255.255 这些都叫组播地址
单播路由表 主要显示有 目的地址 下一跳 出口 组播不是遵照单播路由表转发的而是查看组播路由表
由于组播地址 不是一个接收者 而是一组接收者 我不想给你讲的太仔细 估计你现在接受不了 我举个例子 不太严谨 你先体会一下
有几个主机已经加入了 224.1.1.1 这个组
192.168.1.1---192.168.1.2---192.168.1.3---比如这三个ip地址加入了组224.1.1.1
然后组播源10.1.1.1--- 向224.1.1.1 这个组地址发送信息的时候 那几个加入组的主机都会收到组播源发送的信息 ...如果你用icmp来检测的话 组播源10.1.1.1 ping 224.1.1.1是可以通的 就证明组播通了也就是下面的组员接收到了组播信息
3.IP多播地址采用D类IP地址, 地址范围是 224.0.0.0 到 239.255.255.255.
保留IP多播地址的一些例子:
224.0.0.1 - 该子网上的所有主机。
224.0.0.2 - 该子网上的所有路由器。
224.0.0.5 - 开放最短路径优先(Open Shortest Path First,OSPF)算法第2版,设计用于到达某个网络上的所有OSPF路由器。
224.0.0.6 - 开放最短路径优先算法第2版,设计用于到达某个网络上的所有OSPF指定的路由器。
224.0.0.9 - 路由信息协议(Routing Information Protocol,RIP)第2版。
224.0.1.1 - 网络时间协议(Network Time Protocol)。