linux内核 ip组播,Linux配置及测试IP多播(Multicast)

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是可以通的 就证明组播通了也就是下面的组员接收到了组播信息

So  我们来进行多播的配置工作

首先:ifconfig -a

当我们检验eth0时未看见MULTICAST ,我们需要输入指令使其出现:ifconfig eth0 multlicast

那么问题来了 新版本中没有eth0,而是eno16777736,So:我们需要将eno16777736改为eth0

解决方法:http://jingyan.baidu.com/article/6181c3e081f178152ef1538f.html

好了,现在已经启用多播了。现在需要新增D级多播网络的IP路由。那么需要新增下列路径:#route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0

那么什么是D级多播地址

D类地址用于多点广播(Multicast)。

D类IP地址第一个字节以"1110"开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicasting)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。

D类的IP地址不标识网络,其地址覆盖范围为224.0.0.0~239.255.255.255。

接下来我们可用单一机器或局域网上两台机器测试IP多播的Java程序,如下:import java.net.DatagramPacket;

import java.net.InetAddress;

import java.net.MulticastSocket;

import javax.swing.text.Utilities;

public class MulticastNode {

InetAddress group = null;

MulticastSocket s = null;

public static void main(String[] args) {

if (args.length > 0) {

System.out.println("Sending message:" + args[0]);

MulticastNode node = new MulticastNode();

node.send(args[0]);

node.receive();

} else {

System.out.println("Need an argument string to send.");

System.exit(1);

}

}

public MulticastNode() {

try {

group = InetAddress.getByName("224.0.0.1");

s = new MulticastSocket(45564);

s.joinGroup(group);

} catch (Exception e) {

e.printStackTrace();

}

}

public void send(String msg) {

try {

DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 45564);

s.send(hi);

} catch (Exception e) {

e.printStackTrace();

}

}

public void receive() {

byte[] buf;

while (true) {

try {

buf = new byte[1000];

DatagramPacket recv = new DatagramPacket(buf, buf.length);

s.receive(recv);

System.out.println("Received:" + new String(buf));

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

这个java程序主要需要注意group =

InetAddress.getByName("224.0.0.1");这句话,其中这个地址指的是你的多播地址,而不是你的ip地址,我是通过不同ip地址的主机加入统一多播地址224.0.0.1(如果你的程序报not

a Multicast address,则需要看见面多播地址如何查询)

多播地址查询方法为:netstat -gn

将这个java程序打成jar包放入linux或window中,通过输入1.java -jar Mult.jar NodeOne

(请改成你的jar包名字)

2.java -jar Mult.jar NodeTwo

效果应为  Sending

message: NodeOne

Received:NodeOne

Received: NodeTwo

我用window测试的,linux上的结果都一样,效果图如下:

3d7597ab-36ca-376d-b48f-c4975848691f.png

d512612d-2bf7-3a3f-8507-79383c0b9efb.png

2ecbc181-974d-3f65-b9bf-ad914956a63f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值