Don*_*mmy -1 java sockets linux networking multicast
出于某种原因,我运行的每个组播示例(计算机运行OpenSUSE Linux)都可以运行.客户都只是静静地坐着.如何找出阻止/忽略多播的原因?
一些例子:
http://www.roseindia.net/java/example/java/net/udp/UDPMulticastServer.java
http://docs.oracle.com/javase/tutorial/networking/datagrams/broadcasting.html (使用这些文件:) http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServer.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastServerThread.java http://docs.oracle.com/javase/tutorial/networking/datagrams/examples/MulticastClient.java http:// docs.oracle.com/javase/tutorial/networking/datagrams/examples/one-liners.txt
Mik*_*ton 10
在对IP多播进行故障排除时,您可以执行一些重要操作来确定这是主机问题,软件问题还是网络问题:
pingIP多播的测试(使用linux的socat工具)每个步骤的详细信息概述如下......
首先,确保Linux多播接收器正确地宣传其组成员报告; 请记住,多播中的很多东西都是从单播中倒退的.例如,多播要求您发送包含要接收的多播组的IGMP加入数据包.
使用tcpdump或tshark检查有问题的接口...在下面的示例中,我有一台机器192.168.12.238正在通知(通过igmp)它想要接收来自的组播流量239.255.0.1
[mpenning@Finger ~]$ sudo tshark -n -V -i eth0 igmp
Running as user "root" and group "root". This could be dangerous.
Capturing on eth0
Frame 1 (54 bytes on wire, 54 bytes captured)
Arrival Time: Dec 6, 2011 09:08:45.156782000
... >snip< ...
Internet Protocol, Src: 192.168.12.238 (192.168.12.238), Dst: 224.0.0.22 (224.0.0.22)
Version: 4
Header length: 24 bytes
Differentiated Services Field: 0xc0 (DSCP 0x30: Class Selector 6; ECN: 0x00)
1100 00.. = Differentiated Services Codepoint: Class Selector 6 (0x30)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 40
Identification: 0x0000 (0)
Flags: 0x02 (Don't Fragment)
0.. = Reserved bit: Not Set
.1. = Don't fragment: Set
..0 = More fragments: Not Set
Fragment offset: 0
Time to live: 1
Protocol: IGMP (0x02)
Header checksum: 0x3663 [correct]
[Good: True]
[Bad : False]
Source: 192.168.12.238 (192.168.12.238)
Destination: 224.0.0.22 (224.0.0.22)
Options: (4 bytes)
Router Alert: Every router examines packet
Internet Group Management Protocol
[IGMP Version: 3]
Type: Membership Report (0x22)
Header checksum: 0xe9fd [correct]
Num Group Records: 1
Group Record : 239.255.0.1 Change To Exclude Mode
Record Type: Change To Exclude Mode (4)
Aux Data Len: 0
Num Src: 0
Multicast Address: 239.255.0.1 (239.255.0.1)
^C1 packet captured
Run Code Online (Sandbox Code Playgroud)
现在检查并查看组播源的流量是否到达此接口(我假设它是eth0,如下所示):
sudo tshark -n -i eth0 ip and host 239.255.0.1
Run Code Online (Sandbox Code Playgroud)
如果您看到流量发送到正确的组播组,则直接进入步骤3; 否则转到第2步.
接下来确保您的多播服务器正在将流量发送到正确的组.在下面的示例中,我运行一个命令来嗅探eth0发送到的流量239.255.0.1.
[mpenning@hotcoffee Models]$ sudo tshark -n -i eth0 ip and host 239.255.0.1
1.466991 192.168.12.236 -> 239.255.0.1 UDP Source port: 11111 Destination port: 11111
Run Code Online (Sandbox Code Playgroud)
如果组播源在步骤2中向右侧组发送流量,则在步骤1中看到IGMP组加入,并且步骤1未在组播接收器的接口上看到流量,然后与网络管理员联系以解决此问题.
假设一切正常,并且您仍然需要进行酸性测试,以防您的多播接收器软件以某种方式丢弃从IP堆栈收到的多播...确保您已socat在您的计算机上安装并执行以下操作...
在组播发送方(服务器)上,使用此命令将测试组播数据包发送到239.255.0.1:
perl -e '$ii=0; while (1) { print "hi number $ii\n"; $ii++; }' | socat - UDP-SENDTO:239.255.0.1:11111,sp=11111
Run Code Online (Sandbox Code Playgroud)
在多播接收器(客户机),使用该命令来听测试发送到多播包239.255.0.1上eth0:
socat - UDP-DATAGRAM:239.255.0.1:11111,bind=:11111,ip-add-membership=239.255.0.1:eth0
Run Code Online (Sandbox Code Playgroud)
假设您的网络管理员允许组播239.255.0.1,您将在多播接收器的终端窗口中看到如此多的流量:
hi number 212289
hi number 212290
hi number 212291
hi number 212292
hi number 212293
hi number 212294
hi number 212295
hi number 212296
hi number 212297
hi number 212298
Run Code Online (Sandbox Code Playgroud)
注意:请勿尝试使用网络上已在生产中使用的多播组地址.
如果步骤1,2和3显示通过网络发送和接收多播流量,则调用软件开发人员并告诉他们您认为应用程序存在问题并解释您到目前为止所采取的步骤.
如果步骤1,2或3不起作用,请重新配置软件/主机/网络,直到它们为止.警告,IP网络中的多播比IP单播更难实现3倍.
祝你好运......
| 归档时间: |
|
| 查看次数: |
8055 次 |
| 最近记录: |